“We are too small for this.”
The smaller the team, the larger the share of the budget a single wrong call wastes. Starter pricing exists for exactly this size and the work is two uploads.
For Jobber
Export paid invoices and match them to the campaigns that produced the customer — including the recurring work that follows.
No API key Nothing to install in Jobber No card required
The gap
You are a small team with a real ad budget and no analyst. Jobber tells you what you earned; it cannot tell you which advertisement earned it.
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.
The client record attached to the invoice. Either works; both is better, because a household often calls from one number and pays from another address.
What was actually billed. If you work from quotes, use the invoice — the two differ most on the jobs worth measuring.
Whichever your bookkeeping uses. Keep it consistent between uploads.
Lets a one-off clean be judged separately from a recurring contract.
Step by step
Written for somebody with Jobber open in the next tab. Report names vary by edition, so each step says what to look for.
You want a list of billed work with the client's contact detail on each row. Jobber's reporting is exportable, and the shape you need is the ordinary billed-work list rather than anything specialised.
Recurring clients and seasonal trades both need more than a quarter before a pattern is legible.
A phone number or an email is what makes the row matchable. Without it the file is an accounting record and nothing else.
Mapping is suggested and you confirm it. Manual mapping is always available and is the fallback whenever a header is unusual.
Google Ads, Local Services, Meta, or a call tracking export. Any of them is enough to start; more is better.
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 Landscaping & Lawn Care page — not from a Jobber account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 148 | $116,000 | |
| Local service ads | 94 | $72,000 | |
| Meta Ads | 41 | $32,000 | |
| Direct / Unknown | 229 | $180,000 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A twelve-person landscaping company spends real money on search ads and has nobody whose job is to evaluate it. The owner sees a monthly ad bill and a monthly revenue figure, and the relationship between them is a matter of opinion. That is not a reporting gap anybody chose — it is what happens when the two facts live in different systems and joining them by hand takes an afternoon nobody has.
That is the exact job this does, and it does it from files that already exist. There is nothing to install on a website, no tag to maintain, and no dependency on anybody remembering to ask a caller how they found you.
The output is one page: channels ranked by the revenue they actually produced, the number of jobs behind each, and an honest count of the work that could not be traced to any channel.
Jobber's core strength is repeat and recurring work, which is also where marketing measurement usually breaks. A lawn maintenance client at two hundred dollars a visit, twenty-six visits a year, for three years, is a five-figure customer. The advertisement that produced them is scored against the first visit.
Because the match is on the client rather than on a job, every later invoice against that client credits the channel that produced them. A channel that brings recurring clients and one that brings single call-outs stop looking alike, and in practice that reverses the ranking often enough to be worth running once whatever you conclude.
Nothing is forecast. Only invoices that have actually been raised count, so the figure is one you can reconcile against your own books rather than a projection of what a client might be worth.
Trades on Jobber are frequently seasonal in a way that makes month-on-month comparison meaningless: spring clean-ups, summer pest pressure, autumn gutter work. A channel that looks strong in May and weak in November may simply be a channel that sells a May service.
Uploading two or three years lets the report compare the same weeks across years instead of consecutive months. That is usually the difference between a chart somebody argues about and a chart somebody acts on.
You do not have to connect Jobber to anything, grant API access, or upgrade a plan to get an integration. The input is a CSV you can export today and open in a spreadsheet to check before you send it.
You also do not have to have been tracking anything until now. Because this works from records kept for billing rather than from a tag that had to be present at the time, last year is as analysable as this month.
Two things surprise most owners on the first run. The Direct and Unknown bucket is larger than expected — commonly a third or more — because repeat customers and word of mouth genuinely are a large share of a small trade's revenue, and nothing traces them to an advertisement.
The second is that the channel with the most jobs is rarely the channel with the most revenue. Cheap clicks bring small jobs. That is not a failure of the advertising; it is what those keywords are. Knowing it lets you bid differently rather than switching the campaign off.
Neither finding is a reason to stop advertising. Both are reasons to stop guessing which part of the budget is doing the work.
Fair questions
The smaller the team, the larger the share of the budget a single wrong call wastes. Starter pricing exists for exactly this size and the work is two uploads.
Then the report will show a large Direct bucket, honestly, and you will be able to size the ad budget against that rather than against a guess.
Not required. The ad platform export alone works; call tracking adds the phone side if you ever add it.
Billed invoices or jobs: a client phone or email, the amount, and a date.
Invoices. A quote is not revenue, and quote-to-invoice conversion differs sharply by channel — which the report will show you if you upload both.
Yes, and it credits the channel that produced the client originally rather than counting as a new acquisition each visit.
Yes, with a service or job type column.
A year at minimum. Two or three if your trade is seasonal, so the report can compare like seasons.
No. Nothing goes on your website and nothing connects to Jobber. It is a CSV upload.
Yes, if both the enquiry file and the invoice file are uploaded.
Upload the marketplace's lead export as a source file and it ranks against your own channels on revenue.
They are reported as Direct / Unknown rather than assigned to a paid channel.
Encrypted in transit and at rest, isolated per workspace, deletable in one click, DPA available.
Yes, if you upload more than a year. Recurring revenue is attached to the client, so a channel's clients can be compared on what they billed over time rather than on a first job.
Yes. Upload the marketplace's lead export as a source file and it is ranked on revenue beside your own campaigns.
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.
Jobber 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 Jobber, no API key, and no need to have been tracking anything until now. Last year works as well as this month.