Tracking
How tracking works
Every ad click lands with a signed click id. Tracking means sending it back with the event it led to.
The click id
https://yoursite.com/pricing?utm_source=freebuff&bfcid=bfc_1.eyJ…- Opaque and signed. Pass it through unchanged; up to 600 characters.
- Capture it before your router rewrites the URL.
- Store it with the visitor, then the account. The pixel writes it to a 30-day
bfcidcookie for you. - Keep it out of analytics, logs and shared links.
- Report within the campaign's attribution window (up to 30 days), with the real
occurredAt.
// On landing: keep it, verbatim.
const bfcid = new URL(request.url).searchParams.get('bfcid')
if (bfcid) session.set('freebuff_click_id', bfcid) // or a 30-day cookie
// On conversion: store it on the account, then POST it (Server postback).What bills
- Display campaigns bill the click, at most one per developer per campaign per Pacific day.
- Agentic campaigns bill the developer's Accept.
- Conversions never charge. They are reported, and they steer delivery toward developers who convert. The one exception is a campaign priced per conversion on an agreed rate card.
- Test conversions are badged, excluded from totals, never billed.
Three ways to report
| Method | How | Credential |
|---|---|---|
| Site pixel | One script tag. A goal rule or a freebuff() call counts the conversion. | None |
| Server postback | Your backend POSTs click id + event + event id. | API key |
| Identity match | Same postback with an email instead of a lost click id. | API key |
Start with the pixel Enough for most advertisers. Counts goals with no code.Add the postback when The event happens off the page, you need ad-blocker-proof counts, or you are on a rate card.
Run both if you like, but report each action from one of them.
Event ids
eventIdis your durable id for the event, namespaced:signup_completed:4821.- Same id again →
200 deduped. Retries are free. - Same id on a different click →
409. That is a bug. - Different event, different id. Report every funnel step.
- If both the pixel and your server report one action, give each its own id. Freebuff pairs them and counts one.
Testing
Create a test click
Events → Verify, orcreate_test_clickover MCP. Valid 30 minutes.Open it and do the real action in a test account.
Expect 200 accepted, then 200 deduped on a replay.
See it in Events, marked Test, zero charge.
A test proves transport and idempotency. After launch, reconcile your first real event id against the console.