face
All guides

How to track leads from ads to deals and see which ads actually sell

Updated November 2, 2026

A roadside billboard with a blank board.

The short answer

To see which ads bring deals, save the ad's details on every lead, keep them on the deal, and divide each campaign's spend by its won deals. UTM parameters and click IDs capture the ad on your website. Meta Lead Ads carry tracking parameters and lead IDs, and WhatsApp click ads pass the ad's ID when the chat starts. Google and Meta can also receive your sales results, though every attribution report shows credit rather than proof.

Key takeaways

  • Save UTM values and the click ID on the lead when it arrives, then carry them onto the deal, or the link back to the ad is lost.
  • UTM values are case sensitive, so agree on a lowercase naming list before the campaign starts.
  • Google says it keeps a GCLID for only 90 days, so a long sales cycle should upload an earlier stage, such as a qualified lead.
  • WhatsApp click ads have no landing page. The Platform's webhook gives you the ad ID and click ID, while Business app users have to record the ad by hand.
  • Compare campaigns on cost per won deal, counted by the month the lead arrived, and treat attribution as credit until a controlled test shows the ad caused the sale.

Why don't click numbers tell you which ads bring deals?

Clicks stop at the moment someone reaches your page, and the sale happens later, usually in your CRM, on a phone call or in a WhatsApp chat. The ad platform sees the first part and your sales team sees the second. Nothing connects them until you save the ad's details on the lead and keep them there when the lead becomes a deal.

That link has three parts: capture the ad when the lead arrives, carry it through to the deal, then compare spend with won deals. The sections below follow that order and rely on Google's and Meta's own documentation. Both companies change these products often, so check the current pages before you build anything.

What do UTM parameters and click IDs record?

UTM parameters are labels you add to an ad's link, and click IDs are codes the ad platform generates for each click. You usually want both, because UTM values are readable in your own reports and a click ID is what lets the platform match a sale back to a click.

Google Analytics says to always use utm_source, utm_medium and utm_campaign. Add utm_content to separate creatives and utm_term for the paid keyword. A link might end in ?utm_source=meta&utm_medium=paid_social&utm_campaign=riyadh_offer&utm_content=video_a. Values are case sensitive, so utm_source=google and utm_source=Google appear as two sources. Google advises lowercase, with one fixed name for each platform and channel. In Meta Ads Manager you enter URL parameters in the ad's Tracking step, either typed by hand or as dynamic parameters that fill in details of the ad for you.

These are the click IDs you are likely to meet:

  • GCLID: Google Ads adds it to the landing page URL when auto-tagging is on, which is the default for new accounts. It looks like ?gclid=123xyz and is case sensitive.
  • GBRAID and WBRAID: Google documents these for iOS traffic. GBRAID covers a web ad click that leads to an iOS app, and WBRAID covers an ad click in an iOS app that leads to a web page. Save them if your links carry them.
  • fbclid: Meta passes it in the URL when someone clicks an ad on Facebook or Instagram. Meta warns that the value is case sensitive and should not be modified.
  • ctwa_clid: Meta's click ID for WhatsApp click ads. It arrives with the message data, covered further down.

How do you save these values so they reach your CRM?

You save them on your website the moment the visitor lands, then send them to the CRM with the form. Google's setup for the GCLID has three pieces: a hidden field on every lead form, a script on every page that stores the value in a cookie or local storage, and a change on your server that saves it with the prospect's record. The same pattern works for UTM values and fbclid.

The script matters because visitors move around. Meta notes that a URL parameter is lost if someone leaves the page and later comes back on their own, so a value saved on arrival is far safer than one read at the moment the form is sent. Meta suggests a 90-day expiry if you store its click ID in the _fbc cookie, and Google's sample script also uses 90 days.

These values can identify people. Meta calls the WhatsApp click ID a personal identifier, and Google tells advertisers to give clear information about the data they collect, get consent where the law or its policies require it, and follow local cookie rules. Confirm what applies in Saudi Arabia, Jordan or Iraq with a legal adviser.

