Privacy & Compliance

Overview / Introduction

mandera is built on a privacy-first architecture. It collects website analytics without cookies, IP tracking, fingerprinting, or persistent identifiers.

This lets you gain actionable insights into visitor behavior while respecting user privacy — and without requiring cookie consent banners.

The following section explains how that works in practice: what data is collected, what is explicitly not collected, how AI crawler traffic is handled separately, where data is processed and stored, and how mandera aligns with applicable privacy regulations.

Privacy-First Architecture

mandera’s analytics are designed around four privacy guarantees. These aren’t optional settings — they’re architectural decisions built into how the system works.

No Cookies

mandera does not set, read, or rely on browser cookies. Session identity is generated in browser memory when the page loads:

sessionId = Date.now().toString(36) + Math.random().toString(36).substr(2)

This ID exists only in JavaScript memory. It is never written to localStoragesessionStorage, or a cookie. When the tab closes, the session ID is gone. There is no way to reconnect a returning visitor to a previous session.

This means every visit is independent. mandera cannot build user profiles, track visitors across sessions, or identify returning users.

No IP Tracking

mandera does not store IP addresses in its analytics tables. The visitor data model has no IP column — it’s not a matter of policy, it’s structurally absent.

Geographic data (country-level only) is derived from:

  1. Platform headers — Cloudflare (cf-ipcountry), Vercel (x-vercel-ip-country), Fastly, or Google App Engine add country headers. These are read without storing the underlying IP.
  2. Browser locale — The Accept-Language header contains a locale code (e.g. en-US) from which the country can be inferred.
  3. Fallback — If neither is available, location is recorded as “Unknown.”

No IP-to-location lookup is performed by mandera.

No Fingerprinting

mandera does not use any fingerprinting techniques:

  • No canvas fingerprinting
  • No WebGL queries
  • No font enumeration
  • No audio fingerprinting
  • No hardware identifiers (IMEI, IDFA)

The only device information collected is parsed from the standard User-Agent string: browser name, OS name and version, and device type (desktop, mobile, tablet). This is standard HTTP metadata, not a fingerprint.

No Persistent Identifiers

Nothing about a visitor persists between sessions:

  • No unique user IDs
  • No hashed identifiers
  • No cross-domain tracking
  • No third-party scripts that could track users

The in-memory session ID is the only identifier, and it lasts only as long as the browser tab is open. On the server, sessions are cached for deduplication purposes with a 1-hour TTL and a maximum of 10,000 entries — after which they’re evicted.

What This Means in Practice

  • No consent banners needed — Since no personal data is processed and no cookies are set, cookie consent mechanisms are not required under GDPR, PECR, or CCPA. See Regulatory Compliance for details.
  • No user profiles — mandera tracks visits, not visitors. You see aggregate patterns, not individual behavior.
  • No cross-session analysis — You cannot see how often a specific person returns or build cohort-based retention metrics. The trade-off is complete privacy.
  • Accurate aggregate data — While individual users can’t be tracked, aggregate metrics (total visits, page views, sources, device distribution) remain accurate and actionable.

How We Track

This section explains the technical details of how mandera collects and processes analytics data — from the client-side snippet to server-side aggregation.

The Tracking Snippet

mandera’s tracking starts with a single JavaScript snippet loaded on your page. When it initializes, the following steps happen in sequence:

  1. Bot check — The snippet checks the browser’s User-Agent against a comprehensive bot detection library. If the visitor is a known bot, tracking stops entirely. No data is sent.
  2. Session ID generation — A non-persistent session ID is created in memory: Date.now().toString(36) + Math.random().toString(36).substr(2). This is never stored outside of JavaScript memory.
  3. Proxy detection — The snippet checks whether it’s running inside a preview iframe (e.g. a CMS preview panel) and skips tracking if so.
  4. Tracking begins — Page view, heatmap, and event listeners are attached.

Visit Model

visit is mandera’s equivalent of a session. Visits are defined without cookies:

When a New Visit Is Created

  • The visitor arrives from an external referrer (a domain different from your site).
  • The visitor arrives with no referrer (direct navigation, bookmarks, or typed URLs).
  • The visitor’s session ID doesn’t match any visit in the server’s in-memory cache (cache entries expire after 1 hour).

When a Visit Continues

  • The visitor navigates internally (same domain) — the existing visit is reused.
  • The session ID matches a cached visit within the 1-hour window.

