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 HighLevel

The client did not hire you for opportunities. They hired you for sales.

Export leads from the client's sub-account, get the client's invoices, and report revenue by source that the client can check against their own books.

No API key Nothing to install in HighLevelNothing to install No card requiredNo card

HighLevel sits on both sides for an agency — it captures the leads and tracks each client's pipeline — while the client's actual revenue lives in the client's own invoicing system. CloseRev joins the agency's lead export to the client's invoice export on the contact detail and reports revenue by source per client. For an agency the result is a number the client can verify against their own books, rather than a count of opportunities the agency marked won. Revenue with no traceable lead is reported as Direct / Unknown.

Last checked against HighLevel's own documentation on September 25, 2026.

The gap

The monthly report shows leads, appointments and pipeline, and the client keeps asking what any of it was worth.

HighLevel 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

    Contact phone or email

    On the contact in the client's sub-account. It is what joins your leads to the client's invoices.

  2. Needed

    Source and campaign

    How the contact first arrived, from the forms, funnels and tracking the agency set up.

  3. Needed

    Contact created date

    When the lead arrived, so revenue can be grouped against the month the agency's work produced it.

  4. Needed

    Client invoices (from the client)

    Customer contact detail, amount and date from whatever the client bills from. This is the half the agency does not have.

Step by step

Getting the file out of HighLevel.

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

  1. Export the contacts from the client's sub-account

    One row per contact with the contact detail, source, campaign and created date.

  2. Ask the client for an invoice export

    Contact detail, amount, date. It is the only half that says what the leads were worth, and it is the client's own record.

  3. Keep every client separate

    Never pool sub-accounts. Each client is its own file with its own window.

  4. Choose a window that fits the client's sale

    Days for a trade, months for a considered purchase. Agree it with the client before the first report.

  5. Upload both

    The join runs on the phone and the email, normalised, and the report shows revenue by source for that client.

What comes back

The page HighLevel 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 Marketing Agencies page — not from a HighLevel account.

Traced to a channel$326,20077% of $423,600
Sales matched128 of 172high confidence only
Average sale$2,460per paid sale
ChannelShareSalesRevenue
Google Ads61$186,400
Meta Ads48$93,200
Email marketing19$46,600
Direct / Unknown44$97,400

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 client sale and the ad share a row.

An opportunity marked won is the agency's record, not the client's

Pipelines in a CRM move when somebody moves them. In an agency-run account that is sometimes the client's staff and sometimes nobody, and a won stage can mean a booking, a quote or a sale.

Reported to the client, it is a claim about their business made from inside the agency's tool.

The client's invoices are a record they created themselves, for their own reasons, and they are the one number the client will not argue with.

Matching the agency's leads against those invoices gives revenue by source that the client can reconcile to their own accounts.

That is a harder report to produce and a much easier one to renew a retainer on.

Web tracking sees the web, and the client's phone rings too

Attribution inside a marketing platform comes from what it can observe: forms, funnel pages, tracked numbers and the parameters on a landing page.

Customers who call the client's main line, walk in, or reply to a text from their own phone are invisible to it, and some of them came from the agency's work.

Matching on the customer rather than on the session catches the ones whose contact detail appears in the lead file, however they eventually got in touch.

Whatever still cannot be matched is reported as Direct / Unknown, which is honest and is also a useful number to show a client: it is the part nobody can attribute, including the agency.

Every client is its own file

An agency may run dozens of sub-accounts with different sales cycles, prices and definitions of a sale.

Pooling them to show an agency-wide result produces an average that describes no client and invites the question of which client is subsidising which.

The report is built per client, with the window, the revenue basis and the sources agreed with that client.

That also makes the method explainable in the client meeting: two files, joined on the customer, with everything unmatched shown.

Speed to lead is where agencies and clients disagree most

Agencies generate leads and clients follow them up, and when results disappoint each tends to blame the other.

Because the lead file carries the time each lead arrived and the invoice file the sales that followed, the report can show whether leads contacted quickly closed at a different rate from leads contacted late.

Where they did, the conversation moves from whose fault it is to what the client's team can change, which is usually a better conversation for everyone.

It is one of the few things an attribution report can do for the relationship rather than just the budget.

Fair questions

“HighLevel already does that.” Not quite.

They say

“HighLevel already has attribution reports.”

We say

On what it can observe — the web and tracked numbers. The client's invoices are the part it does not see.

They say

“Our clients will not share invoices.”

We say

Some will not. The ones who do get a report they can check, and that tends to be the account that renews.

They say

“We report opportunities because that is what we control.”

We say

That is fair, and it is also why clients discount it. Revenue is the number they are paying for.

Questions

HighLevel, specifically.

Something else? Ask us and a person answers.

No. It reads exported files, so your sub-accounts, funnels and automations stay where they are.

HighLevel 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 HighLevel, no API key, and no need to have been tracking anything until now. Last year works as well as this month.