Compare

Custom domains for SaaS: every option compared (2026)

Letting a customer use your product on their own domain is three jobs: getting a DNS record created at their DNS provider, proving it is there, and serving HTTPS for that name. The 10 options below each take on a different part of that work, and the ones that look alike on a feature list often do different jobs. This page sorts them by the job they do, prices the custom-domain line at three volumes from each vendor's own published rates, and says plainly where DoDomain is the wrong choice.

Facts about the other 9 products checked on against each vendor's own pricing and documentation pages, linked beside each entry. Check their sites for current figures. DoDomain's numbers come from its live plan definitions. Published , updated .

The short answer

  • Your app already serves the traffic and the hard part is getting customers to create the right record: you want the DNS layer (DoDomain, Entri).
  • You need HTTPS terminated for thousands of customer hostnames and proxied to your app: you want an edge (Cloudflare for SaaS, Approximated, SaaS Custom Domains).
  • You host on Vercel, Fly.io, Render or Netlify: your host already issues certificates for customer domains. The customer still has to create the record themselves.
  • You want no vendor at all: Caddy's on-demand TLS on your own servers, with your own instructions page for the DNS.
  • At scale, most products run one of each: a DNS-layer product to get the record in and keep watching it, and an edge or host to serve the traffic.

Three jobs, and which products do which

Getting the record in. The customer's domain lives at their DNS provider: Cloudflare, GoDaddy, Route 53, a registrar's own DNS. Something has to create a record there that points the name at you. Either the customer does it by hand from your instructions, or a product does it for them through an API the provider exposes: OAuth into the provider, the Domain Connect protocol, or an API token the customer pastes in. This is the step where customers give up. It is unfamiliar, every provider's dashboard is different, and a single wrong character fails silently.

