“Angi already shows how many leads I got.”
It does, and that is the half it can see. Your invoices are the half that says what those leads were worth.
For Angi
Export your Angi leads, match them against the jobs you invoiced, and find out what a won job actually cost.
No API key Nothing to install in AngiNothing to install No card requiredNo card
Angi sits on the lead side in CloseRev: export the leads it matched you to — each carries the homeowner's contact details and a date — and match them against the invoices in your own system. Angi's own help pages describe a fee for each lead you are matched to, with no dependence on whether you win the job, so its reporting describes the half of the transaction before the money. Revenue with no traceable lead is reported as Direct / Unknown.
Last checked against Angi's own documentation on September 25, 2026.
The gap
The monthly statement lists every lead. Nothing lists which of them became work.
What was sold, to whom, and for how much.
The click, the keyword, the call, and what each one cost.
The file
Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.
On each lead record. It is what joins the lead to the customer in your own job or invoicing system.
When it arrived and what the homeowner asked for. Fees differ by job size, so the category matters to the cost side.
What the lead cost you. Kept per lead, so cost per won job can be computed exactly rather than estimated.
Whether you disputed the lead. A credited lead cost nothing and should not count against the channel.
Step by step
Written for somebody with Angi open in the next tab. Report names vary by edition, so each step says what to look for.
One row per lead with the homeowner's contact detail, the category, the date and what it cost.
From your field service or accounting system: customer contact detail, amount, date.
They are paid for. Leaving them out is how a marketplace comes to look cheaper than it is.
Days for a repair, weeks to months for a replacement or a remodel. Set it before you look.
The join runs on the phone and the email, normalised, and the report divides what you paid by the jobs you won.
What comes back
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 Angi account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 54 | $218,600 | |
| Meta Ads | 29 | $66,500 | |
| Email marketing | 17 | $38,000 | |
| Direct / Unknown | 71 | $152,100 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
Angi's own help pages for pros describe the pricing plainly: a fee for each lead you are matched to, varying with the size of the job. Nothing in that depends on whether you win it.
That is not a criticism. It is what the product is, and it means every figure the platform reports describes what happened before the homeowner chose anybody.
The number a business actually runs on — what a won job cost — needs the other half: the invoices, which live in your system and not in theirs.
Matching the two turns a cost per lead into a cost per job, and the ratio between them is the whole story of whether the channel pays.
A cost per lead that looks reasonable and a win rate of one in eight is an expensive channel. Neither figure alone would have said so.
Angi's shareholder letter for the fourth quarter of 2024 described a change: from the end of January 2025, homeowners across its channels choose the providers they are matched with, where some requests had previously been matched automatically.
Whatever that did to any individual account, it is a reminder that a marketplace's product changes underneath the pro buying it, and a lead in one year is not necessarily the same object as a lead the year before.
Comparing this year's cost per lead with last year's is therefore not quite comparing like with like, and it can move for reasons that have nothing to do with the pro's own work.
Cost per won job survives that kind of change better, because it is measured at the invoice rather than at the platform's definition of a lead.
It is also the only figure a pro can compare honestly against a search advert or a van decal.
Marketplaces generally have a process for leads that were wrong — a bad number, a job outside the area, a duplicate — and a credited lead cost the pro nothing.
Counted as a paid lead, it inflates the channel's cost; dropped silently, it hides how often the product sends something unusable.
Keeping the dispute status as a column lets the report compute cost per won job on what was actually paid, and report the dispute rate as its own number.
That dispute rate is worth watching over time. It is the closest thing to a quality measure the pro controls, and it is the first figure to move when a category's lead quality drifts.
A homeowner requesting a quote is usually contacting several businesses, and the first to call back has an advantage nothing else in the process gives.
Because the lead file carries the time the lead arrived, and the invoice file the jobs won, the report can show whether leads reached quickly closed at a different rate from leads reached late.
Where they do, the channel is not the problem; the response time is, and the fix is a staffing or a notification setting rather than a budget change.
It is the most common reason a marketplace is cancelled for poor results that were really the pro's own follow-up.
Fair questions
It does, and that is the half it can see. Your invoices are the half that says what those leads were worth.
Then divide it by your win rate. Cost per lead and cost per won job can differ by a factor of ten.
Nobody can. The report shows what matched, what did not, and never assigns a job to a lead that the file cannot connect.
No. It reads a file you exported, so your account and your profile are never reachable from here.
Your leads with the homeowner's contact detail, category, date and fee, plus invoices from your own system.
So cost per won job is computed from what you actually paid rather than estimated from a monthly total.
Yes. You paid for them, and leaving them out makes the channel look cheaper than it is.
Keep them, flagged. A credited lead cost nothing and should not count against the channel, and the dispute rate is worth tracking on its own.
Yes, on cost per won job, which is the one figure every channel can be put on.
Long enough for the job type — days for repairs, months for replacements. Set it before you look at the results.
Often more than the channel does, and the report can show it because both files carry the dates.
Yes. Fees and win rates both differ by category, and a blended figure hides the ones that pay.
Any invoice with no matching lead from any source. Its size is stated rather than distributed.
A contact detail, a category, a date and a fee on one side; a contact detail, an amount and a date on the other. No addresses required, no messages, no reviews. Encrypted in transit and at rest and deleted with the import.
Cost per won job and revenue per lead, split by category, disputes shown, response time where the dates allow, and everything unmatched kept visible.
By trade
What the report looks like once the export is in, written for each one.
Other systems
Running more than one system, or comparing? The method is the same and the columns are not.
Angi 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
Nothing to install in Angi, no API key, and no need to have been tracking anything until now. Last year works as well as this month.