Skip to main content
Free 3-min audit: how tech-mature is your agency? Start the audit
Staffing 10 min read

Recruitment marketing ROI for agencies: campaign attribution worksheet

A copyable worksheet to measure recruitment marketing ROI: attribute placements to campaigns, split candidate and client cost, and reconcile realized fees.

Pierre-Alexis Ardon
Pierre-Alexis Ardon Co-founder
Updated
Adrien Tedjirian Dolihane Feddag Louis de Froment
Trusted by 400+ recruiting agencies
4.9 Rated on G2
Recruitment marketing ROI campaign attribution worksheet for a recruitment agency

Your agency spent money last quarter on job ads, a client webinar, and a salary guide. Which of those actually paid for itself in fees? And how do you prove it without counting the same placement twice?

Recruitment marketing ROI answers that. This guide gives you a copyable worksheet and one worked example you can reproduce line by line. It sets an attribution rule you can defend to a partner. It also handles the messy cases most guides skip: a missing source, a refund, and a placement two campaigns both want to claim.

What recruitment marketing ROI actually answers for an agency

Recruitment marketing ROI is a ratio of realized value to spend. For a desk, the value is fee contribution. The spend is what a campaign cost you to run. So the number answers one thing: for every euro or dollar put into a campaign, how much fee came back?

That is narrower than the base recruitment ROI formula, which weighs the whole cost of a hire against its value. Here you are judging marketing spend alone, campaign by campaign, not the full search.

Split spend into two jobs from the start. Candidate acquisition spend attracts people to your live roles: sponsored job ads, a paid social post, a referral push. Client acquisition spend wins new mandates: a BD email nurture, a webinar, a market report.

The two do different work, so you measure them apart. A campaign that fills a role you already had is not the same as one that lands a brand new client.

Set your attribution rule before you spend a euro

Attribution is where most ROI math falls apart. A candidate sees an ad, downloads a guide, then replies to a recruiter three weeks later. Which campaign gets the credit? If you let every touch claim the fee, your numbers add up to more placements than you made.

Fix one rule and use it every time. Credit each placement to its source touch, the first campaign-tagged interaction that brought the candidate or client into play. Set a window around it, say 90 days from source touch to placement, so a campaign from last year cannot claim a win it did not cause.

When several campaigns touch one deal, credit only the source. Record the others as assists. An assist means the campaign helped, so you keep it visible, but it carries no fee.

This is the rule that keeps you honest. One fee goes to one source campaign, and it never appears in a second row. Assists tell you which campaigns support the funnel. They do not get to bill for it.

The campaign attribution worksheet, column by column

The worksheet is one row per campaign and a short set of columns. Here is what each column holds and why.

Campaign is the name of the spend. Type is candidate acquisition or client acquisition, so you can read the two jobs apart later. Spend is the tracked cost of the campaign for the period, media plus any tooling or content cost you can attribute to it.

Sourced in-window lists the placements whose source touch belongs to this campaign, inside your window. Won fee attributed is the sum of those placement fees. Refund or replacement adjustment subtracts any fee you had to give back or rework under a guarantee. Realized contribution is won fee plus that adjustment, so it reflects money you actually kept.

ROI on realized is the payoff: realized contribution minus spend, divided by spend, times 100. Two guards matter. If a campaign has no tracked spend, do not compute an ROI, because you would divide by zero. Report its contribution and leave the ratio blank. If a placement’s source is unclear, do not force it onto a campaign. Hold it in an unattributed bucket so no row is inflated.

A worked example: one quarter at a hypothetical six-desk agency

Every number below is illustrative, chosen so you can reproduce the math on your own desk. Nothing here is a benchmark or a promise.

Picture a six-desk agency running three campaigns last quarter. Campaign A is sponsored job ads plus a paid candidate post, a candidate acquisition play, and it cost 4,000. Campaign B is a business development email nurture with one client webinar, a client acquisition play, and it cost 3,000. Campaign C is a salary-guide landing page, content built mostly to assist, and it cost 1,500.

Four placements closed in the quarter. Placement one billed a 16,000 fee. Its candidate came through Campaign A, for a client you already had. Placement two billed 12,000, again a candidate from Campaign A. Placement three billed 20,000: a new client won through the webinar in Campaign B, then filled from your own database.

