River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Candidate Rejection Email Templates

Four documents and three sheets, including the queue of everybody waiting longer than your own standard, sorted by how far over.

Free download  ·  No account needed

Stale Candidate Queue, one row

The object that fixes ghosting is a queue, not a template

Sorted by days over, descending. The person waiting longest is the one whose message is hardest to write, and the one who gets skipped under any other sort.

Business Days Waiting, Standard, Days Over

Business days from the stage-change date, against that stage's standard. Both choices matter more than the numbers: calendar days make every Friday interview look like a breach by Monday, and measuring from the interview date makes a scheduling delay indistinguishable from a response delay.

Status In ATS

Open, or closed. Closed rows are the backlog: people already marked closed in the system with no message ever logged against them. Open rows are the live leak. Both are in this queue on purpose, because a recruiter reading a queue of open candidates never discovers the closed ones, and the closed ones are usually the bigger group.

Message Owed

Which template applies: close at this stage, hold with a date, advance with a date, or the overdue message. Filling this column is what turns the queue from a list of problems into a batch of drafts.

Blocked On

The diagnostic column. Where it says nothing, the message can go today and all that was missing was somebody looking. Where it names a debrief note or a competing candidate, the honest answer is a hold with a date rather than a longer wait.

Every guide to candidate rejection treats it as a writing problem. Warmer opening, a line of specific feedback, personalise the first sentence. That is reasonable advice about a message that gets sent, and it does not touch the case that generates the actual complaint, which is the message nobody ever wrote. Ghosting is an operational failure. No recruiter decided not to reply; a requisition moved on and the queue behind it stopped being anybody's job.

So this pack is built around a queue rather than a template. It comes from joining two datasets that both already sit in your applicant tracking system and never get joined: the pipeline export with stage-change dates, and the record of what was actually sent. Match them on candidate identifier and every closed candidate with no matching message is a silent closure. No report in any applicant tracking system surfaces that number, which is why nobody has it.

At Ravelin Foods, three requisitions over five months, the export held 214 candidate records. Of the 138 closures, 89 had nothing sent: 64.5 percent of closures and 41.6 percent of everyone who applied. Add the 32 active candidates past standard and 121 of 214 were waiting longer than the company's own rule allowed. The templates are here too, by stage and outcome, including the two nobody writes. Upstream, funnel analysis says whether the pipeline is the constraint at all.

Eighty-nine people closed in the system and never told

Time to Response by Stage, the queue it produces, and the log that records what finally went out.

Time to Response by Stage

Illustrative for a fictional regional food manufacturer, Ravelin Foods. Three requisitions, five months, 214 candidate records. Business days from the stage-change date.

StageStdRecsActive
waiting
Median
wait
x stdActive
past std
Closed,
msg sent
Closed,
nothing
In
breach
Breach
share
Application received51032861.2924516058.3%
Recruiter screen3401741.339141742.5%
Hiring manager interview3281282.76791553.6%
Onsite loop33113196.3116122374.2%
Final and references2126115.5333650.0%
Total2147632498912156.5%

The last two closed columns are never added together. Their sum is called closed and it looks fine, which is exactly how a rejected candidate and an ignored one become one number. Eighty-nine of the 138 closures had nothing sent: 64.5% of closures, 41.6% of the export. The onsite loop is the failure at 6.3 times its standard, and 17 of its 23 breaches sit on one requisition.

Stale Candidate Queue

Ten of the 121 rows, sorted by days over. Open and closed populations in one list, distinguished by the status column.

IDReqStageDays
waiting
StdOverStatusMessage owedBlocked on
C-19931148Application received38533closedOverdue messagenothing. Batch closed
C-20021148Recruiter screen35332closedOverdue messagenothing. Batch closed
C-20151148Hiring manager26323closedOverdue messagenothing. Batch closed
C-20411152Onsite loop24321openClose at onsitedebrief note not returned
C-20471152Onsite loop21318openClose at onsitedebrief note not returned
C-20521152Onsite loop21318closedOverdue messagenothing. Closed silently
C-20581152Onsite loop19316openHold with a datedebrief note not returned
C-20631152Final and references14212openHold with a datecompeting candidate deciding
C-21081160Recruiter screen734openAdvance with a dateinterview slot not offered
C-21151160Hiring manager532openAdvance or closemanager note not returned

Requisition 1152 is a QA Supervisor role, and it holds 17 of the 23 onsite breaches, which is 14.0% of every breach in the export in one cell. The cause is one manager who stopped returning debrief notes. The fix was permission to send the close without the note once it was five days late, plus a named escalation on the sixth day. The standard stayed at three.

Communication Log

One row per message actually sent, with the reason in the same words the candidate got. The five overdue rows are the first of the 89.