What a Visit Stores

Each visit record contains:

FieldDescription
idAuto-generated UUID
propertyIdWhich website property this visit belongs to
locationCountry code (from headers or locale, nullable)
browserNameBrowser name from User-Agent
osNameOperating system name
osVersionOperating system version
deviceTypeDesktop, Mobile, or Tablet
deviceVendorDevice manufacturer (if detectable)
createdAtTimestamp

No IP address, email, username, or any personally identifiable information.

Page View Model

Each page within a visit creates a page record:

FieldDescription
pageUrlThe page visited
previousUrlThe referring page (internal or external)
durationSeconds spent on the page
visitIdLink to the parent visit
createdAtTimestamp

Duration Calculation

Duration is measured as the time between when the page loaded and when the visitor navigated away. Pages with less than 3 seconds of duration are excluded to filter out accidental clicks and rapid back-navigation. The exception is the final page before the tab closes — it’s always recorded regardless of duration.

Page View Counting

Page views are not deduplicated per user (since users are anonymous). If a visitor views the same page three times in one session, that creates three page records. This is by design — deduplication would require persistent user identification.

Event Model

Events track specific interactions:

FieldDescription
eventNameLowercase, alphanumeric + underscores, max 200 characters
metadataArbitrary JSON object (optional)
pageUrlWhere the event occurred
visitIdLink to the parent visit (optional)
createdAtTimestamp

Events are fired by custom JavaScript calls (ma_event), HTML data attributes (data-mandera-event), or automatic form submission tracking.

Heatmap Model

Heatmap data is collected in batches:

FieldDescription
pageUrlThe page being tracked
interactionsJSON array of click, scroll, and mousemove events
browserInfoParsed browser and OS details
locationCountry code
createdAtTimestamp

Each interaction records coordinates as percentages (not pixels), element metadata (tag, class, ID, truncated text), and viewport size. Interactions are batched client-side (every ~5 seconds) and sent as a single request. Multiple submissions from the same session are merged into one heatmap record.

Aggregation and Analytics Computation

When you view the Visitor Analytics dashboard, mandera computes aggregated metrics from raw visit and page records:

  • Unique visits — Count of visit records in the date range.
  • Page views — Sum of page records.
  • Pages per visit — Page views divided by visits.
  • Visit duration — Average time from first to last page in each visit.
  • Sources — Grouped by referrer domain pattern matching.
  • Locations — Grouped by country code.
  • Devices — Grouped by device type, browser, and OS.

All metrics are computed on the fly from raw records. There is no pre-aggregated summary table — every dashboard view reflects current data.

Session Caching

The server maintains an in-memory cache to associate incoming requests with existing visits:

  • Key — {propertyRef}:{sessionId}
  • Value — The visit ID
  • TTL — 1 hour
  • Max entries — 10,000

When the cache exceeds 10,000 entries, expired items are evicted. When it’s below that limit, the first 100 entries are spot-checked for expiry on each cleanup cycle.

A separate cache handles heatmap session deduplication with the same TTL and size constraints.

AI Crawler Detection

mandera automatically identifies AI crawlers and separates their traffic from human visitor analytics. Bot visits are logged in a dedicated data store and surfaced in AI Analytics, while human visitor data remains clean in Visitor Analytics.

Two Layers of Detection

Client-Side: General Bot Filtering

The tracking snippet runs a bot check before any data is sent. Using a comprehensive bot detection library (isbot), it evaluates the browser’s User-Agent string. If the visitor is identified as any kind of bot (not just AI bots), tracking stops immediately — no page view, event, or heatmap data is sent.

This prevents all known automated traffic from appearing in Visitor Analytics.

Server-Side: AI Crawler Classification

For requests that do reach the server (because the bot bypasses client-side JavaScript or doesn’t execute it), the server performs a second check. The User-Agent is matched against patterns for known AI crawlers:

Crawler TypeUser-Agent Patterns
GPTBotGPTBotOAI-SearchBot
ChatGPT-UserChatGPT-User
ClaudeBotClaudeBotclaude-webanthropic-ai
PerplexityBotPerplexityBotPerplexity-User
Google-ExtendedGoogle-Extended
Copilotbingbotmsnbot

Pattern matching is case-insensitive. If a match is found, the request is logged in the aiCrawlers table with the crawler type, page URL, User-Agent string, and timestamp. The request is then returned as successful without creating a human visit record.

