Advertising guide
Use fingerprint.dev when you need a stable visitor signal across ad clicks, landing pages, and conversion events without writing a cookie or local-storage identifier.
Recommended flow
- Capture campaign metadata from the landing URL.
- Call
/identifyon the landing page. - Store
visitor_id,confidence, campaign fields, and the landing event ID in your own analytics or warehouse. - Call
/identifyagain on conversion. - Attribute or dedupe conversions when the conversion visitor matches a prior landing visitor at a confidence level you trust.
Browser integration
import { identify } from "fingerprint.dev";
let result = await identify({
apiKey: "fp_live_...",
});
if (result.visitor_id !== null) {
await fetch("/events/ad-landing", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
visitor_id: result.visitor_id,
confidence: result.confidence,
campaign_id: new URLSearchParams(location.search).get("utm_campaign"),
click_id: new URLSearchParams(location.search).get("click_id"),
}),
});
}
Call the same flow on the conversion page or after the conversion action completes. Store the returned visitor_id with the conversion event instead of trying to keep an identifier alive in the browser.
Attribution rules
Treat visitor_id as attribution metadata, not as the whole attribution model. A typical rule is:
- exact customer account match wins first.
- same
visitor_idand highconfidencecan dedupe repeated conversions. - same
visitor_idand mediumconfidencecan mark a likely assist. - low
confidenceshould stay eligible for review or fall back to your existing attribution rules.
What to store
Store only the data you need to join events:
{
"visitor_id": "550e8400-e29b-41d4-a716-446655440000",
"confidence": 0.92,
"event": "conversion",
"campaign_id": "spring_launch",
"click_id": "clk_123",
"occurred_at": "2026-05-01T12:00:00Z"
}
Do not store raw browser signals in your analytics tools. The JavaScript SDK hashes browser evidence before sending it to fingerprint.dev.