Hiring workflows
Inbound email → candidates
Forward resumes to your workspace inbox. Otter parses attachments and creates candidates and applications automatically.
Addresses
Each workspace gets an inbox on applications.otter.diy:
acme@applications.otter.diy— general applicationsacme+eng-001@applications.otter.diy— routed to job codeeng-001
How mail reaches Otter
- Cloudflare Email Routing accepts mail on the applications subdomain only. Apex
otter.diyMX stays on Google Workspace — Gmail is not broken. - An Email Worker parses the message and POSTs JSON to
https://app.otter.diy/api/inbound/email. - Otter dedupes by provider message id, stores the raw payload in R2, and queues processing (Inngest when configured; otherwise inline on the webhook).
- The processor screens auto-replies, picks a resume attachment, parses it, matches/creates the candidate, and opens an application when a job code is present.
Outbound + replies
From a candidate profile, recruiters can send email via Resend. Otter stores the thread and sets Reply-To: reply+<token>@applications.otter.diy so replies return on the same inbound pipeline.
Requires RESEND_API_KEY and RESEND_FROM_EMAIL in Vercel after you verify a sending domain in Resend.
Email templates
Settings → Email templates ships with outreach, rejection and offer drafts using placeholders like {{first_name}} and {{job_title}}. Preview works without Resend. Send stays disabled with a Needs API key badge until RESEND_API_KEY is set (same status as Integrations).
On a candidate profile, Email opens a composer with a Template picker. Choosing a template fills the subject and message with that candidate's name, the job, its stage, your company and your name. If a candidate is in several jobs, pick which one the email is About. Anything Otter can't fill is flagged, and Otter won't send a message that still has a {{placeholder}} in it. Without Resend, use Copy draft to paste it into your own inbox.
Replay
Failed or stuck messages can be replayed from Settings → Email & inbound (workspace admins) or Super Admin → Inbound.