Unrecognized AI crawlers that don’t match known patterns but are detected as bots by the general bot library are filtered out client-side and never reach the server.

What Gets Logged for AI Crawlers

Each detected AI crawler visit records:

  • Crawler type — Which bot category it matched.
  • Page URL — The specific page that was crawled.
  • User-Agent — The full User-Agent string for identification.
  • Status code — The HTTP response status (optional).
  • Timestamp — When the crawl occurred.

This data powers the AI Crawler Activity, Indexed Pages, and AI Bots views.

Why Separation Matters

If bot traffic were mixed with human analytics, metrics would quickly become unreliable:

  • Inflated page views — Bots can generate hundreds of page views per day across your entire site.
  • Distorted sources — Crawler requests don’t have meaningful referrer data.
  • Skewed geography — Bot requests often originate from data center locations, not real user locations.
  • Misleading trends — A bot re-indexing your site could look like a traffic spike.

By keeping these data streams separate, mandera ensures that Visitor Analytics reflects real human behavior, while AI Analytics provides a focused view into how AI systems interact with your content.

Growth System

This section explains how mandera’s growth engine identifies and generates opportunities.

Unlike traditional analytics platforms that only display data, mandera continuously analyzes multiple connected data streams to detect patterns, gaps, and improvement potential. The goal is not reporting — it is structured opportunity discovery.

Data Sources Used by the Growth Engine

The growth engine evaluates signals from several components of the platform:

Visitor Analytics: Aggregated traffic data, user behavior patterns, page performance, engagement signals, and navigation flows.

AI Analytics: AI crawler activity, brand mentions, citation frequency, indexed pages, and visibility trends across monitored AI platforms.

Business Context: User-defined business goals, industry, target audience, region, and company description.

Website Structure & Content Signals: Crawled website structure, internal linking patterns, and publicly accessible page content.

SEO & External Signals (if available): Search engine data, backlink information, and keyword-related signals retrieved through connected integrations.

These signals are evaluated collectively to detect discrepancies, missed opportunities, underperforming assets, or emerging growth potential.

Opportunity Generation Logic

When relevant patterns are detected, mandera generates opportunity cards that include:

  • A descriptive title
  • Context explaining why the opportunity matters
  • A categorized type (e.g., AI Visibility, Traffic, Technical, SEO, Conversion)
  • An estimated impact projection
  • The originating signal source

To prevent redundancy, semantic similarity detection is applied to avoid recommending duplicate or previously rejected opportunities.

Continuous Evaluation

Opportunity discovery is not static. Depending on configuration, the system reevaluates data at defined intervals (e.g., daily or weekly) and updates opportunities accordingly.

This ensures that growth suggestions reflect the current state of traffic, AI visibility, and business priorities.

AI Models & Request Handling

This section explains which AI models mandera integrates and how data is processed when AI-powered features are used.

mandera integrates multiple large language models (LLMs) to enable prompt-based functionality within the platform. These models are used only in the context of user-initiated AI features.

Model selection may vary depending on system configuration, availability, performance considerations, and regional setup. The specific models in use may change over time.

AI Platforms Monitored

mandera monitors AI crawler activity across major platforms as part of its AI Analytics module. These currently include:

  • OpenAI (ChatGPT / GPTBot / OAI-SearchBot / ChatGPT-User)
  • Anthropic (Claude / ClaudeBot / claude-web)
  • Perplexity AI (PerplexityBot / Perplexity-User)
  • Google (Gemini / Google-Extended)
  • xAI (Grok)
  • Mistral AI (MistralBot)

Monitoring refers to crawler detection and visibility tracking. It does not imply that analytics data is shared with these providers.

LLM Usage Scope

External LLMs are currently used only for user-submitted prompts and prompt tracking features.

LLMs are not used to process raw visitor analytics data, session records, or tracking logs.

AI-powered features are triggered explicitly by user interaction. No background analytics data is automatically sent to external AI providers.

What Data Is Sent to AI Providers

When a user submits a prompt (for example via Ask mandera), the following data may be transmitted:

  • The user-submitted prompt text
  • Structured system instructions required to generate a response

mandera does not transmit:

  • IP addresses
  • Visitor-level analytics data
  • Cross-session tracking data
  • Persistent identifiers
  • Raw tracking logs
  • Complete analytics databases

