Guide for software teams
White label custom domains for SaaS: how to offer them
A white label custom domain lets each of your customers open your product at their own address, such as app.customer.com, with their brand in the address bar and yours out of sight. To offer one you need to verify who owns each domain, get the right DNS record in place, issue and renew an HTTPS certificate for every name, and route each request to the right customer.
What customers want from a custom domain
Your customers want your product to look like part of their own business. In practice that means a hostname they own, in the place their users already look.
| Product type | Typical customer hostname | Why it matters to the customer |
|---|---|---|
| Help center or docs | help.customer.com | Support content builds the customer's own trust and search presence. |
| Status page | status.customer.com | Users check the customer's domain first during an incident. |
| Client portal or app | app.customer.com | Clients sign in under the brand they bought from. |
| Booking, checkout or landing pages | book.customer.com | Shared links and ads carry the customer's name. |
| Branded short links | go.customer.com | Links in email and social posts show the customer's brand. |
This is the mechanism explained in the white label domain guide, seen from the vendor's side. The customer adds a DNS record. You are responsible for everything else.
The five jobs behind every custom domain
A custom domain feature looks small in a design review and turns out to be five separate systems. Each has its own failure modes.
| Job | What it involves | Where it breaks |
|---|---|---|
| 1. Prove ownership | Confirm that the person adding a domain controls it, through a DNS record or an authorization at the DNS provider. | Customers who do not know where their DNS lives, or cannot log in to it. |
| 2. Get DNS right | A CNAME on a subdomain. An ALIAS, ANAME, flattened CNAME or A records on a root domain. Conflicting records removed. | A CNAME cannot sit on a root domain, and an old record at the same name blocks the new one. |
| 3. Issue HTTPS | One certificate per hostname, requested once DNS points at you, renewed before it expires. | Proxies, CAA records and DNSSEC mistakes block issuance. A failed renewal shows up as an outage. |
| 4. Route by host | Read the Host header (or X-Forwarded-Host behind a proxy) and map it to the right customer. | Sessions, cookies, CSRF checks and canonical URLs that assume a single hostname. |
| 5. Keep it working | Watch the records for drift, warn before a certificate expires, and clean up when a customer leaves. | A customer edits DNS months later and nobody notices until their users do. |
How a customer connects a domain
- The customer enters a domain in your app, usually inside an embedded widget.
- A pre-flight check looks up the domain's DNS provider, picks the most direct way to apply records and flags conflicts before anything is written.
- The records are applied by one of four methods, shown in the table below.
- Propagation is polled until every expected record resolves.
- The connection goes live. Through the edge, the HTTPS certificate is issued on the first visit.
- Your app is told by webhook (
connection.live) and switches the tenant on.
| Method | How the records get in | Customer effort |
|---|---|---|
| Sign in to the DNS provider (OAuth) | The customer approves access in a popup at their provider. The records are written with a one-time token that is never stored. | A few clicks |
| One-click setup (Domain Connect) | The provider applies a signed template from a link it hosts. No server-to-server token is needed. | A few clicks |
| API token | A scoped provider token writes the records once and is then discarded, unless the customer opts in to keeping it. | Create a token |
| Manual | The customer copies the records from the screen into their DNS, and the system waits for them to appear. | Copy and paste |
The widget chooses the method for each domain, so you do not write a separate flow for each DNS provider. The connect flow docs describe the four methods in detail.
Where the domain points: two routing models
Every connection's records point somewhere, and you choose where once for your application. The records a customer sees, the checks and the live DNS diagnosis all follow that choice.
| Through the CustomDomain™ edge | Your own infrastructure | |
|---|---|---|
| Subdomain record | CNAME to edge.customdomain.ai | CNAME to your hostname |
| Root domain record | ALIAS, ANAME or flattened CNAME to the edge, or A records to the edge's addresses | ALIAS style record to your hostname, or A records to addresses you list |
| HTTPS certificates | Issued and renewed by the edge on the first request | Yours to issue, through your load balancer, TLS proxy or CDN |
| Root to www redirect | Served by the edge | Yours to serve |
| Plans | Growth and up | Every plan |
Through the edge, CustomDomain™ terminates TLS and proxies each request to your origin, passing the customer's hostname in X-Forwarded-Host so one origin can serve every customer. Set the default origin for your application before the first customer connects, because a request with no origin to go to is answered with a 421.
Keeping the vendor out of DNS. If the customer's DNS must not show a CustomDomain™ name, use your own infrastructure. The customer's CNAME then points at your hostname, such as customers.yourapp.com, and no CustomDomain™ name appears in it. Through the edge, the record points at edge.customdomain.ai.
Pick the model before customers connect. Changing it later changes the records that new connections get, and records already written stay as they were until you reapply the connection.
HTTPS certificates: issuance and renewal
Through the edge, a certificate is issued the first time someone visits the domain over HTTPS after it points at CustomDomain™. It comes from Let's Encrypt. Renewal starts about 30 days before expiry and needs no access to the customer's DNS, so it works the same whatever access was kept. A failing renewal is retried after 30 minutes at first, then less often after each failure, up to about once a day, while the current certificate keeps serving.
Webhooks report issuance and renewal, and warn at 14, 7 and 3 days before a certificate that has not renewed expires. In your own infrastructure mode you issue the certificates yourself. The same rule applies: the name has to point at you before the certificate can be issued, which the challenge types explain.
White labelling the connect flow itself
The widget is the part of the process that customers see, so it should look like your product. The whiteLabel configuration covers colors, font, corner radius, light and dark logos, around 90 design tokens, per screen switches and 13 languages. Removing the CustomDomain™ branding and using the full white label configuration are Enterprise features, so check pricing for what your plan includes.
Build or buy
| Capability | If you build it | With CustomDomain™ |
|---|---|---|
| Ownership and DNS changes | Write and maintain a flow for each DNS provider, or ask every customer to edit records by hand. | A widget that applies records by provider sign in, one-click setup or API token, or shows the records to copy. |
| HTTPS | Run issuance and renewal, store the keys, handle failures and rate limits. | Issued on first visit and renewed about 30 days before expiry through the edge, or yours to issue in your own infrastructure mode. |
| Routing | A proxy or load balancer that selects a tenant by hostname. | The edge proxies to your origin with the customer's hostname in X-Forwarded-Host. |
| Monitoring | Jobs that recheck every customer's records and certificate. | Hourly drift checks and certificate webhooks. |
| Support | Tickets from customers who cannot find their DNS settings. | Provider specific steps and the exact records on screen. |
Building it yourself is reasonable when you have a handful of customers on one DNS provider and an engineer who is comfortable with certificates. It stops being reasonable when every new customer brings a new DNS host and a new way to get a record wrong. Let's Encrypt publishes issuance rate limits worth reading before you commit to the DIY route.
What it costs
Each hostname counts once as a connection. Prices below were checked on October 7, 2026. The pricing page is the source of truth, and every self-serve plan starts with a 14 day free trial. The card is added at checkout and the first charge comes when the trial ends.
| Plan | Price | Domain connections a year | What it adds |
|---|---|---|---|
| Starter | $10 a month | 10 (1 a month, a hard cap) | The Connect engine, widget, SDK, REST API, webhooks, drift detection and MCP server |
| Startup | $149 a month | 600 (50 a month) | The same product with more domains |
| Growth | $649 a month | 600 (50 a month), extra billed in blocks of 1,000 | The reverse proxy edge with automatic HTTPS |
| Premium | Contact sales | 12,000 | Monitoring (preview) |
| Enterprise | Custom | 12,000 and up | White label branding and domain resale |
Launch checklist for software teams
- Pick the hostname pattern you will recommend, such as
app.customer.com, and put it in your docs. Offer a subdomain first, and steer root domains towwwwhere the DNS provider has no ALIAS style record. - Choose the edge or your own infrastructure before the first customer connects, and set the default origin so requests are not answered with a 421.
- Look up the tenant by the host the customer used (the Host header, or
X-Forwarded-Hostbehind a proxy), not by a path or a subdomain of your own domain. - Scope cookies and sessions per host, and add each custom host to the origins your CSRF and CORS checks allow.
- Build canonical URLs, sitemaps and outbound links from the tenant's host, so search engines and email links agree on one address.
- Listen for webhooks such as
connection.liveand the certificate events, and show the customer the state of their domain. - Decide what happens when a customer leaves: remove the domain, and tell them to delete the DNS record.
Most failed connections trace back to a short list of DNS and HTTPS causes. The white label domain troubleshooting guide lists them with the commands to run, and the free Domain Health Check tests a domain in one step.
Sources and further reading
- RFC 1034, Domain names: concepts and facilities (section 3.6.2)
- RFC 2181, Clarifications to the DNS specification (section 10.1)
- Let's Encrypt, challenge types
- Let's Encrypt, rate limits
- Domain Connect, the open DNS provider protocol
- CustomDomain™ docs, the connect flow
- CustomDomain™ docs, where domains point
- CustomDomain™ docs, certificates
- CustomDomain™ docs, monitoring
Frequently asked questions
What is a white label custom domain?
A white label custom domain is a domain that a customer connects to your product, so their users see the customer's brand in the address bar instead of yours or your vendor's. The customer adds a DNS record, and you handle verification, HTTPS and routing.
How is a white label custom domain different from a vanity domain?
A vanity domain is a short or brandable name, often used for links. A white label custom domain is a customer's own domain pointed at your product so the product appears under their brand. A vanity domain can be one of the names a customer connects.
Do customers have to edit DNS by hand?
Not always. Where the DNS provider supports it, the widget writes the records after the customer signs in to the provider or approves a one-click setup. Otherwise the customer gets the exact records to copy.
Can customers connect a root domain?
Yes, where the DNS provider can point a root domain at a hostname (ALIAS, ANAME or flattened CNAME) or the records can be A records. A CNAME cannot sit on a root domain. Where none of that is possible, the widget steers the customer to www or a subdomain.
Who issues and renews the HTTPS certificates?
Through the CustomDomain™ edge, a Let's Encrypt certificate is issued on the first visit and renewal starts about 30 days before expiry. In your own infrastructure mode, you issue and renew the certificates yourself.
Do I have to run a proxy?
No. Through the edge, CustomDomain™ proxies each request to your origin and passes the customer's hostname in X-Forwarded-Host. If you prefer to run your own proxy, point customer domains at your own infrastructure instead.
What happens if a customer changes their DNS later?
Every live domain is checked once an hour against the records it went live with. A record that looks missing is looked up again at the zone's own nameservers before it counts as drift. Missing records can be put back where access is held and automatic repair is on, and a record that was changed on purpose is never overwritten.
Can I remove the CustomDomain™ branding from the connect flow?
Yes, on the Enterprise plan, which includes white label branding of the widget and domain resale. Contact sales for details.
How many domains can I connect?
It depends on the plan. Starter includes 10 connections a year, Startup and Growth include 600 a year, and Premium and Enterprise start at 12,000. Each hostname counts once as a connection.