Guide · Metrics

Measure Real ROAS in Lead Generation: From Click to Closed Deal

How to measure real ROAS in lead generation: attribute CRM revenue to campaigns, read CPL, CPA and ROAS correctly and send deal values back to Meta and others.

Valentin Zetter8 min read

You run ads, collect leads and close deals weeks later – but which campaign actually made the money? This guide is for performance marketers, agencies and lead generation businesses that want to look beyond cost per lead. By the end, you'll know how to measure real ROAS from the click all the way to the payment, which metric answers which question, when a campaign is profitable and how to feed deal values back to the ad platforms.

Why ad platform ROAS is misleading

In ecommerce, ROAS is simple: click, cart, purchase – all in one session, all captured by the pixel. In lead generation, the ad platform only sees the first step: the form. The actual revenue comes later – on the sales call, in the CRM, at the payment provider.

The result:

  • No revenue in the ad account: Meta or Google Ads only know about leads, not closed deals. The ROAS they show is based on estimated lead values or missing altogether.
  • False winners: The campaign with the cheapest leads looks best, even if those leads never buy.
  • The algorithm optimizes for the wrong thing: If the platform only gets a "lead" signal, it finds people who like filling out forms – not people who buy.

You only get a reliable ROAS when you attribute revenue from your CRM or payment system back to the campaign the lead originally came from.

CPL vs. CPA vs. ROAS

Three metrics, three questions:

Cost per lead   = Ad spend ÷ Number of leads
CPA             = Ad spend ÷ Number of closed deals
ROAS            = Revenue from closed deals ÷ Ad spend

An example with two Meta campaigns, each with a $3,000 monthly budget:

Campaign ACampaign B
Leads6030
Cost per lead$50$100
Closed deals36
Cost per closed deal$1,000$500
Revenue$9,000$18,000
ROAS3.06.0

By CPL, Campaign A is twice as good. By CPA and ROAS, Campaign B is twice as good. If you only look at cost per lead, you'd shift budget in exactly the wrong direction.

CPA tells you what a customer costs – but not what they bring in. Only ROAS reflects whether a campaign produces small or large deals. Cost per lead is still useful: as an early indicator while there are no deals yet, and compared against your lead value.

Calculating break-even ROAS

A ROAS of 3 sounds good. Whether it is depends on your margin. Break-even ROAS is the point at which your ads earn back their cost through gross profit:

Break-even ROAS = 1 ÷ gross margin

At a 40% gross margin, that's 1 ÷ 0.4 = 2.5. Back to the example:

Campaign A: $9,000 × 40% = $3,600 gross profit − $3,000 ad spend = $600
Campaign B: $18,000 × 40% = $7,200 gross profit − $3,000 ad spend = $4,200

Both campaigns are profitable, but A only barely. If your margin is 30%, break-even ROAS rises to 3.33 – and Campaign A loses money. Use the ROI calculator to run the numbers for your own business.

💡
With subscriptions or recurring payments, the first payment is often only a fraction of what a customer is worth over time. Decide up front whether you calculate with the first payment, the contract value or the customer lifetime value – and stick with it so periods stay comparable.

The data chain from click to deal

For revenue to land on the right campaign, every link in the chain has to hold:

  1. Click: The ad carries UTM parameters and the platform's click ID (e.g. gclid or fbclid). Build clean links with the UTM builder.
  2. Session: A tracking script on your website stores the traffic source and click ID in the session.
  3. Lead: When the form is submitted, the lead is linked to exactly that session – even if the form lives in an iframe or funnel tool.
  4. Deal or payment: Revenue is created later in the CRM or payment system. It has to be traced back to the lead via email, phone number or an ID.
  5. Attribution: The revenue is credited to the lead's campaign, ad set and ad, based on a fixed attribution model such as first click or last click.

If the chain breaks anywhere, revenue ends up under "direct" or "unknown," and the campaign's ROAS comes out too low.