Only the content explicitly submitted by the user, along with minimal structured system context necessary to generate a response, is included in an AI request.

Request Processing Flow

When an AI feature is triggered, the following steps occur:

  1. The user submits a prompt.
  2. The system attaches structured system instructions required for task completion.
  3. The request is transmitted via secure API connection to the selected AI provider.
  4. The response is received, validated, and formatted for display.
  5. The output may optionally be stored within the platform (e.g., for prompt tracking or history features).

AI providers do not receive direct access to mandera’s databases and only process the data included in individual requests.

Data Processing and Location

AI providers process requests in accordance with their respective privacy and security policies. Depending on the provider, processing may occur outside the European Union.

Where required, appropriate safeguards such as Standard Contractual Clauses (SCCs) or equivalent mechanisms apply in accordance with applicable data protection laws.

mandera does not permit AI providers to use submitted data for advertising purposes or independent analytics profiling.

Data Processing & Storage

This section explains how mandera processes incoming analytics data, where that data is stored, and which security and retention principles apply.

Data Flow

  1. Client sends data — The tracking snippet sends page view, event, and heatmap data via POST requests to mandera’s API endpoints.
  2. Server validates — All incoming data is validated against strict schemas (using Zod) before processing. Invalid data is rejected.
  3. Bot filtering — The server checks for AI crawlers. Detected bots are logged separately; human visits proceed to analytics processing.
  4. Session resolution — The server checks its in-memory cache to determine whether this request belongs to an existing visit or should create a new one.
  5. Data stored — Validated data is written to the database. Heatmap data from the same session is merged into existing records.

What’s Stored

mandera stores five categories of data:

Visit Records

Country code, browser name, OS, device type, and timestamps. No IP address, no user identity.

Page Records

Page URL, referrer URL, duration, and link to the parent visit.

Event Records

Event name, optional metadata (JSON), page URL, and timestamp.

Heatmap Records

Page URL, interaction data (click/scroll/mouse coordinates as percentages, element selectors, viewport size), browser info, and country.

AI Crawler Logs

Crawler type, page URL, User-Agent string, and timestamp. Stored separately from human analytics.

What’s NOT Stored

  • IP addresses (no column exists in analytics tables)
  • Cookies or persistent identifiers
  • Email addresses, names, or usernames
  • Form input values (only the form submission event is tracked)
  • Canvas, WebGL, or fingerprint data
  • Cross-session user identifiers
  • Full User-Agent strings for human visitors (parsed into browser/OS fields only)

Database Security

  • Parameterized queries — All database operations use an ORM (Drizzle) with parameterized queries, preventing SQL injection.
  • Input validation — Every API endpoint validates input with Zod schemas before processing. Malformed requests are rejected.
  • Authentication separation — Public endpoints (tracking snippet data ingestion) are open by design since they receive anonymous data. Dashboard and API access require authentication.
  • CORS configuration — Data ingestion endpoints accept requests from any origin (necessary for the tracking snippet to work on any website). Authenticated endpoints use restricted CORS policies.

Data Retention

Analytics data is stored indefinitely in the database. There is no automatic data expiration or scheduled cleanup for visit, page, or event records.

Heatmap data is limited to 500 recent records per property to keep queries performant. Older heatmap records are replaced as new data arrives.

The server-side session cache (used for visit deduplication) uses a 1-hour TTL with a maximum of 10,000 entries. This is purely in-memory and contains no personal data — only mappings from session keys to visit IDs.

Processing Location

mandera processes and stores data wherever the mandera instance is hosted. If you use mandera’s hosted service, data is processed on their infrastructure. If you self-host mandera, data stays entirely on your own servers.

European Infrastructure

mandera is designed, developed, and operated entirely within Europe. Every infrastructure layer — application code, hosting environment, data storage, and core AI integrations — is rooted in the European Union.

This architecture is not incidental. It is a deliberate decision to ensure regulatory clarity, operational sovereignty, and reduced dependency on non-European infrastructure providers.

Hosting Infrastructure (Hetzner – Germany)

If you use mandera’s hosted service, the platform runs on infrastructure provided by Hetzner, with hosting in Frankfurt, Germany.

This means:

  • Data is stored and processed within the EU
  • Infrastructure operates under German and EU law
  • No automatic replication to non-EU regions

Self-hosted deployments remain fully under the control of the hosting entity.