Which lead source fields should your CRM keep?

Keep a small set of fixed fields on every lead, filled automatically where you can, and copy them onto the deal when the lead converts. Our guide on capturing and qualifying leads covers the rest of the lead record. For ad tracking, these fields do the work:

  • Source and channel from a fixed list, such as Google, Meta, referral or walk-in, with paid search and paid social kept apart.
  • Campaign, ad and keyword, taken from UTM values or the platform's IDs.
  • The click ID exactly as received, plus the landing page and the date and time of first contact.
  • What the person says when asked how they heard about you, in its own field so it never overwrites the tracked data.
  • Owner and stage, so you can report qualified and won deals by source.

How do you track leads from Meta Lead Ads?

Meta Lead Ads collect the lead in an instant form on Meta's side, so a script on your website never runs and you rely on Meta's tracking parameters and lead data instead. In the form's settings you add name and value pairs, such as utm_source and Facebook. People filling in the form do not see them. Meta says they show in the file you download, pass directly to an integrated CRM and work with a webhook or API integration.

Tracking parameters belong to the form, so one form reused across campaigns carries the same values. Use a form per campaign, or save the ad ID as well. Meta's developer documentation shows leads with a created time, ad ID, form ID and the person's answers. You can download a CSV from Ads Manager, or from the Instant forms page or Leads Centre in Meta Business Suite. You can also read leads through the API, or use webhooks, which notify your system of each new lead so it can fetch the details. The API route needs an app that has passed Meta's review.

To tell Meta which leads became sales, use the Conversions API for CRM. You send sales stages from your CRM along with the 15 to 17 digit Meta Lead ID, which Meta recommends storing, or a click ID, phone number or email if you lack it. Meta's help center also links to Google Sheets and Excel connections for sharing this data. The related Conversion Leads goal works only with instant forms. Meta's guidance asks for at least 200 leads a month, uploads at least once a day, a target stage reached within 28 days of the lead, and a conversion rate between 1% and 40% at that stage. It estimates about 3 to 4 weeks before you see value. Below those volumes, your CRM report can still answer the question for you.

How do Google Ads offline conversions work?

Offline conversion import sends your sales results back to Google Ads, matched on the click ID you saved with the lead. Google assigns each click a GCLID, you store it with the lead, and when the deal reaches the stage you care about, you upload the GCLID with the conversion type and time. Google Ads then records the conversion. The usual setup runs like this:

  • Check that auto-tagging is on and that any redirects pass the GCLID to the final landing page.
  • Capture the GCLID with the hidden field, script and server change described above.
  • Create an offline conversion action, such as a won deal, under Goals, Summary, Create conversion action, Conversions offline. Google asks you to wait 4 to 6 hours before the first upload.
  • Connect a data source. Google's page lists Google Sheets, cloud storage, several databases, Salesforce and HubSpot through its Data Manager.
  • Upload on a regular schedule. For Smart Bidding, Google says to upload at least daily, or on a consistent schedule if daily is not possible.

What are the time limits on Google offline conversions?

The main limit is 90 days: Google says it retains the GCLID for only 90 days, and conversions must fall inside that limit. If your deals take longer, upload an earlier stage that happens in time, such as a qualified lead. The conversion window matters too. Click-through windows default to 30 days for Search and Display and can be set from 1 to 90 days, and a change applies only going forward. A deal won on day 45 under a 30-day window will not appear, so set the window to match your sales cycle.

Google recommends enhanced conversions for leads to new users. It describes this as an upgraded version of offline import that adds user-provided data, such as email addresses, sent in hashed form. It needs auto-tagging and an email or phone field on your form, and Google gives it a shorter limit of 63 days. Google also says uploads of both types move to its Data Manager API from June 15, 2026, so anyone working from an older tutorial should check the current documentation.

How do you track WhatsApp click ads?

WhatsApp click ads open a chat in place of a web page, so the tracking sits in the incoming message data and the URL tells you nothing. Meta says you can run them with a number connected to your Facebook Page or business portfolio, using either the WhatsApp Business app or the API.

