$1M+ in closed cash traced to the funnels that produced it$1M+ traced to sourceBook a call →
attributionsource trackingpayments

Where the trail goes cold between the ad and the payment

By Taziem Uddin · · 6 min read
SOURCE → CASHWhere the trail goes coldCLICKPAGEBOOKINGCALLPAYMENTig-biosource?

On one build, the dashboard showed a single won deal for weeks. It was a test row. The client's team had been filing outcomes in the CRM for weeks, and the dashboard showed almost none of them.

The cause sat two layers below the dashboard. The sync that pulled the closer's form submissions asked the CRM's API for them, and the API quietly applied its own recent window when no date range was given. It then reported the size of that window as the total. We had pulled a fraction of the outcomes, nothing failed, and nothing warned. A second fault sat behind the first. A filter that compared one field to a value returned nothing when the field was empty, so every won deal with that field blank was deleted in silence, and the loss looked like a join problem for a week.

None of this had anything to do with marketing, and all of it broke the question an owner asks: which channel produced the cash. A source cannot be traced to a sale the table does not contain. Tracing fails in the plumbing before it fails in the strategy.

Why it matters before you spend more on ads

Without a trace from the click to the payment, an owner decides on the part of the funnel that is easy to see. Registrations and booked calls come with a label attached. Cash arrives with none. The channel that fills the calendar looks best, and the channel that fills the bank account has no way to prove it.

The tooling market has grown around this gap, and it shows where the pain sits. Hyros describes itself as a "first-party tracking layer" between funnels and ad networks, and claims that in its own call funnel Facebook's reporting caught well under half of the calls Hyros tracked (Hyros). That is a vendor's claim about its own funnel, and the page does not explain the matching. It does show which problem these tools are sold to solve. Meta describes its Conversions API as a connection between an advertiser's marketing data and Meta, fed from a server, a website platform, an app or a CRM (Meta for Developers). So the job has two halves. One is to tell yourself which source produced the cash. The other is to tell the ad platform, so it can bid for more buyers like them.

Both halves need the same thing underneath: a click tied to a person, tied to a call, tied to a payment. A tool can do the middle of that chain. It cannot invent the first link or repair the last one. That part is plumbing you own.

The five hand-offs

A buyer moves through a click, a page, a booking, a call and a payment. Each step is a different tool with its own record of the person. The source survives only if every hand-off passes it along.

  1. 1
    Click to page
    Carries
    the link's label
    Goes missing when
    an in-app browser strips the referrer
  2. 2
    Page to email
    Carries
    first-touch labels, stored with the person
    Goes missing when
    a label outside the vocabulary
  3. 3
    Email to booking
    Carries
    the email address
    Goes missing when
    a second address at the scheduler
  4. 4
    Booking to outcome
    Carries
    the appointment and its exact time
    Goes missing when
    a typed time, or a rebook that changes the closer
  5. 5
    Call to payment
    Carries
    the email, once more
    Goes missing when
    contract value counted as cash
What each hand-off needs to carry, and what makes it drop the source.

1. Click to page. Instagram's and Facebook's in-app browsers strip the referrer, so the site often cannot see where a visitor came from. We see it in our own click log. Our fix is that every link we publish is a short link on our own domain. The redirect stamps the labels, writes one row per click and sends the visitor on. That log is the only click count we trust, because nothing between the platform and us can strip it.

2. Page to email address. The labels have to be stored at the first visit and attached to the person when they leave an email. The vocabulary has to be fixed, or one channel becomes four. We map "ig", "insta" and "instagram.com" to one source. A value outside the vocabulary is kept as typed in a raw column and the row is flagged, so nothing is dropped and nothing pollutes the clean columns.

3. Email to booking. The booking tool asks for an email again. A work address on the form and a personal address at the scheduler produce two people. In some CRMs the appointment carries no email at all. In the GoHighLevel builds we have done, the email lives on the contact record, so every join to a booking goes through the contact first.

4. Booking to call outcome. The outcome is a form a closer fills in after the call, and it has to land on the right booking. We match on lowercased email plus the call time, within a five-minute window. Typing the time by hand failed on our first weeks of data: several submissions carried an AM/PM flip, and one attached to the wrong call. Now the link to the form is prefilled from the appointment record, so a person never types the time. Two other facts shape the join. A reschedule can overwrite the appointment in place, with the same id and a new start time and nothing kept of the old one, so we snapshot appointments. And when a prospect rebooks from the cancellation email, the CRM's round robin can assign a different closer.

5. Call to payment. The deal is real when the processor says the payment succeeded. Contract value is a promise and cash is what arrived, and with payment plans the two differ for months. We keep both and report the ratio of cash to contract as the collection rate, so a source that closes large plans and collects slowly shows up as such. The join back to the person is the email again, which is why step 3 matters this far downstream.

First touch, and the touch before the booking

A source answers different questions depending on which touch you store. The first touch tells you what creates attention. The last source before the booking tells you what gets someone to act. We keep the first as the source of record and note which link the visitor used, so a bio link, a story sticker and a direct message each stay separate. Booking buttons never count as a source. The button a person clicked belongs to the page, so we join it from our own event log and leave the UTM slots for where the visitor came from.

The trace test

Before anyone looks at a dashboard on a new build, we run one booking through the whole system on purpose. Book a call from a published link. Cancel it and type a reason. Rebook. Take the call, file the outcome, record a test payment. Then check that each of those states, and the source, landed in the raw tables. Test bookings are flagged so they do not pollute the numbers.

A passing test says the pipe holds. A failing one tells you the hand-off to repair, in an order that fits the chain: the earliest break first, because every later step depends on it.

What to do this week

  1. Pull your last ten sales. For each one, start from the payment and walk backward to the source, and write down where the trail goes cold.
  2. If most go cold at the booking, labels are being dropped between the page and the scheduler. If they go cold at the payment, the emails do not match.
  3. Replace every link in your bios and messages with one you control, so you have a click log of your own.
  4. Run the trace test with a fake lead and keep the result.

If you want to see which of your own funnel's questions you can answer today, the Revenue Blind-Spot Score walks through them.

More from the blog

Ready to see this running on your own numbers?

Book a call →
Checking available times…