# Best email APIs for cold outreach tools (2026)

What a cold-outreach product needs from its email API, and how 12 providers compare on terms, send limits, sending hours, replies and per-customer separation.

[Pau Kraft](https://paukraft.com)

Founder, AI Inbx · [@paukraft on X](https://x.com/paukraft)

5 November 2026 · 17 min read Updated 6 November 2026

TL;DR

I think AI Inbx is the best email API to build a cold-outreach or sales-engagement product on, because it handles the parts of outreach a team would otherwise build itself:

-   **Sending hours.** An hours rule holds mail outside the windows you set, such as weekdays 09:00 to 17:00 London time for `*@*.co.uk`. None of the other eleven APIs here documents a sending-hours setting. More
-   **Send limits that hold mail.** A limit rule caps sends per sending address, domain, recipient or recipient domain, and mail over the cap waits instead of failing. More
-   **Follow-ups in the right thread.** A reply from a colleague's address, or without reply headers, still lands on its thread, so the sequence stops when it should. More
-   **Out-of-office pauses.** An away reply arrives with `unavailable.back_on`, so the sequence waits until the person is back. More
-   **Opt-out replies.** A reply asking you to stop is suppressed for you and reported as `email.unsubscribed`. More
-   **A reputation for each customer.** One customer's bounces pause that customer alone. More
-   **A bill that follows the mail.** 600 reps' mailboxes and 300,000 emails a month come to $299 on AI Inbx and $900 to $2,700 on APIs that bill per connected account. More
-   **Built for volume.** Fewer tokens per reply, no model call on automated mail, attachments read once, and no limit on pacing rules on Scale. More

Five of the twelve products here require prior consent for non-transactional email, so their terms rule out cold sequences (terms). Another product is the better pick when sequences also run on LinkedIn or WhatsApp (Unipile), mailboxes sit at IMAP hosts (Unipile) or at Exchange or iCloud (Nylas, Aurinko), or mailbox data must stay on your servers (EmailEngine). On price, EmailEngine costs less in the 600-mailbox bill below, and so does Sendmux (now Qubrics) when every customer shares one team.

*I'm Pau, and I founded AI Inbx, so I'm not neutral, but I believe I've portrayed each provider fairly, including where it's the better pick. Everything said here about the other eleven products is from their public docs, terms and pricing as of November 2026, linked where it's used.*

I learned what outreach infrastructure needs by running it. The email agents I built for enterprises in the sourcing industry run in production and send and answer thousands of emails a month. Small things give automation away: an email that lands at 02:30 on a Sunday reads as automated, however good the copy.

## Sending hours

**On AI Inbx**, an hours rule sets weekly sending windows in a timezone, and mail outside them waits for the next window ([sending hours](https://docs.aiinbx.com/guides/pacing#sending-hours)). This rule keeps one customer's mail to `.co.uk` addresses to weekdays between 09:00 and 17:00 London time:

```
import AIInbx from "aiinbx"

const aiinbx = new AIInbx() // reads AI_INBX_API_KEY

// Mail to .co.uk addresses waits for weekdays, 09:00–17:00 London time.
await aiinbx.pacingRules.create({
  name: "UK recipients: weekdays 9–17",
  kind: "hours",
  space_id: "spc_...",
  match: [{ field: "to", pattern: "*@*.co.uk" }],
  schedule: {
    timezone: "Europe/London",
    windows: [{ days: [0, 1, 2, 3, 4], start_minute: 540, end_minute: 1020 }],
  },
})
```

-   Days run from 0 (Monday) to 6 (Sunday), and minutes count from local midnight, so 540 is 09:00. The timezone handles daylight saving time. Optional `jitter` opens and closes the window at a different minute each day, up to 60 minutes off the set time.
-   Your code sends as soon as a step is due. The send response's `pacing` field names the rule holding the mail and an `estimated_send_at`.
-   A rule's timezone is fixed. "The recipient's timezone" therefore means one rule per region you can match by address, or a `scheduled_at` your code works out per recipient.

**The other eleven** document no sending-hours setting. Nylas, Resend, SendGrid and EmailEngine schedule single messages for your code to time per recipient, Mailgun's Timezone Optimization delivers at a set local time per recipient on some plans, and Postmark can't schedule mail at all.

## Send limits

**On AI Inbx**, a limit rule caps sends per rolling window for each sending address, sending domain, recipient or recipient domain ([pacing](https://docs.aiinbx.com/guides/pacing)). Mail over the cap waits in a queue you can list and release by hand. This rule allows each sending address in the customer's space 30 sends a day:

```
await aiinbx.pacingRules.create({
  name: "30 a day per sender",
  kind: "limit",
  space_id: "spc_...",
  match: [{ field: "from", pattern: "*" }],
  limit: { scope: "from_address", amount: 30, per_seconds: 86_400 },
})
```

-   Swap `from_address` for `to_domain` to cap how much reaches one company, or `to_address` for "never more than one a day to the same person".
-   A rule in a customer's space stacks on your workspace-wide rules, so a customer can tighten your limits but never loosen them.
-   A workspace-wide `spread` from 0 to 100 varies the gaps between sends under a limit, so a stream doesn't go out on a metronome. The docs show warming a new domain as a limit rule you raise week by week.
-   Hours and limit rules also apply to mail sent through a connected Gmail or Outlook mailbox, so a shared mailbox stays under its provider's ceiling ([pacing](https://docs.aiinbx.com/guides/pacing)). Your product's own password resets skip the queue with `pacing: { skip: true }`.

Without limits like these, one customer's burst can get a mailbox throttled or flagged, and in my experience building them per customer yourself takes weeks. See [pacing](/features/pacing) and [sending hours](/features/sending-hours).

**Sendmux (now Qubrics)** holds mail over each sending account's own per-second to per-day quota. **Unipile**, **Nylas** Agent Accounts and **OpenMail** reject sends over their limits with 429; **EmailEngine** has one delay between deliveries for the whole instance, and **Mailgun's** limit is a monthly total that disables sending.

## Follow-ups in the thread

**On AI Inbx**, a follow-up step is `threads.reply(thread_id, { text })`. When the thread's latest email is your customer's own earlier step, the reply goes to whom that step was sent, in the same thread, with the subject and reply headers set ([replying](https://docs.aiinbx.com/guides/threads#replying)). Pass that step's `email_id` so an auto-reply arriving in between can't change whom it answers, and an `Idempotency-Key` so a retried job never sends it twice.

The prospect's answer has to land on that thread too, or the sequence keeps mailing someone who already replied. On AI Inbx a reply from a colleague's address, without reply headers or under a changed subject still joins its conversation. A shared subject alone never merges two conversations, and when a reply could belong to either, a new thread starts ([threading](/features/threading)). AI Inbx recognises the conversation a reply continues the way a person reading it would, so your sequence logic never has to search a prospect's earlier mail to work out whether they already answered. `stripped_text` then holds what the prospect wrote without the quoted sequence, and keeps answers typed inline next to the lines they answer. If your webhook endpoint was down when a reply came in, [`GET /events`](https://docs.aiinbx.com/webhooks#catching-up) returns what it missed, so no answer goes unseen while the sequence keeps mailing.

A step can also wait for a person. `draft: true` stores it unsent for a rep to approve in your product, which sends it with `emails.sendDraft`. A `scheduled_at` send, up to 30 days ahead, can be moved, edited or cancelled until its time comes.

**Unipile**, **Nylas** and **OpenMail** reply to a message but need the recipients in the request. Their threads follow reply headers or Gmail's and Outlook's own threading: OpenMail's docs say a message whose headers match nothing starts a new thread, and Unipile and Nylas don't describe what happens to such a reply. On all three, your code has to search the prospect's earlier mail itself to know whether they already answered. **Aurinko's** [follow-up rules](https://docs.aurinko.io/unified-apis/follow-up-rules-api) send drip follow-ups from a template, and Amazon SES, Mailgun, SendGrid and Postmark have no thread to reply to.

## Out-of-office pauses

**On AI Inbx**, every inbound email arrives as one `email.received` event with a `thread_id` and a `category`: `human`, `out_of_office`, `auto_reply`, `bounce` and others. An autoresponder never counts as a reply, and an away reply carries `unavailable`: the `reason` (`absent`, `left` or `unmonitored`), `back_on` (the first day back) and the `contacts` the reply names ([what automated mail asks for](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for)). A handler that stops, pauses or ends a sequence:

```
import { verifyWebhookRequest } from "aiinbx"
import { pauseSequenceUntil, stopSequence, stopSequencesTo } from "./sequences"

export async function POST(request: Request) {
  const event = await verifyWebhookRequest(
    request,
    process.env.AI_INBX_WEBHOOK_SECRET!
  )

  if (event.type === "email.received") {
    const { category, unavailable, thread_id } = event.data
    if (category === "human") await stopSequence(thread_id)
    else if (unavailable?.back_on)
      await pauseSequenceUntil(thread_id, unavailable.back_on)
  }

  // A link, one-click or written opt-out. The address is already suppressed.
  if (event.type === "email.unsubscribed") {
    await stopSequencesTo(event.data.address)
  }

  return new Response(null, { status: 204 })
}
```

With `contacts`, a sequence can move to the colleague the reply names instead of waiting.

**None of the other eleven** documents a return date as a field. **EmailEngine** flags `isAutoReply`, **OpenMail** gives a category and an `auto_replyable` flag, **Nylas** reports automated replies on connected Google and Microsoft accounts as a `message.bounce_detected` event, and **Postmark** reports some as AutoResponder bounces; Unipile, Aurinko, Sendmux, Amazon SES, Mailgun, SendGrid and Resend document no auto-reply field.

## Opt-out replies

**On AI Inbx**, a recipient who writes back asking you to stop is suppressed for you and reported as `email.unsubscribed` with `source: "reply"`, next to `link` and `one_click` unsubscribes ([suppressions](https://docs.aiinbx.com/guides/suppressions#reacting-to-the-events)). You don't need to read replies to honour it; the handler above only stops the sequences. An `{{unsubscribe_url}}` placeholder in the body becomes the recipient's personal unsubscribe link, whatever template engine rendered it, and [suppression lists](/features/suppressions) are keyed, so an opt-out from one campaign key stops that campaign without blocking other mail from the customer.

**None of the other eleven** documents this. **Unipile** and **Nylas** ship no suppression list, Aurinko describes none, and Sendmux's cold outreach guide leaves suppression and opt-outs to you; the others suppress bounces, complaints or unsubscribe links, and none of them describes recognising a written request.

## A reputation for each customer

**On AI Inbx**, a [space](/features/spaces) holds one customer's domains, mailboxes, pacing rules, suppression lists and sending reputation. Bounces and complaints count against the space the mail left from, and a space whose rates cross the line is paused by itself while every other customer keeps sending. A pause has no event of its own yet: you see it as that space's sends failing until it lifts.

Suppressions follow the same split. A complaint lands on the customer's own list, and a bounce that shows an address is dead lands on your workspace-wide list, so no other customer mails it either. Mailbox providers judge every subdomain of one wildcard such as `*.saas.com` as `saas.com`, so a customer who wants a reputation wholly their own sends from their own domain.

**Unipile**, **Nylas**, **EmailEngine** and **Aurinko** send from each user's own mailbox, so each rep's reputation is their own mailbox's; **OpenMail** suspends a single inbox or customer group (pod), and **Amazon SES** tenants (an add-on) pause one tenant without the others. **Resend's** multi-tenant guide says tenants in one account share a reputation, and Mailgun, SendGrid and Postmark separate customers through subaccounts, subusers or dedicated IPs on higher plans or contracts.

## Bot opens

**On AI Inbx**, open and click events carry `bot` and `bot_reason`, marking Apple Mail Privacy Protection fetches and security scanners, so your code can skip a scanner's click instead of sending a "they clicked" follow-up. Of the products here whose terms leave room for outreach, none documents a flag for Apple Mail Privacy Protection opens.

**Amazon SES** (`isBotEvent`) and **Mailgun** (`client-info.bot`) flag bot events too, and SendGrid marks Apple Mail Privacy Protection opens but not scanners. **Nylas**, **Postmark** and **Resend** say privacy features or scanners can trigger opens with no flag to tell them apart, EmailEngine drops some scanner ranges but reports privacy-relay opens, and OpenMail doesn't track opens.

## Addresses and domains

**On AI Inbx**, every address on a verified domain sends and receives with nothing to create, so a customer's sending addresses across several domains need no mailbox each and are never counted on the bill. Domains and mailboxes are unlimited from $29 a month (Growth).

Customers verify their own domains through DNS, with a [diagnostics call](https://docs.aiinbx.com/guides/domains) that reads the live zone and names the record that's wrong. Verify a wildcard such as `*.saas.com` once and each customer gets `customer.saas.com` from the API with no DNS of their own. Reps [connect Gmail and Outlook](/features/mailboxes) through your own Google and Microsoft OAuth apps, and both kinds of address share the same threads, events, reply call and pacing rules.

**Sendmux (now Qubrics)** connects Gmail and Outlook as send-only accounts, and **OpenMail** hosts inboxes of its own without connecting existing mailboxes.

## Built for agents at volume

I built AI Inbx for email agents at scale. The same API serves an agent that sends a few emails a day and a platform whose agents send thousands, and every part is meant to keep the work per email small as the volume grows:

-   **Fewer tokens per reply.** On a long thread the agent reads `stripped_text`, what is new, not the whole conversation again with every reply. I think it is the best reply stripping you can get from an email API.
-   **No model call on mail that needs none.** `category` also marks bounces and verification mail, so your code hands only mail from people to the agent.
-   **Attachments read once.** Their text arrives with the email, so no agent parses the same PDF again.
-   **Rules at platform size.** Pacing rules are checked on every send: up to 100 on Developer, 1,000 on Growth and no limit on Scale.

## Whose terms allow cold outreach?

Four products allow or document outreach with a lawful-use condition, EmailEngine and Aurinko don't address it, Nylas's pages differ, and five require prior consent for non-transactional email. Quoted from each provider's terms and docs as of November 2026:

| Product | What the terms say |
| --- | --- |
| AI Inbx | Allowed where the law allows it. The [Acceptable Use Policy](/acceptable-use#permission): "Marketing email requires prior consent wherever the applicable law requires it, unless a specific statutory exception applies." The policy does not count "a public email address, a purchased or scraped list, or a GDPR legitimate interest alone" as permission. |
| OpenMail | Allowed with conditions. The [terms](https://openmail.sh/terms) permit "individual, relevant business-to-business outreach without prior opt-in" when, among other conditions, it is lawful, goes to business addresses not harvested, scraped or bought, is sent from your own verified domain, offers an opt-out, and has no more than two follow-ups. |
| Sendmux (now Qubrics) | Allowed through accounts you own. The [cold outreach guide](https://sendmux.ai/docs/use-cases/cold-email-outreach) routes it through your own sending accounts to "a prospect list you may lawfully contact"; "Managed Amazon SES is for transactional email only." |
| Unipile | Lawful use required, outreach marketed. The [terms](https://www.unipile.com/terms-of-use/) require use "only for lawful purposes" and within connected platforms' terms; the [outreach page](https://www.unipile.com/use-case-outreach/) describes campaigns "sent on behalf of your users from their own Gmail, Outlook, or IMAP mailboxes". |
| EmailEngine | Not addressed. The [licence](https://emailengine.dev/license.html) has no clause on unsolicited email; mail leaves through each connected mailbox, so that mail provider's terms apply. |
| Aurinko | Not addressed. The [terms](https://www.aurinko.io/terms/) say "You agree to comply with all applicable laws" and "You must comply with all applicable Third-Party rules, including those imposed by Google and Microsoft." |
| Nylas | The pages differ. The [Terms of Use](https://www.nylas.com/legal/terms/) bar sending "any unsolicited or unauthorized advertising, promotional materials, email, junk mail, spam, chain letters or other form of solicitation"; the [Agent Accounts docs](https://developer.nylas.com/docs/v3/agent-accounts/) list a sales agent that "runs cold outreach campaigns". |
| Amazon SES | Prior consent. The [AWS Acceptable Use Policy](https://aws.amazon.com/aup/) prohibits "unsolicited mass email"; [production access](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html) asks you to agree "to only send email to individuals who've explicitly requested it". |
| Mailgun | Prior consent. The [acceptable use policy](https://www.mailgun.com/legal/aup/) allows non-transactional email only to "recipients who have granted clear, explicit and provable consent", and says "Acquiring or sending to a third-party mailing list is prohibited." |
| SendGrid | Prior consent. The [email terms](https://www.twilio.com/en-us/legal/service-country-specific-terms/email) say "you must obtain affirmative consent prior to sending any emails to a recipient" for non-transactional email, and prohibit sending to addresses "obtained from the Internet or social media without obtaining prior affirmative consent". |
| Postmark | Prior consent. The [terms](https://postmarkapp.com/terms-of-service) say "All email lists contained and/or used with respect to the Service must be permission-based subscriptions." |
| Resend | Prior consent. The [Acceptable Use Policy](https://resend.com/legal/acceptable-use) says "You are prohibited from sending unsolicited messages of any kind, including cold outreach, purchased lists, or scraped contact data." |

The provider's terms are one layer. Outreach also has to follow the law where the recipients are, and mail sent through a connected Gmail or Outlook mailbox falls under Google's or Microsoft's rules as well. If you build on Nylas, ask them which of their pages applies to your contract; their Terms of Use give way to a signed order form where one exists.

## Feature by feature

Each cell links its source. The first table holds the products that connect mailboxes or host inboxes, the second the sending services.

| Feature | AI Inbx | Unipile | Nylas | EmailEngine | Aurinko | Sendmux | OpenMail |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Receiving |
| **Threads that hold without reply headers** Replies join their conversation even when they arrive without reply headers: a colleague answering from another address, a client that drops them, a changed subject. Partial: threads are grouped by reply headers, or by the mailbox provider's own threading, and nothing more is documented. | **Yes** Every email belongs to a thread, including replies that arrive without reply headers, from a colleague's address or under a changed subject; threads are listed, read and replied to through the API. Replies join their conversation even when a client mangles or drops the reply headers, a colleague answers from another address or the subject changes; a shared subject alone never merges two conversations. [1](https://docs.aiinbx.com/guides/threads) [2](https://docs.aiinbx.com/guides/receiving#threading) [3](https://aiinbx.com/features/threading) | **Partial** Get a Thread returns a thread's emails for Gmail, Outlook and IMAP; on IMAP servers without thread IDs the thread is derived from References, In-Reply-To or Message-ID and may be incomplete, and replies without reply headers are not described. [1](https://developer.unipile.com/v2.0/reference/getthread) [2](https://developer.unipile.com/v2.0/docs/list-emails) [3](https://developer.unipile.com/v2.0/reference/getemail) | **Partial** For Google and Microsoft accounts the Threads API returns the provider's own Gmail threads and Outlook conversations; Nylas groups IMAP mail itself, and Agent Account replies are linked by In-Reply-To and References, with replies without those headers not described. [1](https://developer.nylas.com/docs/v3/email/threads/) [2](https://developer.nylas.com/docs/v3/agent-accounts/email-threading/) | **Partial** Messages carry the mailbox provider's threadId (Gmail, Microsoft Graph, IMAP servers with OBJECTID) and can be searched by it; listings are not grouped by thread, and other IMAP servers give no thread ID. [1](https://learn.emailengine.app/docs/sending/threading) [2](https://learn.emailengine.app/docs/sending/threading/provider-support) | **Partial** Each message carries a threadId and GET /email/conversations/{threadId} returns a conversation; on IMAP accounts without threads Aurinko groups mail itself, and how replies without reply headers are grouped is not described. [1](https://apirefs.aurinko.io/#tag/Messages) | **Partial** The Mailbox API lists conversation threads and their messages, which carry in\_reply\_to and references; how replies without reply headers are grouped is not described. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/threads) [2](https://sendmux.ai/docs/api/mailbox-api/list-mailbox-threads) [3](https://app.sendmux.ai/api/v1/openapi.json) | **Partial** Threading matches In-Reply-To and References against earlier Message-IDs, and the docs state that a message with no match starts a new thread; threads can be listed per inbox and read in order. [1](https://docs.openmail.sh/concepts/threading) |
| **Out-of-office with return date** Out-of-office and other automatic replies are flagged on the message, with the day the sender is back and the colleague they name as fields. Partial: automatic replies are flagged, without those details. | **Yes** Every inbound email has a category such as human, out\_of\_office or auto\_reply, and an away reply carries the reason, return day and named contacts when it states them. An out\_of\_office or auto\_reply email carries unavailable with the reason (absent, left or unmonitored), back\_on for the first day back and the contacts the reply names, each when the reply states it. [1](https://docs.aiinbx.com/guides/receiving#categories) [2](https://aiinbx.com/solutions/auto-reply-detection) [3](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for) | **No** The Email object has no auto-reply flag; the raw headers are returned for you to inspect. Bounces get their own \`email.new.bounce\` event. [1](https://developer.unipile.com/v2.0/reference/getemail) [2](https://developer.unipile.com/v2.0/docs/bounce-detection) | **Partial** Automated replies to mail sent through Nylas are reported on Google and Microsoft grants as a message.bounce\_detected event with type automated\_reply, not a flag on the message, and Nylas states that detection doesn't extract return dates. [1](https://developer.nylas.com/docs/v3/email/send-email/) | **Partial** Every message carries isAutoReply: true when its subject or headers look like an automatic reply; the documented messageNew fields include no return date or alternative contact. [1](https://learn.emailengine.app/docs/receiving/tracking-replies) [2](https://learn.emailengine.app/docs/webhooks/messagenew) | **Not documented** No out-of-office or auto-reply flag is described on the email message. [1](https://apirefs.aurinko.io/#tag/Messages) | **Not documented** Flagging of out-of-office or other automatic replies is not documented. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/message-content) [2](https://sendmux.ai/docs/webhooks/setup) | **Partial** Each inbound message has a category (personal, automated, marketing, bounce, spam or malicious) and an auto\_replyable flag; the documented fields include no return date or alternative contact. [1](https://docs.openmail.sh/pages/webhooks/events) [2](https://api.openmail.sh/openapi.json) |
| Mailboxes |
| **Your own domains** Send and receive on domains you own, verified through DNS. | **Yes** Domains are added through the API and verified through SPF, DKIM, DMARC, return-path and inbound MX records, with a diagnostics call that reports what the live DNS zone is missing. [1](https://docs.aiinbx.com/guides/domains) | **Partial** You send and receive on your own domain through a linked Google, Microsoft or IMAP mailbox, whose provider handles the domain; Unipile's Custom Domains feature verifies hostnames for Hosted Auth and email tracking. [1](https://developer.unipile.com/v2.0/docs/custom-domains) [2](https://developer.unipile.com/v2.0/docs/send-emails) | **Yes** Agent Accounts send and receive on a domain you verify with MX and TXT records; custom sending domains are included from the Essentials plan (1), with the Free plan on a nylas.email trial domain. [1](https://developer.nylas.com/docs/v3/agent-accounts/dns-provider-setup/) [2](https://www.nylas.com/pricing/) | **Partial** Mail is sent and received as the connected mailbox's own address, so a domain works through the mail provider that hosts it; EmailEngine has no domain verification of its own. [1](https://emailengine.app/) [2](https://learn.emailengine.app/docs/sending/basic-sending) | **Partial** Mail is sent and read through connected mailboxes, so it uses whatever domain that mailbox has at its provider; Aurinko has no DNS domain verification of its own. [1](https://docs.aurinko.io/getting-started/readme) [2](https://docs.aurinko.io/authentication/configuring-imap-provider-connections-in-aurinko) | **Yes** Custom domains are verified through DNS as sending only (TXT, CNAME) or sending & receiving (TXT, CNAME, MX). [1](https://sendmux.ai/docs/domains) | **Partial** Custom domains are verified through MX, DKIM and MAIL FROM records (DMARC is recommended but not checked) and are available on Pro and Enterprise, not on Free. [1](https://docs.openmail.sh/concepts/custom-domains) |
| **Subdomains for each customer** Each of your customers can get their own subdomain to send and receive on, without them editing DNS. | **Yes** After one wildcard domain such as \*.saas.com is verified, each customer's subdomain is created through the API with no DNS of its own, and can be placed in that customer's space. [1](https://docs.aiinbx.com/guides/domains#wildcards-and-subdomains) [2](https://aiinbx.com/features/wildcard-domains) | **No** Unipile works on mailboxes your customers already have at Google, Microsoft or an IMAP host; it does not provision sending or receiving domains. [1](https://developer.unipile.com/v2.0/docs/link-email-accounts) | **Partial** Each customer subdomain is registered as its own domain with MX and TXT records that you publish, and plans include 1 (Essentials), 10 (Pro) or 20 (Pro annual) custom sending domains; nylas.email trial subdomains need no DNS and are documented for prototyping and demos. [1](https://developer.nylas.com/docs/v3/agent-accounts/dns-provider-setup/) [2](https://developer.nylas.com/docs/v3/agent-accounts/provisioning/) [3](https://www.nylas.com/pricing/) | **No** EmailEngine works with mailboxes that already exist at a mail provider and does not provision domains or subdomains. [1](https://emailengine.app/) [2](https://learn.emailengine.app/capabilities.json) | **No** Aurinko connects existing provider mailboxes and does not provision domains or subdomains. [1](https://docs.aurinko.io/getting-started/readme) | **Not documented** Addresses on the shared myagent.mx domain need no DNS; per-customer subdomains without DNS edits are not documented. [1](https://sendmux.ai/docs/domains) | **Partial** A custom domain, which can be a subdomain, can be scoped to one customer's pod; each domain is added and verified with its own DNS records. [1](https://docs.openmail.sh/concepts/pods) [2](https://docs.openmail.sh/concepts/custom-domains) |
| **Connect users' Gmail** Read and send from a user's existing Gmail or Google Workspace mailbox after they grant access. | **Yes** Users connect Gmail or Google Workspace over OAuth through your own Google OAuth app, from a hosted page, a link or the API; mail syncs in and can be sent as the account and its Send-as aliases. [1](https://docs.aiinbx.com/guides/mailboxes) [2](https://aiinbx.com/features/mailboxes) | **Yes** Gmail and Google Workspace accounts link through OAuth, by default on Unipile's verified Google app with the CASA assessment included, or on your own Google app. [1](https://developer.unipile.com/v2.0/docs/link-email-accounts) [2](https://www.unipile.com/pricing-api/) | **Yes** A Google connector lets users grant OAuth access to Gmail. [1](https://developer.nylas.com/docs/provider-guides/google/) | **Yes** Gmail and Google Workspace accounts connect over the Gmail API or IMAP/SMTP with OAuth2, including service accounts with domain-wide delegation. [1](https://learn.emailengine.app/docs/accounts/gmail/gmail-api) [2](https://learn.emailengine.app/docs/accounts/gmail/gmail-imap) [3](https://learn.emailengine.app/docs/accounts/gmail/google-service-accounts) | **Yes** Google accounts connect through Aurinko's OAuth flow using the customer's own Google OAuth application; Aurinko does not provide a shared verified Google app. [1](https://docs.aurinko.io/unified-apis/email-api) [2](https://docs.aurinko.io/faq/does-aurinko-provide-a-shared-verified-google-oauth-application) | **Partial** Gmail and Google Workspace accounts connect as sending accounts with the gmail.send scope only; reading their mail is not requested. [1](https://sendmux.ai/docs/sending/accounts/google-microsoft) | **No** OpenMail gives each agent a dedicated inbox it hosts, not a shared mailbox; connecting an existing Gmail account is not part of the product (an inbox can forward copies to Gmail). [1](https://openmail.sh/llms.txt) [2](https://api.openmail.sh/openapi.json) |
| **Connect users' Outlook** Read and send from a user's existing Outlook or Microsoft 365 mailbox after they grant access. | **Yes** Users connect Outlook or Microsoft 365 over OAuth through your own Microsoft Entra app, from a hosted page, a link or the API; mail syncs in and can be sent as the account. [1](https://docs.aiinbx.com/guides/mailboxes) [2](https://aiinbx.com/features/mailboxes) | **Yes** Outlook and Microsoft 365 accounts link through OAuth, including Outlook shared mailboxes the signed-in user has rights on. [1](https://developer.unipile.com/v2.0/docs/link-email-accounts) [2](https://www.unipile.com/pricing-api/) | **Yes** The Microsoft connector covers Microsoft 365, Exchange Online, Exchange Server 2003+ and personal Outlook.com accounts, and an EWS connector covers Exchange on-prem. [1](https://developer.nylas.com/docs/provider-guides/microsoft/) [2](https://developer.nylas.com/docs/provider-guides/exchange-on-prem/) | **Yes** Outlook.com and Microsoft 365 accounts connect over Microsoft Graph or IMAP/SMTP with OAuth2, plus app-only access and shared mailboxes. [1](https://learn.emailengine.app/docs/accounts/microsoft-365/outlook-365) | **Yes** Office 365, Outlook.com and MS Exchange (EWS) mailboxes connect through OAuth or service accounts. [1](https://docs.aurinko.io/unified-apis/email-api) [2](https://docs.aurinko.io/authentication/office-365-oauth-setup) | **Partial** Outlook and Microsoft 365 accounts connect as sending accounts with Mail.Send only; reading their mail is not requested. [1](https://sendmux.ai/docs/sending/accounts/google-microsoft) | **No** OpenMail gives each agent a dedicated inbox it hosts, not a shared mailbox; connecting an existing Outlook account is not part of the product. [1](https://openmail.sh/llms.txt) |
| **IMAP and SMTP** Connect mailboxes over IMAP, or send and read through SMTP/IMAP credentials. | **No** AI Inbx is an HTTP API with no SMTP relay, and mailboxes connect over Google and Microsoft OAuth, not IMAP. [1](https://aiinbx.com/solutions/send-email-api) [2](https://docs.aiinbx.com/guides/mailboxes) | **Yes** Any other provider links with its IMAP and SMTP settings; listing emails across all folders of an IMAP account needs Initial Sync. [1](https://developer.unipile.com/v2.0/docs/link-email-accounts) [2](https://developer.unipile.com/v2.0/docs/list-emails) | **Yes** Connected IMAP accounts are read over IMAP and sent through SMTP, and Agent Accounts can be opened in mail clients over IMAP and SMTP submission on paid plans. [1](https://developer.nylas.com/docs/provider-guides/imap/) [2](https://developer.nylas.com/docs/v3/agent-accounts/mail-clients/) | **Yes** Any IMAP/SMTP server can be connected with credentials, and EmailEngine also runs its own SMTP submission server and IMAP proxy. [1](https://learn.emailengine.app/docs/accounts/imap-smtp) [2](https://learn.emailengine.app/docs/sending/smtp-interface) | **Yes** IMAP accounts connect with an email address, password or app password and IMAP/SMTP server settings; mail is read over IMAPS and sent through the account's SMTP server. [1](https://docs.aurinko.io/authentication/configuring-imap-provider-connections-in-aurinko) | **Yes** Each mailbox password works for IMAP retrieval and SMTP submission, and custom SMTP accounts can be added as sending providers. [1](https://sendmux.ai/docs/mailboxes) [2](https://sendmux.ai/docs/sending/smtp) [3](https://sendmux.ai/docs/sending/accounts) | **No** Not in the API reference: access is through the REST API, webhooks, WebSocket, CLI and MCP server, with no IMAP or SMTP access listed. [1](https://openmail.sh/llms.txt) [2](https://api.openmail.sh/openapi.json) |
| Sending |
| **Configurable send limits** You set limits such as N per hour per sending address or per recipient domain, and the provider holds mail back to keep to them. | **Yes** Limit rules cap sends per rolling window for the rule, each sending address, sending domain, recipient or recipient domain, and hold the rest until there is room; plans set how many active rules a workspace holds. [1](https://docs.aiinbx.com/guides/pacing#rate-limits) [2](https://aiinbx.com/features/pacing) | **Partial** Per-account and per-method rate limits are configurable in the Dashboard, but requests over a limit are rejected with 429 rather than held and sent later. [1](https://developer.unipile.com/v2.0/docs/rate-limits) | **Partial** For Agent Accounts a policy sets a daily send quota per account, and sends over it return HTTP 429 rather than being held; connected mailboxes follow their provider's limits. [1](https://developer.nylas.com/docs/v3/agent-accounts/policies-rules-lists/) [2](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) | **Partial** EENGINE\_SUBMIT\_DELAY, a startup setting, puts a fixed pause between deliveries on each submit worker for the whole instance; per-mailbox or per-recipient-domain limits are not described, and the docs suggest throttling in your application. [1](https://learn.emailengine.app/docs/sending/basic-sending) [2](https://learn.emailengine.app/docs/sending/deliverability/suppression-lists) [3](https://learn.emailengine.app/docs/sending/outbox-queue) | **Not documented** No configurable send limits are described; the API reference states a limit of 250 API requests per second. [1](https://apirefs.aurinko.io/#tag/RateLimiting) | **Yes** Your own sending accounts take per-second, per-minute, per-hour and per-day quotas, and mail over an account's cap is held; the managed Amazon SES account's quotas cannot be edited. [1](https://sendmux.ai/docs/use-cases/cold-email-outreach) [2](https://sendmux.ai/docs/sending/accounts) | **Not documented** OpenMail applies its own per-inbox burst limit (10/minute) and a new-recipient cap and rejects sends over them with a 429; limits you set yourself are not documented, and Enterprise caps are negotiated with OpenMail. [1](https://docs.openmail.sh/concepts/rate-limits) |
| **Sending hours** You set the hours mail may go out, for example weekdays 9–17 in a timezone, and mail outside them waits. | **Yes** Hours rules set weekly sending windows in an IANA timezone, optionally opening and closing at a varying minute each day; mail outside them waits. [1](https://docs.aiinbx.com/guides/pacing#sending-hours) [2](https://aiinbx.com/features/sending-hours) | **No** Emails are sent when the API is called; the send request has no time-window or scheduling field. [1](https://developer.unipile.com/v2.0/reference/sendemail) | **Not documented** The docs describe per-message send\_at scheduling; no setting for allowed sending hours was found. [1](https://developer.nylas.com/docs/v3/email/scheduled-send/) | **No** Each message can carry its own sendAt time; the docs list scheduling and send volume as your application's job. [1](https://learn.emailengine.app/docs/sending/deliverability/suppression-lists) [2](https://learn.emailengine.app/docs/sending/outbox-queue) | **Not documented** No sending-hours setting is described for email sends. [1](https://apirefs.aurinko.io/#tag/Messages) | **Not documented** Sending windows by time of day are not documented. [1](https://sendmux.ai/docs/sending/accounts) | **No** Not in the API reference: the send endpoint has no scheduling field and no sending-window setting is listed, so mail goes out when it is sent. [1](https://docs.openmail.sh/concepts/rate-limits) [2](https://docs.openmail.sh/api-reference/messages/send-email) |
| **Opt-out replies suppressed** A reply asking not to be emailed again is recognised and the address is suppressed without your code reading it. | **Yes** A reply asking to stop is recognised as an opt-out and suppressed automatically, reported as email.unsubscribed with source reply. [1](https://docs.aiinbx.com/guides/suppressions#reacting-to-the-events) [2](https://docs.aiinbx.com/webhooks/events/email-unsubscribed) | **No** Unipile has no suppression list, and its docs point bounce handling and compliance with email regulations to dedicated providers such as Mailgun, Postmark or Resend. [1](https://developer.unipile.com/v2.0/docs/send-emails) [2](https://developer.unipile.com/v2.0/docs/bounce-detection) | **No** Nylas states it doesn't ship unsubscribe handling or suppression lists. [1](https://developer.nylas.com/docs/cookbook/email/sendgrid-alternative/) | **Not documented** Suppression lists record one-click List-Unsubscribe opt-outs from mail-merge sends; opt-outs written in a reply are not described. [1](https://learn.emailengine.app/docs/sending/deliverability/suppression-lists) [2](https://learn.emailengine.app/docs/webhooks/listunsubscribe) | **Not documented** No suppression list or opt-out handling is described in the API reference. [1](https://apirefs.aurinko.io/#tag/Messages) | **Not documented** Recognising opt-out requests in replies is not documented; the cold outreach guide asks senders to settle their own suppression and opt-out handling. [1](https://sendmux.ai/docs/use-cases/cold-email-outreach) | **Not documented** Suppression is documented for hard bounces, spam complaints and one-click unsubscribes; opt-outs written in a reply are not described. [1](https://docs.openmail.sh/concepts/suppressions) |
| **Bot opens filtered** Opens from privacy proxies and security scanners (such as Apple Mail Privacy Protection) are marked or separated from human opens. | **Yes** Every open and click event carries bot and bot\_reason, marking Apple Mail Privacy Protection fetches, security scanners and other automated hits. [1](https://docs.aiinbx.com/webhooks/events/email-opened#bot-detection) [2](https://docs.aiinbx.com/webhooks/events/email-clicked) [3](https://aiinbx.com/solutions/email-open-tracking) | **Not documented** The \`tracking.open\` event carries ip, user\_agent, date and label; handling of privacy-proxy or scanner opens is not documented. [1](https://developer.unipile.com/v2.0/reference/event-types-1) | **No** Nylas's docs say Apple Mail Privacy Protection preloads the pixel, so Nylas may report an open the recipient never made, and advise treating opens as a soft signal. [1](https://developer.nylas.com/docs/cookbook/use-cases/automate/automate-customer-onboarding/) [2](https://developer.nylas.com/docs/cookbook/use-cases/build/track-email-opens/) | **Partial** Requests from Google's crawler ranges and barracuda.com or spfbl.net scanners are dropped; opens through privacy relays such as Apple Mail Privacy Protection are reported as opens. [1](https://learn.emailengine.app/docs/webhooks/trackopen) | **Not documented** Open events carry userAgent and remoteAddr, and a message's opens and clicks can be set to ignored by hand; no automatic bot or privacy-proxy flag is described. [1](https://apirefs.aurinko.io/#tag/EmailTracking) [2](https://docs.aurinko.io/unified-apis/webhooks-api) | **Not documented** Open reporting and bot-open filtering are not documented. [1](https://sendmux.ai/docs/webhooks/setup) | **No** OpenMail does not track opens, so there are no opens to filter. [1](https://docs.openmail.sh/best-practices/email-deliverability) |
| Platform |
| **SOC 2 report** A SOC 2 Type II report is available to customers. | **No** No SOC 2 report is published; the DPA offers security documentation, questionnaire responses and one customer audit a year. [1](https://aiinbx.com/dpa#assistance) | **Yes** SOC 2 Type II certified; the report is available on request through the security documentation form. [1](https://www.unipile.com/security-compliance/) | **Yes** The SOC 2 Type II report is available under NDA to current and prospective customers through the Nylas Trust Center. [1](https://www.nylas.com/security/) | **No** EmailEngine is self-hosted software, so its docs say certifications such as SOC 2 apply to your deployment, not to EmailEngine itself. [1](https://learn.emailengine.app/docs/deployment/compliance) | **No** The security statement (updated June 18, 2026) says Yoxel, Inc. is preparing for its SOC 2 Type I examination, targeted for Q3 2026, and offers a security questionnaire package on request. [1](https://www.aurinko.io/certifications/) | **No** Asked whether it is SOC 2 or otherwise certified, the enterprise page says Sendmux is not certified against a specific standard yet and that certifications are on its roadmap. [1](https://sendmux.ai/solutions/enterprise/) | **Not documented** The pricing page, docs and terms do not mention a SOC 2 report. [1](https://openmail.sh/pricing) [2](https://openmail.sh/terms) |
| Policy |
| **No charge per address** The price doesn't depend on how many addresses, inboxes or mailboxes you use; it follows email volume or a flat fee. | **Yes** Price follows emails per month; addresses are never counted or charged. Developer ($5/month) caps custom domains at 50 and connected mailboxes at 100; both are unlimited from Growth ($29/month). [1](https://aiinbx.com/pricing) [2](https://docs.aiinbx.com/guides/billing#domains-mailboxes-and-pacing-rules) | **No** The pricing page bills per connected account, whatever the channel, from 49.00 € per month for up to 10 accounts and 5.00 € per account per month for 11–50. [1](https://www.unipile.com/pricing-api/) [2](https://developer.unipile.com/v2.0/docs/billing) | **No** Plans include a set number of connected accounts and Agent Accounts, and each additional connected account is charged (+$2.25 per account on Essentials, +$2.00 on Pro monthly). [1](https://www.nylas.com/pricing/) | **Yes** One annual subscription (€1,200 / $1,450 per year) covers unlimited connected mailboxes, with no per-mailbox or per-message metering. [1](https://emailengine.app/) [2](https://learn.emailengine.app/docs/licensing) | **No** Aurinko bills monthly per active connected account, from $1.50 per active account per month for email. [1](https://docs.aurinko.io/faq/how-does-aurinko-billing-work) [2](https://www.aurinko.io/pricing/) | **Partial** No per-seat or per-mailbox fees, but each isolated customer is its own team at $7 a month on Pro, on top of usage billed per event; Free holds 2 mailboxes. [1](https://sendmux.ai/pricing/) | **No** Free has 3 inboxes as a hard cap; Pro includes 10 inboxes and then bills €1 per extra inbox per month. [1](https://openmail.sh/pricing) |
| **Cold outreach allowed** The terms or acceptable use policy allow sending unsolicited B2B outreach, within the law. | **Yes** The Acceptable Use Policy allows marketing email that the applicable law permits and bans unlawful unsolicited email, stating that a public address, a scraped list or legitimate interest alone is not permission. [1](https://aiinbx.com/acceptable-use#permission) [2](https://aiinbx.com/use-cases/cold-outreach) | **Yes** The terms require lawful use and compliance with connected platforms' terms, and Unipile markets email outreach sequences sent from users' own mailboxes. [1](https://www.unipile.com/terms-of-use/) [2](https://www.unipile.com/use-case-outreach/) | **Partial** The Terms of Use bar sending 'any unsolicited or unauthorized advertising, promotional materials, email ... or other form of solicitation', while the Agent Accounts docs list a sales agent that 'runs cold outreach campaigns' as a use case. [1](https://www.nylas.com/legal/terms/) [2](https://developer.nylas.com/docs/v3/agent-accounts/) | **Not documented** The EmailEngine licence agreement does not address unsolicited email; mail leaves through each connected mailbox, so that mail provider's terms apply. [1](https://emailengine.dev/license.html) [2](https://learn.emailengine.app/docs/sending/mail-merge) | **Not documented** The terms do not address unsolicited email; they require compliance with applicable laws and with Google's and Microsoft's rules. [1](https://www.aurinko.io/terms/) | **Yes** Cold outreach is a documented use case through your own Gmail, Outlook or SMTP accounts to prospects you may lawfully contact; the managed Amazon SES route is for transactional email only. [1](https://sendmux.ai/docs/use-cases/cold-email-outreach) [2](https://sendmux.ai/acceptable-use/) | **Yes** The terms allow individual, relevant B2B outreach without prior opt-in where lawful, from your own verified domain, to non-purchased business addresses, with opt-out and at most two follow-ups; a daily cap on new recipients applies. [1](https://openmail.sh/terms) [2](https://docs.openmail.sh/concepts/rate-limits) |
| Pricing |
| What you pay for | Monthly plans by emails per month, sent and received both counting; plans also set how many custom domains, managed mailboxes and active custom pacing rules a workspace holds, and an allowance of advanced attachment processing pages. | Per connected account per month, whatever the channel. Billed on the peak number of accounts linked at the same time during the period, with no per-request or per-message fees. | Monthly plan fee plus per-unit overage: connected accounts, Agent Accounts (per account), and Agent Account emails sent, storage and bandwidth. | Flat annual subscription per company, not per mailbox, instance or API call; you run the servers (EmailEngine plus Redis) yourself. | Billed monthly per active connected account (an account with more than 10 API calls or more than 1 MB of transferred data in the month); the same mailbox connected several times counts once. | Per event: $0.50 per 1,000 provider-accepted recipients through your own providers, $0.75 per 1,000 through managed sending, $0.50 per 1,000 inbound mailbox deliveries, $0.02 per GB-month of storage, plus $7 per team per month on Pro. No per-seat or per-mailbox fees. | A monthly plan plus usage: Pro includes 10 inboxes, 10,000 emails and 10 GB storage, then bills per extra inbox, email and GB; seats are not billed. |
| Free tier | No free plan: the pricing FAQ says Developer is $5 a month and includes 5,000 emails. | 7-day free trial, no credit card required, up to 10 connected accounts. | Free, $0/month: 5 connected accounts, 3 Agent Accounts, 3,000 Agent Account emails/month, 3 GB storage and bandwidth; no custom sending domains (Nylas trial domain), 20 sends per Agent Account per day, all limits hard caps. | No free plan; every instance can activate a 14-day trial with full functionality, no sign-up and no credit card. | No free plan; a 14-day free trial with full API access, after which API requests are blocked until a subscription is added. | $0 per team per month: 2 mailboxes, 1 domain, 1 connected sending account, 1 webhook, 2 credentials, $1 usage credit, 50 provider-accepted recipients per UTC day (managed sending 2 per hour); outgoing messages get an "Email sent via Sendmux" footer. | Free, €0/month, no credit card: 3 inboxes (hard cap), 3,000 emails/month, 3 GB storage, addresses on OpenMail's shared domains only, up to 100 emails/day; Free emails end with a "Sent with OpenMail, email for agents." line. |
| Cheapest plan | Developer: $5/month for 5,000 emails, 50 custom domains, 100 managed mailboxes, 100 active custom pacing rules and 100 advanced attachment processing pages a month. | 49.00 € / $55.00 per month minimum, including up to 10 linked accounts, full API access and unlimited API calls. | Essentials, $15/month: 10 connected accounts (+$2.25 per additional account), 10 Agent Accounts, 10,000 Agent Account emails/month, 10 GB storage and bandwidth, 1 custom sending domain; Agent Account resources are hard-capped with no overage. | EmailEngine subscription: €1,200 / year (shown as $1,450 / year in USD), excluding VAT, with unlimited connected mailboxes, unlimited instances, unlimited API calls and webhooks, and unlimited licence keys. | Email (non-IMAP) is $1.50 per active account per month, up to 1 GB monthly traffic. | Pro: $7 per team per month plus prepaid usage, with Unlimited\* resources (fair usage, increases need admin approval) and a managed-sending starting allowance of 1,000 accepted recipients per day. | Pro, €9/month + usage: 10 inboxes then €1/inbox/month, 10,000 emails/month then €0.001/email, 10 GB storage then €0.10/GB/month, unlimited custom domains, spend management, no OpenMail footer. |
| Other limits | Growth: $29/month for 30,000 emails, unlimited domains and mailboxes, 1,000 pacing rules, 500 pages. Scale: $99/month for 100,000 emails, unlimited domains, mailboxes and pacing rules, 2,000 pages. Extra usage is opt-in at $0.001 per email ($1 per 1,000) and $0.01 per advanced page, with optional monthly spending caps; without it, sending stops at the allowance while receiving continues. Every plan has every feature. Billing is monthly only, in USD excluding tax. The provided <slug>.aiinbx.app domain is capped at 100 emails a day. | Above 10 accounts: 5.00 € ($5.50) per account per month for 11–50, 4.50 € ($5.00) for 51–200, 4.00 € ($4.50) for 201–1000, 3.50 € ($4.00) for 1001–5000, 3.00 € ($3.50) for 5001 and above; custom pricing beyond 5,000 accounts. Prices exclude VAT. Development and Production accounts are billed the same. Provider limits and Unipile's rate limits still apply. | Pro is $49/month (or $43/month billed annually): 25 connected accounts (+$2.00, annual +$1.75 each), 50 Agent Accounts (+$0.40, annual +$0.20 each), 50,000 Agent Account emails/month (from +$0.80, annual +$0.70 per 1,000), 50 GB storage and 50 GB/month bandwidth, 10 custom sending domains (20 on annual). Agent Accounts are counted cumulatively per month, so accounts deleted mid-month still count. Agent Account sends share 5 requests per second per organization in production. Custom tracking domain needs the $2,400/year Accelerator Package (Pro Annual). Enterprise is custom. | Enterprise: perpetual licence, invoice or wire payment and custom terms on request (no public price). If the subscription lapses, licence keys stop working 30 days after expiry. | Full Platform (any number of APIs, including IMAP, unlimited traffic) is $2 per active account per month. The pricing page states the tiers by data transfer instead ($1.50 under 5 GB, $2 unlimited). BrightSync CRM sync logic is billed separately at $2 to $4 per user per month; custom and volume pricing on request. API calls are limited to 250 requests per second. | A team is the isolation boundary, so each isolated customer is its own $7/month Pro team. Every accepted To, CC and BCC recipient is billed. Enterprise is custom, with dedicated infrastructure and custom SLAs. | Docs list per-inbox send limits of 10/minute and 200/day (the pricing page lists no daily send limit on Pro) and a daily cap on new recipients: on Pro 20/day per inbox and 150/day per account during warm-up, custom-domain tiers from 20 to 100/day, account cap rising to at most 500/day. Inbox creation is limited to 100/day per account. Enterprise is custom: dedicated sending IPs, SSO, volume discounts, 1-hour SLA. |
| Sources | [1](https://aiinbx.com/pricing) [2](https://docs.aiinbx.com/guides/billing) [3](https://docs.aiinbx.com/guides/domains#your-provided-domain) | [1](https://www.unipile.com/pricing-api/) [2](https://developer.unipile.com/v2.0/docs/billing) | [1](https://www.nylas.com/pricing/) [2](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) | [1](https://emailengine.app/) [2](https://postalsys.com/plans) [3](https://learn.emailengine.app/docs/licensing) [4](https://emailengine.dev/license.html) | [1](https://docs.aurinko.io/faq/how-does-aurinko-billing-work) [2](https://www.aurinko.io/pricing/) [3](https://docs.aurinko.io/getting-started/subscribe-to-aurinko) [4](https://apirefs.aurinko.io/#tag/RateLimiting) | [1](https://sendmux.ai/pricing/) [2](https://sendmux.ai/docs/account/team-limits) [3](https://sendmux.ai/docs/sending/accounts) [4](https://sendmux.ai/solutions/platform-builders/) | [1](https://openmail.sh/pricing) [2](https://docs.openmail.sh/concepts/rate-limits) [3](https://docs.openmail.sh/concepts/inboxes) |

Checked 5 November 2026 from each product's public docs and pricing. Spotted a mistake? Email [me@paukraft.com](mailto:me@paukraft.com).

| Feature | AI Inbx | Amazon SES | Mailgun | Twilio SendGrid | Postmark | Resend |
| --- | --- | --- | --- | --- | --- | --- |
| Receiving |
| **Threads that hold without reply headers** Replies join their conversation even when they arrive without reply headers: a colleague answering from another address, a client that drops them, a changed subject. Partial: threads are grouped by reply headers, or by the mailbox provider's own threading, and nothing more is documented. | **Yes** Every email belongs to a thread, including replies that arrive without reply headers, from a colleague's address or under a changed subject; threads are listed, read and replied to through the API. Replies join their conversation even when a client mangles or drops the reply headers, a colleague answers from another address or the subject changes; a shared subject alone never merges two conversations. [1](https://docs.aiinbx.com/guides/threads) [2](https://docs.aiinbx.com/guides/receiving#threading) [3](https://aiinbx.com/features/threading) | **No** Received mail is handled as individual messages through S3, SNS or Lambda actions; SES has no conversation object or API to read stored mail. [1](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-notifications-contents.html) [2](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) | **No** Routes post each inbound message on its own; the documented payload carries the message headers, with no conversation or thread object to list or reply to. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/receive-forward-store/receive-http) | **No** Inbound Parse posts each message to your URL with its headers; the Inbound Parse docs describe no conversation grouping or thread API. [1](https://www.twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook) | **No** The Messages API has separate outbound and inbound message searches plus per-message details; replies can be linked through MailboxHash, and no conversation object is documented. [1](https://postmarkapp.com/developer/api/messages-api) [2](https://postmarkapp.com/developer/user-guide/inbound/parse-an-email) | **Partial** Inboxes (announced 2026-10-22) group emails sent and received in reply to each other into threads that can be listed, searched and replied to; the Chat SDK adapter threads by Message-ID, In-Reply-To and References, and replies without those headers are not described. [1](https://resend.com/docs/guides/inboxes/threads) [2](https://resend.com/blog/announcing-inboxes) [3](https://resend.com/docs/chat-sdk) |
| **Reply text, inline answers kept** Each inbound message comes with the newly written text separated from quoted history and signatures, and answers typed inside the quote are kept. Partial: the quote is removed or marked, but answers inside it are not kept or not documented as kept. | **Yes** Each email carries stripped\_text and stripped\_html without the quoted conversation, keeping answers typed inline into the quote, and segments marking written, quoted and signature parts; a sender's signature is kept the first time they use it in a thread. stripped\_text keeps answers typed into the quote next to the lines they answer, also when the mail client leaves the quote unmarked, as long as the answered message is on the thread. [1](https://docs.aiinbx.com/guides/receiving#what-was-written) [2](https://aiinbx.com/solutions/email-reply-parser) | **No** Receiving notifications contain headers, verdicts and the raw MIME message; no field separates new text from quoted history. [1](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-notifications-contents.html) | **Partial** Parsed route posts include stripped-text (without quoted parts and signature), stripped-signature and stripped-html, parsed on a best-effort basis; whether answers typed inside the quote are kept is not described. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/receive-forward-store/receive-http) | **No** The Inbound Parse payload carries the full text and html bodies, with no field for the newly written text. [1](https://www.twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook) | **Partial** StrippedTextReply holds Postmark's best-attempt parse of an English plain-text reply carrying reply headers; whether answers typed inside the quote are kept is not described. [1](https://postmarkapp.com/developer/user-guide/inbound/parse-an-email) | **No** The documented received-email and thread-email objects carry the full html and text bodies, with no field for the newly written text apart from the quoted history. [1](https://resend.com/docs/api-reference/emails/retrieve-received-email) [2](https://resend.com/docs/api-reference/inboxes/get-thread-email) |
| **Out-of-office with return date** Out-of-office and other automatic replies are flagged on the message, with the day the sender is back and the colleague they name as fields. Partial: automatic replies are flagged, without those details. | **Yes** Every inbound email has a category such as human, out\_of\_office or auto\_reply, and an away reply carries the reason, return day and named contacts when it states them. An out\_of\_office or auto\_reply email carries unavailable with the reason (absent, left or unmonitored), back\_on for the first day back and the contacts the reply names, each when the reply states it. [1](https://docs.aiinbx.com/guides/receiving#categories) [2](https://aiinbx.com/solutions/auto-reply-detection) [3](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for) | **No** Receiving notifications carry spam, virus, SPF, DKIM and DMARC verdicts; no auto-reply field is listed. [1](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-notifications-contents.html) | **No** The documented parsed-message fields have no field marking out-of-office or other automatic replies. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/receive-forward-store/receive-http) | **No** Not in the documented Inbound Parse payload fields, which include a spam score and SPF/DKIM results. [1](https://www.twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook) | **Partial** Some out-of-office replies are reported as AutoResponder bounces, whose documented fields have no return date or named contact; the inbound JSON has no auto-reply field. [1](https://postmarkapp.com/developer/api/bounce-api) [2](https://postmarkapp.com/developer/user-guide/inbound/parse-an-email) | **No** The documented received-email, thread-email and inbox.email.received objects have no field marking out-of-office or other automatic replies; the raw headers are returned. [1](https://resend.com/docs/api-reference/emails/retrieve-received-email) [2](https://resend.com/docs/webhooks/inboxes/email-received) |
| Sending |
| **Configurable send limits** You set limits such as N per hour per sending address or per recipient domain, and the provider holds mail back to keep to them. | **Yes** Limit rules cap sends per rolling window for the rule, each sending address, sending domain, recipient or recipient domain, and hold the rest until there is room; plans set how many active rules a workspace holds. [1](https://docs.aiinbx.com/guides/pacing#rate-limits) [2](https://aiinbx.com/features/pacing) | **No** Sending quota and maximum send rate are set by AWS per account per Region; a send over the daily quota is rejected rather than held back, and there are no per-sender or per-recipient-domain limits you configure. [1](https://docs.aws.amazon.com/ses/latest/dg/manage-sending-quotas.html) [2](https://docs.aws.amazon.com/general/latest/gr/ses.html) | **Partial** Mailgun queues mail and adjusts sending rates itself from mailbox-provider feedback; the limit you set is a monthly message cap per account or subaccount, which disables sending when reached. [1](https://documentation.mailgun.com/docs/mailgun/faq/deliver-rep) [2](https://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/custom-message-limit) [3](https://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/subaccounts/put-v5-accounts-subaccounts-subaccount_id-limit-custom-monthly) [4](https://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/message-queue) | **Not documented** The docs describe no setting for send limits per sending address or recipient domain. [1](https://www.twilio.com/docs/sendgrid/api-reference/mail-send/mail-send) | **Partial** The Bulk API throttles broadcast sends automatically at a rate Postmark chooses; the Bulk API page describes no settings for your own per-hour or per-domain limits. [1](https://postmarkapp.com/bulk-api) | **Not documented** Resend documents its own API rate limit (10 requests per second per team by default) and plan quotas; limits you set per address or recipient domain are not documented. [1](https://resend.com/docs/api-reference/rate-limit) |
| **Sending hours** You set the hours mail may go out, for example weekdays 9–17 in a timezone, and mail outside them waits. | **Yes** Hours rules set weekly sending windows in an IANA timezone, optionally opening and closing at a varying minute each day; mail outside them waits. [1](https://docs.aiinbx.com/guides/pacing#sending-hours) [2](https://aiinbx.com/features/sending-hours) | **No** SendEmail has no send-time parameter or sending-window setting; mail goes out when the call is accepted. [1](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) | **Not documented** Timezone Optimization (o:time-zone-localize, some plans) delivers a message at a set local time in the recipient's timezone; a sending window that holds mail outside set hours is not documented. [1](https://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/messages/post-v3--domain-name--messages) | **Not documented** The docs describe no sending-hours window; scheduling is per message with send\_at. [1](https://www.twilio.com/docs/sendgrid/api-reference/mail-send/mail-send) | **No** Emails cannot be scheduled for a later time, so sending windows have to be handled in your own system. [1](https://postmarkapp.com/support/article/1118-can-you-schedule-emails-with-postmark) | **Not documented** Individual emails can be scheduled for a time; a setting for allowed sending hours is not documented. [1](https://resend.com/docs/dashboard/emails/schedule-email) |
| **Suppression lists** Addresses that bounced, complained or unsubscribed are blocked from later sends, manageable through the API. | **Yes** Bounces that show an address is dead, complaints and unsubscribes (link, one-click or a reply asking to stop) are suppressed automatically, on named lists per campaign and per space, managed through the API. [1](https://docs.aiinbx.com/guides/suppressions) [2](https://aiinbx.com/features/suppressions) | **Yes** The account-level suppression list adds hard bounces and complaints automatically and is managed with PutSuppressedDestination, ListSuppressedDestinations and DeleteSuppressedDestination; configuration-set and tenant-level lists can override it. [1](https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html) [2](https://docs.aws.amazon.com/ses/latest/dg/tenants.html) | **Yes** Bounces, unsubscribes and complaints lists are managed through the API, and Mailgun drops messages to addresses on them. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/tracking-failures) [2](https://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/unsubscribe/get-v3--domainid--unsubscribes) | **Yes** Bounces, invalid emails, spam reports and global or group unsubscribes block later sends and can be managed through the API. [1](https://www.twilio.com/docs/sendgrid/ui/sending-email/index-suppressions) | **Yes** Each message stream keeps a suppression list (HardBounce, SpamComplaint, ManualSuppression) that can be listed, added to and deleted from through the Suppressions API. [1](https://postmarkapp.com/developer/api/suppressions-api) | **Yes** Hard bounces and complaints are suppressed automatically team-wide, and suppressions can be listed, added and removed through the API; unsubscribes are handled per contact and topic for Broadcasts. [1](https://resend.com/docs/dashboard/emails/email-suppressions) [2](https://resend.com/docs/dashboard/contacts/managing-unsubscribe-list) |
| **Opt-out replies suppressed** A reply asking not to be emailed again is recognised and the address is suppressed without your code reading it. | **Yes** A reply asking to stop is recognised as an opt-out and suppressed automatically, reported as email.unsubscribed with source reply. [1](https://docs.aiinbx.com/guides/suppressions#reacting-to-the-events) [2](https://docs.aiinbx.com/webhooks/events/email-unsubscribed) | **No** Addresses are added to the suppression list with one of two reasons, BOUNCE or COMPLAINT; an opt-out written in a reply is not one of them. [1](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_PutSuppressedDestination.html) [2](https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html) | **Not documented** Unsubscribes come from Mailgun's unsubscribe links and footer, or are added through the API; recognising an opt-out written in a reply is not described. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/tracking-unsubscribes) | **Not documented** Unsubscribes come from SendGrid's unsubscribe links and List-Unsubscribe header into global or group unsubscribe lists; recognising an opt-out written in a reply is not described. [1](https://www.twilio.com/docs/sendgrid/ui/sending-email/index-suppressions) [2](https://www.twilio.com/docs/sendgrid/ui/sending-email/unsubscribe-groups) | **Not documented** Addresses join a stream's suppressions through hard bounces, spam complaints, Postmark's one-click unsubscribe link and manual suppression; recognising an opt-out written in a reply is not described. [1](https://postmarkapp.com/support/article/1208-how-to-add-an-unsubscribe-link) [2](https://postmarkapp.com/developer/api/suppressions-api) | **Not documented** Suppressions come from bounces, complaints and manual additions, and Broadcast unsubscribes from Resend's unsubscribe link; recognising an opt-out written in a reply is not described. [1](https://resend.com/docs/dashboard/emails/email-suppressions) [2](https://resend.com/docs/dashboard/contacts/managing-unsubscribe-list) |
| **Templates and email builder** Hosted templates or a visual editor for designing emails. | **No** There are no hosted templates or visual editor; the TypeScript SDK and CLI render React Email components from your own code. [1](https://docs.aiinbx.com/integrations/react-email) [2](https://aiinbx.com/terms#service) | **Yes** Stored templates with {{tag}} placeholders are created through CreateEmailTemplate (up to 20,000 per Region); inline templates are also supported. [1](https://docs.aws.amazon.com/ses/latest/dg/send-personalized-email-api.html) | **Yes** Stored Handlebars templates with versions through the Templates API, and a drag-and-drop template builder with HTML editing. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/send-templates) [2](https://www.mailgun.com/features/email-templates/) | **Yes** Dynamic templates use Handlebars and are built in a visual Design Editor or an HTML Code Editor. [1](https://www.twilio.com/docs/sendgrid/ui/sending-email/how-to-send-an-email-with-dynamic-templates) | **Yes** Hosted templates and layouts use the Mustachio language, are edited in the Postmark template editor and managed through the Templates API. [1](https://postmarkapp.com/email-templates) [2](https://postmarkapp.com/developer/api/templates-api) | **Yes** Hosted Templates with a no-code editor, variables and version history, plus React Email for templates in code. [1](https://resend.com/docs/dashboard/templates/introduction) [2](https://resend.com/docs/knowledge-base/template-emails-with-react-email) |
| Platform |
| **Sending reputation per customer** Each of your customers' sending reputation is kept apart, so one customer's bounces or complaints don't pause another's mail. | **Yes** Each space sends on its own reputation: bounces and complaints count against the space the mail left from, and a space over the line is paused by itself; mailbox providers still judge every subdomain of one wildcard as that one domain. [1](https://docs.aiinbx.com/guides/spaces#one-reputation-per-space) [2](https://docs.aiinbx.com/concepts#space) | **Yes** Tenants track reputation metrics per tenant, and a tenant whose findings meet its reputation policy is paused without affecting other tenants' sending; tenants are an add-on on the Essentials and Pro plans. [1](https://docs.aws.amazon.com/ses/latest/dg/tenants.html) [2](https://aws.amazon.com/ses/pricing/) | **Partial** Subaccounts have their own sending domains and IPs, and dedicated IP pools can be delegated to each; subaccounts are available to contract customers. [1](https://documentation.mailgun.com/docs/mailgun/user-manual/subaccounts/subaccounts) [2](https://documentation.mailgun.com/docs/mailgun/user-manual/subaccounts/subaccounts-ip-pools) [3](https://www.mailgun.com/ai-info/) | **Partial** Subusers (Pro and Premier) can be linked to their own dedicated IP addresses to separate sending traffic, and a reputation is reported per subuser; Trial and Essentials accounts send from shared IP groups. [1](https://www.twilio.com/docs/sendgrid/ui/account-and-settings/subusers) [2](https://www.twilio.com/docs/sendgrid/ui/account-and-settings/dedicated-ip-addresses) | **Partial** Postmark can assign dedicated IPs ($50 per IP per month, from 300,000 emails a month) to individual servers, and a separate Postmark account per client is an option; otherwise mail goes over Postmark's shared IP pool. [1](https://postmarkapp.com/dedicated-ips) [2](https://postmarkapp.com/guides/how-to-manage-multiple-customers-with-postmark) | **Partial** Resend's multi-tenant guide says tenants in one account share its sender reputation and one tenant's poor sending can affect all of them; independent reputation takes a separate Resend account per tenant. [1](https://resend.com/docs/knowledge-base/setting-up-resend-for-multi-tenants) |
| **SOC 2 report** A SOC 2 Type II report is available to customers. | **No** No SOC 2 report is published; the DPA offers security documentation, questionnaire responses and one customer audit a year. [1](https://aiinbx.com/dpa#assistance) | **Yes** SES is in scope of the AWS SOC 1, 2 and 3 reports, which cover a 12-month period; the SOC 2 report is downloaded from AWS Artifact under NDA. [1](https://aws.amazon.com/compliance/services-in-scope/SOC/) [2](https://aws.amazon.com/compliance/soc-faqs/) [3](https://aws.amazon.com/blogs/security/spring-2026-soc-1-2-and-3-reports-are-now-available-with-188-services-in-scope/) | **Yes** Sinch Mailgun is SOC 2 Type II certified, and the report is available from the Sinch Trust Center. [1](https://www.mailgun.com/security/) [2](https://trust.sinch.com/?product=mailgun) | **Yes** Twilio's Security Overview lists SOC 2 Type 2 for all services, including SendGrid, and points to the Twilio Trust Center for further documentation. [1](https://www.twilio.com/en-us/legal/security-overview) [2](https://security.twilio.com/) | **Partial** The pricing page says Postmark provides a SOC 2 report on an annual basis through the ActiveCampaign trust center, without stating whether it is Type I or Type II. [1](https://postmarkapp.com/pricing) | **Yes** Resend is SOC 2 Type II compliant, and the report can be downloaded from the Documents page in the dashboard. [1](https://resend.com/docs/security) |
| Policy |
| **Cold outreach allowed** The terms or acceptable use policy allow sending unsolicited B2B outreach, within the law. | **Yes** The Acceptable Use Policy allows marketing email that the applicable law permits and bans unlawful unsolicited email, stating that a public address, a scraped list or legitimate interest alone is not permission. [1](https://aiinbx.com/acceptable-use#permission) [2](https://aiinbx.com/use-cases/cold-outreach) | **No** The AWS Acceptable Use Policy prohibits sending unsolicited mass email, and requesting SES production access requires agreeing to only send email to individuals who have explicitly requested it. [1](https://aws.amazon.com/aup/) [2](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html) | **No** The acceptable use policy allows non-transactional email only to recipients who gave clear, explicit and provable consent through a confirmed opt-in, and prohibits bought, rented or scraped lists. [1](https://www.mailgun.com/legal/aup/) | **No** The email terms require affirmative consent before sending non-transactional email and prohibit purchased or rented lists and addresses obtained from the internet without consent. [1](https://www.twilio.com/en-us/legal/service-country-specific-terms/email) | **No** The terms require all lists to be permission-based subscriptions, prohibit purchased or rented lists, and allow suspension for unsolicited messages. [1](https://postmarkapp.com/terms-of-service) | **No** The Acceptable Use Policy prohibits unsolicited messages of any kind, including cold outreach, purchased lists or scraped contact data. [1](https://resend.com/legal/acceptable-use) |
| Pricing |
| What you pay for | Monthly plans by emails per month, sent and received both counting; plans also set how many custom domains, managed mailboxes and active custom pacing rules a workspace holds, and an allowance of advanced attachment processing pages. | Per email sent and per email received (per 1,000), plus incoming mail chunks, attachment data and optional features such as dedicated IPs, tenants and Virtual Deliverability Manager; billed per account per AWS Region. | Send plans scale with emails sent per month, with per-1,000 overage; email validations are billed per 100 on top. | Monthly plans priced by email send volume and features (Essentials, Pro, Premier). | Monthly email volume, counting emails sent and received, on four plans: Free, Basic, Pro and Platform. | Transactional plans scale with emails sent and received per month; marketing plans scale with contacts; inboxes beyond the 3 included are $1 per inbox per month. |
| Free tier | No free plan: the pricing FAQ says Developer is $5 a month and includes 5,000 emails. | No SES-specific free tier is listed; new AWS customers get up to $200 in AWS Free Tier credits usable on eligible services including SES. | Free: $0/mo, 100 emails/day, 1 custom sending domain, 1 inbound route, 1 day log retention, 2 API keys, 1 user. | No free plan: the Free Email API and Free Marketing Campaigns plans were retired from May 28, 2025. New accounts get a 60-day free trial with 100 emails/day, no credit card required. | Free (Developer) plan: $0.00/mo with 100 emails/month, no overages allowed, and it does not expire. | Free: $0/mo, 3,000 emails/mo (sent and received) with a limit of 100 emails per day, 3 domains, 3 inboxes, 1 webhook endpoint; 1,000 marketing contacts. |
| Cheapest plan | Developer: $5/month for 5,000 emails, 50 custom domains, 100 managed mailboxes, 100 active custom pacing rules and 100 advanced attachment processing pages a month. | À la carte: $0.10 per 1,000 emails sent, $0.10 per 1,000 emails received plus $0.09 per 1,000 incoming email chunks, $0.12 per GB of attachments sent, no monthly fee. Essentials plan: $0.16 per 1,000 emails (0–10M per month) with no fixed fee; new accounts start on Essentials from July 21, 2026 and can switch to à la carte at any time. | Basic: from $15/mo for 10,000 emails/mo, no daily email limit, 1 custom sending domain, 5 inbound routes, 1 day log retention; overage from $1.80 per 1,000 emails. | Essentials from $19.95/mo for 50,000 emails/mo ($34.95/mo for 100,000), with 1 teammate, 2 Event Webhooks and 3 days of searchable email activity. Pro starts at $89.95/mo for 100,000 emails/mo and adds dedicated IPs, subuser management and SSO. | Basic: $15.00/mo for 10,000 emails/month, extra emails $1.80 per 1,000, 5 custom sending domains, 5 servers, 4 users, 45-day data retention; inbound email processing is not included on Basic (Pro, $16.50/mo for 10,000 emails, includes it). | Pro: $20/mo for 50,000 emails/mo, no daily limit, 10 domains, 5 webhook endpoints, 3 inboxes; overage $0.90 per 1,000 emails. |
| Other limits | Growth: $29/month for 30,000 emails, unlimited domains and mailboxes, 1,000 pacing rules, 500 pages. Scale: $99/month for 100,000 emails, unlimited domains, mailboxes and pacing rules, 2,000 pages. Extra usage is opt-in at $0.001 per email ($1 per 1,000) and $0.01 per advanced page, with optional monthly spending caps; without it, sending stops at the allowance while receiving continues. Every plan has every feature. Billing is monthly only, in USD excluding tax. The provided <slug>.aiinbx.app domain is capped at 100 emails a day. | New accounts start in the sandbox (200 emails per 24 hours, 1 per second, verified recipients only) until production access is granted; sending quotas apply per account per Region. Pro is $0.22 per 1,000 emails plus $105 and Enterprise $0.23 per 1,000 plus $500 per account per Region per month. Tenants à la carte: $0.005 per tenant per month plus $0.005 per 1,000 emails. Standard dedicated IPs: $24.95 per IP per month. | Foundation (free for 1 month, then $35/mo, 50,000 emails/mo, overage from $1.30 per 1,000) adds 1,000 custom sending domains, full inbound routing, the template builder and API, 5 days log retention and 1 day message retention. Scale (free for 1 month, then $90/mo, 100,000 emails/mo) adds Send Time Optimization, SAML SSO, 5,000 email validations, dedicated IP pools, 30 days log retention and up to 7 days message retention; overage from $1.10 per 1,000. Subaccounts are available in contract plans. Extra dedicated IPs $59/IP/month. Scheduled delivery reaches 3 or 7 days ahead depending on plan. | Overage is charged per email above the plan limit at a rate that varies; subusers need Pro or Premier and are capped at 15 before a support request; Premier is custom pricing. | Volume tiers of 10,000, 50,000, 125,000, 300,000, 700,000 and 1,500,000 emails/month cost $15–$775 on Basic, $16.50–$852.50 on Pro and $18–$930 on Platform; overage per 1,000 is $1.70–$1.80 (Basic), $1.20–$1.30 (Pro), $1.15–$1.20 (Platform). Servers and custom sending domains: 5 on Basic, 10 on Pro, unlimited on Platform. Retention is 45 days by default, 7–365 days with the retention add-on from $5/month (Pro or higher). Dedicated IPs from $50/month per IP (Pro or higher, 300,000+ emails/month). Unused emails do not roll over. | Domains: Free 3, Pro 10, Scale 1,000; domains add-on $20/mo adds 100 domains on paid transactional plans. Additional inboxes $1/inbox/month on paid plans with pay-as-you-go; Free stops at 3. Every email sent or received through an inbox counts toward the transactional quota. Overage capped at 5x the monthly quota. API rate limit 10 requests per second per team by default, same on every plan. Self-serve plans are monthly only. |
| Sources | [1](https://aiinbx.com/pricing) [2](https://docs.aiinbx.com/guides/billing) [3](https://docs.aiinbx.com/guides/domains#your-provided-domain) | [1](https://aws.amazon.com/ses/pricing/) [2](https://aws.amazon.com/about-aws/whats-new/2026/07/amazon-ses-pricing-plans/) [3](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html) | [1](https://www.mailgun.com/pricing/) [2](https://www.mailgun.com/ai-info/) [3](https://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/messages/post-v3--domain-name--messages) | [1](https://www.twilio.com/en-us/products/email-api/pricing) [2](https://www.twilio.com/en-us/changelog/changes-coming-to-sendgrid-s-free-plans) [3](https://support.sendgrid.com/hc/en-us/articles/35270136965403-Overview-of-60-Day-Free-Trial-Plans-for-New-SendGrid-Accounts) [4](https://support.sendgrid.com/hc/en-us/articles/40779261694875-Twilio-SendGrid-Overage-Rates) [5](https://www.twilio.com/docs/sendgrid/ui/account-and-settings/subusers) | [1](https://postmarkapp.com/pricing) [2](https://postmarkapp.com/pricing.txt) | [1](https://resend.com/pricing) [2](https://resend.com/docs/knowledge-base/what-is-resend-pricing) [3](https://resend.com/docs/knowledge-base/how-to-add-more-domains) [4](https://resend.com/docs/knowledge-base/account-quotas-and-limits) [5](https://resend.com/docs/api-reference/rate-limit) |

Checked 5 November 2026 from each product's public docs and pricing. Spotted a mistake? Email [me@paukraft.com](mailto:me@paukraft.com).

## When is another product the better pick?

When the channel, the mail host or the deployment model is the requirement.

-   **Unipile** connects users' LinkedIn (including Sales Navigator and Recruiter), WhatsApp, Instagram, Telegram, Gmail, Outlook and IMAP accounts, and links Gmail through Unipile's verified Google app by default, with the CASA assessment included. Unipile is SOC 2 Type II certified, and its [sending docs](https://developer.unipile.com/v2.0/docs/send-emails) say Unipile "is not meant to send transactional or marketing emails". **Pick it if** sequences run on LinkedIn and WhatsApp as well as email, or you don't want to run your own Google OAuth app.
-   **Nylas** connects Google, Microsoft, Exchange, iCloud, Yahoo and IMAP accounts, and a SOC 2 Type II report is available under NDA. Read its terms row first; more in [AI Inbx vs Nylas](/blog/ai-inbx-vs-nylas). **Pick it if** your product needs Exchange, iCloud or Yahoo mailboxes.
-   **Aurinko** covers Google, Office 365, Outlook.com, Exchange, Zoho, iCloud and IMAP. No TypeScript or Python SDK is listed, and its [security statement](https://www.aurinko.io/certifications/) says Aurinko is preparing for a SOC 2 Type I examination. **Pick it if** you want drip follow-ups from the mailbox API across more mail hosts than Gmail and Outlook.
-   **EmailEngine** is self-hosted software for Gmail, Microsoft 365 and IMAP mailboxes. You run EmailEngine and Redis yourself, and the one official SDK is for PHP. **Pick it if** mailbox data has to stay on your own servers, or you want a flat price for many mailboxes.
-   **OpenMail** hosts inboxes on its own or your domain, with custom domains on Pro. A daily cap on new recipients is built in: on Pro, 20 a day per inbox and 150 a day per account during warm-up, rising to at most 500, and every customer's inbox and pod shares that account cap, per its [rate limits page](https://docs.openmail.sh/concepts/rate-limits). Pro includes 10 inboxes and bills €1 per extra inbox a month, so cost follows how many addresses you hold; I explain why I think that's the wrong unit for a platform in [why inboxes are the wrong primitive](/blog/why-inboxes-are-the-wrong-primitive). **Pick it if** you want the provider's outreach conditions in its terms and your volume fits inside its caps.
-   **Sendmux (now Qubrics)**, renamed in its app and API in November 2026, picks an eligible connected account for every message and fails over between them. Sendmux's managed sending route is for transactional mail only. **Pick it if** you want sends spread across many accounts you own.
-   **Amazon SES, Mailgun, SendGrid, Postmark and Resend:** Amazon SES has the lowest list price here, $0.10 per 1,000 emails sent on its à la carte pricing. SendGrid has dynamic templates with a visual editor, Postmark keeps transactional and broadcast mail on separate streams, and Resend has hosted templates.

On AI Inbx, your product builds the sequence editor, templates, warm-up and lead database, and renders the bodies; and the TypeScript SDK renders a React Email component passed as `react` on `emails.send`. Connected mailboxes are Gmail and Outlook only, through your own OAuth app, with no IMAP or SMTP; open and click tracking covers mail sent from a domain, not through a connected mailbox; SDKs are TypeScript and Python; and AI Inbx is hosted only, with no SOC 2 report and no free plan (Developer is $5 a month).

## What does each cost for an outreach tool?

AI Inbx bills by email volume, sent and received, with no charge per mailbox or address. Unipile, Nylas and Aurinko bill per connected account, so their bill grows with every rep your customers add.

I don't pitch AI Inbx as the cheap option. I think our pricing is fair: it follows what email costs to send, receive and store, and at these prices AI Inbx runs as a healthy business. Keeping a connected account in sync does cost something, but a flat fee per account charges a mailbox that moves 10 emails a month the same as one that moves 2,000; in my view the price should follow the mail.

List prices as of November 2026, from each provider's pricing page. The example: an outreach tool with 200 customers who connect three Gmail or Outlook mailboxes each, sending and receiving 300,000 emails a month between them.

```
AI Inbx Scale, extra usage on                         $99.00
Extra emails: 300,000 - 100,000 = 200,000 x $0.001    $200.00
Total                                                 $299.00

Unipile: 600 accounts in the 201–1,000 band x $4.50  $2,700.00
Nylas Pro: $49 + (600 - 25) x $2.00                   $1,199.00
Aurinko email: 600 active accounts x $1.50              $900.00
Sendmux Pro: 200 teams x $7                          $1,400.00 + usage
EmailEngine: €1,200 a year / 12                        €100.00 + your servers
```

-   Unipile bills every account at the rate of the band the total falls in, so 600 accounts are all $4.50; its pricing page works 60 accounts the same way (60 × €4.50).
-   EmailEngine is the cheapest at this size if you're willing to run it.
-   A Sendmux team is its isolation boundary, so each customer kept apart is a Pro team of its own; per-recipient and inbound usage comes on top. With every customer in one team, Sendmux is $7 plus $0.50 per 1,000 recipients sent through your own accounts: about $157 if all 300,000 were sends, less than AI Inbx.
-   Aurinko's billing FAQ puts the $1.50 email tier at up to 1 GB of traffic per account a month (its pricing page says 5 GB); the full platform, including IMAP, is $2.
-   AI Inbx's Growth plan ($29, 30,000 emails) comes to the same as Scale above 100,000 emails a month; Scale lifts Growth's cap of 1,000 pacing rules.

At a smaller start, 20 mailboxes and 10,000 emails a month, AI Inbx Developer with extra usage is $10 ($5 plus 5,000 × $0.001), Aurinko $30, Nylas Essentials $37.50 ($15 plus 10 × $2.25), and Unipile $110 (20 × $5.50). Nylas has a free plan with 5 connected accounts, and Unipile a 7-day trial.

## Which one should you pick?

Start with the terms, then with where your customers' mail lives.

-   **Customer domains plus reps' Gmail and Outlook, with hours, limits, reply categories and opt-outs from the API:** AI Inbx.
-   **Email plus LinkedIn and WhatsApp, or IMAP mailboxes:** Unipile.
-   **Exchange, iCloud or other mail hosts:** Nylas or Aurinko, after checking how their terms apply to cold outreach.
-   **Your own servers:** EmailEngine.
-   **Outreach conditions set by the provider, at a volume its account cap allows:** OpenMail. **Sends spread over many owned accounts:** Sendmux (now Qubrics).
-   **Your product's own transactional mail:** AI Inbx from the same API, or Amazon SES, Mailgun, SendGrid, Postmark or Resend for hosted templates or the lowest per-email price.

If AI agents write your sequences, [email APIs for AI agents](/blog/best-email-api-for-ai-agents) compares the field from that side. To set up the rules above, start with the [pacing guide](https://docs.aiinbx.com/guides/pacing), then see [pricing](/pricing).

*Last checked: 6 November 2026. Work at one of these companies and spotted something wrong? Email [pau@aiinbx.com](mailto:pau@aiinbx.com) with a link and I'll correct it.*

Written by

[Pau Kraft](https://paukraft.com)

[@paukraft on X](https://x.com/paukraft)

Before AI Inbx, Pau built email agents that run in production for enterprises in the sourcing industry, processing thousands of emails a month, where a single reply filed on the wrong conversation is not acceptable. AI Inbx is built on what those systems taught him: the threading edge cases, the replies cut in the wrong place, the email that went out at 02:30 on a Sunday.

## Questions

### Which email APIs allow cold B2B outreach?

As of November 2026, the terms of AI Inbx and OpenMail allow B2B outreach where the law allows it, each with conditions, and Sendmux (now Qubrics) documents cold outreach through sending accounts you own. Unipile markets outreach from users' own mailboxes and requires lawful use. EmailEngine's licence and Aurinko's terms don't address unsolicited email, and Nylas's pages differ. Amazon SES, Mailgun, SendGrid, Postmark and Resend require prior consent for non-transactional email.

### Can I build a cold email tool on SendGrid, Mailgun or Amazon SES?

Not for the cold sequences themselves. SendGrid's email terms require affirmative consent before non-transactional email, Mailgun's acceptable use policy requires clear, explicit and provable consent, and Amazon SES production access asks you to send only to people who explicitly requested it. All three fit your product's own sign-up confirmations, password resets and invoices.

### How do I send cold emails in the recipient's timezone?

On AI Inbx, an hours rule holds mail outside weekly windows in an IANA timezone, and its match patterns select recipients, so a rule for addresses ending in .co.uk can use Europe/London. Each rule has one timezone, so you add a rule per region or set scheduled\_at per recipient in your own code. Mailgun's Timezone Optimization delivers at a set local time per recipient on some plans.

### How does an outreach tool tell real replies from out-of-office messages?

On AI Inbx, every inbound email arrives as an email.received event with a thread\_id and a category such as human, out\_of\_office or auto\_reply. An away reply carries unavailable with the reason, the first day back (back\_on) and any colleague it names, so a sequence can pause until back\_on or move to the colleague.

### Does AI Inbx include sequences, templates or warm-up?

No. AI Inbx is infrastructure: your product builds the sequence editor, the templates and the lead lists. AI Inbx sends from your customers' domains and their reps' Gmail and Outlook, holds mail to your limits and sending hours, and threads and classifies the replies. The docs show warming a new domain as a limit rule you raise week by week.

### Can AI Inbx replace Unipile or Nylas in an outreach tool?

Yes, if your customers' mailboxes are on Gmail and Outlook and you want send limits, sending hours, reply categories and opt-out handling from the email API itself. No, if you need LinkedIn or WhatsApp, IMAP, Exchange on-premises or iCloud mailboxes, a shared verified Google app, or a SOC 2 report.

### Is cold email legal?

It depends on where the recipients are, and the answer differs a lot between countries. In Germany, Section 7 UWG covers business recipients as well as consumers, alongside the GDPR; in the US, the CAN-SPAM Act sets its own rules. Take that question to a lawyer for each market you serve. An email provider's terms decide only whether its service may carry the mail.

Keep reading

## More from the blog

[All posts](/blog)

-   [5 November 2026ComparisonsThe best Nylas alternatives (2026)Aurinko, Unipile, EmailEngine and AI Inbx vs Nylas for Gmail and Outlook products: threading, reply text, out-of-office dates, opt-outs, cost per account.Pau Kraft](/blog/nylas-alternatives)
-   [5 November 2026ComparisonsAI Inbx vs Nylas for email in your product (2026)AI Inbx vs Nylas for Gmail and Outlook products: threads without reply headers, inline answers, out-of-office return dates, opt-outs, pacing and pricing.Pau Kraft](/blog/ai-inbx-vs-nylas)
-   [5 November 2026ComparisonsBest email APIs for AI agents (2026)Why I think AI Inbx is the best email API for products that give agents email, the bugs it saves you from, and when AgentMail, Nylas or Postmark fit better.Pau Kraft](/blog/best-email-api-for-ai-agents)

## Give your product an inbox. The hard parts are already handled.

[Get started](/signup)
