Skip to Content
GuidesCookies & Consent

Cookies & Consent

Our tracker (pulse-oem-1.1.8.js, served per-tenant from cdn.menoinfra.com/p/<tracking-id>.js) runs on your site to identify companies and, where consent allows, people visiting from your target audience. The tracker’s default posture is deliberately conservative: no cookies, no persistent client identifiers, no form-value reading. The underlying identification pipeline still touches personal data, and different jurisdictions treat that differently. This guide covers exactly what the tracker stores, what it sends, and how it interacts with consent managers.

Warm AI Ltd is registered with the UK Information Commissioner’s Office (ICO reg: ZC135250), registered office 107 Highfield Lane, Oving, Chichester, PO20 2NN. The canonical, plain-English regulator-facing disclosure of what each tracker collects, lawful basis, sub-processors, retention, and data-subject rights is published at Legal → Tracker Privacy & Compliance. Share that URL with your internal legal / security team.


What the tracker sets and stores

No cookies. No localStorage.

The tracker (pulse-oem-1.1.8.js, served at cdn.menoinfra.com/p/YOUR_TRACKING_ID.js) sets no cookies and writes no localStorage entries of its own. Every visitor is tab-scoped and forgotten when the tab closes. (The tracker may read from localStorage if a CMP such as Framer’s built-in banner stores its own consent state there, but it never writes to it.)

sessionStorage

KeyTTLPurpose
_p_session30 min idle, cleared on tab closeSession continuity. Tracks whether the current browser tab is in an active session. Cleared automatically when the tab closes.

sessionStorage is not shared across tabs, not preserved across browser restarts, and cannot be read by other origins. Under UK/EU cookie law it is treated more permissively than a persistent cookie, though the underlying tracking activity may still require consent. See the jurisdictional table below.

Data sent to Warm AI’s edge function

Each page view and session event sends the following to our beacon endpoint at https://t.menoinfra.com/api/track:

  • url, path, title, referrer (the visitor’s current page)
  • event_type: session_start, page_view, or session_end
  • user_agent (browser + OS string)
  • The session token (session_token) from sessionStorage
  • On session_start only: any UTM parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content) present in the current URL’s querystring
  • On session_end / page_view: duration_seconds, scroll_depth, active_seconds (time on page while the tab is visible and the user is actively interacting)
  • Visitor IP address (attached server-side from the request, used for company identification via reverse-IP resolvers)

The standard tracker does not read form values, email fields, or any input state. It does not perform TLD probing, cross-domain fingerprinting, or third-party cookie writes. The behaviour is deliberately narrow to keep the script’s classifier signature clean and to minimise the personal data footprint at the browser layer.


Person-level identification

For a subset of US visitors, Warm surfaces individual identity signals (LinkedIn URL, name, job title, business email, company firmographics) alongside the standard company-level identification. This runs server-to-server. No additional third-party pixel, script, or host is loaded in the browser beyond our own tracker file.

The flow:

  1. Your visitor loads pulse-oem-1.1.8.js from our CDN.
  2. The tracker sends a session-start beacon to our edge function.
  3. If the visitor’s IP resolves to a US location and our identification providers have coverage for that IP, an identity match is delivered to us via a server-to-server webhook.
  4. We attribute the match to your account and deliver it to your dashboard, webhook, or integrations.

Because no third-party script is loaded in the browser, you do not need to declare any additional host in your CMP configuration, cookie policy, or third-party sub-processor list beyond our own tracker. Our named list of identification-provider sub-processors is covered in /legal/tracker §8 — email support@getwarmai.com for the current full DPA / Trust Centre references.

Person-level identification is enforced US-only at the resolver layer, so non-US visitors are silently filtered before any person-level data is exposed. For opt-out requests, email support@getwarmai.com with either the visitor’s email, LinkedIn URL, or IP, and we’ll add them to the global exclusion list across all our sources.


Automatic geo-fencing (built into the tracker)

