Compare

DoDomain vs Domainee

Buyers compare these two on the same search, custom domains for SaaS, but they are not the same kind of product. Domainee serves traffic: your customer points a record at its edge, and it terminates TLS with a Let's Encrypt certificate and forwards to your app. DoDomain never touches traffic; it gets the record into the customer's own DNS, proves it is live, and watches it afterwards. The two used to be easy to separate by saying Domainee leaves the DNS step to the customer. That is no longer accurate: Domainee now writes DNS where the provider allows it. This page covers what is still different, what is not, and when Domainee is simply the better choice.

Facts about Domainee checked on against domainee.dev (home, /pricing, /docs, /docs/pricing, /docs/quickstart, /domain-connect-api, /docs/api/domains/applyDns, /ssl, /docs/mcp); check their site for current figures. DoDomain's numbers come from its live plan definitions. Published , updated .

Who does which half

DoDomainDomainee
Serves traffic on the customer's hostnameNever: traffic goes straight to your hostYes: a TLS edge that issues the certificate and forwards to your origin (per domainee.dev, retrieved 2026-10-06)
Gets the customer's DNS record createdYes, through one session with three paths: Cloudflare OAuth one-click; a signed Domain Connect apply on providers that have onboarded DoDomain's templates; guided records with a live per-record status everywhere else. One-click starts on Pro; Free is guided only.Where the provider allows it: Domain Connect (live on Cloudflare and Glauca Digital per its page), or a scoped API token the customer supplies, on Cloudflare and DigitalOcean. Instructions or a pasted record otherwise (per domainee.dev, retrieved 2026-10-06)
Proves the record is liveReads the domain's authoritative nameservers before success is declaredRe-checks every 5 minutes or on demand; does not say which resolvers it reads (per domainee.dev, retrieved 2026-10-06)
Monitoring after go-liveEvery 10 minutes for a connection's first day, hourly for a week, then every 6 hours; drift confirmed on 3 consecutive checks; failing records named; free on every planRe-check every 5 minutes; DNS, certificate and origin-reachability states; a domain.monitor_updated webhook (per domainee.dev, retrieved 2026-10-06)
Buys domains for customersNoYes: a Buy-a-Domain API with 500+ TLDs (per domainee.dev, retrieved 2026-10-06)
Free tier$0 forever, 50 verified connections per month, no card20 domains and 100 GB of bandwidth a month, no expiry, card on file (per domainee.dev, retrieved 2026-10-06)
Metered byVerified connections per month: a connection counts once, on first verificationDomains served, then bandwidth beyond 100 GB (per domainee.dev, retrieved 2026-10-06)
Integration surfaceREST API with OpenAPI 3.1, @dodomain/node, @dodomain/connect, @dodomain/react, dodomain-sdk (Python), an MCP server with eight tools over OAuth 2.1, signed webhooksREST API, a one-script-tag connect widget, signed webhooks, a hosted MCP server (eleven tools per its docs); no SDK pages in its docs reference (per domainee.dev, retrieved 2026-10-06)

The meters tell the story. Domainee charges for hostnames it serves and bytes it moves, because it is in the request path. DoDomain charges for onboarding events that succeeded, because it is not.

What changed on Domainee's side, and what did not

An earlier version of this page said Domainee does not write DNS records for the customer. That was right when we wrote it and is wrong now, so it is corrected here rather than quietly dropped. Domainee's own pages describe three mechanisms.

  • A Domain Connect product. Its page says Domainee's Domain Connect API sets up your customers' DNS for them, with a one-click flow it lists as live on Cloudflare and on Glauca Digital, and onboarding requested at several other providers.
  • A token-based write. The applyDns endpoint writes the records using a scoped API token your customer supplies. Domainee lists Cloudflare and DigitalOcean as the supported providers, says the token is never stored or logged, and says it removes only conflicting A, AAAA, CNAME and ALIAS records at that exact name.
  • Provider-specific instructions through a GET /v1/domains/{id}/instructions call, for everywhere else.

Two caveats apply, both from Domainee's own wording. The one-click path still needs the customer to approve on the provider's screen, and Domainee's docs warn that on Cloudflare the record has to stay DNS-only, because leaving it proxied makes Cloudflare terminate TLS and the certificate is never issued. Domainee also says its provider detection works by fingerprinting the zone's public NS records.

So the honest framing is that both products now have some DNS-writing path, and both are limited to providers that cooperate. What did not change is which side of the request path each sits on. Domainee is the proxy; if the DNS step works but you also need somebody to serve HTTPS, that is Domainee's product. See State of Domain Connect for measured provider coverage.

