Cookie preferences

Choose what we may use. Strictly necessary cookies keep you signed in and can't be turned off; everything else is your call and changes nothing about how the site works. You can change your mind any time from the footer.

For Google Ads

Google is optimising toward whatever you told it a conversion is.

Export the leads your campaigns produced, match them against closed sales, and find out which campaigns produced revenue rather than form fills.

No API key Nothing to install in Google AdsNothing to install No card requiredNo card

Google Ads sits on the lead side in CloseRev: export the leads its campaigns produced — lead form downloads, call reporting, or your own landing-page records carrying the campaign — and match them against closed sales from whichever system holds them. Google can see the click and the form submission; it cannot see the invoice, so the campaigns it reports as best are the ones best at producing form submissions. Revenue with no traceable lead is reported as Direct / Unknown.

Last checked against Google Ads's own documentation on September 24, 2026.

The gap

Cost per conversion is excellent and the sales team says the leads are poor. Both are true and nothing joins them up.

Google Ads sees

What was sold, to whom, and for how much.

no shared row
Your ad account sees

The click, the keyword, the call, and what each one cost.

The file

What the export needs in it.

Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.

  1. Needed

    Lead phone or email

    On the lead export, the call report, or your own landing-page record. Whichever you use, it must carry a contact detail or there is nothing to match on.

  2. Needed

    Campaign and ad group

    The level you actually make decisions at. Account totals cannot be acted on and keyword level is usually too sparse to be stable.

  3. Needed

    Lead date

    When the form was submitted or the call was made. It anchors the window in which a sale should appear.

  4. Optional

    Match type or network

    Search, Display, Performance Max, Demand Gen. Pooled, they hide the largest differences in the account.

Step by step

Getting the file out of Google Ads.

Written for somebody with Google Ads open in the next tab. Report names vary by edition, so each step says what to look for.

  1. Export the leads with a contact detail

    Lead form downloads, call reporting with the caller's number, or your own form records stamped with the campaign. Any of the three works; a click report alone does not.

  2. Export closed sales

    From whichever system holds them — practice management, field service, CRM, point of sale. Contact detail, amount, date.

  3. Pick a window and keep it

    Days for an emergency trade, months for anything considered. Changing it between reports is how two campaigns get compared on two different rules.

  4. Keep every other channel in the file

    A customer may have clicked an advert and also called from a map listing. Both belong in the lead file so the overlap is shown rather than assigned.

  5. Upload both

    The join runs on the phone and the email, normalised, with unmatched leads and unmatched sales both kept visible.

What comes back

The page Google Ads cannot show you.

Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the Home Services page — not from a Google Ads account.

Traced to a channel$323,10068% of $475,200
Sales matched100 of 171high confidence only
Average sale$2,820per paid sale
ChannelShareSalesRevenue
Google Ads54$218,600
Meta Ads29$66,500
Email marketing17$38,000
Direct / Unknown71$152,100

Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.

The argument

What changes when the lead and the ad share a row.

The platform optimises toward the signal you give it, which is the whole problem

Automated bidding is very good at producing more of whatever you defined as a conversion. If that definition is a form submission, it will find the people most likely to submit forms.

Those are not the same people as the ones most likely to buy, and the gap between the two populations is not small in most accounts.

So a campaign can win on cost per conversion for a year while producing the worst revenue in the account, and nothing inside the platform would ever report it.

Matching leads to closed sales gives the number the bidding was never optimising for. What you then do with it — change the campaign, change the budget, or feed a better signal back — is a decision the report informs rather than makes.

Performance Max and Search should not share a ranking

A single account can run exact-match search alongside broad automated inventory, and those are different products with different buyers reached at different moments.

Reported together at the account level, the cheap conversions from one subsidise the expensive ones from the other and the average describes neither.

Where the export carries a campaign type or network, splitting on it is usually the first real finding, and it is often uncomfortable: the campaign with the best cost per conversion is frequently the one producing the least revenue.

The same applies to brand versus non-brand. Brand terms convert people who were already coming; blended into the account they make the whole thing look efficient.

Calls are conversions here and most accounts measure them badly

For services, a large share of what Google produces is a phone call, and the platform records it as a conversion the moment it lasts long enough.

Call duration is not intent. A ninety-second call can be a wrong number, a price check or a booked job, and the platform cannot tell them apart.

Using the caller's number as the lead key and the ledger as the judge replaces duration with money, which changes which campaigns look good in almost every account that tries it.

It also puts a real number on the calls nobody answered, which is usually an operational problem being mistaken for a channel problem.

What this deliberately does not do

It does not connect to your Google Ads account, and it does not write anything back into it. It reads two files you exported.

It does not claim a sale for a campaign where nothing in the file links them. A sale with no matching lead is reported as Direct / Unknown, whatever the platform would have modelled.

It does not produce a view-through or a modelled number. Every figure in the report traces to a row in a file you can open, which is the property that makes it usable in an argument.

That restraint is the point. A number you can defend to a finance director is worth more than a larger number you cannot.

Fair questions

“Google Ads already does that.” Not quite.

They say

“Google already imports offline conversions.”

We say

That is a different mechanism with different requirements, and it feeds the bidding rather than answering the question. This reads what actually closed, from files you already have.

They say

“Our conversions are calibrated with values.”

We say

Then the values came from an assumption. This compares them with the money that arrived.

They say

“We use last click and it is fine.”

We say

The model is not the issue here. The issue is that the event being modelled is a form fill rather than a sale.

Questions

Google Ads, specifically.

Something else? Ask us and a person answers.

No. It reads files you exported, and nothing is written back to your account.

Google Ads and the other product names and logos on this page belong to their owners and are shown to identify the software a file comes from. CloseRev is not affiliated with or endorsed by them, and connects to none of them: it reads a file you export.

Start today

Two exports, and you will know.

Nothing to install in Google Ads, no API key, and no need to have been tracking anything until now. Last year works as well as this month.