LogIDStageTemplateSentDays from
stage change
In stdReason given to the candidate
L-0413C-1974Recruiter screenScreen close09 Dec2yesNeeded hands-on PLC fault diagnosis at line level
L-0418C-1981Onsite loopOnsite close19 Dec3yesTurned on commissioning a line from cold, twice unsupervised
L-0430C-2011Recruiter screenHold with a date05 Jan2yesPanel dates unconfirmed. Date given for 12 Jan and met
L-0447C-2035Onsite loopOnsite close21 Jan4noAudit readiness. One day over, debrief note late
L-0481C-2099Hiring managerManager close03 Feb3yesPlain decision only. Feedback withheld and routed
L-0486C-1993Application receivedOverdue message12 Feb38noFilled internally. Queue batch closed without messages
L-0488C-2002Recruiter screenOverdue message12 Feb35noScreened on 16 Dec and never told
L-0490C-2015Hiring managerOverdue message12 Feb26noInterviewed by the manager and never told the outcome

The days-from-stage-change figure stays on the row after the backlog run, because it is the only evidence the run happened. Row L-0481 is the one case where the space writes less: the candidate had raised a query about the process, so the plain decision went out with feedback marked withheld and routed to whoever judges that.

What is in the pack

01

Stale Candidate Queue

Everybody past the standard for their stage, sorted by days over, with the template they are owed already named and a column saying what the reply is blocked on. Open and already-closed candidates sit in one list on purpose.

02

Time to Response by Stage

Median wait, multiple of standard, and breach share per stage, with closed-with-a-message and closed-with-nothing-sent as two separate columns that are never added. Each row carries an operational reason rather than the word slow.

03

Communication Log

One row per message actually sent, with the reason given in the same words the candidate got. Reading two rejections from the same stage side by side is the only way to check they differ the way the candidates differed.

04

Message Templates by Stage and Outcome

Close, hold and advance at four stages, plus the withdrawal acknowledgement, the referral ask, and the overdue message for somebody who has been waiting three months. Short on purpose.

05

Timing Standard

Business days per stage, measured from the stage change rather than the interview, with what counts as a reply defined as exactly three things. Set from your own medians, not from a benchmark.

06

Feedback Guidance

One test decides everything: is the thing you are about to say written on a scorecard or interview note in specific terms. Where nothing qualifies, the plain decision goes out with no feedback at all.

07

Why Silence Is An Operational Failure

The reasoning, the join, and the two populations that need opposite fixes. A backlog is a batch of messages with a defined end; a live leak is fixed only by a scheduled read with a named owner.

How it works

  1. 1

    Send the pipeline export

    With stage-change dates, which is the field that matters. A created date and a status will not do it, and River says so rather than substituting one.

  2. 2

    The join runs first

    Pipeline export against whatever record exists of what was sent, matched on candidate identifier. Every closed candidate with no matching message is a silent closure.

  3. 3

    The queue gets built

    Open-and-past-standard and closed-with-nothing-sent in one list, sorted by days over, with the owed template and the blocker named on every row.

  4. 4

    Backlog first, then the schedule

    The backlog is one run with a defined end. The scheduled read with a named owner is what stops the queue refilling.

Frequently asked questions

Why not just take a rejection email template and move on?

Because the template only helps a message somebody decided to send. In the worked example, 89 of 138 closed candidates had no message logged at all, and no rewrite reaches them. The queue is what reaches them, and it is the object every page on this query is missing.

How do I find the candidates nobody replied to?

Join the pipeline export to the message history on candidate identifier. Every closed candidate with no matching message is a silent closure. Both datasets are already inside your applicant tracking system and no report in it connects them, which is why the number surprises people who run recruiting for a living.

Is it worse to send a rejection three months late than not at all?

No, and the templates include the version that says so. Name the delay in the first two lines, put the decision above the explanation, and offer no reason that sounds like an excuse. What makes a late message land badly is an apologetic paragraph above the answer the candidate is scanning for.

How much feedback can I actually give?

Whatever appears in writing on a scorecard or interview note, in specific terms, about a requirement of the job. Nothing you are inferring now in order to have something helpful to say. If nothing written qualifies, send the plain decision. Where a scorecard exists, debrief synthesis is where the deciding competency comes from.

What timing standard should we use?

Your own. Take last quarter's export, compute the median response per stage, and set the standard at roughly what your best recruiter already hits in a normal week. A standard set to what you wish were true puts everybody in breach on the first read, and a queue where everybody is in breach never gets opened again.

Why does the log keep rows for candidates who were rejected?

Because it is a record about a hiring decision. A federal contractor must preserve any personnel or employment record it makes for not less than two years, or one year below 150 employees, and the general rule for covered employers is one year. A message in one recruiter's sent folder is not retrievable.

What arrives in the zip, and is any of it paid?

Four Word documents and three CSV sheets, free, with no account needed. Edit with AI installs the same pack as a private Space and runs the join on your own export. The upstream questions live elsewhere: the interview loop decides who advances, and the question bank decides what gets asked.

Find out how many people you never replied to

Send the pipeline export with stage-change dates and whatever record exists of what was sent. The first thing back is the count of candidates closed in your system with nothing ever sent.

Edit with AI