Top-of-funnel channels almost always show 0.0x% last-click conversion, and the usual conclusion is that the channel doesn't work. The more common truth is that the measurement never saw the journey. In our experience a first-party pixel captures ~20-30% more sessions than GA4, and the missing ones are concentrated exactly where the argument is.
A note on terms first: top of funnel (TOF) here means the channels that introduce your brand to people who have never bought or visited.. Meta prospecting, TikTok, Reddit, Pinterest. Their buyers rarely convert on the first click, so these channels live or die by whether your measurement can see the rest of the journey.
Third-party trackers have a blind spot
GA4, Segment, Heap and Mixpanel are all third-party. Open your browser's network tab and you'll see calls going out to analytics.google.com, which is exactly what ad blockers look for, so many sessions are never recorded at all. Even when the scripts load, they're heavy and often fire late, and users who bounce in the first 5-10 seconds (a large share of top-of-funnel traffic) simply vanish.
A first-party pixel runs from your own domain, e.g. t.yourbrand.com. It reads as your site's own traffic, avoids blockers, and loads early enough to catch the bounces.
The identity problem
Third-party tools also struggle to keep a person being one person. We've seen Segment track the same user on the same device as 3 different people inside 5 days, and GA4 has similar stitching issues. A first-party pixel persists identity over time by joining cookies on signals GA4 doesn't use:
That joining matters most when you sell a high-consideration product and the journey spans weeks, not minutes.
What the journeys actually look like
Here is what identity joining changes in practice, from one brand's first-party journey data. With basic IP matching alone, the share of orders with a Facebook session in the journey went from 1.3% to 7.1%, and the measured journey length for those orders went from 10 days to 25.
| Channel | % of orders influenced | Days to convert | Journey length |
|---|---|---|---|
| Organic | 53.8% | 9.4 | 12.5 |
| Google PMax | 38.3% | 8.6 | 14.8 |
| Google Branded | 24.9% | 10.0 | 16.3 |
| Google NonBranded | 12.5% | 11.9 | 17.1 |
| 12.3% | 7.4 | 16.9 | |
| Facebook Prospect | 7.1% | 16.4 | 24.9 |
| Facebook Retarget | 3.7% | 11.8 | 23.4 |
| Reddit Prospect | 2.1% | 23.5 | 32.8 |
| TikTok | 1.7% | 16.1 | 30.3 |
| Pinterest Prospect | 1.1% | 20.2 | 30.6 |
| 1.1% | 25.3 | 37.3 |
Read the two right columns: top-of-funnel channels run ~25-37 day journeys, against ~12-15 for organic and branded search. That is the structural reason last-click shows 0.0x% on Reddit and TikTok.. their buyers convert weeks later through other doors, and a tracker that loses identity along the way never connects the two ends.
Every read on one page
The strongest use isn't reporting, it's triangulation. MMM, MTA, an extrapolated post-purchase survey and your first-time customer quality rate never agree on level, and they don't need to. Tracked together as trends, with the quality rate on its own strip, they answer the question no single tool can: is a change real, and how early can you know?
Each read has its own latency and its own blind spots, and a real decline propagates through them in a predictable order. First-time customer quality slips first, weeks ahead of everything else. MTA reacts next, sharply, because it runs on recent clicks. MMM and the survey drift down last and softest, because that's how their statistics work. Any one of those moves alone is ambiguous; the sequence together is confident. And the reverse read matters just as much: when one line moves and the others never follow at their own lags, suspect the read (an attribution change, an iOS update, a survey mix shift) rather than the performance. A sharper version of this exists for geo tests, where first-party journeys cut by DMA give the holdout regions a behavioral read of their own, and that one earns its own post.
What to do with it
Build the first-party pixel on the same data layer your product analytics reads.. the same events Heap, Amplitude, Mixpanel or GA4 see. Marketing, lifecycle and ecom then share one source, which is most of what makes insights and decisions line up across teams.
Run it in parallel for a full year before switching anything measured year over year. Seasonality is always part of performance tracking, and a new source with no YoY history can't answer "versus last year".. and that question always comes.
Redesign the top-of-funnel landing experience around what the journeys show. Visitors spending seconds on one page shouldn't land on a hard Add to Cart; softer CTAs and email capture fit what they're actually doing.
Track the reads as trends on one page, per the chart above. A move that propagates through them at their own speeds is real; a move in one line the others never follow is a read problem, not a performance problem.
Happy to walk through how we'd approach it for your stack.
Common questions
Does GA4 undercount top of funnel traffic?
Yes, and it's structural rather than a configuration issue. GA4's tag calls out to analytics.google.com, which ad blockers target by hostname, and the script is heavy enough that it often hasn't fired before a 5-10 second bounce ends. Prospecting traffic bounces the most, so the loss concentrates exactly where the budget debates are. In our experience a first-party pixel captures ~20-30% more sessions, and the practical effect is the table above: a channel GA4 scores at 0.0x% last-click was present in journeys behind 2.1% of new orders. You can size your own gap in an afternoon by comparing GA4 sessions against Shopify or server-side session counts for one prospecting campaign.
Do I need to replace GA4?
Not on day one, and eventually you may not need it. The pattern that works: point the first-party pixel at the same data-layer events your product analytics tools read, so marketing, lifecycle and ecom share one source instead of three tools with three definitions of a session. Then run it in parallel with the incumbent for a full year before switching anything measured year over year, because a new source with no YoY history can't answer seasonality questions. Switching everything the week the pixel goes live is how teams end up with two versions of last year.
How does this help geo tests and MMM?
It gives every incrementality read a behavioral cross-check. If a geo test says Meta lift is real, the holdout geos should also show fewer Meta-referred sessions and worse session quality (lower product-page click-through, higher bounce), because prospecting traffic actually disappeared there. When the geo read, the journeys and MTA all agree, move the budget. When the geo tool alone shows lift and neither of the other two moved, treat it as noise. Point estimates with wide confidence intervals get shipped as wins far too often, and this is the discipline that catches them.
Channel and measurement reads like this are the core of our Acquisition & Creative work.
See how it works โ