# The 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](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 better choice when your users are on Gmail and Outlook and their replies drive your product: CRMs, outreach tools, helpdesks and agent platforms. Here is what AI Inbx does that Nylas, Aurinko, Unipile and EmailEngine leave to your code or don't describe in their public docs, with each source linked in the table below:

-   **Threads that hold.** On AI Inbx a reply without reply headers, or from a colleague's address, still joins its conversation. More
-   **Inline answers kept.** `stripped_text` drops the quote and keeps the answers typed inside it. More
-   **Out-of-office return dates.** An away reply carries the first day back and the colleague it names as fields. More
-   **Opt-out replies suppressed.** A reply asking you to stop suppresses the address for you. More
-   **Sending hours and pacing.** Mail waits for the window and limits you set instead of failing. More
-   **Attachments as text.** PDFs, documents and spreadsheets, scanned pages included, arrive as Markdown a model can read. More
-   **Your own domains, billed by email.** The same API sends and receives on your domains, every address works, and the bill follows mail, not accounts. Nylas and Unipile charge for every connected account, Aurinko for every active one. More
-   **Built for volume.** Less for the model to read on long threads, no model call on automated mail, attachments read once, and up to 1,000 pacing rules on Growth, no limit on Scale. More

Nylas is the better pick for Exchange on-premises, iCloud, Yahoo or IMAP mailboxes, tracking on mail sent from your users' mailboxes, or a SOC 2 Type II report. Aurinko covers most of those providers per active account, Unipile adds LinkedIn and WhatsApp, and EmailEngine runs on your own servers for one flat licence. On price, AI Inbx costs less than every paid hosted per-account option below about 1,500 emails per mailbox a month; from 1,000 accounts EmailEngine's licence is smaller, before servers (pricing).

*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 Nylas and the other products is from their public docs and pricing as of November 2026, linked where it's used.*

I spent a long time on this layer before AI Inbx existed, building AI agent systems that process thousands of emails a month for enterprises in the sourcing industry. In an enterprise setting a reply filed on the wrong conversation means a wrong answer to a customer. That is why this post judges each option first by what happens to each message once it reaches your product.

## Nylas alternatives at a glance

| Product | What it's for | Pricing starts at | Free plan | Good fit when |
| --- | --- | --- | --- | --- |
| AI Inbx (ours) | One API for users' Gmail and Outlook mailboxes and for addresses on your own domains, with each message threaded and read for you | $5 a month for 5,000 emails | No | Your users are on Gmail and Outlook and replies drive your product, or you also send on your own or your customers' domains |
| Aurinko | Unified mailbox API over Google, Microsoft, Exchange, Zoho, iCloud and IMAP | $1.50 per active email account a month | No (14-day trial) | You need Nylas's provider breadth and pay per active account |
| Unipile | Unified API for users' email, LinkedIn, WhatsApp and other messaging accounts | €49 / $55 a month for up to 10 accounts | No (7-day trial) | Your product works across users' LinkedIn or WhatsApp as well as their email |
| EmailEngine | Self-hosted REST API for Gmail, Microsoft 365 and IMAP mailboxes | €1,200 / $1,450 a year, flat | No (14-day trial) | You must run it on your own servers, or connect many mailboxes for one flat fee |
| Gmail API + Microsoft Graph | Building on the two providers' own APIs | No integration vendor fee | Not applicable | You want no vendor in between and can maintain two integrations |

Prices from each provider's pricing page, November 2026, excluding tax.

Feature by feature, rows where the products differ first. Each cell links its source.

