Multi-tenant email for agencies

Email that refuses to send from a broken domain.

One workspace per client, every campaign gated on live SPF and DKIM, and a delivery guard that pauses your marketing before a receiver throttles it. Transactional mail keeps flowing.

No card for the trial · Cancel from the billing page · Self-hosted when you want it

  • Isolated client workspaces
  • SPF + DKIM gate
  • DMARC reporting
  • Delivery guard
  • Transactional API
  • Signed alert webhooks
SPF + DKIMread live before every campaign is queued
1 workspaceper client, with its own lists and domains
0.1%complaint ceiling before marketing pauses
250kemails a month on the Agency plan

Everything in one place

Twelve jobs that usually need five subscriptions.

Contacts, campaigns, automations, deliverability and support in one app — scoped per client from the first day.

Client workspaces

Every client gets an isolated workspace. Contacts, templates, sends and sending domains never cross between them.

Sending domains

Add a client's domain and get the exact SPF, DKIM and DMARC records to publish, with the selector already picked.

DNS gate

SPF and DKIM are read from DNS before a campaign is queued. A missing record refuses the send; nothing is half-sent.

Campaigns

Compose, preview, schedule in the client's timezone and send to a segment. Pause and resume mid-flight.

Segments

Rules over tags, fields and engagement, previewed as a count before you commit the send.

Templates & variants

Reusable blocks, a plain-text fallback for every message, and subject-line variants you can test.

Automations

Welcome, win-back and drip sequences with delays and step conditions, enrolled as contacts qualify.

Transactional API

One POST for receipts and password resets, with idempotency keys and scheduled sends you can cancel.

Delivery guard

Complaints and hard bounces are measured over a rolling window. Rates above the line pause marketing until a person resumes it.

DMARC reports

Upload aggregate reports or let Modees poll a mailbox, then see who sends as your clients and what passes.

Alerts

Domain gaps and delivery pauses routed to email and signed webhooks, with state so a resolved problem stops shouting.

Operator console

Support, credential revocation and a full audit trail behind a separate sign-in, away from customer sessions.

How it works

From a domain you have never seen to a send that is already checked.

Create the client workspace

Name it, invite the team, and keep every contact and send scoped to that client from the start.

Publish the records

Add the sending domain, copy the SPF and DKIM records, and verify. DMARC is read too and reported separately.

Build the audience

Import contacts, tag them, and define segments with rules and a live count.

Write and schedule

Pick a template, a variant and a timezone, then send to the segment or hand it to an automation.

Watch the numbers

Suppressions, complaints and bounces feed the guard; DMARC reports and alerts tell you what changed and when.

The gate

Nothing sends until DNS agrees.

A domain is not a claim, it is a lookup. Modees reads SPF and DKIM from DNS every time a campaign is queued, and refuses the send when a record is missing or ambiguous. No partially delivered campaign from a domain that was never configured.

  • SPF and DKIM must both pass before a campaign can be queued
  • DMARC is read separately, with its policy, and reported rather than guessed
  • The refusal is explicit: domain_not_ready, not a silent drop
  • Every verification is stored with the records that were found
Verify a sending domain
POST /v1/domains/dm_8f2/verify

{
  "verification": {
    "domain": "harbor.studio",
    "spf":   { "status": "pass",
               "record": "v=spf1 include:_spf… ~all" },
    "dkim":  { "status": "missing",
               "note": "no TXT at the DKIM selector" },
    "dmarc": { "status": "pass", "policy": "quarantine" },
    "ready": false
  }
}

A campaign from this domain is refused with domain_not_ready until DKIM is published.

Modees Learn

The part of email that decides whether it arrives.

Free, practical guides on deliverability, lifecycle email and UK consent — written for the people running client accounts. Every guide opens free to read; join the list to finish it and unlock each new one.

Deliverability & DNS

SPF, DKIM, DMARC, warm-up and blocklists. The checks that decide whether a send reaches the inbox.

Email that sells

Welcome sequences, cart recovery and segmentation, with the numbers that show what actually earned the sale.

List growth & consent

Lead magnets, newsletters and the UK rules behind a list you can use without dreading the audit.

Browse every guide →  ·  Check a domain's SPF, DKIM and DMARC free →

The Modees list

One useful email, when there is something worth reading.

New guides on deliverability, lifecycle email and UK consent. No account, no card, and no daily drip. Confirm your address and you are in.

One email to confirm. Unsubscribe in one click. The list is never sold.

We send the confirmation link first. Nothing else until you click it.

Pricing

Priced per workspace, not per seat.

Every plan is the same app — only the contact and monthly email limits change. The trial is 14 days, no card.

Starter

£29/mo

For a first newsletter or a small client list.

  • 2,500 contacts
  • 15,000 emails a month
  • DNS gate, delivery guard and API included
Start trial

Agency

£199/mo

For agencies running several high-volume client lists.

  • 50,000 contacts
  • 250,000 emails a month
  • For several high-volume client lists
Start trial

FAQ

Questions worth asking before you migrate a client.

What happens if a client's DNS breaks before a campaign?

A campaign cannot be queued from a domain whose SPF or DKIM is not passing. The API answers domain_not_ready with the failing record, and the UI says which one to fix — the rest of the workspace keeps working.

Do I need a separate account per client?

No. Each client is a workspace inside your agency account, with its own contacts, sending domains, templates and settings. Team members only see the workspaces they belong to.

Does the delivery guard stop transactional email too?

No. A pause covers the marketing stream only. Password resets and receipts keep flowing, because a complaint on a campaign is not a reason to break sign-in.

Where does the data live?

In your Postgres. The app ships with a Docker Compose setup and runs against PGlite for local development, so the contacts and events never have to leave your infrastructure.

Which providers can actually send the mail?

Any SMTP server, or Resend when you set its API key. A memory provider records messages without delivering them, which is what the test suite runs against.

How is consent handled?

Double opt-in per list, an unsubscribe link in every message, a suppression list that survives imports, and a consent record per contact you can show a client.

Give every client their own sending domain — and prove it.

Set up a workspace, publish the records and send a checked campaign in an afternoon.

Start 14-day trial