Where DoDomain still differs

With the DNS-writing gap closed on the product pages, five differences remain. Each is stated only where DoDomain's own docs support it.

One session, three paths. A DoDomain connect session decides how the record gets written. A Cloudflare-hosted zone gets a Cloudflare OAuth one-click. A provider that has onboarded DoDomain's Domain Connect templates gets a signed apply. Every other provider gets step-by-step records for its own dashboard, with a live status per record. Your code does not branch on the provider. Domainee's equivalent is a set of per-provider mechanisms: Domain Connect on some, a customer-supplied API token on Cloudflare and DigitalOcean, instructions on the rest. Neither list is complete, and both change as providers onboard.

Authoritative proof. DoDomain declares a record live only after reading it at the domain's authoritative nameservers, and only then sends the signed connection.verified webhook. Domainee re-checks every five minutes, which is faster, but its pages do not say where the check reads. If your activation logic depends on the record being visible at the source of truth rather than at a cached resolver, ask Domainee which one it uses.

The monitoring tail. DoDomain keeps checking a connection for as long as it exists: every 10 minutes for the first day, hourly for a week, then every 6 hours. A suspected drift needs three consecutive failed checks before it is reported, which keeps one flaky resolver from paging you, and the signed connection.failed event names the failing records. Monitoring is free on every plan with no cap on monitored domains. Domainee's 5-minute interval is tighter at every age, so if minutes matter more than flap suppression, that is a point for Domainee.

SDKs. DoDomain ships @dodomain/node (which includes verifyWebhook), @dodomain/connect, @dodomain/react and a Python package. Domainee is a REST API plus a script-tag widget, and its docs reference lists no SDK pages, so if you want typed clients, check whether that has changed.

Pricing per verified connection. DoDomain counts a domain once, in the month it first verifies. Re-checks and monitoring are free, so a domain that stays connected for years is never counted again. Domainee bills each domain it serves every month, plus bandwidth. Neither is better in the abstract. They are different shapes, and the next section prices both.

What it costs at your volume

The two products meter different things, so a headline price compares nothing. DoDomain counts connections made: a domain costs something in the month it first verifies and nothing after, because re-verification and drift monitoring are free and uncapped. Domainee counts domains live: every hostname it serves is billed every month, with the first 20 free and a graduated discount from 1,000 domains. Each scenario below therefore states both a number of new domains a month and a number live at once.

Domainee's own worked example is a good check on the arithmetic: 1,500 domains is 20 free, then the first 980 billable domains at $0.20 and the next 500 at the first discounted rate, which comes to $291 a month. The table applies the same graduated bands.

ScenarioNew domains a monthDomains liveDoDomainDomainee
Launching20100Free: $0 forever$16
Growing3002,000Pro: $29 per month$386
Established2,00020,000Scale: $99 per month$2,546

List prices, monthly billing. DoDomain counts a domain once, in the month it first verifies; re-checks and drift monitoring are free on every plan, so live domains add nothing. One-click setup starts on Pro: a cheaper plan above is the guided-records flow. Domainee's column is the domain line only: it excludes bandwidth beyond 100 GB a month ($0.05 per GB per its pricing page), taxes and any enterprise terms, and assumes the card on file that Domainee requires. It also buys you the proxy, which DoDomain does not include, so the two columns are not the same service. DoDomain's volume beyond 2,500 new connections a month is the Enterprise plan, by contact.

Read the table as a shape, not a verdict. At small volume Domainee's free tier is hard to beat, and DoDomain's guided plan is free too. As live domains grow into the thousands, a per-hostname meter climbs with the number of customers you keep, while a per-connection meter climbs with the number you add. A product with high churn or fast growth sees both the other way round, so run your own numbers.

The DoDomain side in code

The pairing is the same one DoDomain makes with any edge vendor. Domainee's quickstart gives edge.domainee.dev as the CNAME target for a subdomain, so the record in the session below points the customer's app host at it. For an apex domain, Domainee recommends two A records instead; pass those record(s) in the same records array with a host of @.

DoDomain gets the record into the customer's DNS and proves it is live at the authoritative nameservers. Domainee serves the traffic once the record resolves. Register the hostname with Domainee first so its edge knows the domain, then create the session.

// 1. Your server: mint a connect session for the customer's domain.
import { DoDomain, verifyWebhook } from "@dodomain/node";
import { env } from "./env"; // your validated server env

const dodomain = new DoDomain({ secretKey: env.DODOMAIN_SECRET_KEY });
const session = await dodomain.sessions.create({
  domain: "customer.com",
  records: [
    { type: "CNAME", host: "app", value: "edge.domainee.dev" },
  ],
  returnUrl: "https://yourapp.com/settings/domains",
});

