# emails.sh vs Brevo

Brevo (formerly Sendinblue) is an all-in-one marketing platform with email, SMS, CRM, and chat. emails.sh is only the transactional API, built for code.

Also searched as: Brevo alternative, Sendinblue alternative, Brevo transactional email API.

## What Brevo is

Brevo, which was called Sendinblue until it rebranded in 2023, is an all-in-one marketing platform: email campaigns, SMS, WhatsApp, a CRM, live chat, landing pages, and marketing automation, sold mostly to small and mid-sized businesses. It has a permanently free plan built around a daily send cap of a few hundred emails, and paid plans that scale by monthly email volume rather than by contacts stored, which is unusual and genuinely good value for a large list. It also has a transactional API and SMTP relay.

## Where Brevo is the better choice

If you need one tool for marketing email, SMS, and a light CRM, and price matters more than developer ergonomics, Brevo is hard to beat. Its volume-based pricing means a 100,000-person list costs no more to store than a 1,000-person one, which is the opposite of most marketing tools. For a small business without an engineering team, it is a better answer than anything in this comparison, including us.

## Where emails.sh differs

Brevo is a marketing platform that also sends transactional email. We are a transactional email API and nothing else. If your mail is triggered by code, the things you care about are a per-message log you can search at 2am, signed webhooks you can verify, an SDK in your language, and an integration your assistant can finish in one turn. Those are product decisions we made and they made a different set, for a different buyer.

### One surface instead of a suite

Brevo's console spans campaigns, automation, CRM, chat, and SMS, and the transactional API lives inside that. Here there is one endpoint and one dashboard. When you are debugging why a password reset did not arrive, the amount of unrelated product between you and the answer matters.

### A developer log and signed webhooks

GET /v1/emails/:id returns the status and every delivery event for one message. Webhooks for email.delivered, email.bounced, and email.complained are signed with x-emailssh-signature so you can verify the body before writing a bounce onto a user record.

### Receiving and replying

Inbound MX, parsed MIME, attachments, and threading on In-Reply-To. Replies to your product emails come back into the same API, which a marketing platform does not do because it is not what a marketing platform is for.

## Moving the transactional half off Brevo

Keep Brevo for campaigns and contacts. What moves is the mail your application triggers, which is usually a handful of call sites.

1. **Find the transactional call sites** They are the sends using Brevo's transactional API or its SMTP relay with an api-key header, not the ones scheduled in the campaign UI. In most codebases that is fewer than ten places, all of them in one service.
2. **Rewrite the send** Brevo takes sender and to as objects with email and name fields, plus htmlContent and textContent, authenticated with an api-key header. Ours takes from as a formatted string, to as an array, html and text, and Authorization: Bearer esh_....
3. **Authenticate a sending subdomain here** Do not move the domain Brevo signs your campaigns with. Verify a separate transactional subdomain, publish our DKIM and return-path records on it, and let campaign reputation and transactional reputation stay apart on purpose.
4. **Cut over and keep the suppression list in sync** Send a percentage here first and compare bounce rates. Feed our email.bounced and email.complained webhooks into the same suppression logic that consumes Brevo's, so a person who complained about a campaign is not sent a marketing message from either system.

## Side by side (checked July 2026)

| | emails.sh | Brevo |
| --- | --- | --- |
| Pricing shape | Two prices, bought separately. Transactional is per email sent and counts no contacts. Marketing is per contact stored, in tiers from 5,000, with no per-email charge on sends to your own audiences. Neither plan requires the other, so a product that sends receipts to 200,000 users and mails a 4,000-person list pays for 4,000 contacts. | By monthly email volume rather than contacts stored, across the marketing platform. |
| Free tier | Two free tiers that do not require each other: 3,000 transactional emails a month, and 1,000 contacts with unsubscribe handling and broadcast sending included. | A permanent free plan built around a daily send cap of a few hundred emails. |
| Sending domains | One screen: add the domain, copy SPF, DKIM, and return-path records, watch them go green. Unlimited domains on every plan. | Domain authentication with DKIM and Brevo's records, shared across the account. |
| Deliverability posture | Transactional mail never shares a pool with a campaign, because a receipt landing in spam behind a promotion is the failure that costs you. | Established at scale, tuned for marketing sending patterns. |
| Receiving mail | Inbound MX, parsed MIME, and In-Reply-To threading, so a reply arrives as part of a conversation you can query rather than as a raw webhook body. | An inbound parsing webhook exists. Storage and threading are not the product. |
| Logs and retention | Every message searchable in the dashboard and readable at GET /v1/emails/:id, with its delivery, bounce, and complaint events attached. | Campaign statistics plus a transactional activity view, with retention by plan. |
| Templates | Hosted templates with immutable versions, published separately from saving, referenced by slug from a send, a broadcast, or an automation step. Merge syntax is {{ variable }} with no conditionals or loops, and there is no drag-and-drop editor. If a non-developer needs to lay out an email without touching HTML, that is a real reason to pick the other product. | A drag-and-drop editor plus transactional templates with substitution. |
| SDKs and frameworks | Nine clients (node and typescript, python, php, ruby, go, rust, java, .net, elixir) plus curl, and framework guides from Next.js to Laravel, Rails, and Django. | Official API clients in several languages, generated from the platform API. |
| Marketing and lifecycle | Audiences with double opt-in, flat-rule segments, scheduled broadcasts, and automations built on a canvas that is also a YAML file you can review in a pull request. No A/B testing, no visual builder, no signup forms. | Contacts, lists, segments, email campaigns, and Automations with time delays, wait-until-an-event, and conditional splits. Their API index has no workflow category, so an automation is a console artifact. |
| Webhooks | email.delivered, email.bounced, and email.complained, each signed with x-emailssh-signature so you can verify the body before you act on it. | Transactional and marketing event webhooks. |
| Path for a coding agent | Every page served as markdown at the same path plus .md, an /llms.txt index of the whole site, and a Cursor and Claude Code skill you install once. | Human documentation across a broad platform. No installable assistant skill. |
| Support | Email support on every plan including the free one, answered by the people who wrote the API. We are small, and that cuts both ways. | Tiered by plan, with phone and account management at the top. |

## Questions

### Is Brevo the same as Sendinblue?

Yes. Sendinblue rebranded to Brevo in 2023. Same company, same platform, same accounts. If you are searching for a Sendinblue alternative, you are searching for a Brevo alternative.

### Can I use Brevo only for transactional email?

You can, and its volume-based pricing makes that cheaper than most marketing tools. What you give up is the developer surface: a searchable per-message log, signed webhooks, an SDK in your language, and inbound that stores and threads.

### Can emails.sh replace Brevo?

The email part, not the platform. There is no CRM, no SMS, no WhatsApp, and no chat here, and on the email side there is no drag-and-drop designer and no A/B testing. What does exist is audiences, segments, broadcasts, and automations, which for a developer-run programme is enough. If Brevo is your CRM, keep it.

### Should transactional and marketing email share a domain?

Share the root domain, split the subdomain. Campaigns from one subdomain and transactional from another means a complaint on a promotion does not follow your password resets, and each subdomain publishes its own DKIM records.

All comparisons: https://emails.sh/vs
Docs: https://emails.sh/docs.md
Pricing: https://emails.sh/pricing.md