Business
Hire the tenth person.
The bill stays put.
Mail is billed per seat almost everywhere, so the invoice grows every time somebody joins. Here the plan is bought once. Domains and addresses are what it counts, and members are not counted at all.
No seat maths, no per-user upgrade path, and no call before you can see the price.
On Starter
$30a month
Unlimited members, never per seat. The tenth teammate costs what the first did.
5domains
Unlimited addresses on them, and a catch-all takes every address nobody got round to making.
70,000sends a month
Unlimited receiving. Only what leaves is counted.
The bill
Price it against
your own headcount.
Move the dials to the team you actually have. People is the column that bills everybody else, and it does nothing to our line. Starter is $30 a month and carries 5 domains, unlimited addresses on them, 70,000 sends a month, and unlimited members, never per seat.
Google WorkspaceBusiness Starter
Superhuman+ WorkspaceOne platform
Cancel the stack.
Keep the mail.
A mailbox, a team plan, the fast client, aliases, forwarding, who opened it and your product's sending API. Seven invoices, seven logins, one job.
- Gmail (cancelled)mailbox
- Google Workspace (cancelled)team plan
- Superhuman (cancelled)fast client
- Fastmail (cancelled)aliases
- Forward Email (cancelled)forwarding
- Mailchimp (cancelled)open tracking
- Resend (cancelled)transactional mail
Instead
The switch
Moving a domain is
a DNS change.
Four steps, and only one of them touches live mail. The rest is records resolving.
- 1
Add the domain
Settings → Domains takes the name and generates the records. It makes no difference where the domain is registered or who runs its DNS, and there is nothing to buy per domain.
- 2
Publish the records, or let the sync write them
Copy them into whatever runs your DNS. Connect Cloudflare on the Providers tab instead and one press of Sync writes all of them into your zone at once, the MX included. Anything already at those names is replaced, except the SPF record, which keeps the other senders it lists.
- 3
Verify, and watch the MX
The domain goes green once the records resolve, and a Cloudflare sync verifies it as it finishes. This is the step that moves live mail: a domain receiving somewhere else has its MX replaced, so mail can arrive here before you have told anyone.
- 4
Move people onto it
Share an address from its row and the person is sent an invitation carrying that address at read only, or at read and send. They do not need an account first, nothing is shared until they accept, and a pending invitation grants nothing.
Access
Who sees what,
and what gets in.
A role says what somebody may do in the workspace. An address grant says which addresses they may do it to. Both have to agree before anything happens, so somebody holding a role with sending in it and no addresses can send from nothing.
Hand billing@ to the person who does the billing, at read only or at read and send. A read-only grant never enters the list a send is checked against, on the send path, in the app and through the assistant alike.
One address means one address. Access is resolved on the server for every read, the thread list is filtered to the granted addresses, and opening a single thread is re-checked against them.
read, or read and send as it, with nothing else visible
Mail the sending domain itself disowns lands in Spam rather than the inbox. A DMARC failure is acted on only where the domain publishes an enforcing policy, and p=none is left alone.
Compared
Every mailbox
on one table.
The same rows for everyone, with list prices on them. Where a vendor does not document something, it says so rather than pretending the answer is no.
| Compared | OpenEmail per domain | Fastmail Standard | Proton Mail Mail Essentials | ![]() Google Workspace Business Starter | HEY for Domains per person | ![]() Superhuman + Workspace |
|---|---|---|---|---|---|---|
| What you actually pay for | The workspace | Each person | Each person | Each person | Each person | Each person, twice |
| Five people, every month | $30 | $25 | $34.95 | $35 | $58 | $160 |
| Twentieth person costs | $0 | $5 | $6.99 | $7 | $12 | $32 |
| Hosts the mail itself | a client on top of Gmail or Outlook | |||||
| Catch-all on your own domain | yours to switch on | paid plans | via a routing rule | aliases; catch-all not documented | whatever the host does | |
| Free on your own domain | one domain, ten addresses | trial only | custom domains are paid | trial only | no trial on domains | trial only |
| Drafts, subjects and answers from AI | writing assistant only | Gemini | Business tier | |||
| Your own agent can work the inbox | MCP server | JMAP API | API, no MCP | |||
| End-to-end encryption | between OpenEmail mailboxes | their whole point | enterprise tiers |
What is missing
Two things to
plan around.
Both land on a team moving its domains here. Read them before you move anyone.
- Moving old mail across
- Nothing here reads an mbox, an .eml file, a provider archive or an IMAP account, and there is no screen to start one from. Old mail stays where it is, so you set a forward at the old provider and let the archive sit there while you move.
- Bounce visibility over the API
- A delivery report is parsed, matched to the original by Message-ID, labelled on the thread and raised as email.bounced. Nothing writes back to the send row, whose status has no bounced state, so GET /emails still reads sent.
Who it is for