On the WhatsApp Business Platform, Meta's message webhook includes a referral object when a chat starts from an ad. It holds source_id, which is the ad ID, along with source_url, the headline and ctwa_clid. Meta omits the click ID for ads shown in WhatsApp Status, so save the ad ID as well. Our guide on answering from one WhatsApp number explains the difference between the app and the Platform.

On the Business app, plan to record the ad by hand: ask which offer the person saw and note it on the lead. If you send Google or website traffic to WhatsApp with a wa.me link, WhatsApp lets you add ?text= with a pre-filled message, which can include a short campaign code. The customer can change that text before sending, so treat it as a hint.

To report results to Meta, the Conversions API for Business Messaging accepts events such as LeadSubmitted, QualifiedLead and Purchase, and Meta says to send ctwa_clid whenever you have it. Without one, a fallback sends hashed customer details, but matching is not guaranteed, it covers only ad interactions from the past seven days, and it works in a subset of countries that the page does not list, so check for your market. Meta adds that these events should represent what happens in the messaging thread, and that other conversions belong in other Conversions API products. Setup needs a developer app and specific permissions, so this is a job for your developer or software partner.

How do you calculate cost per won deal?

Divide a campaign's ad spend by the won deals that came from that campaign's leads in the same period. Add cost per qualified lead as an early signal, and won value per riyal spent, so that a stream of small deals does not look better than it is. The figures below are a made-up example, invented only to show the sums. They are not real results or benchmarks.

Made-up example, one month at an imaginary company:

  • Meta lead form ads: SAR 10,000 spent, 200 leads, 40 qualified, 4 won deals worth SAR 30,000. That is SAR 50 per lead, SAR 250 per qualified lead, SAR 2,500 per won deal and SAR 3.00 won per riyal spent.
  • Google Search ads: SAR 10,000 spent, 50 leads, 25 qualified, 8 won deals worth SAR 48,000. That is SAR 200 per lead, SAR 400 per qualified lead, SAR 1,250 per won deal and SAR 4.80 won per riyal spent.
  • WhatsApp click ads: SAR 6,000 spent, 120 chats, 30 qualified, 6 won deals worth SAR 18,000. That is SAR 50 per chat, SAR 200 per qualified lead, SAR 1,000 per won deal and SAR 3.00 won per riyal spent.

How should you read cost per won deal?

Read it next to lead counts and deal value, because each measure can name a different winner. In the example, Meta brings the most leads, WhatsApp has the lowest cost per won deal, and Google Search brings the most won value per riyal, since its deals average SAR 6,000 against SAR 3,000 from WhatsApp. A few habits keep the comparison fair:

  • Count deals by the month the lead arrived, and wait out your normal sales cycle before judging a campaign.
  • Treat agency fees and creative costs the same way for every campaign, either all in or all out.
  • Keep a row for deals with no ad data. If that row is large, you have a tracking problem to fix before you trust the rest.
  • Be careful with small numbers. Two or three deals could reorder the example above, so look at several months before you cut a campaign.

What can attribution not tell you?

Attribution assigns credit under a set of rules, and it cannot prove the ad caused the sale. Someone who was going to buy anyway can click a search ad on the way to your site, and the ad gets the credit.

The rules also differ by platform. Google Ads supports data-driven attribution, the default for most conversion actions, and last click, and it has dropped the first click, linear, time decay and position-based models. Meta's standard settings for website and in-store conversions count events within 1 or 7 days of a link click and within 1 day of an ad impression, and Meta warns against comparing results across ad sets with different attribution models. Each platform can claim a customer who clicked ads on both, so platform totals can exceed the deals in your CRM. Use the CRM to count deals, and use each platform's report to compare ads inside that platform.

