Recruitment Pipeline Tracker
Track every candidate through every vacancy, see where the pipeline is stuck, and work out your real time to hire, offer acceptance rate and cost per hire. Runs entirely in your browser — nothing is uploaded.
Version 1.0.0 · Updated Aug 5, 2026
Overview
How to use Recruitment Pipeline Tracker
The complete in-tool guidance, reproduced here so you can read it before you download.
What this tool does
CM8-24 is a hiring pipeline for a small HR team, or for a manager doing their own recruiting with a spreadsheet and a memory. One row is one candidate for one vacancy. It shows you where everybody stands, which candidates have gone quiet, how long hiring actually takes, which sources are worth paying for, and what your agency fees come to per hire.
Everything runs inside this one file. There is no account, no upload and no network request of any kind, so candidate names, salary expectations and your notes about them never leave this computer. That matters more here than in most tools: a recruitment file is full of personal data about people who do not work for you and may never do.
What to record
Add a candidate when you decide they are worth tracking. If you log every CV that arrives, the register fills with people you never contacted; if you only log the final two, the numbers stop meaning anything. Most small employers settle on "everyone who got past the first read". Whatever you choose, be consistent — the conversion rates compare sources against each other and only work if every source is logged the same way.
The date applied starts the clock and drives every date filter and the monthly chart. Spell the vacancy the same way every time: the summary groups on that text exactly, so "Field Service Engineer" and "Field service eng." come out as two separate roles. The candidate field takes a reference instead of a name if you would rather not hold names. Every candidate also carries a stage and a stage date — the point they have reached and the day they reached it. Update both when something happens.
The stages
Nine stages, in order: applied, screening, first interview, second interview, assessment, offer, hired — and two ways out, rejected and withdrawn. Rejected means you stopped; withdrawn means they did. Keeping them apart matters: a pile of withdrawals is a problem with your process, your pay or your speed, and it will not be fixed by looking at more CVs.
Skip stages you do not use — a warehouse vacancy that runs a screen, a trial shift and an offer never touches the two interview stages, and the funnel shows them as zero. The tool refuses two combinations that quietly ruin the numbers: a candidate marked hired with no date hired, and a date hired against a candidate who is not marked hired.
Reading the funnel
The first chart counts candidates by the stage they are at now, in stage order. It is a snapshot, not a true funnel, and the difference is worth understanding.
A real funnel shows how many people passed through each step: 40 applied, 18 were screened, 9 were interviewed, 3 were offered, 2 were hired. This tool holds one current stage per row, so somebody you hired is counted only under Hired, even though they went through screening and two interviews on the way. Read the chart as "where is everybody today", which is what you need when you are running a live pipeline, and use the rejected and withdrawn bars as your drop-out count.
If you need a true funnel, record the stage-by-stage history somewhere that keeps history — this tool deliberately does not, because a register you have to update in five places is a register nobody updates at all.
Time to hire
Every candidate gets a days-in-process figure. Which end date is used depends on where they are:
Days in process = end date − date applied end date = date hired (if hired) · stage date (if rejected or withdrawn) · today (if still active)
Using the stage date for a closed candidate stops rejections from ageing forever and quietly inflating your averages six months after everyone forgot about them.
The headline average uses hired candidates only. Nothing else is in it — not rejections, not withdrawals, not the four people still sitting in the pipeline:
Average days to hire = Σ (date hired − date applied) ÷ number of hires
This is the figure people quote and it is easy to get wrong. Averaging every candidate's days in process would mix a two-day rejection with a sixty-day hire and produce a number that describes nothing. Averaging only closed candidates would let a fast rejection flatter you.
Because a single unusual hire can dominate a small average, the tile shows a dash until you have at least the number of hires set on the Settings tab. Raise or lower that threshold to suit how much you hire. The by-role chart prints the number of hires behind each bar for the same reason: one hire is an anecdote.
Offer acceptance rate
Offer acceptance is the sharpest single number in recruitment. A low rate means your pay, your speed or the way the job is described is out of step with the market, and no amount of extra advertising will fix it.
Offer acceptance rate = hires ÷ offers made × 100
The denominator is the hard part, and here is exactly how it is counted, limitations included:
Offers made = candidates at the offer stage + candidates hired + candidates rejected or withdrawn who have an offered salary recorded
Each row holds only a current stage, so once a candidate turns you down and moves to "withdrawn", the fact that they were ever offered anything has gone — unless the offered salary is still recorded against them. That is the honest limitation of a one-row-per-candidate register, and the workaround is simple: when someone declines, leave the offered salary in place and change only the stage. If you clear it, the offer disappears from the denominator and your acceptance rate reads better than it was.
Two other things to know. An offer that is still open sits in the denominator and drags the rate down until it is settled — the tile says how many are open so you can allow for it. And an offer that was made informally, refused on the phone and never priced will not be counted at all, because nothing in the row records it.
Source effectiveness
The source table gives candidates, offers, hires and a conversion rate for each channel:
Conversion rate = hires from that source ÷ candidates from that source × 100
Read it next to the candidate count, always. One referral that turned into a hire is a 100 per cent conversion rate and tells you nothing; forty job board applicants producing one hire is 2.5 per cent and tells you a great deal. Small denominators produce dramatic percentages, which is why the count sits in the next column.
Conversion is not the whole story either. A job board that converts poorly but supplies volume may still be the cheapest source per hire, and an agency that converts perfectly is charging you for the privilege. Read conversion, volume and placement fees together.
Cost per hire
Cost per hire = (agency placement fees on hires + other recruitment spend) ÷ hires
Agency fees are entered per candidate and only count on placement — the tool will not accept a fee against someone who was not hired, because that is the classification error that makes cost per hire look cheap. Retainers, advertising, job board subscriptions, referral bonuses and assessment tools go in Other recruitment spend on the Settings tab as a single period figure.
Two warnings. First, that period figure must cover the same period as your filter: filtering the register to one quarter while leaving a year's advertising spend in the settings will make every hire look far more expensive than it was. Second, this is a cash figure only. It does not include your own time, the hiring manager's time, the interview rooms, the days the job went undone or the cost of a hire who leaves in three months — which is usually the largest number of all. Treat it as "what we paid out", not "what it cost us".
Stalled candidates
Set the stalled threshold on the Settings tab — fourteen days by default — and any active candidate whose stage has not changed in that time is marked Stalled in the register and counted under "active in pipeline". It is the most useful thing here on a Monday morning.
Candidates leave because they are ignored far more often than because they are rejected. Somebody sitting at "second interview" for three weeks while you wait for a manager's diary is a candidate accepting a job somewhere else. The stalled count only works if the stage date is honest — update it whenever the stage moves, even when the move is backwards.
Salary expectation and offer
Recording expectations against offers shows you, over a few vacancies, whether your bands are still real. If you are consistently offering below expectation and losing people at offer stage, the problem is the band, not the candidates.
Whether you may ask about current or expected pay at all differs by country and, in some places, by region — several jurisdictions restrict salary history questions and some require a pay range to be published. Establish what applies to you before you build a question into your process. The tool holds the figures you choose to record and applies no rule of its own.
Candidate data
This register holds personal data about people who have not been hired, which in most data protection regimes may be kept only for a stated purpose, for a stated period, with the candidate told about it.
Three practical habits. Keep notes factual and about the job — write "no forklift ticket, role requires one", not an opinion you would not want read aloud. Decide how long you keep unsuccessful candidates and actually delete them; a register that grows forever is a liability, not an asset. And if you want to keep someone on file for a future vacancy, get their agreement and record that you did.
The tool stores everything in this browser and uploads nothing, but an exported file is an ordinary file: it can be copied, emailed and left on a laptop. Treat exports as confidential and use candidate references instead of names if the file will be passed around.
Printing and sharing
Print Report produces a report from whatever the current filter shows: the headline figures, all four charts, the vacancy and source tables, the full register and your closing notes. Print to PDF to circulate it to a hiring manager or a board.
The scope line under the title states the filter in force. Clear the filters before issuing anything you describe as a full picture, and check that any other recruitment spend in the settings covers the same period as the filter.
Saving your work
Candidates, settings and the report header are written to this browser's local storage as you type, and the toolbar shows the time of the last save. That storage belongs to one browser on one computer: another browser, a private window, a second machine or a clean-up tool that clears site data will not have it.
Treat Export .json as the real save — one file holding everything, which Import .json restores anywhere. Export CSV gives you the register for spreadsheet work, including every filtered record and the derived columns. Reset asks twice, then erases everything this tool has stored. There is no undo.
Accuracy & disclaimer
This tool calculates from what you enter and can check nothing else. It cannot tell whether a stage is up to date, whether an offer was made to somebody whose offered salary was never recorded, or whether the spend figure covers the same period as your filter — and the acceptance rate, the time to hire and the cost per hire each depend on one of those.
Employment law, equality and discrimination duties, salary history rules, right-to-work checks and data protection retention periods differ by country and sometimes by region. This is an internal record-keeping and calculation aid: not legal advice, not an applicant tracking system of record, and no substitute for taking proper advice on how you recruit.