Proving it and keeping it proven. Once the record exists, someone has to confirm it really resolves (ideally at the domain's own nameservers, not through a cache that may lag for hours), tell your backend the moment it does, and notice when a customer later edits or deletes it. Every product here does some version of the first check. They differ widely on the second.

Serving the domain. When a visitor types the customer's domain, something has to answer: terminate TLS with a certificate for that exact name and route the request to your app. Hosts do this for apps they run. Edges do it for apps running anywhere. Caddy does it on servers you operate.

The lines have blurred in 2026. Entri sells an edge through its Power and Secure add-ons, and Approximated writes records where a supported Domain Connect integration exists. The tables below say exactly who does what, so a feature list that looks the same can be read for what it is.

At a glance: who does what

ProductLayerWrites the customer's DNSServes traffic and TLS
DoDomainDNS: gets the record inYes, from Pro up: Cloudflare OAuth one-click, and a signed Domain Connect apply on providers that serve its templates; guided step-by-step records for every other provider (and on Free)No. It never proxies traffic or issues certificates; pair it with your host or an edge
EntriDNS: gets the record inYes: signs the user in at a supported provider and applies the records (63 providers in its docs, “70+” in its marketing); step-by-step instructions otherwiseOnly with its Power and Secure add-ons (a reverse proxy with SSL termination; no published price)
Cloudflare for SaaSEdge: serves the domainNo: the customer creates a CNAME at their authoritative DNS (flattened at the apex; apex proxying on IP addresses is an Enterprise add-on)Yes: Cloudflare's network terminates TLS and proxies to your fallback origin
ApproximatedEdge: serves the domainPartly: a DNS widget detects the provider, offers Domain Connect setup where a supported integration exists, and shows step-by-step records otherwiseYes: a dedicated proxy cluster with its own IPv4 address
SaaS Custom DomainsEdge: serves the domainNo: it can email the customer the CNAME instructions, then validates the recordYes: a proxy with WAF, DDoS protection and 119 points of presence
Vercel for PlatformsHost: runs your appNo: the customer sets an A or CNAME record (or Vercel's nameservers); a TXT if the domain is already on VercelYes: it is your host; it issues a certificate per custom domain
Fly.ioHost: runs your appNo: the customer sets A/AAAA or CNAME records, plus an _acme-challenge or ownership recordYes: it is your host; Let's Encrypt certificates through Fly Proxy
RenderHost: runs your appNo: the customer sets a CNAME or A record, then verification runsYes: it is your host; managed TLS on every custom domain
NetlifyHost: runs your appNo: the customer sets a CNAME, or an ALIAS/ANAME at the apexYes: it is your host; Let's Encrypt certificates
Caddy (on-demand TLS)Software you runNo: the record must already point at your server; an `ask` endpoint you write allows or denies issuanceYes, on servers you operate

At a glance: what it costs to start

ProductCheapest way inFree plan or trial
DoDomainFree $0 forever (guided); Pro $29 per month with one-clickYes: 50 verified connections a month, no card
Entri$249/mo (Startup: 600 connections a year)None published
Cloudflare for SaaS100 hostnames included with a zone plan, then $0.10 per additional hostnameYes: 100 hostnames on a Free zone
Approximated$20/mo under 100 domains, then $0.20 per domain with volume discounts to 50%7-day trial, no free plan
SaaS Custom Domains$29/mo for 100 domains ($0.29 each), discounts to 50%7-day trial
Vercel for PlatformsNo charge for domains within plan limits; the plan and usage are billedHobby: 50 custom domains per project
Fly.ioFirst 10 certificates free, then $0.10 per hostname per month10 hostname certificates
Render15 domains on Pro, then $0.25 each per monthHobby: 2 custom domains
NetlifyNo per-domain price publishedDomain aliases on any site
Caddy (on-demand TLS)Free, open source: you run and scale the serversFree software

What the custom-domain line costs at three volumes

Headline prices compare nothing here, because these products meter different things. Fly.io and Render bill every hostname that is live, every month; Cloudflare for SaaS bills per additional hostname, and its pages state no billing period. Entri sells an annual allowance of new connections on flat tiers. Vercel includes domains in the hosting plan. DoDomain counts a domain once, in the month it first verifies, and charges nothing to keep watching it. So each scenario states both numbers: customer domains added a month, and customer domains live at once.

ProductLaunching: 20 new a month, 100 liveGrowing: 300 new a month, 2,000 liveEstablished: 2,000 new a month, 20,000 live
DoDomainFree: $0 foreverPro: $29 per monthScale: $99 per month
EntriStartup: $249/moPremium: talk to salesEnterprise: talk to sales
Cloudflare for SaaS$0$190$1,990
Approximated$20$360$2,000
SaaS Custom Domains$29$290 to $580 (discount schedule not published)$2,900 to $5,800 (discount schedule not published)
Vercel for PlatformsNo domain charge (Pro soft limit 100,000 per project)No domain charge (Pro soft limit 100,000 per project)No domain charge (Pro soft limit 100,000 per project)
Fly.io$9$199$1,999
Render$21.25$496.25$4,996.25
NetlifyNot built for this: Netlify recommends at most 50 aliases per siteNot built for this: Netlify recommends at most 50 aliases per siteNot built for this: Netlify recommends at most 50 aliases per site
Caddy (on-demand TLS)$0 in software; your servers$0 in software; your servers$0 in software; your servers

List prices, the custom-domain line only, monthly where the vendor states a period (Cloudflare for SaaS's pages state none for its rate). Excluded because they are not about custom domains or not published: a Cloudflare zone plan, bandwidth above an edge's included allowance (Approximated includes 400 GB), a host's plan and compute, and every tier a vendor quotes only through sales. DoDomain's plans below Pro are the guided-records flow; one-click starts there. The products do different jobs, so the cheapest row is not automatically the right one: read the next sections first.

The DNS layer: getting the record in

DoDomain

DoDomain is the DNS layer and nothing else. Your server mints a connect session naming the customer's domain and the records you need. The session detects where the domain's DNS is hosted and picks the path: an OAuth one-click for a Cloudflare-hosted zone, a signed Domain Connect apply on providers that serve DoDomain's templates, and step-by-step records for that provider's dashboard everywhere else. One-click paths start on Pro; the Free plan is the guided flow.

It verifies the record at the domain's authoritative nameservers, sends your backend a signed webhook the moment it is live, then keeps watching: every 10 minutes for a connection's first day, hourly for a week, then every 6 hours, with a break confirmed on three consecutive checks before anyone is alerted. Monitoring is free and uncapped on every plan. There are SDKs for Node, the browser and React on npm and for Python, a REST API with a published OpenAPI document, and an MCP server for AI agents. DoDomain never proxies traffic and never issues a certificate, so it pairs with whatever serves your app.

More: pricing · documentation · which providers serve its Domain Connect templates

Entri

Entri is the longest-established product in the layer and the broadest on provider coverage. Its Connect modal identifies the user's DNS provider; for supported providers it signs the user in and applies the records, and for the rest it shows manual instructions. Its developer docs list 63 providers (its marketing says “70+”). Entri also sells domains inside your product (Sell), watches records with webhook alerts (Monitor), and offers a hosted proxy with certificates as add-ons (Power and Secure) with no published price. Its About page names HubSpot, Webflow, Canva and Square among its customers.

Pricing is by annual allowance: Startup is $249 a month for 600 new connections a year and 1,200 monitored domains; Growth, Premium and Enterprise are quoted by sales. No free plan or trial is published.

Sources (entri.com, read 2026-10-06): Entri plans · Entri Connect overview · Entri webhooks overview · About Entri · Entri email solutions · Full comparison: DoDomain vs Entri

The edge layer: serving the customer's domain

Cloudflare for SaaS

Cloudflare for SaaS adds customer hostnames to a zone you run on Cloudflare: the customer points a CNAME at a hostname on your zone, Cloudflare validates it, issues the certificate and proxies traffic to your fallback origin through its own network, WAF included. 100 hostnames are included on the Free, Pro and Business zone plans, then $0.10 per additional hostname up to 50,000; Enterprise beyond. Hostnames still pending validation bill too, until you delete them.

It does not touch the customer's DNS: the CNAME is theirs to create. At the apex it relies on CNAME flattening at the customer's provider; proxying an apex on IP addresses is an Enterprise add-on.

Sources (developers.cloudflare.com, read 2026-10-06): Cloudflare for SaaS: Plans · Cloudflare for SaaS: Get started · Full comparison: DoDomain vs Cloudflare for SaaS

Approximated

Approximated runs a dedicated proxy cluster for you, with its own IPv4 address, and issues certificates for every hostname you add through its API. It now ships a DNS widget that detects the customer's provider, shows step-by-step records, and offers automatic setup where a supported provider integration exists; Domain Connect is the automation it documents. A monitor reports DNS problems by webhook.

Pricing is $0.20 per domain a month with a $20 monthly minimum, discounted 5 points for each full 1,000 domains up to 50%, with 400 GB of bandwidth included. Hybrid and fully self-hosted options exist for larger teams. There is a 7-day trial and no free plan.

Sources (approximated.app, read 2026-10-06): Approximated pricing · Approximated DNS widget · Approximated webhooks · Full comparison: DoDomain vs Approximated

SaaS Custom Domains

SaaS Custom Domains is a proxy built for security-minded teams: WAF, DDoS protection and rate limiting across 119 points of presence, with a self-hosted option. It can email the customer the CNAME instructions and validates the record once it appears, but it does not create the record. Bandwidth is not charged extra, and its SLA page states 99.9%.

It starts at $29 a month for 100 domains ($0.29 each), with automatic discounts of up to 50% as you grow. The discount schedule itself is not published in readable form, so the cost table gives the range it implies.

Sources (saascustomdomains.com, read 2026-10-06): SaaS Custom Domains · SaaS Custom Domains API: custom domains · SaaS Custom Domains SLA · Full comparison: DoDomain vs SaaS Custom Domains

Your host may already do the serving

Vercel for Platforms

Vercel for Platforms lets one project answer for many tenant domains: you add each domain through the API, Vercel returns any verification challenge, and it issues a certificate per domain once the customer's records point at it. Domains carry no extra charge within plan limits: 50 per project on Hobby, a soft limit of 100,000 on Pro. The customer sets an A record (apex) or CNAME (subdomain); Vercel also ships a UI block that shows them the records and re-checks the configuration.

Sources (vercel.com, read 2026-10-06): Vercel for Platforms · Multi-tenant limits · Configuring domains

Fly.io

Fly.io issues certificates for hostnames you attach to an app through its Certificates API, which tells you exactly which records the customer needs. The first 10 single-hostname certificates are free, then $0.10 each a month; compute and bandwidth are billed separately.

Sources (fly.io, read 2026-10-06): Fly.io pricing · Custom domains

Render

Render includes custom domains per workspace plan (15 on Pro) and charges $0.25 a month for each one beyond, with managed certificates on all of them and an API to add and verify them.

Sources (render.com, read 2026-10-06): Render custom domains · Render pricing

Netlify

Netlify supports domain aliases with Let's Encrypt certificates, but its docs recommend no more than 50 aliases per site and we found no documented multi-tenant API. It suits a handful of customer domains, not a product feature.

Sources (docs.netlify.com, read 2026-10-06): Add a domain alias · Configure external DNS

In every host case the customer still creates the record by hand, and the host checks it only so it can issue a certificate. Pairing a host with a DNS-layer product is the same pattern as pairing an edge with one.

Run it yourself

Caddy (on-demand TLS)

Caddy's on-demand TLS obtains a certificate during the first TLS handshake for a hostname it has never seen, after asking an endpoint you write whether that name is allowed. It is free and open source, and it is how many products start. It does not create or verify DNS (the record must already point at your server before issuance can succeed), and you run, scale and patch the servers yourself.

Sources (caddyserver.com, read 2026-10-06): Automatic HTTPS · Caddyfile global options

Registrars and DNS hosts: where your customer bought the domain

Namecheap and Cloudflare Registrar are not alternatives to anything above. They are where a customer's domain may already be registered, and so where its DNS may live. DoDomain is not a registrar and does not host DNS; its terms say records are written to your users' existing DNS accounts and the domains remain theirs. It reads the nameservers a domain already has and works with what it finds, so a customer is never asked to move a domain or change its nameservers.

Where the domain isWhat the provider documentsWhat DoDomain does
NamecheapOffers BasicDNS, Web Hosting DNS and PremiumDNS, and CustomDNS for nameservers from another provider (Namecheap: how to change DNS for a domain).On Namecheap's DNS, guided records using Namecheap's own steps (Advanced DNS), verified at the authoritative nameservers. If the owner has pointed the nameservers at another host, DoDomain follows the zone to that host instead.
Cloudflare RegistrarAll domains on Cloudflare Registrar use Cloudflare nameservers; using other nameservers means moving the domain to another registrar (Cloudflare Registrar FAQ).Cloudflare DNS is detected from the zone's nameservers, so DoDomain's Cloudflare OAuth one-click applies from the Pro plan up; guided records otherwise, and for zones whose nameservers do not say Cloudflare.

Provider facts read from each provider's own documentation on 2026-10-23, linked above. Check their pages for current terms.

How to choose

  1. Start with where the traffic goes. If you already serve customer hostnames (a host that takes them, an edge you pay for, or your own Caddy or nginx), you only need to decide how customers get their record right. If you do not, choose the edge or host first; the DNS layer points at whatever you pick.
  2. Pick an edge by what it is protecting. Already on Cloudflare and want its network and WAF in front of tenants: Cloudflare for SaaS. Want a dedicated cluster and IP, or self-hosting later: Approximated. Want security controls as the headline: SaaS Custom Domains.
  3. Pick the DNS layer by where your customers' domains live. A Cloudflare-heavy base gets a one-click from DoDomain and Entri alike. For GoDaddy, IONOS and the long tail, check each product's provider list: Entri documents the most providers. GoDaddy serves DoDomain's Domain Connect templates; IONOS does not, so IONOS customers get its guided records (the provider matrix is measured nightly).
  4. Price on the meter you will actually hit. A product that adds a hundred domains a month and keeps them for years pays very differently on a per-live-domain meter than on a per-new-connection one. Use the three scenarios above, or plug in your own numbers against the rates in the tables.
  5. Ask what happens after go-live. How often is the record re-checked, how is a false alarm ruled out, and how does your backend hear about a break? Customers change DNS providers and delete records years later; the product that notices first saves the support ticket.

Pairing DoDomain with an edge or host, in code

The record a session asks for is whatever your edge or host needs: a CNAME to the hostname your Cloudflare for SaaS zone exposes, an A record to an Approximated cluster address, the target Vercel returns when you add the domain. Below, customers.yourapp.com stands for that target. DoDomain gets the record created in the customer's DNS, proves it at the authoritative nameservers and calls your webhook; your edge or host issues the certificate and serves the traffic.

// 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: "customers.yourapp.com" },
  ],
  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.

Where DoDomain is the wrong choice

  • You only need HTTPS served. DoDomain never terminates TLS. If your customers are developers who will happily paste a CNAME, an edge or your host alone may be all you need.
  • One-click at IONOS matters more than anything else. DoDomain gives IONOS customers guided records today. Entri's provider list names it.
  • You want to sell domains inside your product. Entri Sell offers this; DoDomain does not.
  • You want one vendor for both halves. Entri (with Power and Secure) sells both; Approximated also writes DNS where a supported provider integration exists.
  • Procurement needs a SOC 2 report today. Entri states SOC 2 Type II compliance on its product pages; DoDomain does not publish one.

Every head-to-head comparison

Frequently asked questions

What is the best way to offer custom domains in a SaaS product?

Split it into the two jobs it really is. Something has to serve HTTPS for every customer hostname: your host (Vercel, Fly.io, Render), an edge (Cloudflare for SaaS, Approximated, SaaS Custom Domains), or your own servers with Caddy. And something has to get the customer's DNS record created and proven: a DNS-layer product (DoDomain, Entri) or your own instructions page. Most products at scale use one of each; the comparison tables above show which product does which half.

Which custom-domain tools create the DNS record for the customer?

In the DNS layer, both: DoDomain (Cloudflare OAuth one-click and a signed Domain Connect apply on providers that serve its templates, from Pro up) and Entri (it signs the user in at a supported provider and applies the records; its docs list 63 providers). Approximated's DNS widget also writes records where a supported Domain Connect integration exists. Cloudflare for SaaS, SaaS Custom Domains, Vercel, Fly.io, Render, Netlify and Caddy leave the record to the customer.

What is the cheapest way to support customer domains?

At small volume, several options cost nothing for the domain line: Caddy is free software on servers you run; Vercel charges nothing extra for domains within plan limits; Cloudflare for SaaS includes 100 hostnames; Fly.io's first 10 certificates are free and Render's Pro plan includes 15 domains. On the DNS side, DoDomain's Free plan verifies 50 connections a month with guided records. The cost table above prices each at 100, 2,000 and 20,000 domains.

Do I need both a DNS tool and an edge or proxy?

Only if you want both jobs done for you. If your customers are technical and happy to copy a CNAME, an edge or host alone works. If they are not, or you sell to people who have never opened a DNS dashboard, the DNS layer is what stops the support tickets: it detects the provider, writes the record where it can, explains it precisely where it cannot, and tells your backend the moment the record is live. The two do not overlap: one decides where the name points, the other answers when it gets there.

What is Domain Connect, and which DNS providers support it?

Domain Connect is an open protocol that lets a DNS provider apply a pre-registered template of records after the domain owner approves one screen at the provider. Support is per template: each provider chooses which services' templates it serves, so "supports Domain Connect" is never a blanket yes. DoDomain measures which providers serve its templates every night and publishes the result on its State of Domain Connect page.

How do these tools handle apex (root) domains?

It depends on the layer. Edges that serve traffic need the apex pointed at them with A records (SaaS Custom Domains publishes two addresses, Approximated gives you a dedicated IPv4 address) or with a flattened CNAME (Cloudflare for SaaS; apex proxying on IP addresses is an Enterprise add-on there). Vercel asks for an A record at the apex and Netlify for an ALIAS or ANAME. DoDomain sessions can request A and AAAA records at the apex like any other record, so the customer gets whichever records your edge or host needs.

How is custom-domain software priced?

On four different meters, which is why headline prices compare badly. Fly.io and Render bill every hostname that is live, every month, while Cloudflare for SaaS bills per additional hostname and its pages state no billing period. Entri sells annual allowances of new connections on flat tiers. Vercel includes domains in the hosting plan. DoDomain counts a domain once, in the month it first verifies, and never charges for keeping it monitored. The cost table on this page prices all of them on the same three scenarios.

What happens when a customer later changes or deletes the record?

That is the monitoring question, and the answers differ. DoDomain re-checks every connection every 10 minutes for its first day, hourly for a week, then every 6 hours, confirms a break on three consecutive checks, and sends a signed webhook, free on every plan. Entri Monitor sends record-missing and record-restored webhooks without a published interval. Approximated's monitor sends a webhook when a host's DNS goes wrong; Cloudflare for SaaS's webhooks cover the certificate lifecycle.

Can I use DoDomain with Cloudflare for SaaS, Vercel or another edge?

Yes, and that is the intended pairing. Ask the session for the record your edge or host needs (a CNAME to your Cloudflare for SaaS hostname, an A record to your Approximated address, the record Vercel returns for the domain) and DoDomain gets it into the customer's DNS, proves it at the authoritative nameservers, and calls your webhook when it is live. Your edge or host then issues the certificate and serves the traffic, exactly as it would have if the customer had typed the record themselves.

Do my customers have to register a domain with DoDomain or move their nameservers?

No to both. DoDomain is not a registrar or a DNS host, and it sells no domains. It reads the nameservers the domain already has and works with what it finds: Cloudflare OAuth one-click (from Pro up), a signed Domain Connect apply on providers that serve its templates, and guided records at every other provider. A domain registered at Cloudflare Registrar is on Cloudflare nameservers by Cloudflare's own rule, so its zone normally gets the Cloudflare path (a zone behind custom or vanity nameservers, or a subdomain delegated elsewhere, is routed by the nameservers DoDomain finds). A domain registered at Namecheap can stay on Namecheap's DNS and get guided records, or use another host's nameservers and get whatever that host supports.

How was this comparison researched, and how current is it?

Every fact about another product was read from that vendor's own pricing and documentation pages on 2026-10-06, and the Namecheap and Cloudflare Registrar facts in the registrar section from those providers' own documentation on 2026-10-23. Each entry links the pages it came from (they are also listed as citations in this page's structured data). Costs are arithmetic over those published rates, never estimates; where a vendor quotes through sales or hides a schedule, the table says so instead of guessing. DoDomain's own figures are read from its live plan definitions when the page is built. Vendors reprice, so check their sites before you buy.

Start on the free plan

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

We use analytics cookies to understand how DoDomain is used. The sign-in cookie is essential and is set regardless; the privacy policy names every service involved. Privacy policy