| Feature | AI Inbx | Nylas | Aurinko | Unipile | EmailEngine |
| --- | --- | --- | --- | --- | --- |
| 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** 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** 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** 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** 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) |
| **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) | **Partial** Clean Conversations (PUT /messages/clean or the message.created.cleaned webhook) removes reply and forward content and signatures and returns the latest message; Nylas calls the cleaning heuristic, and whether answers typed inside the quote are kept is not described. [1](https://developer.nylas.com/docs/v3/email/parse-messages/) [2](https://developer.nylas.com/docs/cookbook/email/clean-messages/) [3](https://developer.nylas.com/docs/reference/notifications/messages/message-created-cleaned/) | **Partial** Getting a message with stripQuoted=true strips quoted elements from the body; signature removal and how answers typed inside the quote are treated are not described. [1](https://apirefs.aurinko.io/#tag/Messages) | **No** The Email object provides the complete body (HTML when available) and body\_plain plus a short snippet; no field in the documented Email object separates new text from quoted history. [1](https://developer.unipile.com/v2.0/reference/getemail) | **Partial** Web-safe HTML folds quoted thread history into a collapsible element (class ee-collapsed-thread); the quote is marked, not stripped, signatures are not separated, and how answers typed inside the quote are treated is not described. [1](https://learn.emailengine.app/docs/receiving/web-safe-html) [2](https://learn.emailengine.app/docs/mcp/tools) |
| **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) | **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/) | **Not documented** No out-of-office or auto-reply flag is described on the email message. [1](https://apirefs.aurinko.io/#tag/Messages) | **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** 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) |
| **Verification codes as fields** A verification email comes with its one-time code or confirmation link as fields on the message. | **Yes** A verification email carries verification.code and verification.link, both written in the email, on the email and its email.received event. [1](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for) | **Partial** The Nylas CLI's otp get and otp watch commands return a 6-digit code found in recent mail; API messages carry no code field, and Nylas's Agent Account recipe extracts codes in your own code with regex and an LLM fallback. [1](https://developer.nylas.com/docs/cookbook/cli/extract-otp-codes/) [2](https://developer.nylas.com/docs/cookbook/agent-accounts/extract-otp-code/) | **No** The documented EmailMessage schema has no field for a verification code or confirmation link. [1](https://apirefs.aurinko.io/#tag/Messages) | **No** The documented Email object has no field for a verification code or confirmation link. [1](https://developer.unipile.com/v2.0/reference/getemail) | **Partial** Since v2.87.0 (experimental) messageNew can carry an otp field with the code parsed from the message's OTP-Token header, when notifyHeaders lists otp-token; codes that appear only in the body are not described. [1](https://learn.emailengine.app/docs/webhooks/messagenew) [2](https://learn.emailengine.app/docs/sending/basic-sending) |
| **Attachments as text, scans included** PDFs, documents and spreadsheets arrive with their content as text or Markdown, ready for an LLM, and scanned or image-only PDF pages are read too. Partial: text is extracted only from a PDF's text layer, only for some file types, or only on a separate request. | **Yes** PDFs, documents and spreadsheets come with prepared Markdown or text; scanned pages are read too and count against a monthly page allowance. [1](https://docs.aiinbx.com/guides/attachments) [2](https://docs.aiinbx.com/guides/billing#advanced-attachment-processing) | **No** Attachments download as raw bytes; Nylas's own recipe passes PDFs and images to your model to extract their content. [1](https://developer.nylas.com/docs/cookbook/email/parse-email-attachments/) | **Not documented** The attachment endpoint returns the file content; no text or Markdown extraction is described. [1](https://apirefs.aurinko.io/#tag/Messages) | **No** The Email object carries attachment metadata for display and the file is downloaded with Get an Email Attachment; extracted text is not among the documented fields. [1](https://developer.unipile.com/v2.0/docs/list-emails) | **No** Attachments are listed and downloaded as files; the docs leave parsing PDFs and other files to your own code. [1](https://learn.emailengine.app/docs/receiving/attachments) |
| 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) | **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 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) | **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) | **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) |
| **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) | **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** Aurinko connects existing provider mailboxes and does not provision domains or subdomains. [1](https://docs.aurinko.io/getting-started/readme) | **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) | **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) |
| **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** A Google connector lets users grant OAuth access to Gmail. [1](https://developer.nylas.com/docs/provider-guides/google/) | **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) | **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** 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) |
| **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** 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** 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) | **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** 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) |
| **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** 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** 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** 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** 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) |
| Sending |
| **Reply by thread** Reply to a conversation by its ID; recipients, subject and reply headers are filled in for you. | **Yes** threads.reply takes a thread ID and the text; sender, recipients (following Reply-To), subject and In-Reply-To/References are filled in from the thread, and email\_id pins the reply to one message. [1](https://docs.aiinbx.com/guides/threads#replying) | **Partial** A send with reply\_to\_message\_id gets In-Reply-To and References added by Nylas; per Nylas's reply guide, the caller sets the to recipients and the subject. [1](https://developer.nylas.com/docs/v3/email/send-email/) [2](https://developer.nylas.com/docs/v3/agent-accounts/email-threading/) [3](https://developer.nylas.com/docs/cookbook/email/threads/reply-to-a-thread/) | **Partial** Replies go to POST /email/messages/{messageId}/reply, addressed by a message ID rather than a thread ID; which fields are filled in automatically is not described. [1](https://apirefs.aurinko.io/#tag/Messages) | **Partial** You reply by passing the provider ID of the email being answered in \`reply\_to\_provider\_id\`, and the \`to\` recipients are required in the request. [1](https://developer.unipile.com/v2.0/reference/sendemail) [2](https://developer.unipile.com/v2.0/docs/send-emails) | **Yes** A reply names the message being answered, and EmailEngine fills in the recipient from its Reply-To or sender, the Re: subject and In-Reply-To/References; replying by thread ID (reference.threadId) works on Gmail API accounts. [1](https://learn.emailengine.app/docs/sending/replies-forwards) [2](https://learn.emailengine.app/docs/sending/threading/sending-threaded) |
| **Scheduled sends** Schedule an email for later, and change or cancel it before it goes. | **Yes** Sends, replies and forwards take scheduled\_at up to 30 days ahead; until it goes, a scheduled email can be moved, edited or cancelled. [1](https://docs.aiinbx.com/guides/scheduling) [2](https://aiinbx.com/solutions/scheduled-email-api) | **Yes** send\_at schedules a message 1 minute to 30 days ahead (no maximum when stored as a Google or Microsoft draft) and DELETE cancels it; scheduled drafts on Google and Microsoft can be edited, and a new send time means cancelling and rescheduling. [1](https://developer.nylas.com/docs/v3/email/scheduled-send/) | **Partial** A draft can be sent later by passing sendTime to the send-draft call, and the draft shows the scheduled job's status; changing or cancelling a scheduled send is not described. [1](https://apirefs.aurinko.io/#tag/Drafts) [2](https://www.aurinko.io/nylas-alternative/) | **No** Send an Email and Send a Draft send immediately; neither request has a scheduling field. [1](https://developer.unipile.com/v2.0/reference/sendemail) [2](https://developer.unipile.com/v2.0/reference/senddraft) | **Yes** sendAt schedules a message, and a queued message can be cancelled or sent now (promote); there is no documented endpoint to edit it. [1](https://learn.emailengine.app/docs/sending/outbox-queue) [2](https://learn.emailengine.app/capabilities.json) |
| **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** 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/) | **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) | **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** 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) |
| **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) | **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/) | **Not documented** No sending-hours setting is described for email sends. [1](https://apirefs.aurinko.io/#tag/Messages) | **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) | **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) |
| **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) | **No** Nylas states it doesn't ship suppression lists and its bounce guide says to add permanently failed addresses to your own; Agent Account outbound block rules with address Lists can stop sends to addresses you add. [1](https://developer.nylas.com/docs/cookbook/email/sendgrid-alternative/) [2](https://developer.nylas.com/docs/v3/agent-accounts/policies-rules-lists/) [3](https://developer.nylas.com/docs/cookbook/use-cases/build/handle-bounced-email/) | **Not documented** No suppression list is described in the API reference. [1](https://apirefs.aurinko.io/#tag/Messages) | **No** Bounces are reported through the \`email.new.bounce\` webhook; Unipile's docs direct bounce handling for bulk sending to dedicated providers such as Mailgun, Postmark or Resend. [1](https://developer.unipile.com/v2.0/docs/bounce-detection) [2](https://developer.unipile.com/v2.0/docs/send-emails) | **Partial** Suppression lists (the /v1/blocklist API) record one-click unsubscribes automatically and apply to mail-merge sends that name a listId; bounces and complaints are added by your application. [1](https://learn.emailengine.app/docs/sending/deliverability/suppression-lists) |
| **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** Nylas states it doesn't ship unsubscribe handling or suppression lists. [1](https://developer.nylas.com/docs/cookbook/email/sendgrid-alternative/) | **Not documented** No suppression list or opt-out handling is described in the API reference. [1](https://apirefs.aurinko.io/#tag/Messages) | **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) | **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) |
| **Open and click tracking** Opens and clicks are reported per message. | **Yes** Open and click tracking is set per domain and can be overridden per send; it is not available on mail sent through a connected mailbox. [1](https://docs.aiinbx.com/guides/sending#tracking) [2](https://docs.aiinbx.com/webhooks/events/email-opened) | **Yes** tracking\_options reports opens, link clicks and thread replies per message by webhook, and is not available to Sandbox applications. [1](https://developer.nylas.com/docs/v3/email/message-tracking/) | **Yes** A tracking object on send turns on open, link and thread-reply tracking; tracking events (open, click, reply, replyBounce) are available over the API and as webhooks. [1](https://docs.aurinko.io/unified-apis/email-api) [2](https://apirefs.aurinko.io/#tag/EmailTracking) | **Yes** Set \`tracking\_options\` on an HTML email to receive \`tracking.open\` and \`tracking.click\` webhooks, optionally on your own tracking domain. [1](https://developer.unipile.com/v2.0/docs/track-email-clicks-opens) | **Yes** Optional open pixel and link rewriting report trackOpen and trackClick webhooks per message. [1](https://learn.emailengine.app/docs/webhooks/trackopen) [2](https://learn.emailengine.app/docs/webhooks/trackclick) |
| **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) | **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/) | **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** 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) | **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) |
| Platform |
| **Separation per customer** Your customers' domains, mailboxes and settings are kept apart inside one account (sub-accounts, pods, spaces or similar). | **Yes** Spaces keep each customer's domains, mailboxes, mail, pacing rules, suppression lists and sending reputation apart inside one workspace; API keys and webhook endpoints are workspace-wide. [1](https://docs.aiinbx.com/guides/spaces) [2](https://aiinbx.com/features/spaces) | **Yes** Workspaces group an application's grants per customer organization, and for Agent Accounts carry the policy and rules (Agent Account workspace isolation is not on the Free plan). [1](https://developer.nylas.com/docs/dev-guide/platform/workspaces/) [2](https://developer.nylas.com/docs/v3/agent-accounts/workspaces/) [3](https://www.nylas.com/pricing/) | **Partial** A team can hold several applications, connected accounts are grouped by Users and by Organizations (the provider-side org and domain), and add-in settings can be stored per user or organization; per-customer limits or mail settings are not described. [1](https://docs.aurinko.io/team-members-and-roles-in-applications) [2](https://apirefs.aurinko.io/#tag/Organizations) | **Yes** Scopes isolate each customer's linked accounts inside one Application, each with its own Account API Keys, created through the API. [1](https://developer.unipile.com/v2.0/docs/scopes) [2](https://developer.unipile.com/v2.0/reference/createscope) | **Partial** Each connected mailbox is a separate account with its own templates and account-bound access tokens, and the licence allows any number of instances; there is no grouping of accounts per customer. [1](https://learn.emailengine.app/capabilities.json) [2](https://learn.emailengine.app/docs/sending/templates) [3](https://learn.emailengine.app/docs/licensing) |
| **Official SDKs** Maintained SDKs in at least TypeScript/JavaScript and Python. | **Yes** Official TypeScript and Python SDKs cover the same API surface. [1](https://docs.aiinbx.com/sdks) | **Yes** Official SDKs for Node.js, Python, Ruby and Kotlin/Java. [1](https://developer.nylas.com/docs/v3/sdks/) | **Not documented** The docs list a REST API reference and a Bubble.io plugin; no TypeScript or Python SDK is listed. [1](https://docs.aurinko.io/llms.txt) | **Yes** Official Node.js and Python SDKs for the v2 API. [1](https://developer.unipile.com/v2.0/docs/welcome) [2](https://github.com/unipile/unipile-python) [3](https://github.com/unipile/unipile-node) | **No** EmailEngine's docs list one official SDK, for PHP, and say other languages use the REST API with its OpenAPI spec. [1](https://learn.emailengine.app/docs/comparison/emailengine-vs-nylas) [2](https://learn.emailengine.app/docs/integrations/php) |
| **Self-hosting** Can be run on your own infrastructure. | **No** AI Inbx is a hosted service reached at api.aiinbx.com; there is no self-hosted edition. [1](https://docs.aiinbx.com/api) [2](https://aiinbx.com/terms#service) | **No** Nylas is a hosted API; its own comparison with self-hosted gateways lists hosting as 'None, fully managed'. [1](https://developer.nylas.com/docs/cookbook/email/emailengine-alternative/) | **Not documented** Aurinko describes its API as hosted on cloud infrastructure providers; no self-hosted edition is described. [1](https://www.aurinko.io/certifications/) | **Not documented** Unipile is offered as a hosted API; a self-hosted option is not documented. [1](https://www.unipile.com/security-compliance/) | **Yes** Runs on your own infrastructure with Redis, as a binary, Docker image, npm package or installer script, under a commercial licence. [1](https://learn.emailengine.app/docs/installation) [2](https://emailengine.dev/license.html) |
| **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** 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** 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/) | **Yes** SOC 2 Type II certified; the report is available on request through the security documentation form. [1](https://www.unipile.com/security-compliance/) | **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) |
| 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** 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/) | **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/) | **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) | **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) |

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