Placement four billed 14,000. Its source touch was a recruiter’s own manual follow-up. Campaign A retargeting and Campaign C content only assisted.

Apply the source rule. Placements one and two go to A. Placement three goes to B. Placement four has no clear campaign source, so it stays unattributed rather than being handed to A or C on a guess. One more event: the placement two candidate left inside the replacement guarantee, and a partial refund of 6,000 came off that fee.

CampaignTypeSpendSourced in-windowWon fee attributedRefund/replacementRealized contributionROI on realized
ACandidate acquisition4,000P1, P228,000−6,00022,000450%
BClient acquisition3,000P320,000020,000567%
CContent assist1,500none000−100%
Unattributedn/a0P414,000014,000not a campaign ROI

Read the rows. Campaign A booked 28,000 across two placements. It gave 6,000 back on the guarantee, so it kept 22,000. Its ROI is (22,000 − 4,000) ÷ 4,000 × 100, which is 450%.

Campaign B kept its full 20,000 against 3,000 of spend. That is (20,000 − 3,000) ÷ 3,000 × 100, or 567%. Campaign C sourced nothing in the window, so it shows a −100% return for the quarter, even though it assisted placement four. That is honest, not a mistake. Content often assists before it sources.

Now check that the totals add up. Attributed and unattributed won fees are 28,000 plus 20,000 plus 14,000. That is 62,000, the true sum of the four placement fees. No fee sits in two rows.

Want one blended figure for paid campaigns? Take the realized contribution from A and B, 42,000, against all campaign spend of 8,500. That is a blended ROI of about 394%. Campaign C’s spend stays in the denominator on purpose, because you spent it.

Handling the messy cases: missing source, refunds, and double-counted placements

Three cases break naive spreadsheets. The worksheet handles each with a rule you saw in the example.

A missing or unclear source is placement four. The temptation is to give it to the biggest-spend campaign, or to split it. Do neither. Hold the fee in an unattributed bucket. You lose a little tidy attribution, but every campaign ROI you report stays defensible.

If that bucket grows over a few quarters, that is your signal to tag source touches better, not to guess harder. Tighter tagging at the top of the funnel is often the same work as spotting where sourced candidates stall, which your sourcing scorecard already tracks.

A refund or replacement is placement two. Booked fees flatter you. A guarantee that triggers takes real money back. So keep the booked figure visible in its own column, but compute ROI on realized contribution, after the adjustment. A campaign that books big and refunds often is worth less than its headline fee suggests, and only the realized column shows it.

A double-counted placement is the quiet one. It happens when two campaigns both touched a deal and you let both carry the fee. The one-fee-to-one-source rule stops it.

Placement four could have been credited to A for its retargeting and to C for its content. Instead it went to neither, because neither was the source. Both are logged as assists with no fee. Assists still earn their place. If Campaign C keeps assisting placements it never sources, that is a reason to keep funding it, made without inflating its ROI.

Realized return is not a forecast, so keep them in separate columns

The worksheet above measures the past: fees you closed and kept. It is tempting to bolt your open pipeline onto the same total. Resist that. A forecast and a realized return are different claims, and mixing them hides how much of your number is still a maybe.

Keep the forecast in its own small table. For each open mandate a campaign sourced, write the expected fee, the stage, and a win probability. Then multiply fee by probability. One 18,000 mandate at a 60% probability is worth 10,800 in expected value, not 18,000.

Sum those for a probability-weighted pipeline, and label it clearly as forecast. The recruitment ROI guide walks through this weighting in full if you want the method.

The rule is simple. Realized ROI and forecast ROI never share a cell. When a mandate closes, its fee moves out of the forecast and into the realized worksheet under its source campaign. Until then it stays a weighted guess. That discipline is the difference between a number you can defend and one that quietly counts the same win twice, once as a hope and once as a fact.

Keep the ledger where your records already live

You can run this worksheet in a spreadsheet, and many agencies start there. The friction is that the inputs live somewhere else, in your CRM, and you end up copying fees and stages across by hand every quarter.

