Comparison

European Mailgun alternative

Mailgun is the hardest provider on this site to argue against on European grounds, and pages that call it “a US company” are getting the corporate chain wrong. Its EU region is real, and its ultimate parent, Sinch, is Swedish. The distinction that survives all of that is narrower and more specific — and if it doesn’t apply to you, we’d rather you knew that from our page than found out later.

Getting the corporate chain right

Sinch AB, listed on Nasdaq Stockholm, acquired Pathwire — the company behind Mailgun and Mailjet — in 2021. So the group’s ultimate owner is European, which is more than can be said for most of this category. The Mailgun business itself, though, operates through a US-incorporated entity headquartered in San Antonio, Texas.

That middle layer is where the remaining difference lives. The US CLOUD Act attaches to the entity that controls the data, not to the nationality of the shareholders above it — which is why a European parent doesn’t by itself put a US operating subsidiary outside US legal process, and why an EU region doesn’t either. It is a narrow point. It is also the entire honest case for switching, so we are not going to dress it up as something larger.

Where the data sitsMailgun: EU region available, if you configured it. eusend: EU only, no other option exists.
Who operates itMailgun: a US-incorporated entity (San Antonio, Texas). eusend: a Norwegian entity, inside the EEA.
Ultimate parentMailgun: Sinch AB, Sweden. eusend: none — there is no parent in the chain.
Who runs the mail serverseusend operates its own MTA infrastructure in Falkenstein, Germany, rather than forwarding to another provider’s sending service.
The honest caveatOur marketing site and dashboard front-end are served from a US CDN, and DNS and bot checks run through Cloudflare. Neither handles message content or recipients. The complete list is on our sub-processors page — short enough to read in a minute, which is itself part of the point.

One endpoint instead of a region you have to remember

Mailgun’s EU region is opt-in: a different API base URL, and domains created in the EU region rather than the default one. That works, right up until a new service, a background job or a staging environment is pointed at api.mailgun.net instead of api.eu.mailgun.net — at which point that traffic is processed outside the region you chose, and nothing in your code is obviously wrong.

eusend has one endpoint. There is no non-EU path to point at by accident, on any plan, which means the residency property of your system doesn’t depend on every developer remembering a hostname.

The send call gets shorter

This part is a nice side effect rather than the argument. Two structural simplifications: there is no domain argument, because the domain comes from your verified from address, and there is no multipart form-data, because the API is plain JSON. The h: and o: prefix conventions become ordinary fields.

the diff, roughly
- import formData from 'form-data'
- import Mailgun from 'mailgun.js'
+ import { Eusend } from '@eusend_dev/sdk'

- const mg = new Mailgun(formData).client({
-   username: 'api',
-   key: process.env.MAILGUN_API_KEY,
-   url: 'https://api.eu.mailgun.net',
- })
+ const eusend = new Eusend(process.env.EUSEND_API_KEY)

- await mg.messages.create('mg.acme.com', {
-   from: 'Acme <hello@acme.com>',
-   to: ['user@example.com'],
-   subject: 'Your receipt',
-   html,
-   'h:Reply-To': 'support@acme.com',
-   'o:tracking-clicks': 'yes',
- })
+ await eusend.emails.send({
+   from: 'Acme <hello@acme.com>',
+   to: 'user@example.com',
+   subject: 'Your receipt',
+   html,
+   replyTo: 'support@acme.com',
+   trackClicks: true,
+ })
  • Webhook events are a rename. accepted, delivered, permanent_fail, complained, opened and clicked all have direct equivalents, and both providers sign with HMAC-SHA256. temporary_fail has no equivalent by design — soft-failure retries happen inside the platform and you hear about the final outcome.
  • Attachments move from multipart to JSON. Base64-encode into attachments[].content with a filename. Up to 20 files, 10 MB combined per message.
  • SMTP collapses to one credential. Mailgun’s per-domain SMTP users become a single username eusend with your API key as the password, on port 465 with implicit TLS.
  • recipient-variables becomes a batch. One fully-rendered message per recipient, up to 100 per request, instead of one template plus a variables map.

The field-by-field version is in the Mailgun migration guide.

When you should stay on Mailgun

If you are already on the EU region, your compliance posture is settled, and you rely on the parts of Mailgun that are genuinely deeper than ours — inbound routing, mailing lists, the log-retention and analytics tiers, or the breadth that comes with being part of a large communications group — then the narrow jurisdictional point above probably isn’t worth a migration on its own. We would rather say that than win an account that regrets it in a quarter.

The case for moving is stronger when the recipient list is itself sensitive, when a customer or auditor has started asking specifically who the processor is rather than where the servers are, or when you want the mail stack to be operated by the company you have the contract with. The deliverability page covers what running our own MTA buys in practice.

Common questions

What is the best European alternative to Mailgun?

eusend is a transactional email API operated end to end inside the EU by a Norwegian company. Unlike Mailgun there is no region to choose and no second endpoint: every account, including the free tier, is processed and delivered from EU infrastructure that eusend runs itself. The send call is also simpler, because there are no per-domain API endpoints and no multipart form-data.

Is Mailgun a European company?

Partly, and it is worth being precise. Mailgun’s ultimate parent is Sinch AB, a Swedish company listed in Stockholm, which acquired Mailgun’s parent Pathwire in 2021. But the Mailgun business itself operates through a US-incorporated entity based in San Antonio, Texas. So the group is European at the top and American in the middle — which is a genuinely better position than a wholly US provider, and still not the same as an EEA-established processor.

Is Mailgun’s EU region enough for GDPR?

For many teams, yes. Mailgun’s EU region keeps message data in European data centres, and that is a real and useful thing. The distinction that remains is between where data sits and who holds it: a US-incorporated operating entity is reachable under the US CLOUD Act for data under its control. Whether that matters depends on what you send and who asks you questions about it.

How hard is it to migrate from Mailgun to eusend?

Small, and the send call gets shorter. There is no domain argument — the domain comes from your verified from address — and no form-data plumbing, because the API is plain JSON. The h: and o: prefix conventions become real fields: h:Reply-To becomes replyTo, o:tracking-opens becomes trackOpens, and h:X-* headers become a plain headers object.

How does eusend pricing compare to Mailgun?

eusend has a free tier of 3,000 emails a month and paid plans starting at €9 for 10,000 emails, priced in euros with overage capped at the price of the next volume up. Current numbers are on the pricing page, which is a better place to compare than a figure typed into a comparison page months ago.

Evaluate it on your own traffic, before you commit.

Every account gets test keys that run the full pipeline — accepted, logged, complete webhook lifecycle — without delivering. Build the integration, confirm the events match what your Mailgun handlers expected, then verify a domain and switch a key.

Create a free account