## AI Inbx (ours): threads that hold, replies read for you, billed by email

**Hosting:** hosted · **Mailboxes:** Gmail, Google Workspace, Outlook and Microsoft 365, plus every address on your own domains · **Pricing from:** $5 a month for 5,000 emails

AI Inbx connects your users' Gmail and Outlook over OAuth through your own Google or Microsoft app ([mailboxes guide](https://docs.aiinbx.com/guides/mailboxes)), and sends and receives on domains you verify. Mail from both arrives on the same threads, with the same fields, through one `email.received` webhook, and every send keeps to your suppression lists, sending hours and pacing rules.

### Threads that hold without reply headers

On AI Inbx a reply lands on its [thread](https://docs.aiinbx.com/guides/receiving#threading) when a mail 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, so two strangers' "Re: Invoice" stay apart, and mail that could belong to either starts a thread of its own.

Think of how a person files mail. Shown a reply with no reply headers, they read it, recognise the conversation it continues and put it there. AI Inbx does that for every inbound email, before your code sees it. With threading on reply headers alone, that work moves to your agent: for each reply that arrives without them, it has to search earlier mail to find out whether a conversation already exists, and that costs tokens and time on every message.

Answering is one call: `threads.reply` takes the thread and the text and fills in the sender, the recipients (following Reply-To), the subject and the reply headers. `email_id` pins the message being answered, so an out-of-office arriving meanwhile can't change who gets the answer. Reply-all keeps colleagues on, and a Reply-To naming only your own addresses fails with `no_recipients` instead of mailing yourself ([replying](https://docs.aiinbx.com/guides/threads#replying)).

With `draft: true` on a send or reply nothing goes out until a person approves it from its `review_url` ([drafts](https://docs.aiinbx.com/guides/drafts)). `scheduled_at` holds a message up to 30 days, and until it leaves you can change its content or time, or cancel it ([scheduling](https://docs.aiinbx.com/guides/scheduling)). An `Idempotency-Key` makes a retried send return the original email instead of sending twice, and the events API reads back every event, whether or not your webhook endpoint heard it ([idempotency](https://docs.aiinbx.com/guides/sending#idempotency)).

### Inline answers stay in the reply text

People answer inside the quote ("see my answers below"), and a plain cut at the quote loses those answers, so an agent acts on half a reply. AI Inbx's [`stripped_text`](https://docs.aiinbx.com/guides/receiving#what-was-written) removes the quoted conversation and a repeated signature, and keeps each inline answer under the line it answers. From the receiving guide, shortened:

```
{
  "stripped_text": "Hi Lena, answers inline.\n\n> 1. How many units per month?\n500, ramping to 800 in Q4.\n\n> 2. Which finish?\nAnodised black.\n\nBest\nTom",
  "segments": [
    { "kind": "written", "text": "Hi Lena, answers inline." },
    {
      "kind": "quoted",
      "text": "On Mon, 1 Sep 2026 at 10:44, Lena Bergmann <lena@bergmann-metall.de> wrote:\n1. How many units per month?"
    },
    { "kind": "written", "text": "500, ramping to 800 in Q4." }
  ]
}
```

Answers inside an unmarked quote, as Outlook writes it, are found as long as the message being answered is on the thread: mail sent or received through AI Inbx, and the history a mailbox imports when it connects (seven days by default, up to 90). A reply to anything older keeps its whole quote in `stripped_text`, so nothing the sender wrote is cut.

### Automated mail read for you

On AI Inbx every inbound email has a `category`: `human`, `out_of_office`, `auto_reply`, `bounce`, `verification` and four more. An away reply also carries [`unavailable`](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for): the reason (`absent`, `left` or `unmonitored`), `back_on` for the first day back, and the `contacts` it names. A sequence can pause until the return date or write to the colleague instead.

A confirmation or sign-in email carries `verification.code` and `verification.link`, so an agent signing up for a tool on a user's behalf can finish the job.

### Attachments arrive as Markdown

On AI Inbx, PDFs, documents and spreadsheets come with [prepared Markdown or text](https://docs.aiinbx.com/guides/attachments) beside the original file, so a model can read a purchase order or a CV without you running a parser. Scanned PDF pages are read too, from an allowance of 100, 500 or 2,000 pages a month on Developer, Growth or Scale, then $0.01 a page once extra usage is switched on.

### Opt-out replies become suppressions

On AI Inbx a recipient who writes back "please take me off your list" is suppressed automatically and reported as [`email.unsubscribed`](https://docs.aiinbx.com/guides/suppressions) with `source: "reply"`, next to link and one-click unsubscribes, dead addresses and complaints. Every send, from your domains or a connected mailbox, is checked against those lists first. CAN-SPAM in the US requires a commercial sender to stop mailing someone who opts out, and an opt-out written in a reply is easy to miss when nobody reads every reply.

### Sending hours and pacing hold mail instead of failing it

On AI Inbx, [sending hours](/features/sending-hours) are weekly windows in an IANA timezone with daylight saving handled, for example weekdays 9 to 17 Europe/London for recipients matching `*@*.co.uk`. [Pacing](/features/pacing) limits cap sends per rolling window, per sending address, sending domain, recipient or recipient domain. Mail outside a window or over a limit waits, the send response names the rule holding it and a projected send time, and you can release it by hand. That keeps a user's Gmail under Google's sending ceiling without a queue per tenant in your code.

### Your own domains, without an account per address

AI Inbx sends and receives on domains you verify, and every address on them works without being created first: `reply+ord_8812@mail.yourapp.com` routes a reply to its order with nothing registered. Verify `*.saas.com` once and each customer gets `acme.saas.com` from the API with no DNS of their own ([wildcard domains](/features/wildcard-domains)). [Spaces](/features/spaces) keep each customer's domains, mailboxes, suppression lists, pacing rules and sending reputation apart, while your workspace-wide lists and rules still apply to every customer, so one customer's bounces never pause another's mail.

Nylas Agent Accounts take the other route: each address is an account you create first, 50 included on Pro and $0.40 a month each after. I think an account per address is the wrong unit for a platform: your backend already knows which address belongs to which customer, and `threads.list({ mailbox })` returns one address's mail ([why](/blog/why-inboxes-are-the-wrong-primitive)).

On mail from your own domains, open and click events carry `bot` and `bot_reason`, so Apple Mail Privacy Protection fetches and security scanners don't count as readers.

### Built for agents at volume

The same API serves an agent that sends a few emails a day and a platform whose agents send thousands. At that volume the sections above add up to less work per email:

-   **Less for the model to read.** On a long thread the agent reads `stripped_text`, what is new, not the whole conversation again with every reply.
-   **No model call on mail that needs none.** With `category`, 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.** Up to 100 pacing rules on Developer, 1,000 on Growth and no limit on Scale, kept per customer in [spaces](https://docs.aiinbx.com/guides/spaces) under your workspace-wide limits.

**Look elsewhere if** you need IMAP or SMTP access, Exchange on-premises, iCloud or Yahoo mailboxes, tracking on mail sent through a connected mailbox, a shared Google or Microsoft app (each customer registers their own, which for Gmail means Google's verification and a Pub/Sub topic, [setup](https://docs.aiinbx.com/guides/mailboxes#your-own-oauth-app)), templates, a self-hosted edition, SDKs beyond TypeScript and Python, a SOC 2 report or a free plan.

## Nylas: providers beyond Gmail and Outlook, and a compliance file

**Hosting:** hosted · **Mailboxes:** Google, Microsoft (Exchange on-premises included), iCloud, Yahoo, IMAP, plus hosted Agent Accounts · **Pricing from:** $15 a month for 10 connected accounts

Nylas connects your users' existing mailboxes through one API and bills per connected account. Nylas also hosts mailboxes on your domain ([Agent Accounts](https://developer.nylas.com/docs/v3/agent-accounts/)), each created per address and billed per account.

**Nylas leads** on providers ([Microsoft guide](https://developer.nylas.com/docs/provider-guides/microsoft/), [IMAP guide](https://developer.nylas.com/docs/provider-guides/imap/)), on compliance (a SOC 2 Type II report, an ISO 27001 certificate and a [pre-signed HIPAA BAA on request on all paid plans](https://www.nylas.com/pricing/)), and on open and click tracking for mail sent from connected accounts. Nylas also has a Free plan with 5 connected accounts and 3 Agent Accounts, SDKs for Node.js, Python, Ruby and Kotlin/Java, and a shared Google OAuth app in its Accelerator Package, a $2,400-a-year add-on on Pro Annual.

**On each message**, Nylas returns Gmail's and Outlook's own threads. [Clean Conversations](https://developer.nylas.com/docs/v3/email/parse-messages/) returns the latest message without reply and forward content, and its docs don't say whether inline answers are kept. Automated reply detection works on Google and Microsoft grants, for replies to mail sent through Nylas, and Nylas [states](https://developer.nylas.com/docs/v3/email/send-email/) that it doesn't extract return dates. Its CLI has `otp get` for a recent 6-digit code, but API messages carry no code field, and its [own recipe](https://developer.nylas.com/docs/cookbook/email/parse-email-attachments/) passes PDFs to your model.

**On sending**, Nylas's [reply guide](https://developer.nylas.com/docs/cookbook/email/threads/reply-to-a-thread/) has the caller set the recipients and subject. Nylas [says it doesn't ship](https://developer.nylas.com/docs/cookbook/email/sendgrid-alternative/) unsubscribe handling or suppression lists, though Agent Accounts can block addresses you add to a list. A policy can set a daily send quota per Agent Account, and sends over it return HTTP 429.

The point-by-point comparison, worked bills and a migration table are in [AI Inbx vs Nylas](/blog/ai-inbx-vs-nylas).

## Aurinko: many providers, billed per active account

**Hosting:** hosted · **Mailboxes:** Gmail, Office 365, Outlook.com, MS Exchange over EWS, Zoho Mail, iCloud, IMAP · **Pricing from:** $1.50 per active email account a month

Aurinko is a [unified mailbox API](https://docs.aurinko.io/getting-started/readme) over those providers, [IMAP](https://docs.aurinko.io/authentication/configuring-imap-provider-connections-in-aurinko) included. Aurinko [bills active accounts only](https://docs.aurinko.io/faq/how-does-aurinko-billing-work): more than 10 API calls or 1 MB of traffic in the month. Email over any connection except IMAP, with up to 1 GB of monthly traffic, is $1.50 per active account, and the Full Platform tier, which adds IMAP and unlimited traffic, is $2.

**Aurinko leads** on provider breadth and on billing only for accounts used that month, and it tracks opens, clicks and replies on sent mail.

**On each message**, Aurinko gives each message a `threadId` and strips quoted elements with `stripQuoted`. Aurinko's docs don't describe how a reply without reply headers is grouped, how answers inside the quote are treated, an auto-reply flag or text from attachments, and its message schema has no verification-code field.

**On sending**, Aurinko replies by message ID, and its API reference describes no send limits you set, no sending hours and no suppression list.

Aurinko [doesn't offer a shared Google app](https://docs.aurinko.io/faq/does-aurinko-provide-a-shared-verified-google-oauth-application), and its [security page](https://www.aurinko.io/certifications/), last updated 18 June 2026, says it is preparing for a SOC 2 Type I examination.

## Unipile: email plus LinkedIn and WhatsApp

**Hosting:** hosted · **Mailboxes:** Gmail, Outlook, IMAP, plus LinkedIn, WhatsApp, Instagram and Telegram accounts · **Pricing from:** €49 / $55 a month for up to 10 accounts

Unipile is a [unified API](https://developer.unipile.com/v2.0/docs/welcome) over your users' messaging accounts, LinkedIn Sales Navigator and Recruiter included. Above 10 accounts Unipile costs more per account than Nylas: €5.00 ($5.50) from 11 to 50 accounts, falling to €3.00 ($3.50) above 5,000.

**Unipile leads** on channels beyond email, on Google verification (Gmail connects through [Unipile's verified Google app by default, with the CASA assessment included](https://www.unipile.com/pricing-api/)), and on compliance, with a [SOC 2 Type II report](https://www.unipile.com/security-compliance/).

**On each message**, Unipile returns a thread's emails for Gmail, Outlook and IMAP, and on IMAP servers without thread IDs it infers the thread from headers. Unipile's Email object carries the full body, with no field separating new text from the quote, no auto-reply flag and no verification-code field, and attachments download as files.

**On sending**, Unipile needs the `to` recipients on a reply, rejects requests over its rate limits with 429, and has no sending hours or suppression list. Unipile's docs say it is [not meant for transactional or marketing email](https://developer.unipile.com/v2.0/docs/send-emails).

## EmailEngine: self-hosted, one flat licence

**Hosting:** self-hosted, with Redis · **Mailboxes:** Gmail, Microsoft 365, IMAP · **Pricing from:** €1,200 / $1,450 a year, flat

EmailEngine is a [self-hosted email API](https://emailengine.app/). One [annual licence per company](https://learn.emailengine.app/docs/licensing) covers unlimited mailboxes, instances and API calls, and mail stays on servers you choose. You run and pay for those servers; EmailEngine's homepage puts one instance at several thousand mailboxes.

**EmailEngine leads** on hosting, on cost at scale (no per-mailbox charge) and on open and click tracking for mail sent from connected mailboxes.

**On each message**, EmailEngine passes on the provider's thread ID, and IMAP servers without one give none. EmailEngine's web-safe HTML folds the quoted history into one collapsed element, without saying how answers inside it are treated. Messages carry an `isAutoReply` flag with no return date, an experimental `otp` field carries a code from the OTP-Token header when the sender sets one, and attachments arrive as files.

**On sending**, EmailEngine fills in recipients, subject and reply headers on a reply. EmailEngine's one pacing setting is a fixed pause between deliveries for the whole instance, there is no sending-hours setting, and its suppression lists record unsubscribes from its one-click header and hosted page on mail-merge sends.

EmailEngine's one official SDK is for PHP, and certifications such as SOC 2 [apply to your deployment](https://learn.emailengine.app/docs/deployment/compliance).

## Gmail API and Microsoft Graph directly

**Hosting:** your servers · **Mailboxes:** Gmail and Microsoft · **Pricing from:** no integration vendor fee

You integrate the [Gmail API](https://developers.google.com/workspace/gmail/api/guides/push) and [Microsoft Graph's mail API](https://learn.microsoft.com/en-us/graph/outlook-mail-concept-overview) yourself, and keep two sync models running: Gmail's `watch` has to be renewed [at least every 7 days](https://developers.google.com/workspace/gmail/api/guides/push), and Graph message subscriptions last at most [10,080 minutes](https://learn.microsoft.com/en-us/graph/api/resources/subscription). Google states that [standard Gmail API use is at no additional cost](https://developers.google.com/workspace/gmail/api/reference/quota), with charges for exceeding quota limits planned for later in 2026.

Gmail's read scopes are [restricted](https://developers.google.com/workspace/gmail/api/auth/scopes), so an app that stores that data needs Google's verification and a [security assessment at least every 12 months](https://developers.google.com/identity/protocols/oauth2/production-readiness/restricted-scope-verification). Microsoft asks for [publisher verification](https://learn.microsoft.com/en-us/entra/identity-platform/publisher-verification-overview). Threading across both providers, reply text, automated mail, suppressions and sending rules are yours to build.

## How much does each cost at 100, 1,000 and 10,000 accounts?

AI Inbx bills by email, sent and received, with no charge per connected mailbox or address; connected mailboxes are unlimited from Growth ($29 a month). Nylas, Aurinko and Unipile bill per account, and EmailEngine is a flat licence plus the servers you run.

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.

| Feature | AI Inbx | Nylas | Aurinko | Unipile | EmailEngine |
| --- | --- | --- | --- | --- | --- |
| 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. | Monthly plan fee plus per-unit overage: connected accounts, Agent Accounts (per account), and Agent Account emails sent, storage and bandwidth. | 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 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. | Flat annual subscription per company, not per mailbox, instance or API call; you run the servers (EmailEngine plus Redis) yourself. |
| Free tier | No free plan: the pricing FAQ says Developer is $5 a month and includes 5,000 emails. | 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; a 14-day free trial with full API access, after which API requests are blocked until a subscription is added. | 7-day free trial, no credit card required, up to 10 connected accounts. | No free plan; every instance can activate a 14-day trial with full functionality, no sign-up and no credit card. |
| 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. | 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. | Email (non-IMAP) is $1.50 per active account per month, up to 1 GB monthly traffic. | 49.00 € / $55.00 per month minimum, including up to 10 linked accounts, full API access and unlimited API calls. | 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. |
| 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. | 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. | 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. | 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. | 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. |
| 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.nylas.com/pricing/) [2](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) | [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://www.unipile.com/pricing-api/) [2](https://developer.unipile.com/v2.0/docs/billing) | [1](https://emailengine.app/) [2](https://postalsys.com/plans) [3](https://learn.emailengine.app/docs/licensing) [4](https://emailengine.dev/license.html) |

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

Monthly cost for connected email accounts, in USD excluding tax, as of November 2026:

|  | 100 accounts | 1,000 accounts | 10,000 accounts |
| --- | --- | --- | --- |
| AI Inbx, 500 emails per mailbox a month | $49 | $499 | $4,999 |
| AI Inbx, 2,000 emails per mailbox a month | $199 | $1,999 | $19,999 |
| Nylas Pro, monthly billing | $199 | $1,999 | $19,999 |
| Nylas Pro, annual billing (per month) | $174.25 | $1,749.25 | $17,499.25 |
| Aurinko, email without IMAP (up to 1 GB traffic) | $150 | $1,500 | $15,000 |
| Aurinko, Full Platform (IMAP too) | $200 | $2,000 | $20,000 |
| Unipile | $500 | $4,500 | $35,000 at the listed rate; custom pricing above 5,000 |
| EmailEngine (licence only; servers and Redis extra) | $120.83 + hosting | $120.83 + hosting | $120.83 + hosting |

The arithmetic, with N connected accounts:

```
AI Inbx               plan + extra emails at $0.001 each
  100 x 500   =     50,000 emails   Growth $29 + 20,000 x $0.001          = $49
  1,000 x 500 =    500,000 emails   Scale  $99 + 400,000 x $0.001         = $499
  100 x 2,000 =    200,000 emails   Scale  $99 + 100,000 x $0.001         = $199
  10,000 x 2,000 = 20,000,000       Scale  $99 + 19,900,000 x $0.001      = $19,999
Nylas Pro (monthly)   $49 + (N - 25) x $2.00       1,000 -> $49 + $1,950 = $1,999
Nylas Pro (annual)    $43 + (N - 25) x $1.75       1,000 -> $43 + $1,706.25 = $1,749.25
Aurinko               N x $1.50 (email) or N x $2.00 (Full Platform)
Unipile               N x tier rate                100 x $5.00, 1,000 x $4.50, 10,000 x $3.50
EmailEngine           $1,450 a year / 12 = $120.83, any N
```

What each number assumes:

-   **AI Inbx** counts every email into or out of a connected mailbox, including mail the user sends from Gmail or Outlook directly and the history imported when it connects: seven days by default, set from 0 to 90 ([what counts](https://docs.aiinbx.com/guides/billing#what-counts)). 500 a month is about 23 per working day; 2,000 is about 90. Extra usage is opt-in, so it has to be switched on for these totals. Developer caps connected mailboxes at 100, and mail on your own domains counts from the same allowance.
-   **Nylas** counts connected accounts cumulatively, so accounts deleted mid-month still count. [Agent Accounts](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) are billed on top: 50 included on Pro, then $0.40 each ($0.20 annual), plus Agent Account emails past 50,000 a month. Enterprise is custom, with lower rates at higher volumes.
-   **Aurinko** bills [active accounts](https://docs.aurinko.io/faq/how-does-aurinko-billing-work) only, so connected accounts nobody used that month cost nothing. Aurinko's billing FAQ limits the $1.50 tier to email without IMAP and 1 GB of monthly traffic; its pricing page describes the tiers by data transfer instead ($1.50 under 5 GB). Volume and custom pricing are on request.
-   **Unipile** applies the tier rate to every account, as in [its own example](https://www.unipile.com/pricing-api/) (60 accounts at €4.50 each). Above 5,000 accounts Unipile offers custom pricing, so the 10,000-account figure is the listed rate, not a quote.
-   **EmailEngine** is the licence alone. The servers and Redis you run it on, and the time to operate them, come on top; at 10,000 accounts that may mean more than one instance, each with its own Redis.

At 100 accounts with 500 emails each, AI Inbx ($49) is the smallest bill in the table, below EmailEngine's licence alone; from 1,000 accounts EmailEngine's licence is smaller, before server costs. Below about 1,500 emails per mailbox a month AI Inbx costs less than every paid hosted per-account option. At around 2,000 it costs the same as Nylas Pro on monthly billing and Aurinko's Full Platform, and more than Nylas Pro on annual billing or Aurinko's email tier. Full plan details are on [our pricing page](/pricing).

## Which Nylas alternative should you choose?

-   **For IMAP, Exchange, Zoho or iCloud mailboxes, paying only for accounts used that month:** Aurinko, or stay on Nylas for Yahoo or its SOC 2 Type II report.
-   **For products that act through users' LinkedIn or WhatsApp too:** Unipile.
-   **To connect Gmail without your own Google verification:** Unipile by default, or Nylas's Accelerator Package on Pro Annual.
-   **When mail must stay on your servers, or for thousands of mailboxes on a fixed budget with people to run servers:** EmailEngine.
-   **For Gmail and Outlook users where replies drive the product, or mail also goes out on your own or your customers' domains:** AI Inbx.
-   **To give agents their own addresses:** AI Inbx, where every address on your verified domain works with nothing created, billed by email; more options are in [AgentMail alternatives](/blog/agentmail-alternatives).
-   **For two providers, full control and an engineering team to own it:** the Gmail API and Microsoft Graph directly.

To try it, [create a workspace](/signup) and connect a test mailbox with the [mailboxes guide](https://docs.aiinbx.com/guides/mailboxes). For more, read [AI Inbx vs Nylas](/blog/ai-inbx-vs-nylas) and [the best email API for AI agents](/blog/best-email-api-for-ai-agents).

*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

### What is the cheapest Nylas alternative?

It depends on how many accounts you connect and how busy they are. At list prices in November 2026, EmailEngine is a flat €1,200 ($1,450) a year for any number of mailboxes, plus the servers you run it on, and Aurinko is $1.50 per active email account a month. AI Inbx bills by email, so below about 1,500 emails per mailbox a month it costs less than every paid hosted per-account option, and at 2,000 it costs the same as Nylas Pro on monthly billing.

### How much does Nylas cost per connected account?

As of November 2026, Nylas Essentials is $15 a month with 10 connected accounts, then $2.25 per additional account. Pro is $49 a month with 25 accounts, then $2.00 each, or $43 a month and $1.75 each on annual billing. The Free plan includes 5 connected accounts, and Enterprise is custom. At 1,000 accounts, Pro on monthly billing comes to $1,999 a month.

### Which Nylas alternatives support Exchange and IMAP?

Aurinko connects Google, Office 365, Outlook.com, MS Exchange over EWS, Zoho, iCloud and IMAP. Unipile connects Gmail, Outlook and any IMAP server. EmailEngine connects Gmail, Microsoft 365 and IMAP. AI Inbx connects Gmail and Outlook only.

### Does Nylas extract out-of-office return dates?

No. Nylas's docs state that its automated reply detection doesn't extract return dates from out-of-office messages. On AI Inbx an out-of-office reply carries unavailable, with back\_on for the first day back and the contacts the reply names, when the reply states them.

### Do I need Google verification if I leave Nylas?

Usually, yes. Reading Gmail needs restricted scopes, and an app that stores or passes that data through its servers goes through Google's verification and a security assessment at least every 12 months. Aurinko, EmailEngine and AI Inbx connect Gmail through your own Google app, so that work is yours. Unipile connects through its own verified Google app by default, with the assessment included.

### Is there a self-hosted Nylas alternative?

Yes. EmailEngine runs on your own servers with Redis and connects Gmail, Microsoft 365 and IMAP mailboxes through one REST API. The licence is €1,200 ($1,450) a year per company and covers unlimited mailboxes and instances. You run and secure the deployment yourself, so certifications such as SOC 2 apply to your setup.

### Does AI Inbx replace Nylas?

Yes, if your users are on Gmail, Google Workspace, Outlook or Microsoft 365: AI Inbx adds threads that hold without reply headers, out-of-office return dates, opt-out replies suppressed, sending hours and your own domains, billed by email rather than per account. No, if you need IMAP, Exchange on-premises, iCloud or Yahoo, a SOC 2 report, or a shared Google app.

### What replaces Nylas Agent Accounts?

Aurinko, Unipile and EmailEngine connect mailboxes your users already have and create no new addresses. On AI Inbx every address on a domain you verify sends and receives without being created first, and each customer can get a subdomain under one wildcard domain with no DNS of their own.

Keep reading

## More from the blog

[All posts](/blog)

-   [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 2026ComparisonsThe best AgentMail alternatives (2026)Seven AgentMail alternatives for platforms, compared on per-inbox pricing, catch-all domains, users' Gmail and Outlook, opt-out replies and outreach rules.Pau Kraft](/blog/agentmail-alternatives)
-   [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)
