Email automations
Sending email automatically on stage entry, and choosing where the content comes from
An email automation attaches an email to a pipeline stage. When a candidate enters that stage, the email goes out — no one has to remember to send it.
Email automations sit in the same editor as every other kind of automation (HubSpot, Notion, custom webhooks), so a stage's full list of side effects reads top to bottom in one place. See Automations for the non-email kinds.
Video walkthrough
Where email automations live
There are four places to work with them, and it's worth knowing which one you're in:
| Where | Scope | Use it for |
|---|---|---|
| Intelligence → Pipeline & Automations | Organization-wide, on stage templates | The defaults every new job should start with |
| A job's pipeline or kanban board | That job only | Adjusting one role's emails |
| The job creation wizard | The job being created | Reviewing and tweaking the defaults as you set the job up |
| A candidate card → Send email | One candidate, once | A one-off message with no automation saved |
Organization defaults are copied into a job, not linked to it
When a job is created, HireFlow clones the organization's email automations onto that job's stages. From then on the two are independent:
- Editing a job's copy never changes the organization default.
- Editing the organization default never reaches jobs that already exist.
So a fix to your rejection email has to be applied to the default and to any live job you want it to affect. Add a new organization default and it applies to future jobs only.
Creating one
Open a stage, click Add automation, and pick the integration that will do the work:
- HireFlow Email — send a template you wrote in HireFlow.
- Resend — send something you built inside your Resend account.
Both options need Resend connected
HireFlow Email uses Resend as its delivery provider, so nothing sends until Resend is connected and a sending domain is verified. The editor tells you so, and the Resend-native options stay disabled until then. See Setting up Resend.
Choosing a content source
Which integration you pick decides what you're offered next:
- HireFlow Email goes straight to a template dropdown — there's nothing else to choose.
- Resend offers two buttons: Resend template or Resend automation.
So there are three content sources in total, and they differ in who renders the email and, more importantly, who decides when it goes and who receives it:
| Source | Renders the email | Controls timing and recipients | Shows on the candidate timeline as |
|---|---|---|---|
| HireFlow template | HireFlow | HireFlow | sent → delivered → opened |
| Resend template | Resend | HireFlow | sent → delivered → opened |
| Resend automation | Resend | Resend | a single triggered event |
HireFlow is the default and the one to reach for. Pick a template from your library and HireFlow fills in the merge fields. See Email templates.
Resend template uses a template stored in your Resend account. Resend renders these templates itself, so HireFlow can't add anything to the body — including an unsubscribe link. See Unsubscribes and opt-outs. Three things to know when you pick one:
- You supply the subject. Resend requires one on every send, even when the stored template has its own. HireFlow prefills the template's subject where it has one, and you can override it.
- You map its variables. Resend doesn't know about candidates, so the editor lists every variable the template declares and you point each one at a HireFlow field or type a literal value. Anything left unmapped falls back to the default set in Resend.
- Variables are typed. Resend enforces the type each variable declares, so a value that can't be coerced — text where a number is expected — fails the send rather than arriving malformed.
Resend's variable syntax is not HireFlow's
A Resend template writes its variables with three braces, {{{candidate_name}}}, and they
are named by whoever wrote that template. HireFlow's merge fields use two,
{{ candidate.firstName }}, and are a fixed list. They're unrelated — a HireFlow merge
field typed into a Resend template does nothing, and vice versa.
Resend automation hands the whole sequence over. HireFlow fires one event at Resend when the candidate enters the stage, and Resend runs the rest — every message, every delay, every recipient rule you configured there.
A Resend automation is a handoff, not a send
Once HireFlow fires the event, it has no further involvement. The trigger, recipient and
CC/BCC controls all disappear from the editor, because Resend owns those decisions now. The
candidate's timeline records triggered and nothing more — no delivered, no opened. To see
what actually reached the candidate, look in Resend.
Triggers
- Immediate — sends as soon as the candidate enters the stage.
- Delayed — waits a number of hours first, up to 720 (30 days). The wait is recorded on
the candidate's timeline as a
scheduledevent, so you can see a pending send, and asentfollows once it goes out.
Delayed sends are for HireFlow templates only
A delayed send is replayed later from your HireFlow template library, so the trigger choice is offered for the HireFlow source only. A Resend template always sends immediately, and a Resend automation has no trigger control at all — Resend owns the timing once the event is handed over.
A delayed send is tied to the stage entry that triggered it, not to the candidate's current
stage. Eligibility is rechecked when it fires, not when it was scheduled: a candidate who
unsubscribes during the wait, or whose email address is removed, doesn't receive it, and the
pending entry on their timeline becomes failed rather than sent.
HireFlow looks for due delayed sends about once a minute, so one can land up to a minute after its hour is up. Delays are set in whole hours, so that difference isn't something you'll notice in practice.
Recipients
The To, CC, and BCC fields take three kinds of recipient, mixed freely:
- Candidate — the person moving through the pipeline.
- A team member — start typing a name and pick them from your organization.
- Any email address — type it in full for someone outside HireFlow.
Each becomes a chip. Press Enter, comma, or space to commit one.
Candidates and colleagues get separate copies
HireFlow splits one automation into two sends: one to the candidate, and one to everyone internal, whether they were named in To, CC or BCC. This is deliberate — the candidate's copy carries a working unsubscribe link, and your teammates should never receive that. It also means a colleague on CC sees the email content but not the candidate's unsubscribe footer.
If a recipient can't be resolved — a deleted teammate, a candidate with no email address —
that send is recorded as failed and the others still go out.
A candidate placed in CC or BCC but not in To doesn't receive anything: there's no
candidate-facing send for them to ride on, so the automation records a failed event
explaining why. If you want the candidate to get the email, they belong in To.
Conditions
Turn on Only send when conditions are met to gate an automation on a single comparison: a field, an operator, and a value. A candidate who doesn't match is skipped, and the rest of the stage's automations run as normal.
Five fields are available:
| Field | What it holds |
|---|---|
| Location | The candidate's location, as imported — usually City, Region, Country |
| Title | The candidate's current job title |
| Company | The candidate's current employer |
| Dept | The job's department |
| Job Location | The job's work model — remote, hybrid or onsite, not a place |
Four operators are available, and all four compare text:
| Operator | Matches when the field |
|---|---|
= | is exactly the value |
≠ | is anything other than the value |
has | contains the value anywhere inside it |
has no | does not contain the value anywhere inside it |
has and has no are usually the ones you want. Field values are rarely tidy: a
candidate's location reads Sao Paulo, State of Sao Paulo, Brazil, not Brazil. So
Location has Brazil matches every candidate in the country, where Location = Brazil would
match almost nobody. has no is how you exclude — Location has no Brazil gates the
automation to everyone outside it.
has and has no ignore case, so has brazil and has Brazil behave the same. = and
≠ are exact: = brazil will not match Brazil.
If an operator reads (unsupported)
Earlier versions offered >, <, in and ∉. They could never match reliably — the
condition box holds a single line of text while those operators expect a number or a list —
so they were removed. An automation still saved with one shows it as (unsupported) and
won't send until you pick one of the four above.
A candidate with no value for the field is always skipped
A gate with no data to evaluate doesn't fire, whichever operator you picked. A candidate
imported without a location doesn't match Location has Brazil — and doesn't match
Location has no Brazil either.
So ≠ with an empty value isn't a way to write "has any location at all". Nothing matches
a missing field.
Turning them on and off
Each automation in a stage's list has a toggle. Switching it off keeps everything configured but stops it firing, which is the right move for a seasonal email or one you're still drafting — no need to delete and rebuild it later.
You can also reorder automations within a stage. Order is for your own readability; it does not control the order sends go out in.
Sending one off, without an automation
On a job's kanban board, hover a candidate card and click the send icon (its tooltip reads Send email). Pick a HireFlow template, a Resend template, or a Resend automation, and send.
It goes to that one candidate, once. No automation is created, no other candidate is affected, and nothing about the stage changes. The card only offers it when the candidate has an email address on file, and the action needs the same owner, admin or hiring manager role as creating an automation — a recruiter can move the card but can't send from it.
A candidate who has unsubscribed can't be sent to this way either. The send is refused outright rather than skipped quietly.
The send is logged on the candidate's timeline exactly like an automatic one. See Delivery and tracking.