Nine checks for tracking a high-ticket funnel
When we audited our own funnel, the Instagram link in our bio was a bare web address. Someone who tapped it landed on the site, took the quiz and gave an email address. The row we stored had no source. Two separate faults did that. The in-app browser handed the site no referrer, so a tap looked like a visitor typing the address. And the quiz's email step posted the form without the details of the visit, so even a tagged link would have been dropped there.
The same audit found more. The email forms in the footer and the exit popup could not be sent by tapping their button on a phone, because only pressing Enter submitted them. The page people reach after booking a call captured nothing. And a booking never came back to our own database, so its source lived only inside the scheduler.
We build tracking for other businesses. Ours was losing people at the form and filing the rest under nowhere, and no report showed it, because every report ran on what had been recorded. The nine checks below are the ones we ran on ourselves, and the ones we run before any build.
What an unreadable funnel costs
A high-ticket owner makes four kinds of decision from their numbers: where the ad money goes, which setter gets coached, which closer gets better leads, and which email sequence stays. Each one depends on a layer of the funnel being recorded.
With no source on the deal, spend follows whatever looked busy, and the quiet source that converts stays quiet. With no outcome filed on a call, a closer is measured on calls they could never have won. With cash read from what someone typed into the CRM, commission is paid on a number the processor never collected. None of these errors announces itself. The dashboard looks finished either way.
The nine layers, in the order money moves
A source produces a person. A page captures them, an email sequence works on them, a webinar may warm them, a booking puts them on a calendar, a call happens, a payment clears, and somebody reads the result on a Monday. Each layer receives what the one before it stored and adds one thing. A layer that drops a field makes every later layer unable to say where a deal came from, so the funnel reads only as far as its first gap.
Every check below can be run on your own records in about an hour, with no tool bought.
1. Source. Can you name what brought in each deal you closed last month? Take your last five closed deals and name each one's source from a field written when the person arrived. Memory and a "how did you hear about us" box do not count.
Two things break this. The first is a link with no tags. Google's help page says that missing UTM parameters result in "(not set)" values in reporting, and that its Direct channel is for people who arrive by a saved link or by entering your URL (Google Analytics Help, URL builders; default channel group). On our bio link, a tap and a typed address looked the same. The second is tags that differ by a capital letter. The same Google page says parameter values are case sensitive and that Meta and meta are treated as different values, so one campaign splits across two rows.
Our fix is one vocabulary and a registry of short links for the places we publish a link. A short link sends the visitor on with the tags attached and logs the click. When we later changed where several of our links lead, none of the published ones had to be pasted again. The trace of a sale from ad to payment is in the trail post.
2. Landing page. Does what your form captures survive the trip? Open your page from a tagged link on your phone, submit the form with a tap, then open the stored row. Is the source in it? Did the tap work at all? Ours failed both tests, and a page that leaks its source makes every deal it produces arrive anonymous. The fix is to store where the visitor came from on the form itself, and to check that the submit carries it into the CRM.
3. Email. Can you say which send moved someone to book? Pick your last broadcast and list the bookings that came from it. If you can only list opens and clicks, the answer is no. Tag every link in every sequence. Calendly's help page says it stores the UTM data with the event after someone books, from five standard parameters, and that custom parameters are not supported (Calendly). That means the name of a send has to fit into those five fields before the first email goes out.
4. Webinar. How many registered, how many attended, and what did the ones who attended do next? For your last webinar, produce three counts from two separate fields, registered and attended, and the number who booked afterwards. A registration total flatters every webinar. The drop between registering and showing is where the spend goes.
5. Booking. For every call on the calendar, which source and which setter put it there? Look at the ten most recent bookings and count how many carry both. We use one booking link per setter and per source, so the calendar entry arrives labelled. One more trap sits here. In a CRM we build on, a reschedule overwrites the appointment's time in place and keeps nothing of the old slot, so a booking changed inside an hour leaves no trace of where it started. The key that joins a booking to a person is in the post on why booking tools, CRMs and payments disagree.
6. Show-up. Do you know your show rate, split by how the call got booked? Open last month's calls and look for a no-show. If nobody has ever filed one, the rate you read is silence. That is how a client's show rate once read 100% twice, and the show rate post has the four counting rules behind it.
7. Calls. Is your close rate counted on calls that had a real chance of closing? Write the denominator under the number. We use a closer form with a required outcome and a disqualified flag, so the denominator only holds calls that could have been won. The two close rates, and the gap between them, are in the same post.
8. Payments. Is the cash your processor collected tied back to the closer, the setter and the source? Put last week's processor total beside the total of the deals marked paid. The difference is a list of names. Stripe's Checkout takes a client_reference_id, a string of up to 200 characters that Stripe says can reconcile a session with your internal systems (Stripe). Keep contract value and cash collected as two numbers, as the cash post explains.
9. Reporting. Can you get yesterday's real numbers today, without somebody spending a morning in a spreadsheet? Ask for them and run a clock. A page should also say how much is missing, as the dashboard post describes. If it cannot, a number that takes three days to produce arrives after the decision it was meant to inform.
Which gaps to fix first
Split the nine into two passes. The first pass holds the answers that disappear if you wait: the source on a person, what the form stored, the tags on a send, the setter and source on a booking, the no-show, and the outcome of a call. If a source was not written on the day, nothing recovers it. In our pipeline, a call with no outcome filed after thirty days is aged out of the chase list, because a guess would corrupt the funnel and deleting would lose real history.
The second pass holds payments and reporting. Your processor keeps every payment, and a warehouse can be rebuilt from records that already exist, so these can wait for the first pass to be right.
A made-up example
This is a made-up example. A coach runs ads, has one setter, closes on calls and takes payment through a processor. They run no webinars, so that layer has nothing to measure and counts as a yes.
Four yes answers feel like a funnel that is mostly working. The payments yes is real, and it is also the least useful one, because the cash it counts has no source behind it. The coach starts with the first pass: tag the links so source is written on arrival, then tag the sends, then file the no-shows and require an outcome on every call. Reporting waits, because it improves by itself once those four answers exist.
What to do this week
- Write the nine questions down and answer each with yes or no from a check, never from a feeling.
- Run checks 1 and 2 from your phone, using your own bio link and your own form.
- Count how many of your last ten bookings carry both a source and a setter.
- Find out whether anyone has ever filed a no-show, and write the denominator under your close rate.
- Put last week's processor total beside your CRM's paid total and list the difference by name.
- Fix the first pass before you touch a dashboard.
If you want to see where you stand before you run them, the Revenue Blind-Spot Score asks these nine questions and takes about a minute.
We ran this list on ourselves and fixed it in that order. The links we publish now go through short links that record the click and carry their tags, the quiz stores what it was sent, and a booking comes back to our database with its source attached. None of it showed up on a report until we asked the nine questions of our own records.