Skip to main content

Compare

The cheaper alternative to Brevo

Send over REST or SMTP for less than Brevo asks at every volume it prices. Every webhook arrives signed, and dedicated IPs come with the plan.

What you pay

Both platforms price by monthly volume. The table takes six volumes. Each row shows the cheapest plan on each side, in your region’s currency.

Monthly price by volume, mailkube against Brevo
Emails a monthmailkubeBrevoSaving with mailkube
10,000Launch $9Starter $17$8
50,000Momentum $19Starter $56$37
100,000Elite $39 1 dedicated IP includedStarter $82 no dedicated IP on this plan$43
250,000Ultimate $129 2 dedicated IPs includedStandard On request
500,000Scale $320 4 dedicated IPs includedStandard On request
750,000Volume $490 6 dedicated IPs includedStandard On request

Brevo prices its plans up to 100,000 emails a month. Above that its page offers higher volumes on the Standard plan and asks you to get in touch. The last three rows read on request. Every mailkube plan carries a published price, from Free to Volume.

Dedicated IPs are included from the Elite plan. Elite carries one at 100,000 emails a month, and Volume carries six at 750,000. Each new one warms on a six-stage ladder, from 50 messages a day to 10,000. Brevo sells a dedicated IP as an add-on on its Professional and Enterprise plans, and warms it automatically from Professional.

Feature by feature

The rows below hold what each platform documents today. A docs link opens the mailkube page behind that row.

Feature by feature, mailkube against Brevo
FeaturemailkubeBrevoDocs
Where account data is storedEuropean UnionEuropean Union
Dedicated IPsIncluded from EliteIncluded from ProfessionalDocs(opens in a new tab)
IP warm-upYesIncluded from ProfessionalDocs(opens in a new tab)
Tags per message20Not documentedDocs(opens in a new tab)
Per-topic opt-out on a sendYesNot documentedDocs(opens in a new tab)
Scheduled sending30 days72 hours aheadDocs(opens in a new tab)
Idempotency keysYesNoDocs(opens in a new tab)
Outbound body and link scanYesNot documented
Webhook signingHMACHTTP Basic
REST APIYesYesDocs(opens in a new tab)
SMTP relayYesYesDocs(opens in a new tab)
Stored templates, versionedYesYesDocs(opens in a new tab)
Official SDKsNode, Python, Go, Java, PHP, RubyNode, Python, Go, Java, PHP, Ruby, C#Docs(opens in a new tab)
Framework packagesDjango, Laravel, Rails, Spring BootNoDocs(opens in a new tab)
CLIYesNoDocs(opens in a new tab)

"Not documented" means the public Brevo documentation does not describe it. Checked on September 29, 2026.

Two rows carry most of the weight for an application sending transactional email. Every mailkube webhook arrives signed with an HMAC, and the SDKs verify it for you. Every send takes an idempotency key(opens in a new tab) . A retried call then returns the first result instead of sending twice. Brevo’s documentation describes neither.

Where your data lives

Customer data is stored in the European Union. Our infrastructure runs in European data centres, in the French OVHcloud group.

Brevo is a French company and states that its hosting sits inside the European Union as well. On this comparison the two platforms stand in the same place, and the rest of this page is where they part.

The detail is in the data processing agreement.

Two transports, headers included

POST to the REST API, or point the SMTP client you already run at smtp.mailkube.com. Everything the API takes as a JSON field, SMTP takes as a header. Those headers are stripped before the message reaches the recipient.

  • X-Mailkube-Tags carries the same tag list as the REST tags field
  • X-Mailkube-Topic attributes the send to a topic, so recipients who opted out are filtered
  • X-Mailkube-Template-Id and X-Mailkube-Template-Version render a saved template server-side

An SMTP send is the same message as an API send. It lands in the same logs, counts against the same quota and fires the same webhook events. The SMTP reference(opens in a new tab) lists every header, reply code and rate limit.

Brevo relays SMTP on smtp-relay.brevo.com with a key of its own, and its relay accepts a template and a scheduled time. It publishes no header name for either, and those values travel through its generic custom-header mechanism. Batch sending is documented as unavailable over that relay.

