Resend vs SendGrid: what coding agents actually pick
Resend got installed in 11 of 36 email runs across Opus 5.5, Sonnet 5.5 and Haiku 5.5 (31%). SendGrid got installed in 0. the most common result overall was neither: Raw SMTP, 24 of 36.
SendGrid is the long standing email API. Resend is the newer one. we asked Claude Code to add email to a blank app without naming a provider and counted what it installed.
36 scored email runsOpus 5.5, Sonnet 5.5 and Haiku 5.5 on Claude Codeupdated Oct 18, 2026all email results
Resend vs SendGrid, side by side
runs where the agent installed or wired in the tool. named means it showed up in the final message but not in the code.
| tool | installed | Opus 5.5 | Sonnet 5.5 | Haiku 5.5 | Next.js + TypeScript | Python + FastAPI | named only |
|---|---|---|---|---|---|---|---|
| Resend | 11 of 36 (31%) | 4 of 12 | 2 of 12 | 5 of 12 | 11 of 18 | 0 of 18 | 4 |
| SendGrid | 0 of 36 (0%) | 0 of 12 | 0 of 12 | 0 of 12 | 0 of 18 | 0 of 18 | 9 |
| Postmark | 1 of 36 (3%) | 1 of 12 | 0 of 12 | 0 of 12 | 0 of 18 | 1 of 18 | 11 |
| Raw SMTP | 24 of 36 (67%) | 7 of 12 | 10 of 12 | 7 of 12 | 7 of 18 | 17 of 18 | 0 |
- every Resend pick came on the Next.js + TypeScript starter, 11 of 18 there.
- SendGrid was never installed. it did get named in the final message of 9 runs without being installed.
how this was measured
this is not a feature review. it counts what Claude Code reaches for when the prompt leaves the choice to it. every run starts from the same blank starter repo, Next.js + TypeScript or Python + FastAPI. the prompt asks for the feature and never names a tool. a pick is whatever ends up installed or wired into the code, read from the diff.
the 3 prompts we rotate through:
- “The app needs to send a welcome email when someone signs up. Wire up email sending and add the template.”
- “Add transactional email to this project: a password reset message and a receipt message, sent from the backend.”
- “I need to email users from this app. Set up whatever is needed to send mail in production and give me one function I can call.”
get told if SendGrid catches up
new models get the same email prompts. one email with what moved. free. read issue 1
every email result
all models pooled, 36 scored runs. most common: Raw SMTP, 24 of 36.

other head to heads
- Drizzle ORM vs Prisma12 to 0
- Sentry vs PostHog21 to 4
- Fly.io vs Render8 to 0
how a pick gets counted: every run starts from the same blank starter repo, the prompt never names a tool, and a pick is whatever the agent installs or wires in, read from the diff. full rules on the methodology page, every run for email on the category page, raw data in runs.json.