// 2. Your page: open the connect sheet with session.token.
import { showDoDomain } from "@dodomain/connect";

showDoDomain({ token, onVerified: ({ domain }) => markDomainLive(domain) });

// 3. Your webhook route: DoDomain calls it once the record is live at the
//    domain's authoritative nameservers, and again if it ever breaks.
if (!verifyWebhook(env.DODOMAIN_WEBHOOK_SECRET, rawBody, signatureHeader)) {
  return new Response("bad signature", { status: 400 });
}

From Pro up, the session picks the path on its own: a Cloudflare-hosted domain gets the OAuth one-click, a provider that has enabled DoDomain's Domain Connect templates gets a signed apply, and every other provider gets step-by-step records for that provider's dashboard. On the free plan every provider gets the step-by-step records. The full walkthrough is in the quickstart.

How to choose

Pick Domainee alone if you want one vendor to serve HTTPS on customer hostnames, your free tier fits inside 20 domains, and the customers who matter are on Cloudflare, DigitalOcean or a Domain Connect provider Domainee has live. You get the proxy, the certificate, the connect widget and a record-writing path in one API call, with no sessions and no verification-then-webhook choreography to wire up.

Pick DoDomain alone if you already serve traffic yourself, through your own load balancer, a host such as Vercel or Render, or Cloudflare for SaaS, and what stalls onboarding is the customer's DNS step. You want one session that covers every provider, proof at the authoritative nameservers, typed SDKs, and a bill that does not grow with the number of domains you keep.

Use both if you chose Domainee for the edge but want a single connect flow across providers Domainee has no write path for. DoDomain gets the record in and proves it; Domainee serves the traffic. Nothing about Domainee's setup changes, and the cost is that you run two DNS checks on the same record.

To switch or add DoDomain when you already use Domainee, nothing has to move. New domains can go through a DoDomain session that carries the record Domainee gave you. Existing live domains keep working as they are. DoDomain's docs describe no bulk import: a connection is made by a session, so bringing an existing domain under monitoring means running that domain through one, which counts as one connection. Pricing, SDK setup and the quickstart are at /pricing and /docs.

Where Domainee still wins

Domainee wins on several points that matter, and the first is the biggest. Read these before you decide.

  • It serves traffic. It is the proxy: TLS termination, edge routing in two regions, Let's Encrypt certificates issued on the first HTTPS request, bring-your-own certificates on paid plans, plus domain masking and forwarding on the same edge. DoDomain does none of this and never will.
  • Buy-a-Domain. A full registrar-reseller API with 500+ TLDs and your customer as the registrant. DoDomain connects domains people already own.
  • The free tier. 20 domains and 100 GB of bandwidth, no expiry, with a published discount curve that runs to half price at 10,001 domains and above.
  • Tighter monitoring. A 5-minute re-check interval, plus on-demand checks through its API, against DoDomain's 10 minutes, hourly and 6-hour steps.
  • A larger MCP surface. Eleven tools per its docs against DoDomain's eight. DoDomain's differ in using OAuth 2.1 with scoped consent, where Domainee's hosted server takes the same Bearer key as its REST API.
  • Direct token apply. Writing records with a scoped token the customer supplies, on Cloudflare and DigitalOcean, is a different mechanism from DoDomain's Cloudflare OAuth grant, and it covers a provider DoDomain does not claim a one-click path for.
  • White-label depth and simplicity. A published audit of what stays hidden from your customers, and an API where one call returns the record to show.

Caveats cut the other way too. Domainee's docs describe billing state reaching customer traffic, its terms provide the platform as is with no uptime warranty, and its marketing and docs disagree on the webhook retry schedule and the MCP tool count, so check the page you depend on. If those trade-offs are acceptable, Domainee is the more complete product for the traffic half.

Frequently asked questions

How much does Domainee cost?

As published on domainee.dev (per domainee.dev, retrieved 2026-10-06): there are two plans, Free and pay-as-you-go. The first 20 custom domains and 100 GB of bandwidth a month are free, forever, with a card on file. After that a domain is $0.20 a month, with graduated discounts that start at 1,000 domains and bottom out at $0.10 from 10,001 domains. Bandwidth beyond 100 GB is $0.05 per GB. Their own worked example prices 1,500 domains at $291 a month.

Is Domainee free?

