Is it the ad or the code?
Marketing blames the creative, engineering blames the tracking. The debugging order that settles it: verify the pipeline first, judge the creative last.
When a funnel leaks, the argument runs on rails. Marketing looks at the numbers and concludes the creative is tired or the audience is wrong. Engineering looks at the same numbers and concludes the tracking is broken. When those are two separate agencies, each is right about the other's half just often enough to keep the argument alive, and the seam between the ad and the page belongs to nobody.
The way out is not a better meeting. It is an order of operations: verify the pipeline before judging what flows through it. Confirm the events fire, check that clicks and landings roughly agree, rule out the mechanical failures on the page, and only then read the creative numbers. Until the pipeline is known healthy, the report cannot tell a bad ad from a broken measurement, and every decision made on it is a guess wearing a chart.
Write the funnel down first
Before touching anything, define the stages in writing: what counts as a click, a landing, a lead, a sale, and which system is the source of truth for each one. This feels bureaucratic. It settles half the argument on its own. The ad platform, the analytics tool, and the CRM each define the same words differently, and two teams reading "conversions" out of two systems are usually comparing different quantities without knowing it. One page with the stage names, the event that marks each stage, and the system that owns it turns "your numbers are wrong" into a checkable claim.
Verify events fire before judging their numbers
An event that fires twice inflates its stage. An event that never fires starves it. Both show up as a performance change, and neither has anything to do with the ad. So before interpreting a number, confirm the event behind it behaves:
- Test events. Use the platform's test tooling and walk the funnel yourself. One action should produce exactly one event, carrying the values you expect.
- Consent mode. A visitor who declines tracking can still buy; they just vanish from the funnel. If consent rates differ across devices or countries, measured conversion rates differ with them, with no change in anyone's behaviour.
- Ad blockers. They block the pixel, not the purchase. Browser-side counts run low in proportion to how blocker-heavy the audience is, and that proportion is not constant across campaigns.
- Duplicate or missing triggers. A tag manager and a native integration both firing on the confirmation page. A trigger bound to a button class that a redesign renamed. Both fail silently.
Compare clicks against landings before trusting either
The platform reports clicks. The server logs landings. Put them side by side for the same campaign over the same period. Some gap is normal: accidental taps, visitors who bounce before the page renders, blockers eating the analytics call while the server still sees the request. A large gap is a finding, and it points at the seam itself. The click exists and the landing does not, so whatever is losing people lives between the two. Neither number deserves trust until they have been reconciled at least once.
Check the boring suspects on the landing side
The unglamorous failures outrank the interesting ones:
- Load time on mobile data, not on office wifi. A person interrupted by an ad has no sunk cost, and the back gesture is nearer than your headline. Every second of blank screen is a decision point.
- Form errors on real devices. Validation that fails only in mobile Safari, a keyboard that covers the submit button, an autofill mismatch that rejects a legitimate phone number. Desktop testing finds none of these.
- Redirect chains that strip attribution parameters. Each hop is a chance for the query string to be dropped. When the UTM parameters die en route, the sale still happens but gets credited to direct traffic, and the campaign looks worse than it is, which reads as "the creative stopped working".
Only then, the creative
A creative test compares small differences: this headline against that one, this hook against that other. Pipeline noise is routinely larger than the differences being tested, so on a leaky funnel the test reports the noise. A healthy pipeline is what makes creative tests readable at all, and it is also what makes a genuinely weak ad safe to call weak.
The reason this path rarely gets walked is that each step belongs to a different vendor, and every finding is billable to somebody else. One team that owns both sides can fix either the ad or the code without a handoff war, because it no longer matters which one is at fault. That is how we work: the ads and the software they land on, one team.
If two vendors are pointing at each other over your funnel, this is the path we walk in a free audit.