Skip to content
Code samples below use example values.

Assigning dollar values to leads (true ROAS)

An e-commerce store gets ROAS for free. Someone buys a $140 order, the platform already knows it's worth $140, and cost-per-purchase versus revenue is a straight division problem. Lead-generation businesses — clinics, contractors, law firms, any local service — don't get that for free, because a "conversion" isn't a sale. It's a form fill, a call, a booking request. Two leads that look identical in a report can be worth wildly different amounts once one becomes a $4,000 roof replacement and the other never answers the phone.

The naive report lies to you

Count raw leads and every campaign gets judged on cost-per-lead alone. That number treats a booked patient consult and a newsletter signup as the same unit — "1 lead" — even though one might close at 40% for a $2,000 procedure and the other never generates revenue at all. A campaign that produces cheap, low-intent leads can look like the winner on a cost-per-lead chart while actually producing less revenue than a pricier campaign sending higher-intent traffic. Without a way to tell those leads apart, you're optimizing for volume, not money.

The fix: a value map

The standard fix is a value map — an estimated dollar figure assigned to each event type, not a real transaction amount. A common way to build one:

estimated value = average job/case value × close rate for that lead type

A "request an estimate" form on a roofing site might close at 25% on an average $8,000 job — worth roughly $2,000 per lead. A "download our brochure" form on the same site might close at 2% on that same job value — worth about $160. Both are "a lead." They are not worth the same thing, and once you assign values, your reporting stops pretending otherwise.

This flips which campaign looks best

It's common for the campaign with the highest cost-per-lead to turn out to be the most profitable once leads are weighted by value — and for the "cheap leads" campaign to turn out to be quietly burning budget on traffic that was never going to close. Value-based reporting is often the first time that becomes visible.

Feeding values to the ad platforms, not just your dashboard

Value maps aren't only a reporting exercise. Meta and Google Ads can both optimize toward value, not just conversion count, if you send a dollar amount with each conversion event instead of firing a bare, valueless event. Told only "this was a lead," the algorithm optimizes for more leads at any quality. Told "this lead was worth about $2,000," it can start finding more people who look like your $2,000 leads and fewer who look like your $160 ones. See Events for how event values are attached and delivered to ad platforms.

Keep estimates honest

A value map is an estimate, not a fact, and it should be treated that way:

  • Base it on real numbers you already have — average job value, historical close rate by lead source — not a guess.
  • Different lead sources (a call vs. a form vs. a booking request) usually deserve different close-rate assumptions; don't apply one blended number to everything.
  • Revisit the map as close-rate data accumulates. A close rate you estimated from ten leads is a guess; one estimated from three hundred is a fact. See Lead form submissions for where lead outcomes and CRM data feed back into that picture.
  • Resist the temptation to inflate values to make a campaign look better. The whole point of value-based reporting is to see the truth, and a dishonest value map just hides the naive-lead-count problem behind a fancier number.

How Adsidian helps

Adsidian supports mapping a dollar value per event type, so a client's dashboard reports revenue-weighted ROAS instead of a raw lead count — a $2,000-estimate "request an estimate" lead and a $160-estimate "download a brochure" lead are no longer collapsed into the same "1 conversion." That mapped value is what powers the revenue-weighted reporting inside Adsidian; to get a value to the ad platforms themselves, attach it to the event — the value property or data-prism-value attribute documented in Events — so their optimization can chase value rather than volume.

FAQ

Do I need exact revenue numbers to do this? No. A value map is a deliberate estimate — average job value times close rate — not a real transaction amount. Rough numbers grounded in your actual sales data beat no numbers at all.

Does this replace tracking raw lead counts? No, keep both. Lead count still tells you volume and funnel health; value-weighted reporting tells you which volume is actually worth pursuing. They answer different questions.

Should every event type get the same value? No. Different event types — and often different lead sources for the same event type — should carry different values based on their own close rate and job value. Blending them into one number defeats the purpose.

Does sending values to Meta or Google actually change performance? It can. Value-based optimization can only chase what it's told — a bare conversion event tells it to find more of anything, while a valued event lets it favor people who resemble your highest-value conversions.

Adsidian Prism — first-party server-side tracking.