Since pulse-oem-1.1.8 (currently the global default), the tracker resolves the visitor’s country + region at the edge (Cloudflare) and routes them into one of three tiers before any beacon fires:

TierRegionsBehaviour
AUS, Canada (excluding Quebec), India (until May 2027), other jurisdictions without opt-in tracking lawsFires immediately. No CMP required. Person-level enabled where our providers have coverage.
BUK, EU/EEA, Switzerland, Quebec, Japan, and other GDPR-parity jurisdictionsConsent-gated. Tracker waits for a signal from your CMP (see supported list below) before firing. If no CMP is present, one of two things happens: silent skip, or auto-injection of the Klaro OSS banner if your account has opted in.
CChina, Russia, Vietnam, and comprehensively-sanctioned regionsTracker bails silently on entry. No beacons, no CMP interaction, no queue.

This tier logic runs before any tracking activity, so you do not need to configure geo-blocking yourself.


Jurisdictional quick-reference

JurisdictionRequirementHow our tracker handles it
UK (PECR + UK GDPR)Opt-in consent before non-essential trackingTier B. Tracker waits for CMP consent. Recommended: install a CMP we auto-detect (see below), or opt in to Klaro auto-inject via our onboarding.
EU/EEA (ePrivacy + GDPR)Opt-in consentTier B. Same treatment as UK. France (CNIL) and Germany (TTDSG) enforce most strictly.
Quebec (Law 25)Opt-in consentTier B.
US, California (CCPA/CPRA)Notice + opt-out sufficientTier A. Fires on load. Display a “Do Not Sell or Share My Personal Information” link in your footer and point it at your privacy policy’s opt-out section (which should reference our compliance email for exclusion requests).
US, other statesNotice-basedTier A. Check counsel for state-specific requirements (VCDPA, CPA, CTDPA, etc.).
Canada (PIPEDA)Implied consentTier A (ex-Quebec).
Japan (APPI)Consent required for cross-border transferTier B, because our storage is in the US Supabase region.

If your site serves any meaningful volume of UK, EU, or Quebec visitors, you must have a CMP in place (or opt in to our Klaro auto-inject) for Tier B traffic to fire. Without one, the tracker will silently skip those visitors, and you’ll see identifications for US traffic only.


The tracker auto-detects consent from the following CMPs. If any of these are installed on your site, you don’t need to tag our script manually. The tracker reads their state via each vendor’s documented API:

CMPDetection signal
Cookiebotwindow.Cookiebot.consent.statistics
OneTrustOptanonConsent cookie, category C0002
CookieYeswindow.getCkyConsent() or the cookieyes-consent cookie
Transcendwindow.airgap.getConsent(), Analytics purpose
Framer built-inlocalStorage.framerCookiesConsentMode
HubSpotHubSpot’s own banner (__hs_* cookies + DOM class)
Klarowindow.klaro.getManager().consents
Google Consent Mode v2 (GCM)dataLayer consent events, analytics_storage state
IAB TCF v2__tcfapi, Purpose 7 (Measure ad performance). Covers Sourcepoint, Didomi, Quantcast Choice, Consentmanager, Sirdata, and many enterprise CMPs

Termly is not in the auto-detect list. If you use Termly, tag our tracker manually (see below) and Termly will unblock it once the visitor consents.

The tracker waits up to 10 seconds for a CMP to load before deciding “no CMP present”. This handles lazy-loaded enterprise CMPs that stall until page interactivity.

GCM v2 gotcha. If you use Google Tag Manager and your CMP updates GCM via analytics_storage, our tracker respects that signal, but only if the CMP actually pushes to dataLayer on decision. Some GTM setups gate the tag itself rather than pushing the consent update; in that case, we don’t see the signal and default to “no consent”. Test with the browser console open (dataLayer should log a consent update event on accept).

For customers without a CMP: Klaro auto-inject

