Otter

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 applications
  • acme+eng-001@applications.otter.diy — routed to job code eng-001

How mail reaches Otter

  1. Cloudflare Email Routing accepts mail on the applications subdomain only. Apex otter.diy MX stays on Google Workspace — Gmail is not broken.
  2. An Email Worker parses the message and POSTs JSON to https://app.otter.diy/api/inbound/email.
  3. Otter dedupes by provider message id, stores the raw payload in R2, and queues processing (Inngest when configured; otherwise inline on the webhook).
  4. 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.

Replay

Failed or stuck messages can be replayed from Settings → Email & inbound (workspace admins) or Super Admin → Inbound.