Some gaps are normal, and you should expect them:

  • People who see an ad and later call, walk in or search for your name may leave no click data.
  • Customers change devices, clear cookies or decline tracking.
  • WhatsApp Status ads arrive without a ctwa_clid.
  • Source fields filled in by hand depend on staff filling them in, and filling them in the same way.
  • Deals that close outside a platform's window never reach its report.

How can you test whether an ad caused the sale?

The reliable test is an experiment with a group held back from seeing the ads. Google's Conversion Lift compares a group that sees the ads with a control group that does not, and Google calls incrementality experiments the way to measure the causal impact of ads. It is not available to every account, so ask your Google representative. Meta offers an incremental attribution model that uses predictions of whether an ad caused a conversion.

On a smaller budget, you can pause a campaign in one city for a few weeks and compare it with a similar city where the campaign keeps running. This is a rough check, since seasons, competitors and sales staffing can all move the numbers, but it gives you more to go on than a report that only assigns credit.

How does Repzo handle this?

Repzo Ads brings advertising data into Repzo Workstation, next to your contacts and deals, while ad buying stays in the ad platforms. Admins connect Meta, Google Ads and LinkedIn accounts, then sync campaigns, ad sets, ads, creatives and daily metrics. An auto tracking option adds UTM parameters to new ads, and lead forms from those networks can be mapped so each submitted lead becomes a contact.

In Workstation a prospect is a contact, and lead management tracks source and channel. Contact properties also include referral, UTM fields, click IDs and originating ad. Repzo forms record the page URL, UTM values and Google and Facebook click IDs with each submission, and link the contact to a campaign when utm_campaign matches. Everyone who writes in through the inbox gets a contact automatically, and the Details panel shows From ad or From post when the customer came from one.

Each campaign has a Funnel tab listing its attributed contacts and where each one stands, along with cost per contact, qualified contact and converted contact. By default, converted means the contact has a won deal, so cost per converted contact works as cost per won deal, and you can change these definitions. A Won Deals tab shows won deals from linked contacts and deals linked to the campaign directly. If a contact is linked to a campaign again later, the newest campaign wins, which is worth remembering when you read the numbers.

Repzo's public documentation lists matching form UTMs, synced ad lead forms and manual assignment as the ways a contact links to a campaign, and it does not describe sending won deals back to Google Ads or Meta as offline conversions. If WhatsApp click ads or either of those uploads matter to you, ask our sales team how your setup would work. You can also try it on one campaign during the 7-day free trial.

Frequently asked questions

Do I need both UTM parameters and click IDs?

Usually, yes. UTM values give you readable campaign names in your own reports. A click ID is what Google or Meta needs to match a sale to a specific click if you plan to send results back to them. If you never send results back, UTM values alone can still support a CRM report.

Can UTM parameters track a WhatsApp click ad?

No, because the ad opens a chat and there is no landing page to read them from. On the WhatsApp Business Platform, the message webhook gives you the ad ID and usually a click ID. On the Business app, you record the ad by hand.

What if a deal closes more than 90 days after the Google ad click?

That click can no longer be matched, because Google says it retains the GCLID for only 90 days. Upload an earlier stage that happens within the limit, such as a qualified lead, and keep the won deal in your own CRM report.

Why do Google and Meta report more conversions than my CRM has deals?

Each platform applies its own attribution rules and sees only its own ads, so both can count the same customer. Their conversions may also include actions earlier than a sale. Treat your CRM as the count of deals, and compare ads within each platform.

Can I do this with a spreadsheet instead of a CRM?

Yes, if every lead row holds the source fields and the final deal outcome, and someone keeps it current. Google's Data Manager can import from Google Sheets, and Meta's help center links to Sheets and Excel connections for sharing conversion leads data. It gets harder as lead volume grows.

How long should a campaign run before I judge it on won deals?

At least one full sales cycle after the leads arrive, since recent leads have not had time to close. There is no fixed number of days. Until then, use cost per qualified lead as your early signal, and be careful with small deal counts.

Sources

Get started

Put your field and office on the same system

See Repzo SFA and Workstation working together, or talk to sales about rolling out across your teams.

Contact sales