If you don’t have (or don’t want to install) a CMP, we can auto-inject Klaro, a lightweight open-source cookie banner, on your site. It’s opt-in per account and enabled during onboarding or via support request. When enabled, the tracker checks for an existing CMP first, and only injects Klaro if no other CMP is detected within 10 seconds.

Klaro is loaded from our CDN (cdn.menoinfra.com/klaro.js), styled minimally, and behaves as a standard “accept / decline” banner. Users who accept unlock person-level identifications for their session; users who decline get no tracking beyond what your jurisdiction allows without consent.

To enable Klaro auto-inject on your account, contact support or use the checkbox in the tracker install screen at warmai.uk .

Manual tagging (advanced)

If you prefer to tag our tracker explicitly rather than rely on auto-detection (for example, to override the category classification), the standard pattern is:

Cookiebot

<script src="https://cdn.menoinfra.com/p/YOUR_TRACKING_ID.js" async data-cookieconsent="statistics" ></script>

Use marketing instead of statistics if you’d like to be explicit about person-level identification being marketing-adjacent. Cookiebot enforcement guidance varies by industry.

OneTrust

<script src="https://cdn.menoinfra.com/p/YOUR_TRACKING_ID.js" async class="optanon-category-2" ></script>

optanon-category-2 typically maps to Performance cookies; verify in your OneTrust dashboard. Use optanon-category-4 for Marketing if that’s a better fit.

Termly

<script src="https://cdn.menoinfra.com/p/YOUR_TRACKING_ID.js" async type="text/plain" data-categories="analytics" ></script>

Termly replaces type="text/plain" with type="text/javascript" after consent.


If your site has no CMP and Klaro auto-inject is disabled:

For US / Tier A visitors: the tracker fires normally. Disclose the tracker in your privacy policy and reference our compliance email as the opt-out channel from your California “Do Not Sell or Share” flow.

For UK, EU, and other Tier B visitors: the tracker silently skips. You will not see identifications for those visitors. If a meaningful share of your target audience is in the EU or UK, either enable Klaro auto-inject (recommended) or install a CMP from the supported list.


Data subject rights (GDPR / CCPA)

Visitors can exercise rights over their data: access, deletion, correction, portability (GDPR), or opt-out of sale (CCPA). Here’s how to handle these requests:

Finding a visitor’s data: Because we don’t set persistent client-side identifiers, the primary key for a visitor’s activity is their session token combined with their IP address and the timestamp of their visit. If a visitor asks about a specific session, we need the approximate date/time and IP to locate it. For person-level identifications, the primary key is the resolved email address or LinkedIn URL.

Deletion requests: Contact Warm AI support with the details above. We will delete all session events, identifications, and downstream records linked to that visitor.

Export requests: Email support@getwarmai.com with the identifier and we’ll export the associated records. Format depends on the underlying data (typically CSV or JSON).

Retention: Session events and identification records are held as product logs and security telemetry, retained per our Privacy Policy  (typically 30 to 180 days). Contact us if your account requires a specific retention window.

Person-level opt-out: Email support@getwarmai.com with the visitor’s email, LinkedIn URL, or IP. The exclusion is applied at the resolver layer, so the visitor will not appear in person-level identifications on any Warm-tracked site.


Our internal compliance stance

We built the tracker with a minimal-footprint principle: no cookies on the standard build, no persistent client identifiers, no form-value reading, no fingerprinting, no third-party pixel loading. Consent handling is server-tier-aware. The tracker geo-fences at the edge before any beacon fires, and defaults to skip-on-unknown for consent-required jurisdictions. Person-level identification runs server-to-server so your CMP configuration only needs to cover our one script, not a chain of third-party pixels.

Our infrastructure runs on Supabase (US region) and Cloudflare (used as reverse proxy, CDN, and WAF; international transfers governed by EU Standard Contractual Clauses with the UK Addendum, per our privacy policy). We do not sell visitor data to third parties.

If you have compliance questions that aren’t answered here, email us at support@getwarmai.com.

Last updated on