Every step, priced
A funnel tool that knows what the traffic cost, and an ad report that knows what happened after the click. They are the same question asked twice.
shipping
Funnel analytics joined to ad spend
- Steps from pages or events
- Match a step by URL pattern or by a named event. No cap on how many steps a funnel has.
- Cost on the drop-off itself
- Each step carries what a completion through it cost, alongside how many people made it.
- Segmented by what bought them
- Source, medium, campaign, creative, device, country, resolved once at entry so a cross-device journey isn't counted twice.
- Priced to the single ad
- The thing you actually switch off is a creative, so cost per conversion goes down to the ad. The report says which level the money matched at, and an account-level match is a tagging finding, never dressed up as precision.
- Compared against a previous period
- Same funnel, two windows, the difference in points rather than in vibes.
- Watched across a pause
- Stop spending on a source and the report counts conversions over equal windows either side of the stop. Two counts and a date. No model, no claim about cause, and a pause too short to read is withheld rather than hedged.
next
Why they left, and where
- Form-field abandonment
- Which field they stopped at. Field names and timings only, never what they typed.
- Heatmaps scoped to a step
- Attached to the funnel step that lost them, rather than floating free of the funnel.
- Rage clicks, dead clicks, errors
- Tied to the point in the journey where the money leaks.
planned
The evidence layer
- Session replay
- Watch the sessions that dropped at a step. Masked by default, opt-in per field, and last on the roadmap for a reason: it carries the most risk to your visitors.
shipping
The post-purchase
survey
A one-question survey on your conversion page asks how they heard about you. You write the answer list, and there is no free text box. The answers land beside the click data, and the gap between the two is the report.
Someone who names Google when no click was seen points at tracking loss, an ad blocker or a stripped parameter. Someone who names a podcast never produced a click at all. Every other tool adds those two together and calls the sum unattributed. We keep them apart, because one is a problem you can fix and the other is money working where clicks cannot see.
Independent estimates put the share of traffic hidden by ad blockers at 15 to 30%, and it applies to every analytics script, ours included. The survey is the first number we can put on that hole for your site specifically, rather than quoting somebody else's range. The method is written up in full on how we measure.
shipping
Spark Ads and
Partnership Ads
TikTok Spark Ads and Meta Partnership Ads run from a creator's own handle with your budget behind them. The industry calls that paid amplification, and it mostly gets reported in views. Here each creator's ads sit on your funnel and carry a cost per conversion, exactly like a campaign.
One rule holds this feature up. A creator's name comes from the platform or it stays blank. We never guess a handle out of an ad title, because a per-creator report that names the wrong person is worse than an anonymous row, and the row is still useful anonymous: creator-format ads against brand-handle ads is a whole finding on its own.
live
Who is on the site, now
Every visitor the script sees, placed by the region the request came from and coloured by the source that paid for them. Watching a campaign go live and land somewhere is the fastest way to know the tag is working, long before any funnel has enough data to report on.
- Meta
- Google Ads
- Direct
- Organic
illustrative: invented visitors, not live data
assistant
It reads the
funnel with you
An assistant that says which step deserves attention and why, and that helps you define a funnel in the first place from the pages and events your site already emits.
We nearly did not build this. Generated commentary on numbers is usually unfalsifiable, and a measurement tool that hands you confident prose you cannot check has spent the only thing it had. So the constraint came first and the feature second.
It does no arithmetic
Every figure it may use is calculated by the funnel engine first and handed over as a fixed list. It chooses which ones matter and how to say them. It never works one out.
Every number is checked after
Its answer is scanned and each figure matched against what the engine produced. A mechanical check on the output, rather than a hopeful instruction in a prompt.
Refused, not caveated
State a figure we did not compute and the whole answer is discarded rather than shown with a warning. A hedged wrong number is still a wrong number on your screen.
It also declines when there is too little traffic to say anything, rather than producing a confident reading of eleven visitors. And it never sees your visitors: it receives the computed funnel totals and nothing else, no event rows and no identifiers.
The script is the risky part.
So it is the audited part.
Zero dependencies
Nothing in the browser bundle but our own code. Every dependency would be somebody else's compromise becoming yours.
Pinned and hashed
Versioned, immutable releases with a published SHA-384. Pin it with subresource integrity and a swapped file simply won't run.
Personal data denied by default
Query parameters are an allowlist, the URL fragment is dropped, and raw addresses are never stored. Anything that looks like a token is scrubbed twice.
Connects to
Ad platforms review the tools that read their data, and some of those queues take weeks. So this list says which side of the queue each connection is on, because a logo wall that implies everything works today would be the first dishonest thing on this site.
- Meta Conversions API
- Google Analytics 4
- Google Search Console
- Stripe
- Meta Adsin review
- Google Adsin review
- Google Enhanced Conversionsin review
- TikTok Adsin review
- TikTok Events APIin review
- Microsoft Advertisingin review
- Shopifyplanned
In review means the connector is built and tested against the platform's documented API, and is waiting on that platform's access approval, a queue we can join but can't hurry. Read-only wherever read-only will do. The Stripe connection asks for a restricted key rather than full account access, because nothing here needs to write to your payments.
Sign Up For Beta