It reads more cleanly when the ledger sits next to the records. In Leonar’s Companies and Deals workspace, each deal already carries an amount, an expected close date, a win probability, and a status. Point the amount at the placement fee and the probability at your stage odds. Add a tag or custom field for the source campaign.

Your placements live in the project pipeline. So the join between a won deal and its campaign is a filter, not a fresh export.

Be clear on what stays manual. Leonar does not run native multi-touch attribution or campaign ROI reporting. It does not decide a placement’s source for you. You set the attribution rule, you tag the source, and you run the math. The CRM keeps the inputs in one place, and its deal analytics roll expected revenue up by stage and owner. The worksheet stays yours.

Want to see how the Companies and Deals records map to this ledger on your own pipeline? Our tools built for recruitment agencies walk through it. Every plan sits on the pricing page with a seven-day trial.

Start with last quarter. List your campaigns, split them into candidate and client acquisition, apply the source rule to each closed placement, and reconcile to your total won fees. The first pass takes an afternoon. After that, it is the fastest honest answer you have to the question every agency owner asks: which marketing spend is actually worth repeating?

Frequently asked questions

What is recruitment marketing ROI?

Recruitment marketing ROI is the realized fee contribution a marketing campaign produced, measured against what the campaign cost. For an agency it answers one question: which spend produced fee-paying placements, and did that fee beat the spend? The formula is (realized contribution minus campaign spend) divided by campaign spend, times 100. Realized contribution means fees you actually kept, after refunds or replacements, not fees you booked and might give back.

How do you attribute a placement to a marketing campaign?

Pick one rule and apply it every time. Credit the placement to the campaign that produced its source touch, the first campaign-tagged interaction that brought the candidate or the client into play. Set a window, for example 90 days from that touch to the placement, so old activity does not claim recent wins. If several campaigns were involved, credit only the source and log the others as assists. One fee goes to one source campaign, never split across rows.

What is the difference between a source touch and an assisted touch?

The source touch is the first campaign interaction that started the relationship: the ad the candidate answered, or the webinar where the client first raised a role. An assisted touch is any later campaign interaction that helped but did not start it, like a retargeting ad or a content download along the way. You attribute the fee to the source. You record assists so you can see which campaigns support the funnel, but you never add their fee, or you would count one placement twice.

How do you avoid double-counting a placement across campaigns?

Use the one-fee-to-one-source rule. Each placement has exactly one source campaign that carries its fee. Every other campaign that touched it is logged as an assist with no fee attached. When the source is unclear, hold the fee in an unattributed bucket rather than guessing a campaign, so no row is inflated. This keeps your totals reconciling to the true sum of won fees for the period.

Does Leonar calculate recruitment marketing ROI automatically?

No. Leonar does not run native multi-touch attribution or campaign ROI reporting. It holds the records the worksheet needs: Companies and Deals carry the amount, expected close date, probability and status, Projects hold the placement, and a tag or custom field can record the source campaign. You run the attribution math yourself against those records. The worksheet is manual work; the CRM keeps the inputs in one place instead of a spreadsheet you rebuild each quarter.

Not sure which plan fits your team?

Answer 3 quick questions and we will recommend the best option for your hiring workflow.

roi metrics staffing recruitment agency
Pierre-Alexis Ardon

Author

Pierre-Alexis Ardon

Co-founder

Pierre-Alexis Ardon is co-founder of Leonar, where he focuses on building AI-powered recruiting systems, assisted sourcing, and search optimization. With a background in engineering and over 7 years working at the intersection of artificial intelligence and talent acquisition, he designs the algorithms that power Leonar's candidate matching and workflow assistance. Pierre-Alexis advises recruitment agencies on their digital transformation and regularly publishes analyses on how AI agents are reshaping HR workflows. He is passionate about making advanced technology accessible to recruiters who are not engineers.

AI recruiting systems Sourcing automation Recruiting analytics AI agents for HR
LinkedIn

Used by 300+ high-growth recruiting teams and agencies globally

  • Robert Half logo
  • Lemon.io logo
  • Glorium Technologies logo
  • Talent Solvers logo
  • 1871 Advisors logo
  • BCI logo

Streamline your recruitment with AI & automation

Join 400+ recruiting teams already using Leonar to source, engage and hire faster.

7-day free trial with full access

7-day free trial Full feature access Cancel anytime