Step by step to real ROAS

  1. Define your revenue event

    Decide what counts as revenue: deal won in the CRM, first payment or contract value. Also note whether you use gross or net amounts.
  2. Close the tracking gap to the lead

    Check that every lead in your CRM carries its source, campaign and ad. Test forms, iframes and booking tools one by one with a test lead.
  3. Connect CRM and payments

    Connect your CRM and payment provider so deals and payments are automatically matched to the original lead – not manually in a spreadsheet.
  4. Analyze by lead cohort

    Assign deals to the month the lead was created. That way you compare campaigns fairly, even when your sales cycle takes several weeks.
  5. Check against break-even ROAS

    Compare each campaign's ROAS with your break-even ROAS. Below it: optimize or pause. Well above it: increase the budget.
  6. Send deal values back

    Send closed deals with their value to the ad platforms via the Conversion API, so the algorithm optimizes for buyers instead of form fillers.

Account for the sales cycle

If leads take six weeks on average to close, this month's ROAS will inevitably look too low. Look at how many days typically pass between lead and deal, and only judge campaigns once their cohort has largely "matured." Until then, CPL and the share of qualified leads serve as early indicators. Also keep the attribution window of your tracking in mind: if a conversion happens further back than the window in which leads are matched to their session, the link to the campaign is lost.

Sending deal values to ad platforms

Knowing your real ROAS in your own reporting is half the job. The other half: the ad platform needs to know it too, because Meta, Google Ads, TikTok and LinkedIn optimize for the signals they receive.

With the Conversion API, you send server-side events like "deal won" or "purchase," including value and currency, to the platform. The platform matches these offline conversions to the original click using the click ID or hashed contact data such as email and phone number. That enables two things:

  • Real ROAS in the ad account: The platform sees revenue instead of just leads.
  • Value-based bidding: With values, the platform can optimize for high conversion value instead of as many leads as possible.

What to watch out for:

  • Send consistent values: Use the same revenue definition as in your reporting.
  • Avoid double counting: A unique event_id per event lets the platform recognize duplicates.
  • Use earlier signals too: With long sales cycles, it can help to also send an earlier stage, such as a qualified lead, so the platform learns faster.

Read more about turning CRM data into conversions in From CRM lead to real conversion.

Common ROAS mistakes

  • Taking platform ROAS at face value: Every platform credits conversions to itself. Added up, that often exceeds the revenue you actually made.
  • Assigning deals to the month they closed: A campaign from last month then looks better than it is this month, and a new one looks worse.
  • Confusing revenue with profit: A ROAS of 2 can mean a loss at a 30% margin.
  • Ignoring leads without a source: A high share of "unknown" in your CRM is a tracking problem, not a coincidence.
  • Only sending leads to the platform: The algorithm never learns which leads actually make money.

How LeadMetrics helps

LeadMetrics closes the chain from click to revenue:

  • A tracking script captures sessions with traffic source, UTMs and click IDs. Leads are matched to their session via session ID, email or phone number up to 90 days back – including leads from iframes and funnel tools.
  • Deals from HubSpot and Close, plus payments from Stripe, CopeCart and Digistore24, are linked to the lead. You can connect other sources via Zapier, Make or custom webhooks.
  • Your dashboard shows deals, cost per closed deal, revenue, profit and ROAS by channel, campaign, ad set and ad – with first-click or last-click attribution.
  • Through the Conversion API, LeadMetrics sends events like lead, purchase or deal won, with value and currency, to Meta, Google Ads, TikTok and LinkedIn, including hashed contact data, click IDs and an event_id for deduplication.

Learn more about connecting your CRM on the CRM integration page.

Ready for better tracking?

Try LeadMetrics free for 10 days and see which campaigns actually drive revenue.
Start a 10 day trial

Frequently asked questions

Because in lead generation, revenue happens later in your CRM or payment provider. The ad platform only sees the form submission. Unless you send deal values back, its ROAS is based on estimated lead values or missing entirely.

Terms in this guide

All terms

Related articles

More guides

All guides