Run cold email infrastructure for multiple clients
Run cold email infrastructure for several clients from one EmailPal account: tenant tags, bulk provisioning, 10 clients x 5 mailboxes from about $99/mo. No client workspaces.
The short answer
An agency can run cold email infrastructure for many clients from one EmailPal account, separated by tags rather than workspaces. Ten clients with five mailboxes each is 50 mailboxes, which fits the $69/mo Starter plan; add warming at $0.60 per inbox ($30) and the total is about $99/mo, or $9.90 per client, before domains. You label each domain and mailbox with a tag such as tenant:acme and filter lists with ?tag=. There are no client workspaces, no per-client logins and no white-label.
One EmailPal account holds every client. Tag domains and mailboxes with tenant:<id> when you create them, filter with ?tag=, provision in bulk (50 domains or 100 mailboxes per call), and export credentials per client by mailbox id. The cost is flat per mailbox: Starter is $69/mo with 50 mailboxes and 50 domain slots, Growth is $189/mo with 200, extra mailboxes are $1/mo. The limit is isolation: the Unibox, blocklist, verification allowance and API keys are shared across the whole account, so if clients need their own logins or a white-label dashboard, a sequencer with client workspaces such as Smartlead is the better fit.
How it works, step by step
Step 1
Pick a tag convention and keep it in your own records
EmailPal stores tags and filters on them but interprets nothing, so tenant:<id> is a convention, not a format the API enforces. Each tag is up to 64 characters, and a domain or mailbox can carry up to 20 tags on create or update.
Step 2
Create a write key for provisioning and a separate admin key for credentials
Scopes are hierarchical: read, write, admin. Provisioning needs write. Exporting mailbox passwords and topping up the domain balance need admin, so keep that key out of anything that does not need it.
Step 3
Buy or connect the client domains with the client tag
POST /domains accepts up to 50 names per call and a tags array that is written onto every domain in the batch. Send an Idempotency-Key header, because a purchase spends money from the prepaid domain balance.
POST /api/public/v1/domainsbashcurl -X POST https://www.emailpal.io/api/public/v1/domains \ -H "Authorization: Bearer $EMAILPAL_API_KEY" \ -H "Idempotency-Key: acme-domains-001" \ -H "Content-Type: application/json" \ -d '{ "mode": "purchase", "domains": ["tryacme.com", "acmeteam.co"], "tags": ["tenant:acme"] }'Step 4
Create mailboxes on each ready domain with the same tag
POST /mailboxes takes up to 100 mailboxes per call, as a count, a list of personas or a list of named local parts. The domain must be ready or active, otherwise the call returns 409 domain_not_ready. Two to five mailboxes per domain is the range the help center recommends.
POST /api/public/v1/mailboxesbashcurl -X POST https://www.emailpal.io/api/public/v1/mailboxes \ -H "Authorization: Bearer $EMAILPAL_API_KEY" \ -H "Idempotency-Key: acme-mailboxes-001" \ -H "Content-Type: application/json" \ -d '{ "domain_id": "dom_91af22", "count": 3, "pattern": "first.last", "tags": ["tenant:acme"] }'Step 5
List one client at a time with ?tag=
GET /domains and GET /mailboxes accept repeated tag parameters, and they are ANDed. Asking for tenant:acme and outbound returns only rows that carry both, never the union, so a narrowing filter cannot leak another client’s rows.
GET /api/public/v1/mailboxes?tag=tenant:acmebashcurl "https://www.emailpal.io/api/public/v1/mailboxes?tag=tenant:acme&limit=200" \ -H "Authorization: Bearer $EMAILPAL_API_KEY"Step 6
Export credentials for one client by mailbox id
GET /mailboxes/export has no tag filter. It filters by domain_id or a comma-separated mailbox_ids list, so list the client’s mailboxes by tag first and pass their ids. It needs an admin key and every call is written to the audit log. The format parameter includes smartlead, instantly, woodpecker, salesforge and others.
GET /api/public/v1/mailboxes/exportbashcurl "https://www.emailpal.io/api/public/v1/mailboxes/export?format=smartlead&mailbox_ids=mbx_2c81f0,mbx_2c81f1" \ -H "Authorization: Bearer $EMAILPAL_ADMIN_KEY"
01
What per-client separation actually exists
The account is the unit of isolation. Everything you create lives under one account, and a key sees all of it. Inside that account, tags are the only per-client separator, and they are deliberately simple: the API docs describe them as labels that are stored and returned on every read, uninterpreted, with tenant:<id> suggested for resellers.
Tags exist on domains and mailboxes, and both list endpoints filter on them. Campaigns also accept a tags array and return it, but the campaign list endpoint filters only by status, so there is no ?tag= on campaigns. The dashboard can select campaign mailboxes by tag, which is a shortcut for choosing every mailbox carrying that tag.
Tags are replaced as a set. PATCH /domains/{id} and PATCH /mailboxes/{id} overwrite the full tag array and drop duplicates, so a retagging script should read the current tags first.
02
Where the Unibox stops being per-client
The Unibox shows replies from every mailbox in the account. Its dashboard filters are Status, Campaign and Mailbox, plus search. There is no tag filter and no per-client view, and there is no per-client login, so anyone with dashboard access sees every client’s replies.
Over the API, GET /inbox filters by mailbox_id, not by tag. To read one client’s replies, list their mailboxes with ?tag=tenant:acme, then query the inbox once per mailbox id. Warming traffic is excluded by default. If a client needs to read their own replies without seeing anyone else’s, either build that view yourself on the inbox API or send from a sequencer with client workspaces and use EmailPal only for the mailboxes.
Other account-wide pieces to plan around: the blocklist and suppression list apply across the account, the daily verification allowance is one shared pool, and the hourly API request budget is one number per plan (1,000 requests an hour on every current plan).
03
Pricing math for 10 clients
Plans are priced on mailboxes. Starter is $69/mo with 50 mailboxes and 50 domain slots, Growth is $189/mo with 200 and 200, Scale is $499/mo with 600 and 600. Extra mailboxes are $1/mo each up to a hard ceiling of three times the included count, and warming is $0.60 per inbox per month. Domains are a registration price paid up front from a prepaid balance; the help center lists $1 to $10 depending on the TLD, and POST /domains/search returns the exact quote.
Ten clients with five mailboxes each is 50 mailboxes: $69 plus $30 of warming is $99/mo, or $9.90 per client. Ten clients with ten mailboxes each is 100 mailboxes: $69 plus $50 of overage plus $60 of warming is $179/mo, or $17.90 per client, and Starter’s ceiling of 150 mailboxes still holds. Ten clients with twenty mailboxes each is 200 mailboxes, which needs Growth: $189 plus $120 of warming is $309/mo, or $30.90 per client.
Domain slots rarely bind. At two to five mailboxes per domain, 50 mailboxes need 10 to 25 domains and 100 mailboxes need 20 to 50, against 50 slots on Starter. Extra mailboxes add matching slots.
04
Pre-warmed inboxes for a client that cannot wait
A client who needs to send this week can lease pre-warmed inboxes at $3/mo each with a 90-day minimum, 15 cold emails a day from day one, and warming included. They do not count against the plan’s mailbox or domain allowance. Pre-warmed bundles are a fixed set per listed domain, so you cannot add addresses to one later. After a lease lands, you can tag the mailboxes with PATCH /mailboxes/{id} like any other.
05
What the Terms say about running this for clients
Section 9 of the Terms (effective 6 October 2026) lets you build on the Service without a separate agreement: you may embed mailbox and domain provisioning in your own product or service and supply it to your own end customers, provided you use the REST API or MCP server, under your own account and your own name. You are responsible for each end user’s compliance with the acceptable use policy, anything an end user does through your account is treated as your act, and API keys must not be shared between organisations.
The same section does not allow reselling access to the dashboard, white-labelling the Service, or using the EmailPal name and brand as your own without written agreement. Daily allowances are capped at what you purchased and capacity beyond that is not guaranteed. Read the Terms yourself, or have counsel read them, before you build a client-facing product on this; this page is a summary, not legal advice.
06
Where Smartlead-style workspaces are the better choice
Smartlead lists client workspaces and a white-label add-on at $29/month per client workspace on its pricing page (checked 5 October 2026, see the comparison page). If a client needs their own login, their own inbox view, their own branding or a separate campaign space, that is a feature EmailPal does not have, and tags will not substitute for it.
You can combine the two. EmailPal mailboxes are standard SMTP and IMAP, the export supports a smartlead format, and the mailboxes keep EmailPal’s warming and authentication while a workspace-based sequencer handles the client-facing side.
Limits, prices and names, in one table
The figures this page relies on, so you do not have to hunt for them.
| Starter plan | $69/mo50 mailboxes, 50 domain slots, 500 verification checks a day |
| Growth plan | $189/mo200 mailboxes, 200 domain slots, 1,500 checks a day |
| Scale plan | $499/mo600 mailboxes, 600 domain slots, 4,500 checks a day |
| Extra mailbox | $1/moHard ceiling at 3x the included mailbox count |
| Warming | $0.60 per inbox per monthDisabling warming on a mailbox stops the charge |
| Pre-warmed inbox lease | $3/mo each90-day minimum, 15 cold emails a day, warming included |
| 10 clients x 5 mailboxes | $99/moStarter $69 + warming $30 = $9.90 per client, before domains |
| 10 clients x 10 mailboxes | $179/moStarter $69 + 50 extra $50 + warming $60 = $17.90 per client |
| 10 clients x 20 mailboxes | $309/moGrowth $189 + warming $120 = $30.90 per client |
| Tag limits | 64 characters, 20 tags per rowUp to 10 tags in one filter, ANDed |
| Bulk limits per call | 50 domains, 100 mailboxes |
| Hourly API budget | 1,000 requestsEvery current plan; fixed clock-hour window |
| Client workspaces, per-client logins, white-label | Not available |
Checked against the product and the API on . Plans and limits change, so confirm in the docs before you build on them.
This is not for you if
- You need each client to have their own login, inbox view or branded dashboard. EmailPal has no client workspaces and no white-label.
- You need to hand clients their own API keys. Keys act with the full authority of your account and the Terms forbid sharing them between organisations.
- You need per-client blocklists, verification allowances or API budgets. Those are account-wide.
- You need to filter the Unibox by client in the dashboard. It filters by status, campaign and mailbox, not by tag.
- Your clients already own Google Workspace or Microsoft 365 mailboxes you want to connect by OAuth. EmailPal hosts its own SMTP and IMAP mailboxes and has no OAuth sign-in to Google or Microsoft mailboxes.
- You plan to resell the EmailPal dashboard or present the platform under your own brand. That needs a written agreement.
Common questions
Can I give each client a separate login to EmailPal?
No. EmailPal has no client workspaces or per-client logins. Everything you create sits in one account, and a key or a login sees all of it. Tags let you label what belongs to which client, but they are a filter on your own records, not an access boundary.
How do I tell which mailboxes belong to which client?
Tag them when you create them. Send tags: ["tenant:acme"] on POST /domains and POST /mailboxes, then list with GET /mailboxes?tag=tenant:acme. Repeated tag parameters are ANDed, so a filter can only narrow the result. The tag is stored as given and EmailPal does not parse tenant:<id>, so the format is yours to choose.
Can I separate client replies in the Unibox?
Not by tag. The Unibox filters by status, campaign and mailbox. Over the API, GET /inbox filters by mailbox_id, so you can list a client’s mailboxes by tag and read the inbox once per mailbox. Everyone with dashboard access can see every client’s replies.
How much does it cost to run ten clients?
Ten clients with five mailboxes each is 50 mailboxes, which is $69/mo on Starter plus $30/mo of warming at $0.60 per inbox, about $99/mo before domains. Ten mailboxes per client is about $179/mo, and twenty per client needs Growth at about $309/mo. Domains are paid up front from a prepaid balance and are not a monthly fee.
Am I allowed to run client campaigns on my account?
Section 9 of the Terms allows you to embed provisioning in your own service and supply it to your own end customers through the REST API or MCP server, under your own account and name. You are responsible for your end users’ compliance with the acceptable use policy. Reselling dashboard access or white-labelling needs written agreement from EmailPal.
Can I use EmailPal mailboxes inside a client workspace in another sequencer?
Yes. Mailboxes are standard SMTP and IMAP, and the credential export has layouts for Smartlead, Instantly, Woodpecker, Salesforge and others. The export needs an admin key and filters by domain_id or mailbox_ids, not by tag.
Build it on infrastructure that holds up
Domains, mailboxes, warming and verification over one REST API and MCP server, with the sequencer, Unibox and CRM on every plan.
No card to start — cancel any time.