Sales Attribution: How to Track Ads to Closed Deals
How to connect every closed deal and every payment back to the ad that produced it, which models fit a call funnel, and which numbers to judge your ads on.
Aura Team13 min read
The short answer
Sales attribution is connecting each closed deal and each payment back to the ad, campaign or channel that produced the lead. For teams that sell on calls, the ad platform only sees the booking, so attribution happens in your own system: capture the source when the lead enters their details, keep it on the lead through the call, and match the payment to the same record. Then judge each ad on cash collected and revenue per call.

That's the short version. Here's how to build it: what to capture, when, which attribution model fits a call funnel, how to handle payment plans, and how to send the results back to Meta so the algorithm finds you buyers instead of bookers. It's part of our complete guide to high-ticket sales, and it's the piece that decides whether you can scale paid traffic at all.
If you only take one idea from this guide, take this one. An ad that produces cheap bookings and an ad that produces customers are often different ads. Without sales attribution you'll scale the first one and turn off the second.
What is sales attribution?
Sales attribution is the process of giving credit for revenue to the activity that produced it. For a team that sells on calls, that mostly means the ad, campaign, piece of content or referral that brought in the lead who eventually paid.
It's related to marketing attribution, and the two often get blurred. The difference is where they stop.
| Marketing attribution | Sales attribution | |
|---|---|---|
| Question it answers | Which channel produced the lead? | Which channel produced the revenue? |
| Where it stops | Form fill, booking or lead | Payment, including instalments |
| Where the data lives | Ad platform, analytics tool | CRM, booking system, payment processor |
| What it judges ads on | Cost per lead, cost per booking | Show rate, close rate, cash collected |
| Who usually owns it | Media buyer | Owner or sales manager |
Most call funnels have marketing attribution and think they have sales attribution. They know which ad produced the booking. They have no idea which ad produced the buyer, because the sale happens later, on a call, in a different system.
Why the ad platform can't tell you which ads close
Your ad platform sees what happens on your website. The sale happens somewhere else.
A typical high-ticket buyer clicks an ad, watches a VSL, books a call for three days later, shows up, says yes on the call and pays through a Stripe link the closer sends afterwards. Maybe in three instalments. None of that last half happens on a page with your pixel on it.
Three things make it worse.
- Browser and device privacy. Since iOS 14.5, apps need the user's permission through Apple's App Tracking Transparency framework to track them across other companies' apps and websites. Many people say no, and their conversions get modelled or lost.
- Shorter reporting windows. From 12 January 2026, Meta's Ads Insights API stopped returning 7-day view and 28-day view attribution windows. Click windows and 1-day view remain. A deal that closes on a second call twelve days after the click may not be credited to the ad at all.
- The platform marks its own homework. Every ad platform counts the conversions it can claim. Add up what each platform reports and you'll often get more sales than you made.
So pull your numbers from your CRM or booking system, never from the ad platform. The platform is useful for spend, reach and cost per click. It isn't the place to find out what an ad earned.
What optimising for bookings costs you
Here's why this matters. Two ads, same offer, same closers, same month.
| Ad A, cheap leads | Ad B, case study | |
|---|---|---|
| Spend | $5,000 | $5,000 |
| Booked calls | 50 | 25 |
| Cost per booking | $100 | $200 |
| Show rate | 60% | 80% |
| Calls held | 30 | 20 |
| Close rate | 10% | 30% |
| Closes on a $6,000 offer | 3 | 6 |
| Revenue | $18,000 | $36,000 |
| Revenue per call | $600 | $1,800 |
| Cost per close | $1,667 | $833 |
| Return on spend | 3.6x | 7.2x |
In Ads Manager, Ad A looks twice as good: half the cost per booking. In the bank account, Ad B is twice as good. It produced double the revenue from the same spend, and its calls were worth three times as much to your closers.
Ad A also costs you in ways the table doesn't show. Thirty calls held instead of twenty is ten more closer hours. And 20 people who booked and never showed have dragged your team's show rate down, which you'll probably try to fix with more reminders.
This is the most common mistake we see in call funnels. The media buyer is paid on cost per booking, does exactly what they're paid to do, and quietly fills the calendar with people who were never going to buy.
Sales attribution models explained
An attribution model is the rule for sharing credit when a buyer touched more than one thing before paying. Most guides list six.
| Model | How credit is shared | Good for | Weakness |
|---|---|---|---|
| First touch | All credit to the first interaction | Finding which channels create new demand | Ignores everything that warmed the lead up |
| Last touch | All credit to the final interaction before the conversion | Short, simple journeys | Over-credits retargeting and branded search |
| Linear | Split equally across every touch | Seeing the whole journey | Treats a glance at a post like a two-hour webinar |
| Time decay | More credit to touches closer to the sale | Long cycles where late touches matter | Undervalues the ad that started it |
| Position based | Most credit to first and last, the rest shared | A balanced view in multi-step journeys | The split is arbitrary |
| Data driven | Credit assigned by an algorithm from your conversion data | High-volume businesses | Needs lots of conversions; hard to audit |
The tools have narrowed the choice. Google Analytics 4 retired first click, linear, time decay and position-based models in November 2023, leaving data-driven and last-click variants. And none of those models see a payment that happens off your site anyway.
Which attribution model should a call funnel use?
Keep it simple. Multi-touch models were built for B2B software deals with six decision makers and a nine-month cycle. A high-ticket call funnel usually has one decision maker and closes inside two weeks.
What works for most teams that sell on calls:
- First touch on the lead record. The source captured the moment the lead first enters their details. This is the number you judge ads on.
- Last touch before booking. Kept alongside, so you can see when a retargeting ad or a YouTube video pushed someone over the line.
- Self-reported source. One question on the booking form, so you catch the channels no tracking link ever will.
Three data points, one record. That's enough for most budget decisions a call funnel faces. If first touch and self-reported disagree, believe both. The ad found them and the podcast convinced them.
What to capture and when
Attribution is mostly a data-capture problem. If the source isn't recorded when the lead enters their details, no model or tool can recover it later.
| Field | Example | When it's captured |
|---|---|---|
| Source and medium | facebook, paid | When the lead enters name and email |
| Campaign | Q4 webinar, cold | When the lead enters name and email |
| Ad set and ad | Lookalike 3%, case study video | When the lead enters name and email |
| Funnel or landing page | VSL page, version B | When the lead enters name and email |
| Self-reported source | Podcast | On the booking form |
| Lead grade | B | On the booking form |
| Setter and closer | Priya, Dan | At booking |
| Outcome | Shown, closed | After the call |
| Payments | $2,000 of $6,000, instalment 1 of 3 | When each payment lands |
Two rules make or break this.
- Capture name and email before the calendar. A lead who abandons the scheduler still exists, and still carries their source. If you only record finished bookings, every partial lead is unattributed.
- Never overwrite the first source. If a lead comes back through a different ad a week later, add the new touch. Don't replace the original.
The easiest way to fill the first four rows is UTM parameters on every ad. Meta can fill them in automatically with dynamic values, so nobody types campaign names by hand. Our UTM tracking guide for call funnels has the full naming schema.
utm_source=facebook&utm_medium=paid&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}&campaign_id={{campaign.id}}&adset_id={{adset.id}}&ad_id={{ad.id}}&placement={{placement}}
Use IDs as well as names. Names change when someone tidies up the account. IDs don't.
How to track ads to closed deals, step by step
This is the full chain, from the ad to the money. Most teams have steps one and two and nothing after.
- Agree a naming convention. Campaign, ad set and ad names that mean something, written down, before you launch.
- Put URL parameters on every ad and every link. Paid ads, bio links, email links, YouTube descriptions. Anything without parameters lands as "direct".
- Carry the parameters through the funnel. From the landing page to the VSL page to the booking form, in hidden fields, so they survive every click.
- Capture the source at the first form field. Name and email first, source attached, before the calendar appears.
- Show the source to the team. The setter and closer should see which ad the lead came from before they speak to them.
- Tag every booked call with a setter and a closer. So you can tell whether a bad week was the ad or the people.
- Record the outcome from what actually happened. Booked, shown, no-show, closed. Not from a rep remembering to move a card.
- Match every payment to the lead, including instalments, by email or customer ID from your payment processor.
- Report by ad, weekly. Spend from the ad platform, everything else from your own system.
- Send outcomes back to the ad platform. Qualified leads and closed deals, server-side.
The guide to tracking Meta ads to closed deals walks through this chain inside Meta specifically.
Self-reported attribution: ask them
Tracking links miss a lot. The lead who heard you on a podcast, Googled your name and clicked a branded search ad shows up as "Google, paid". The one who saw a friend share your post shows up as "direct".
So add one question to the booking form: "Where did you first hear about us?" Give fixed options and an "other" box.
| Tracked source | Self-reported source | |
|---|---|---|
| What it records | The link they clicked | What they remember |
| Catches | Paid ads, email, links you control | Podcasts, word of mouth, YouTube, events |
| Misses | Anything without a tracking link | Precise ad and campaign |
| Best used for | Ad-level budget decisions | Channel-level decisions |
Read the two side by side. When tracked says "Google brand search" and self-reported says "podcast", the podcast did the work and Google collected the click. Cutting the podcast because it shows no tracked revenue is how teams kill their best channel.
The numbers to judge an ad on
Once source, outcome and payment sit on the same record, you can judge an ad on what it earned. Look at these in order. Each one explains the one below it.
| Metric | How to calculate it | What it tells you |
|---|---|---|
| Cost per lead | Spend divided by leads who entered details | Whether the ad gets attention |
| Scheduler conversion | Bookings divided by leads who started booking | Whether the lead was serious |
| Lead grade mix | Share of A, B, C and D leads | Whether the ad attracts people who can buy |
| Show rate | Held divided by held plus no-shows | Whether the booking was real |
| Close rate | Closes divided by calls held | Whether the call could be won |
| Revenue per call | Revenue divided by calls taken | What each closer hour on this ad is worth |
| Cash collected | Payments actually received | What the ad has paid back so far |
| Return on spend | Revenue divided by spend, and cash collected divided by spend | Whether to scale it, and how fast |
Lead grade mix is the early signal. You'll know an ad's grade mix within days, long before enough deals have closed to judge revenue. If an ad produces mostly C and D leads, it's unlikely to produce buyers, however cheap the bookings. Our guide to qualifying high-ticket leads before the call covers how to grade them.
Split show rate by source too. Paid traffic shows materially lower than referral, event and organic traffic, so a blended show rate hides which channel is dragging it down.
Cash collected versus revenue
Payment plans change the maths. A $6,000 deal on three monthly payments of $2,000 is $6,000 of revenue and $2,000 of cash in month one.
Report both, per ad.
- Revenue tells you what the ad sold. Use it to compare ads.
- Cash collected tells you what the ad has paid back. Use it to decide how fast you can scale, because you pay for the ads now.
An ad that sells mostly on payment plans can look great on revenue and starve you of cash. If one ad's buyers pay in full and another's take a three-pay plan, the first ad funds its own growth and the second needs a bank balance behind it. Cap plans at three payments, push pay in full, and track failed instalments against the original ad.
Send closed deals back to Meta
Attribution isn't only for your reports. It's also what the ad algorithm learns from.
If the only event Meta sees is a booking, it gets very good at finding people who book. That includes the people who book to end a conversation and never show. Send it qualified leads and closed deals instead, and it starts finding people who look like your buyers.
The Meta Conversions API connects your own data to Meta's systems, including offline conversions and data from your CRM, server to server. Because it doesn't depend on the browser, it can report a sale that happened on a call ten days after the click.
| Event | When it fires | What it teaches the algorithm |
|---|---|---|
| Lead | Name and email entered | Find people who start |
| Qualified lead | Lead graded A or B | Find people who can buy |
| Booked call | Time picked | Find people who commit to a call |
| Purchase | First payment received | Find people who pay |
Start optimising for qualified leads once you have enough of them each week, and move closer to purchase as volume allows. The Meta Conversions API guide for call funnels covers setup and event choice.
How long to wait before judging an ad
High-ticket deals close days after the click, sometimes weeks. Judge an ad on day three and you'll kill the one whose buyers take a second call.
- Report by cohort. Group leads by the week they arrived, then watch what that cohort closes over the following weeks. Don't compare this week's spend with this week's payments.
- Use early signals early. Grade mix and show rate are readable within a week. Close rate and cash need longer.
- Review weekly, not daily. Daily numbers on a call funnel are mostly noise.
Your own lead record has no attribution window. The source stays on the lead for as long as you keep it, so a deal that closes on day 40 still lands against the ad that started it.
Common sales attribution mistakes
- Reading revenue from the ad platform. It only knows what happened on your site, and it counts generously.
- Judging ads on cost per booking. The cheapest bookings are often the worst calls.
- Links without parameters. Bio links, emails and YouTube descriptions all land as "direct".
- Overwriting the first source. The last ad gets credit for a lead the first ad found.
- Payments that never meet the lead. Revenue sits in Stripe, outcomes in the CRM, and nobody joins them.
- Paying media buyers on bookings. You'll get exactly what you pay for.
Where Aura fits
Most call funnels can't do this because the data lives in four places: the ad platform, the scheduler, the CRM and the payment processor. Joining them by hand works for a month.
Aura, the sales performance platform (aurasales.io), keeps it on one record. It captures the source when the lead enters their details, down to funnel, campaign, ad set and ad, and the closer sees it before the call. The outcome is set from what happened on the call, and payments from Stripe, Whop, Fanbasis and ablefy are matched to the deal, including instalments. So revenue lands against the ad that produced it.
From there you can compare ads on lead grade mix, scheduler conversion, show rate, close rate, geography, revenue and cash collected. The Meta Conversions API connects from the Integrations page and sends qualified leads and closed deals back to Meta server-side, with no developer needed. It sits alongside your existing CRM, and your landing pages and ads stay where they are.
Where to start
Three things this week.
- Check your links. Open five live ads, your bio link and your last email. Any link without URL parameters is a lead you can't attribute.
- Pick last month's ten closed deals and trace each one back to an ad. If you can't do it for more than half, that's the first finding.
- Rank your ads by revenue per call instead of cost per booking, for the last 90 days. Compare the top ad on each list. If they're different ads, you know where next month's budget should go.
Questions people ask
- What is sales attribution?
- Sales attribution is the process of crediting revenue to the ad, campaign or channel that produced the customer. For teams that sell on calls, it means connecting each closed deal and payment back to the source captured when the lead first entered their details.
- What is the difference between sales attribution and marketing attribution?
- Marketing attribution tracks which channel produced a lead or booking. Sales attribution follows that lead through the call to the payment, so you can judge each channel on revenue and cash collected instead of cost per lead.
- Which attribution model is best for high-ticket sales?
- For most call funnels, first touch on the lead record, last touch before booking and a self-reported source question are enough. Multi-touch models suit long B2B cycles with many decision makers, which most high-ticket offers don't have.
- How do you track Facebook ads to closed deals?
- Put URL parameters on every ad, capture them when the lead enters their name and email, keep them on the lead record through the call and match each payment to that record. Then send qualified leads and purchases back to Meta through the Conversions API.
- Why doesn't Meta Ads Manager show my sales?
- Ads Manager only sees events from your pixel or the Conversions API. If the sale happens on a call and the payment goes through a separate link, Meta never sees it unless you send the purchase back server-side.
- What is self-reported attribution?
- It's asking the lead where they first heard about you, usually as one question on the booking form. It catches channels that tracking links miss, such as podcasts, word of mouth and YouTube.
- How long should you wait before judging an ad on a call funnel?
- Read lead grade mix and show rate within the first week, but wait until the cohort has had time to close before judging revenue. Group leads by the week they arrived and review weekly.
- Should you judge ads on revenue or cash collected?
- Both. Revenue tells you which ad sold more. Cash collected tells you what the ad has paid back so far, which decides how fast you can scale when buyers are on payment plans.
- What software tracks ads to closed deals for sales teams?
- Aura, the sales performance platform (aurasales.io), captures the ad source when a lead enters their details, matches payments to the deal and compares ads on show rate, close rate, revenue and cash collected. It also sends qualified leads and closed deals to Meta through the Conversions API.
See which ads actually close.
Try Aura, the sales performance platform for high-ticket teams. Every payment lands against the ad that produced it, so you can scale the ads that make money.
Start your 14-day free trial