European AI Model Integration (Mistral AI)

For AI-powered features, mandera integrates European AI providers where possible. This includes the use of models developed by Mistral AI.

Model selection may vary based on configuration and availability.
When European-hosted AI providers are used:

  • Requests are processed within European data centers
  • Infrastructure remains under EU jurisdiction
  • Data processing aligns with European regulatory standards

Data Residency & Processing Boundaries

For hosted deployments:

  • Analytics data is stored within the European Union
  • AI crawler logs are stored within the EU
  • No analytics data is transferred to third-party analytics providers
  • No background synchronization with external cloud services occurs

mandera does not operate global multi-region replication outside the EU for analytics databases.

Why This Matters

European infrastructure provides additional safeguards beyond technical privacy architecture:

  • Reduced cross-border data transfer complexity
  • Simplified GDPR compliance posture
  • Clear jurisdictional accountability
  • Increased operational sovereignty
  • Strategic independence from non-EU hyperscalers

Combined with mandera’s cookie-free, non-personal data architecture, this ensures a privacy model that is structurally European — not just legally compliant.

Regulatory Compliance

The GDPR applies to processing of personal data of EU residents. mandera’s approach:

No Personal Data Processing

mandera does not collect, store, or process personal data as defined by the GDPR:

  • No IP addresses — Not stored in analytics tables.
  • No cookies or persistent identifiers — Session IDs exist only in browser memory and cannot identify a person across sessions.
  • No fingerprinting — No canvas, WebGL, font, or hardware-based identification.
  • No user profiles — Visits are independent and cannot be linked to a natural person.
  • No cross-site tracking — No third-party scripts or cross-domain identifiers.

Data Minimization

Only the minimum data needed for analytics is collected: page URLs, referrer URLs, country code (from headers, not IP), browser and OS name, device type, and interaction coordinates for heatmaps. Form values and text inputs are never captured.

No Consent Required

Since mandera does not process personal data and does not place cookies or similar technologies on the visitor’s device, explicit consent under GDPR Article 6 or Article 7 is not required for analytics tracking.

PECR (Privacy and Electronic Communications Regulations)

PECR (UK/EU) specifically regulates the use of cookies and similar technologies that store information on a user’s device. Since mandera:

  • Sets no cookies
  • Uses no localStorage or sessionStorage for tracking
  • Places no persistent data on the visitor’s device

PECR’s consent requirements for cookies and similar technologies do not apply. The tracking snippet runs entirely in memory and makes standard HTTP requests — it does not store or access information on the user’s device beyond the normal execution of JavaScript.

CCPA (California Consumer Privacy Act)

The CCPA gives California residents rights over their personal information, including the right to know what’s collected, the right to delete, and the right to opt out of the “sale” of personal information.

mandera’s Position

  • No personal information collected — mandera’s anonymous, session-based tracking does not collect information that identifies, relates to, or could reasonably be linked to a particular consumer or household.
  • No data sale — mandera does not sell, share, or transfer visitor data to third parties.
  • No cross-context behavioral advertising — No visitor data is used for profiling or targeting across sites.

Since no personal information is collected or sold, the CCPA’s opt-out and deletion requirements are structurally satisfied.

Why No Cookie Banner Is Needed

Cookie consent banners exist to comply with regulations that require informed consent before placing cookies or processing personal data. mandera requires neither:

  1. No cookies are placed — Nothing is stored on the visitor’s device.
  2. No personal data is processed — Visit data cannot be linked to an individual.
  3. No third-party tracking — The snippet communicates only with your mandera instance.

This means you can run mandera on your website without a cookie banner, consent popup, or opt-in mechanism and remain compliant with GDPR, PECR, and CCPA.

Important Notes

  • This page describes mandera’s analytics tracking specifically. If your website uses other tools that set cookies or collect personal data (advertising pixels, chat widgets, other analytics platforms), you may still need consent mechanisms for those tools.
  • Regulatory interpretations can vary by jurisdiction and may change over time. While mandera’s architecture is designed for compliance, consult legal counsel for your specific situation.
  • Self-hosted mandera instances inherit the data processing obligations of the hosting entity. Ensure your hosting environment meets applicable security and data handling requirements.
On this page
Go to mandera
hello world!
Privacy-first AI analytics that transforms data into actionable growth strategies.
GDPR Compliant
No Cookies
© 2026 mandera.io
Made with care in Germany