okeep.analytics
See where customers disappear — including where your pixel is blind.
She clicks the ad on her phone at lunch. Her colleague sends the form that evening from his laptop. The deal closes in your CRM nine days later. To a pixel that is three unrelated strangers, and the ad that started it gets credit for none of them.
An example funnel and an example week of leads. The stages are your own events — okeep.analytics does not invent them — and no figure here is anyone's result.
Ads1,240
clicks you paid for
−27%lost
Visits903
people actually arrived
−94%lost
Forms57
left their details
−28%lost
Calls41
reached a person
−41%lost
Customers24
signed, and the ad that started them finally has a name
An example funnel: 1,240 ad clicks, 903 visits, 57 forms, 41 calls and 24 customers — so 27% are lost between the click and the visit, and 94% between the visit and the form. Below it, the same 57 leads grouped by where they came from: facebook ads brought 23 and converted 10, google ads 19 and converted 9, direct 9 and converted 4, and the referrer allegro.pl 6 and converted 1. The dashboard's own column names are in English because the product has no other language.
Panel · Lead
The click and the conversion are rarely the same device, and almost never the same session.
okeep keeps the thread between them. Two people who really are two people are never merged — that rule has a test of its own.
One lead, holding two identities: a phone number, an email, an anonymous browser id, the customer's own user id, and an ad click id. Under them, what the events themselves say — nine from a phone on iOS and Safari, four from a Windows desktop in Chrome, and all thirteen from Warsaw.
Panel · Coverage
Plenty of the people you are paying to reach run a blocker that cuts the counting script by hostname.
So the counting does not depend on a script surviving: events are collected on your own domain. And the gap between the two is on a screen instead of being guessed at.
Coverage over thirty days: the server saw 12,480 page loads, the browser script saw 9,930, a tracking rate of 80%. Of the navigations that could be matched exactly, 9,930 were seen by both, 2,300 only by the server because browser tracking missed them, and 250 only by the browser. The screen notes that the two are observed independently, so the gap indicates coverage rather than an exact count of missing visits.
Panel · Ad accounts
The bidding algorithm can only optimise for what you tell it happened.
You choose which of your own events count as Lead or Purchase. The conversion then goes to Meta and Google from our server, not from a tab that may already be closed.
A connected Meta account, and the map from the customer's own events to Meta's. Lead is fed by form_submitted, which produced 45 in the last thirty days, and by call_booked, which produced 16 — 61 together. Purchase is fed by order_paid, 24.
Panel · Conversions
Every tool in this category calls its own number the accurate one. Why believe ours?
Don't. Every conversion says where it went, what came back, and why one was not sent at all. Your CRM stays the judge; we are the evidence.
Two conversions on one lead. order_paid is delivered: attributed to an ad click, sent to Meta and accepted, and skipped for Google Ads because consent for it was missing. form_submitted is ready but not yet sent, and the screen says plainly that no click was found, so it will go out unattributed.
Panel · Ads
Which advert brought them is not the same question as which advert got the click.
A click is what the money was spent on, so everything here is counted from it — including the case where one person clicked and somebody else signed up. The last column is what actually reached the ad account.
There is no cost column. The spend stays in the ad account and is not read back here, so a cost per lead on this screen would be a guess — and the number a budget is set from is the last one anybody should guess at.
The Ads screen over thirty days: five rows of ad clicks with what each one produced. Two facebook creatives brought 520 and 260 clicks and 14 and 9 conversions; two google ones brought 300 and 110 clicks and 12 and 7 conversions; and fifty clicks arrived carrying an ad click id but no campaign tag, so they are grouped as untagged and produced nothing. Forty-two conversions in total, of which thirty-nine reached the ad account — the three that did not are marked in the last column.
Where this actually stands today.
Early access, and free while it is. It already runs on okeep.auto — our own ad budget, our own paying customers. Events are stored in the EU, and contact details are encrypted before they are written down.
Free while we are in beta.
Not a limited trial and not a stripped-down tier — the whole product, while we are still shaping it with the first businesses using it.
- Server-side collection through your own domain
- A consent mode that touches nothing on the device
- Clicks and conversions stitched to one person
- Traffic coverage — what a blocker actually cut
- Per-conversion delivery, refusals included
- Meta and Google Ads as destinations
- Every event kept for a year by default
- Leads, events and conversions out as CSV
- Erase a person on request, whole cluster
- Free during beta
- No card
- Your data exports whenever you want it
When pricing starts, you will hear it from us first. Until then nothing is held back for a paid tier: this is the whole product, not a trial of it.
The questions that come before the first event
Is GA4 plus the free conversions API not enough?
Free tools assume the person who clicked is the person who converted. In lead generation they often are not — and every lead like that lands in your report as direct, with the advert that paid for it credited with nothing.
Do you do call tracking?
No, and we would rather be plain about it than half-build one. Leads that arrive by phone stay with your call tracker, whichever you already run. We cover what happens on your site and in your CRM, and make those numbers agree.
We do not have a developer.
Point your form at us and the leads arrive with their click identity already attached — that is a change of one address. The server call is for the deeper truth, the CRM stages and what actually got paid, and it is not a prerequisite for anything above it.
Where does the data live?
Frankfurt. The database is our own machine on a private network with no public address at all, so nothing outside can reach it. The one part that is not in Frankfurt is the edge collector, which runs on Cloudflare's network in front of it.
What about consent?
The snippet can run in a mode that touches nothing on the device — no storage, no fingerprint, an identifier that dies with the tab — so you keep the top of the funnel while somebody reads your banner. Consent then travels with every event and reaches the ad account attached to the conversion it belongs to. Withdrawing it erases the stored identifier rather than only stopping new collection.
Someone asks to be erased. What actually happens?
The whole cluster goes: identities, identifiers, contacts, clicks, links, conversions and events. Merging never rewrites history, so erasing one identity and leaving the rest would not have fulfilled the request. It cannot be undone.
Can we get our data back out?
Leads, events and conversions, as CSV, streamed with no row cap. Contacts leave masked.
Which ad platforms can you send conversions to?
Meta and Google Ads. Those are the two adapters that exist, and we would rather name them than print a wall of logos.
Tell us the number you cannot get to
The question your marketing leaves unanswered every month — where the leads came from, what an ad returned, why a good week was good. We will tell you whether okeep.analytics answers it today or is still building towards it.