Your stack, already covered

Official SDKs cover Node, Python, Go, Java, PHP and Ruby, plus C# on the Brevo side. Django, Laravel, Rails and Spring Boot each have a package of their own here. It plugs into the framework’s mail layer, and every client verifies your webhook signatures for you.

Brevo publishes plugins for WordPress, WooCommerce and Shopify. Its documentation describes no framework mail package and no command-line tool.

The CLI is a single binary. It sends over either transport and manages scheduled sends. While you develop, it runs a local webhook receiver. It carries a skill file, and a coding assistant reads the real command surface. Start from the SDK documentation(opens in a new tab) or the CLI guide(opens in a new tab) .

Migrating from Brevo

Install your language’s client, then replace the constructor and the key. The send call keeps its shape, and the nested sender and recipient objects flatten into plain fields.

The same send, Brevo on the left and mailkube on the right

Brevo

import * as brevo from "@getbrevo/brevo";

const api = new brevo.TransactionalEmailsApi();
api.setApiKey(
  brevo.TransactionalEmailsApiApiKeys.apiKey,
  process.env.BREVO_API_KEY,
);

const email = await api.sendTransacEmail({
  sender: { email: "hello@example.com" },
  to: [{ email: "customer@example.com" }],
  subject: "Hello world",
  htmlContent: "<p>It works!</p>",
});
Host
smtp-relay.brevo.com
Port
587

mailkube

import { Mailkube } from "@mailkube/mailkube-node";

const client = new Mailkube({ apiKey: process.env.MAILKUBE_API_KEY });

const email = await client.emails.send({
  from: "Acme <hello@example.com>",
  to: "customer@example.com",
  subject: "Hello world",
  html: "<p>It works!</p>",
});
Host
smtp.mailkube.com
Port
587

SMTP is just as short. Change the host, the port and the credential in your mailer, and leave everything else alone. The messages you already send go out unchanged, and tags, topics and templates arrive as headers when you want them. Nothing forces a cutover date: run both platforms side by side and move one service at a time. The quickstart(opens in a new tab) covers the REST path and the SMTP guide(opens in a new tab) covers the relay.

When Brevo is the better fit

Brevo keeps transactional logs indefinitely by default, and an account can set a retention period of up to 24 months. mailkube keeps 7 days on the entry plans and 90 days on Volume. A team that reads its sending history a year back is better served there.

Brevo is also a marketing platform. Campaigns, contact lists, automation workflows, a CRM with deal pipelines, SMS and WhatsApp all live in the same account as the transactional sends. Its free plan carries 300 emails a day with no expiry. mailkube sends your application’s email and tells you what happened to it.

The pricing page details every plan. The REST API and SMTP relay pages go deeper on the two transports.

Frequently asked questions

Frequently asked questions

How much cheaper is it than Brevo?
At every volume Brevo publishes a price for. You pay $9 against $17 at 10,000 emails a month, $19 against $56 at 50,000, and $39 against $82 at 100,000.
Why do the higher volumes say on request?
Because Brevo publishes no price above 100,000 emails a month. Its own page offers higher volumes on its Standard plan by sales contact. mailkube publishes a price at every volume on this table.
Are Brevo webhooks not signed?
Its documentation describes an IP allowlist, HTTP basic authentication, a bearer token and custom headers, and no HMAC signature. Every mailkube webhook carries an HMAC signature your SDK verifies for you.
Can I keep my SMTP configuration?
Yes. Point your mailer at smtp.mailkube.com on port 587 with a credential bound to your verified domain. Tags, topics and templates then travel as X-Mailkube headers on the message you already send.
How far ahead can I schedule a send?
Up to 30 days, on every paid plan, and the CLI manages the queue. Brevo documents a 72-hour ceiling on its scheduled sends.
Where do the Brevo figures come from?
From the public pricing page and documentation on brevo.com. The date under the feature table is the day they were last read. A change on their side moves that date.

Send your first email today

Start free, no card. Point an existing SMTP client at us, or install an SDK and make one POST.