Rejection rate

Also called:candidate rejection rate, application rejection rate

The formula looks simple: rejections divided by candidates considered. The part that's contested is what counts as a rejection, and what a team does with the candidates who never get one.

The shortcut most dashboards take

The formula is not the hard part: rejection rate is the number of candidates explicitly declined at a stage or across a search, divided by the number who entered it, times 100. For a role with 120 candidates where 18 are explicitly told no before interview, the screening rejection rate is 15%.

Most reporting never runs that calculation. It computes rejection rate as 100% minus the stage’s yield ratio: whatever didn’t advance gets counted as rejected, because “didn’t advance” and “rejected” look like the same bucket from a query that only tracks stage moves.

Where that shortcut breaks down

They aren’t the same bucket, and the gap runs in two directions at once.

  • Some of “didn’t advance” was never a rejection. A candidate who accepts a competing offer, or who stops replying mid-process, withdrew. Nobody on the hiring team decided anything. Counting them as rejected credits (or blames) a decision that was never made.
  • Some real rejections never get logged. SHRM, reporting on Talent Board’s 2023 Candidate Experience Benchmark Research, found that 36% of candidates said they had not heard back from an employer one to two months after applying, unchanged from 2022 (source). Those candidates are functionally rejected; the company just never closed the record. They sit outside both the numerator and the denominator of a “clean” rejection rate, undercounted exactly where the dashboard looks tidiest.

The two errors partly cancel out, which is the worst outcome available: the number stays stable and looks defensible while telling almost nobody anything they could act on.

What we track instead

Join sells the ATS that would enforce this, so weigh the recommendation with that in mind. Keep “Rejected” and “Withdrawn” as two separate, explicit statuses that a person sets, never one inferred from the absence of a stage move. Then pair rejection rate with a close-out rule: a candidate with no status change past a set number of days gets flagged for a decision rather than left open indefinitely, which is what quietly inflates the “didn’t advance” bucket in the first place.

Paired with offer acceptance rate, an explicit-rejection rate also tells the team something an inferred one can’t: how much of the funnel needed a real decision at all, as distinct from how much of it simply left. Automated rejection handles the mechanical half of closing that gap once a candidate is confirmed inactive; it doesn’t replace the discipline of marking rejections as rejections.

Where Join fits

Join's pipeline reports break rejection rate out by stage and separately from withdrawals, and flag any candidate sitting without a status change past a set number of days, so the close-out problem below shows up as a queue to clear, not a mystery in the aggregate number.

Frequently asked questions

Is rejection rate the same as 1 minus the yield ratio?
Not quite. measures who advanced. Rejection rate should measure who was explicitly declined, and the gap between the two is exactly the candidates who withdrew or were never given a decision.
Should rejection rate be measured per stage or across the whole search?
Both, for different reasons. Per stage tells you where the bar is being applied. Across the whole search, paired with applications and hires, tells you how much of the pipeline needed a formal answer at all.

Start today

Start your 14-day free trial and make hiring your advantage.

See Join in actionPost a job, screen candidates, schedule interviews.
Try

Talk to Join