Placements, not applications
Rank channels by placements filled and margin earned rather than by form fills.
Marketing attribution for staffing and recruitment firms
Match filled placements and the margin they earned to the campaigns that produced the client relationship.
$549,000 61% of $900,000 paid
The blind spot
Client-side inquiries and candidate applications are measured together, produce entirely different value, and are frequently bought with the same budget.
What you get
Rank channels by placements filled and margin earned rather than by form fills.
Run over a year and every placement for a client traces to the channel that won them.
Two funnels, measured separately, because their economics have nothing in common.
A worked example
Not impressions, not leads, not cost per click. Closed revenue, by the channel that produced it, for a period you choose — with the portion we could not trace shown rather than quietly shared out across your paid channels.
| Channel | Sales | Revenue | Share | % |
|---|---|---|---|---|
| LinkedIn Ads | 61 | $297,000 | 33% | |
| Google Ads | 39 | $162,000 | 18% | |
| Email marketing | 24 | $90,000 | 10% | |
| Direct / Unknown | 74 | $351,000 | 39% |
Most staffing marketing budget produces candidate applications, because that is what job advertising does and it is easy to measure. Revenue comes from clients, and client acquisition is a slower, quieter, more expensive funnel.
Measuring both on cost per lead blends them into a number that describes neither. Ranking by placement margin separates them and usually shows that the client-side spend, which looks expensive per inquiry, produces nearly all the revenue.
The value of winning a client is every placement they make afterwards, often across years and several roles. Judging acquisition on the first placement undervalues whichever channel brings clients who keep hiring.
Because the match is on the client contact and there is no attribution window, a report run across a year credits the full placement history back to the channel that produced the relationship.
A permanent placement is one fee on one date, which is why staffing attribution tends to get written around perm. Contract and temporary revenue behaves nothing like that. A worker starts on Monday, the timesheet bills weekly, and the assignment runs for seven months or three years. If the export carries only a placement date and an estimated fee, most of the revenue a channel produced is simply missing from the report, and the channels that specialize in contract clients look worse than the ones that do not.
Exporting billed revenue rather than placements corrects it. Each week, month or invoice period becomes a row against the same hiring contact, and every one of them credits the channel that won the client. A campaign that produced two contract clients in January can then be read against what those clients billed by December, which is normally a different number by a large multiple from the one January's report showed. The gap widens the longer the range, which is why a contract-heavy firm should never judge an acquisition channel on a single quarter's figures.
It also makes the perm-versus-contract comparison honest. Perm fees arrive early and look impressive on a quarterly slide. Contract margin arrives slowly and compounds quietly. Ranked on the same axis across a full year, the channels producing contract clients can overtake the ones producing perm, which would mean the two had been funded as though they were the same activity with the same payback. A column naming the placement type, mapped as Product / service, is a five-minute change that shows perm and contract revenue as separate lines, with how much of each traces to a channel.
Most staffing firms spend more on job boards, database access and professional network seats than on advertising, and that spend gets renewed on usage statistics: profiles viewed, applications received, postings live. None of those numbers touch revenue. The renewal conversation therefore happens every year without anybody in the room able to say what the subscription produced in placement margin, which is the only figure that would settle it. The awkwardness is not that the data is missing. It is that the usage report and the revenue report have never once been put on the same page.
Any of those tools that can export a list of people with contact details can go into the lead file, tagged with the tool as its source, and it is then ranked on margin next to everything else you fund. Where the tool is candidate-side, the honest answer is often that it produced very little client revenue directly. That is not the same as saying it is worthless — it is saying it belongs in the fulfilment budget rather than the acquisition one, which is a different conversation with different people.
Making that split explicit in the export is worth the effort. A column naming which side of the business a row belongs to, mapped as Product / service, separates client revenue from candidate-side revenue in the breakdown, and in many firms those two are funded from one pot while obeying completely different economics. A blended cost per lead across both is probably the single most misleading figure this industry reports to itself. It also hides the effect that matters most: candidate supply is a cost of delivery while client demand funds the desk, and a source can be excellent at one and useless at the other.
Permanent fees are not final when they are invoiced. A candidate resigns inside the guarantee period, a rebate is issued, and the fee is partly or entirely reversed. Firms that report on invoiced fees carry those reversals as a separate line somewhere in finance and never propagate them back into the marketing view, so a source producing placements that do not stick keeps its position at the top of the table indefinitely. Nobody intends this. The reversal happens in a different system, weeks later, and by then the marketing report for that month has been circulated and filed.
Exporting net fee income instead — what survived after rebates and credit notes — reorders things. Retention differs by client type, client type differs by channel, and the effect is large enough that this is not a rounding adjustment. A source producing price-sensitive clients with heavy fallout can look like the best performer on gross fees and a poor one on what the firm actually kept at year end. Contract books have their own version of the same problem, where an assignment ends early and the revenue everybody forecast never bills at all.
Whichever figure is chosen, the discipline is to keep it consistent across every period being compared. Gross fees in one year and net in the next produces a trend that is entirely an artefact of how the file was built. Deciding once, writing the decision down where the next person will find it, and using the same column every time is the least interesting part of this exercise and the part that most often determines whether anyone believes the output.
Why it matters
"We generated 400 leads" invites an argument. "This channel closed $186,400 last quarter, here is the reconciliation" ends one. The teams that can show closed revenue by channel are the teams that get the next increase approved, because they are asking with evidence rather than with conviction.
Killing spend is politically harder than adding it, because someone always owns the channel being cut. A number that reconciles to the sales export takes the argument out of the room — you are not overruling a colleague's judgment, you are reading the same ledger they are.
Platform-reported conversions do not reconcile to revenue, and eventually someone in finance notices. Reporting built from your own closed-sales export starts from the number finance already trusts, which is why it holds up when it is checked.
Because this reconciles exports rather than tracking visitors, it works on months that have already closed. You are not instrumenting now to learn something in ninety days — you can answer for last quarter today, which is usually when the question is being asked.
Honest answers
Export the client side — filled placements with the hiring contact, the margin or fee, and the date. Candidate data is not needed and should not be included.
It lands in Direct / Unknown, which is honest, and its size is a finding in itself. In this industry it is usually the largest single bucket.
Which is exactly why ranking on margin rather than placement count matters — export the figure your team plans on and keep it consistent.
Pricing
The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Enterprise usually fits staffing firms and recruitment agencies — ten seats for the team and the highest monthly record allowance, since a year of closed deals is a lot of rows.
One business closing at volume
$499/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Filled placements: a hiring-contact email or phone, the fee or margin, and the placement date.
Whichever your team plans on. Keep it consistent across periods so comparisons hold.
Yes, and you should — map a side column as Product / service and the report shows client-side and candidate-side revenue separately, with how much of each traces to a channel.
Yes, with a discipline column. Perm and contract behave very differently.
Run the report over a longer range and every placement for a client traces back to the channel that won them.
No. Existing lead exports work as the second file.
Yes. The limit is how far your own exports reach, not how long some identifier survived.
Placement rows analyzed in a calendar month. Candidate and lead rows do not count.
Yes. Export each billing period as its own row against the hiring contact and the whole assignment credits the channel that won the client. Aggregating by client and month works equally well if the row count would otherwise be large.
Net fee income is the more honest ranking, because fallout is not spread evenly across channels. Whichever you choose, use the same basis in every period you compare, or the trend will be the export changing rather than the business.
Yes, if they export a list of contacts. Each goes into the lead file tagged with its source and is ranked on placement margin beside your advertising, so a renewal can be argued against revenue instead of usage statistics.
Placements at the new employer will not link to the old inquiry and land in Direct / Unknown. That is the honest reading, and carrying a company column makes such cases easy to spot and confirm by hand.
No, and you should not. The client side carries the revenue: a hiring contact, an amount and a date. Leaving candidate records out of the export is simpler to produce and better data practice at the same time.
Yes, with an office or branch column. Desk economics vary enough between locations that a firm-wide average tends to describe none of the offices it was calculated from.
Nearby
Match retained matters and fees to the inquiries and campaigns behind them, on both the claimant and employer side.
See how it worksMatch closed-won opportunities in your CRM to the campaigns that produced the original inquiry — across a cycle measured in quarters, not sessions.
See how it worksAttribute the revenue your agents closed to the campaigns that produced the calls — per client and per program, each client kept apart.
See how it worksWhere your sales already are
Export closed-won deals and reconcile them against your ad and call exports, including the offline sources HubSpot never receives.
What to exportExport won opportunities, upload the sources that produced the leads, and rank channels on closed value rather than on lead volume.
What to exportExport deals and leads from your boards, reconcile them once in the file, and get a single revenue-by-source answer.
What to exportExport won opportunities and leads from Copper, join them on the contact detail, and recover how the relationship actually started.
What to exportFrom the blog
A multi-location business that reports one national attribution number is hiding its most important finding. The same campaign performs differently in every market, and the aggregate is an average of things that should never have been averaged.
Read the articleFranchisees pay into a national marketing fund and receive a report about impressions. Attribution turns that relationship from a matter of faith into a matter of record — which is exactly why some franchisors are in no hurry to build it.
Read the articleEvery agency eventually meets the client whose sales director says the leads are rubbish. More dashboards will not fix it. What fixes it is measuring on the client's own revenue data — which is the one thing most agencies are structurally reluctant to ask for.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.