Up to a point. Domainee's Free plan covers 20 custom domains and 100 GB of bandwidth a month with no expiry, but it asks for a card up front: its docs say a missing card returns a 402 billing_required error even for the first domain (per domainee.dev, retrieved 2026-10-06). Past 20 domains you pay per domain, and Domainee's docs describe traffic being cut off if billing lapses. DoDomain's Free plan is $0 forever with 50 verified connections a month, needs no card, and is guided setup only. The two meters are different, so compare them against your own volume.

Does Domainee write DNS records for my customer?

Where the customer's DNS provider allows it, yes (per domainee.dev, retrieved 2026-10-06). Domainee publishes a Domain Connect product that it says is live on Cloudflare and Glauca Digital, and an applyDns endpoint that writes the records using a scoped API token the customer supplies, for Cloudflare and DigitalOcean. For other providers it returns provider-specific instructions or the record to paste. So the accurate summary is that Domainee writes records only where the provider supports it.

Is DoDomain an alternative to Domainee?

Only for the DNS step. Domainee serves your customers' traffic: it terminates TLS on their hostnames and forwards to your app. DoDomain never proxies traffic, never terminates TLS and never issues certificates, so if you want someone to serve HTTPS on customer domains, DoDomain is not a substitute. Both products now have some way of writing the customer's DNS. DoDomain's version is a session with three paths (Cloudflare OAuth, a signed Domain Connect apply on providers that have onboarded its templates, guided records everywhere else), a read of the authoritative nameservers before success is declared, long-tail monitoring, SDKs, and pricing per verified connection instead of per live domain.

Can I use DoDomain with Domainee?

Yes. Register the hostname with Domainee, take the record it gives you (a CNAME to its edge for a subdomain, per its quickstart), pass that record to POST /api/v1/sessions, and hand your customer the connectUrl or the @dodomain/connect widget. When the signed connection.verified webhook arrives, the record is live at the customer's authoritative nameservers. Domainee keeps serving the traffic and DoDomain keeps checking the record afterwards. Running both means two DNS checks on the same record, which is redundant but harmless.

What is the Domainee apex domain setup?

Per Domainee's quickstart, a subdomain takes a CNAME to its edge, and an apex (root) domain takes two A records, because ALIAS or CNAME flattening pins the domain to one region (per domainee.dev, retrieved 2026-10-06). DoDomain accepts A, AAAA, CNAME, TXT and MX records in a session and a host of "@" for the apex, so an apex session carries those two A records the same way. A CNAME cannot sit at an apex in DNS itself, which is why the record type changes. DoDomain's apex-domains page lists what each connect path does with an apex request.

How often does Domainee check DNS compared with DoDomain?

Domainee's docs say each domain is re-checked every 5 minutes, or immediately through POST /v1/domains/{id}/check, and the monitor reports DNS, certificate and origin-reachability states (per domainee.dev, retrieved 2026-10-06). That is a tighter interval than DoDomain's: every 10 minutes for a connection's first day, hourly for a week, then every 6 hours, with a suspected drift confirmed on three consecutive checks before a signed connection.failed names the failing records. DoDomain reads the domain's authoritative nameservers and runs the checks free on every plan with no cap on monitored domains. Domainee does not say which resolvers its check reads.

Does Domainee have an MCP server and SDKs?

Domainee hosts an MCP server at mcp.domainee.dev. Its docs say it has eleven tools (the homepage says twelve), authenticated with the same Bearer key as the REST API, and buying a domain is deliberately left off it (per domainee.dev, retrieved 2026-10-06). Its docs reference lists no SDK pages. DoDomain's MCP server exposes eight tools over OAuth 2.1 with scoped consent, and it ships @dodomain/node, @dodomain/connect and @dodomain/react on npm plus dodomain-sdk for Python, over a REST API with a published OpenAPI 3.1 document.

Can Domainee buy domains for my customers?

Yes. Domainee's Buy-a-Domain API is a registrar-reseller flow with 500+ TLDs, priced at wholesale plus a flat $1 fee, with your customer as the registrant (per domainee.dev, retrieved 2026-10-06). DoDomain has no equivalent: it connects domains the customer already owns. If your users often arrive without a domain, that API is a real reason to choose Domainee.

What happens to my customers' sites if I stop paying Domainee?

Because Domainee is in the request path, billing state can reach your customers' traffic. Its pricing docs say that with no card on file and more than 100 GB of use, customer traffic returns 402 at the edge, that a canceled subscription returns 404 on every customer hostname, and that a past-due account keeps serving for about three weeks before it is cut off (per domainee.dev, retrieved 2026-10-06). DoDomain is not in the request path, so billing state never reaches a connected domain's traffic.

Start on the free plan

No card, no sales call: create an app, mint a session, and watch the first domain verify.

Other comparisons