# A custom domain for a single HTML page, in minutes · Stacktree

Source: https://stacktr.ee/custom-domains

[Skip to content](#main) PFrom Product Hunt? Your first pages are free, no card. Code `PRODUCTHUNT` takes 50% off your first month of Studio.[Start free &rarr;](https://app.stacktr.ee/?join=1&from=producthunt)

&times;   A Stacktree customer sent you. Your first month is 50% off on any plan, taken off at checkout. [Start free &rarr;](https://app.stacktr.ee/?join=1&from=referral)

 &times;    [Stacktree](/)[Developers](/developers)[Agents](/agents)[Docs](/docs)[Use cases](/use-cases)[Pricing](/pricing)[Blog](/blog)[Dashboard](https://app.stacktr.ee)[Sign in →](https://app.stacktr.ee)      By [ Steve Smith ](/about) · Founder, Stacktree  ·  Last updated October 12, 2026          paid feature

#  Custom domains for the pages your agent builds.

   Bind any published page to a domain you own, in minutes.  A CNAME and a TXT record, SSL provisions itself, and the deliverable serves from reports.yourco.com instead of a vendor URL. Re-bind the same domain to next month's page without touching DNS again.

  [ Put a page on your domain ](https://app.stacktr.ee/?join=1&from=seo_custom_domains)   install npx stacktree-install
Copy
      No card · 3 pages free · about a minute

##  How do you put a single HTML page on a custom domain?

You do not need a full website or a hosting stack behind it: publish the single HTML page to Stacktree, add your hostname in the dashboard, and create the two DNS records it gives you, a CNAME pointing at Stacktree and a TXT record proving ownership. Verification takes one click, the SSL certificate provisions automatically via Cloudflare for SaaS, and the page serves from your domain within minutes. Solo includes 1 domain, Studio 10 and Firm 25, and a verified domain can be re-bound to any site you host. A hostname can also point at a [client space](/client-spaces) instead of a single page, so one address serves everything you have filed for that client.

## The link is part of the deliverable

 When you send client work as a link, the domain in that link does half the talking. A report at `claude.ai/public/artifacts/...` or `name.openai.chatgpt.site` says "a tool made this." The same report at `reports.yourstudio.com` says "we made this." For agencies and consultants delivering agent-built pages, that difference is the difference between looking like the author and looking like the operator of someone else's software.

 The client is not always the only reader, either. Some hand a long proposal to their own ChatGPT or Claude and ask for the short version, and the assistant names its source by the address it read. On `proposal.yourstudio.com`, the summary your client gets back says it came from you. If the page has a passcode, their assistant is told the page is private and to ask them to open it in their browser, rather than guess at what it says, and you can see that it tried.

## Where the platforms stand on custom domains

 Verified against each platform's own documentation as of July 2026:

  - Claude artifacts. Publishing creates a claude.ai link. Anthropic's support doc covers embedding an artifact on a site, but documents no custom-domain option, and artifacts on Team and Enterprise plans cannot be published publicly at all.
 - ChatGPT Sites. Sites live at name.openai.chatgpt.site, with genuine same-URL production deploys, which is real replace-in-place and worth crediting. The docs now document custom domains too (apex or subdomain via DNS, "where available", not for Enterprise-owned sites at launch). The remaining gaps are around the domain, not the domain itself: no account-free gated viewing, no expiry or burn, and publishing is bound to ChatGPT rather than open over API or MCP.
 - Vercel Drop. Vercel proper handles custom domains well; that is not the gap. The gap is that each drop creates a new project, so the domain you attached stays pointed at the old drop. Keeping a domain current across iterations means graduating to Git or the CLI.
 - Cloudflare Drop. Sites deploy to a public workers.dev URL. Adding a domain sits behind claiming the deployment into a Cloudflare account and doing the Workers DNS configuration yourself.
  All four are good at what they lead with. None of them puts an agent-built page on a domain you own as part of the normal flow.

## How it works on Stacktree

  - Publish the page. From Claude, Codex, Cursor, any MCP agent, or drag and drop.
 - Add your hostname. The dashboard returns two DNS records: a CNAME and a _stacktree-verify TXT.
 - Create the records, click verify. Stacktree checks the TXT over DNS and registers the hostname with Cloudflare for SaaS.
 - SSL provisions itself. The certificate issues automatically; you never handle a cert file.
  From then on the domain is a pointer you control. Re-bind `proposal.yourstudio.com` to a different site in one call when the next engagement starts, and because a Stacktree page updates in place, revising the deliverable never changes the URL under the domain either.

## A domain for one page, or an address for one client

 A hostname binds to one of two things. Bind it to a site and it serves that page, which is the flow above. Bind it to a client space and it serves that client's portal at the root, with every deliverable filed for them sitting at its own path underneath. `acme.yourstudio.com` stops meaning "this month's report" and starts meaning "the place Acme's work lives"; the bookmark holds while the ledger behind it grows. If your agency already keeps [one folder per client](/blog/one-folder-per-client), this is the matching address on the client's side. What sits behind the address is on [client spaces](/client-spaces).

 A space address is counted as a client space rather than as a custom domain, so it does not come out of the 1, 10 or 25 above. Activated spaces, meaning ones with a hostname bound or a portal turned on, are 1 on Solo, 10 on Studio and unlimited on Firm. Filing work under a client is free on every plan.

## Claim the parent domain once, skip the DNS per client

 A CNAME and a TXT per hostname is fine for one or two addresses. It gets tedious when every client gets their own. So you can claim the parent domain instead: verify `youragency.com` once with a single TXT record, add one wildcard CNAME for `*.youragency.com`, and from then on each new `acme.youragency.com` needs no DNS work at all. No per-hostname TXT, no second wait on propagation; add the hostname and verify it in the same sitting.

 The claim also reserves the namespace. Once `youragency.com` is verified to your account, no other Stacktree account can register a hostname beneath it, which matters precisely because a wildcard CNAME points everything under your domain at us. If your DNS is on Cloudflare, set that wildcard record to DNS-only.

## White-label, all the way down

 The domain is the visible half of [white-labelling a client report](/white-label-client-reports). The other half: on paid plans, pages render with no [Stacktree badge](/made-with), so nothing on the page names the host. And if you gate the page with a password or an email-domain gate, the link unfurls in Slack and Teams as a locked graphic that leaks no title and no description. Your domain, your work, and no third-party fingerprints for the client to find.

 The gate itself is quiet too. On your own hostname, a passcode-protected page asks for the passcode on a plain styled page that names neither us nor the product, rather than the browser's basic-auth dialog. The client types it once; on a client-space address that answer holds for 30 days across every deliverable in the space. There is still no account and no login for them to keep.

## Domains an agent can buy for itself

 Custom domains are a subscription feature (Solo 1, Studio 10, Firm 25), with one exception built for automation: an agent can purchase a single domain slot for $5 per 30 days over x402, settling in USDC on Base with no card and no human in the loop. A pipeline that publishes client reports can provision its own branded hostname the same way it publishes. The rails are in use: [one wallet bought a $1 key and two unlocks over x402 in a single afternoon](/blog/machine-bought-past-entry-price).

FAQ

## Frequent questions

     Can I put a Claude artifact on my own domain? +  Not through Claude. Publishing an artifact creates a claude.ai link, and Anthropic's support documentation describes embedding but no custom-domain option. The working path: copy the artifact's HTML out (or have Claude Code publish it directly over MCP), host it on Stacktree, and bind your domain to it. The client sees reports.yourco.com, not claude.ai. See [sharing Claude artifacts](/share-claude-artifacts) for the export step.   Can a ChatGPT Site have a custom domain? +  Yes, with caveats. OpenAI's docs now describe connecting an apex or subdomain via DNS, "where available", and not for Enterprise-owned sites at launch. What remains different here: domains rebind to any page in minutes rather than attaching to one Site, agents can buy a domain slot over x402 without a human in the loop, and gated pages keep working on your domain without viewer accounts.   How do I white-label a client report link? +  Three pieces: your own domain in the address bar, no host branding on the page (paid Stacktree plans render no badge), and a preview that does not leak. A gated Stacktree page unfurls in Slack and Teams as a locked graphic with no title or description, so even the link preview stays quiet. The client sees your domain and your work, nothing else.   Do I need to move my hosting to use my domain? +  No. You delegate one subdomain, not the domain. Add a CNAME for something like reports.yourco.com and everything else about your DNS and existing hosting stays exactly where it is. Your main site never touches Stacktree.   What DNS records do I need to add? +  Two: a CNAME pointing the hostname at Stacktree, and a TXT record that proves you own it. Once the TXT verifies, the SSL certificate provisions automatically through Cloudflare for SaaS. No certificate files, no renewal cron.   Do I have to add DNS records for every client subdomain? +  No. Claim the parent domain once instead: one TXT record verifies `youragency.com` and one wildcard CNAME for `*.youragency.com` covers everything under it. After that, adding `acme.youragency.com` takes no DNS work at all, and the claim reserves the namespace so no other Stacktree account can register a hostname beneath your domain.   Can one address serve everything I do for a client? +  Yes. Bind the hostname to a [client space](/client-spaces) rather than to a single page, and it serves that client's portal at the root, with each deliverable at its own path. The client keeps one bookmark; the work accumulates behind it, newest first.   How many custom domains do I get? +  Solo includes 1, Studio 10 and Firm 25, and each domain can be re-bound to a different site whenever you like. Free has none. Addresses bound to a client space are counted separately, as activated client spaces: 1 on Solo, 10 on Studio, unlimited on Firm. An agent without a subscription can also rent a single domain slot for $5 per 30 days over x402, paid in USDC with no card and no human. Details on [pricing](/pricing).
Keep reading

## Related guides

   -  [ Client spaces Point the domain at a client, not a page: one address, every deliverable, one passcode. ](/client-spaces)
-  [ Share an HTML file with a client The delivery half: private link, gates, and no login for the client. ](/share-html-file-with-client)
-  [ Share deliverables with clients The full client-handoff flow this feature slots into. ](/share-with-clients)
-  [ Share Claude artifacts privately Get the HTML out of Claude and onto a link you control. ](/share-claude-artifacts)
-  [ Can a Codex Site have a custom domain? The workspace-era predecessor to ChatGPT Sites, examined. ](/blog/codex-sites-custom-domain)
-  [ Pricing Solo at $19/mo includes 1 custom domain; Studio at $79 includes 10. ](/pricing)
-  [ ChatGPT Sites custom domains, explained ChatGPT Sites supports custom domains, where available: connect an apex or subdomain you own by updating DNS records. ](/chatgpt-sites-custom-domain)

References

## Sources and further reading

   -  [ Cloudflare for SaaS: custom hostnames ↗ The infrastructure Stacktree uses to verify hostnames and issue certificates. ](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/)
-  [ Claude Help Center: publishing and sharing artifacts ↗ Anthropic's official doc: embedding is covered, custom domains are not, and Team/Enterprise artifacts cannot be published publicly. ](https://support.claude.com/en/articles/9547008-publishing-and-sharing-artifacts)
-  [ ChatGPT Sites documentation ↗ OpenAI's docs: sharing options, openai.chatgpt.site hosting, and custom domains ("where available", not Enterprise-owned sites at launch). ](https://learn.chatgpt.com/docs/sites)
-  [ Vercel docs: deploying with Vercel Drop ↗ The stated limitation this page cites: each drop creates a new project and does not redeploy into an existing one. ](https://vercel.com/docs/drop)

##  Send the next deliverable from your own domain.

 CNAME, TXT, verified, live. Domains start on Solo at $19 a month.

 [ Sign up free → ](https://app.stacktr.ee/?join=1&from=cta_custom_domains)   install npx stacktree-install
Copy
       Private hosting for the HTML your agents make.

[](https://betalist.com/startups/stacktree?utm_campaign=badge-stacktree&utm_medium=badge&utm_source=badge-featured)[Featured on](https://devhunt.org/tool/stacktree)[](https://buildlist.io)[Get started free](https://app.stacktr.ee/?join=1)

## Product

- [Page video](/page-video)
- [Ask this page](/ask-this-page)
- [Client spaces](/client-spaces)
- [Templates](/templates)
- [Example deliverables](/examples)
- [Custom domains](/custom-domains)
- [Client feedback](/client-feedback-loop)
- [One-time links](/one-time-view-links)
- [See how pages get read](/page-engagement)
- [Made with Stacktree](/made-with)
- [Security](/security)
- [Watch the demo](/demo)

## Agents

- [All integrations](/agents)
- [Claude Code](/claude-code)
- [OpenAI Codex](/codex)
- [Cursor](/cursor)
- [Claude.ai connector](/claude-ai-connector)
- [Claude Cowork](/what-is-claude-cowork)
- [Meta Muse](/muse)
- [MCP server](/mcp-publish-html)
- [Deploy from Claude Code](/deploy-html-from-claude-code)
- [Skills](/skills)
- [Slack app](/slack)
- [n8n node](/n8n)
- [Agent payments (x402)](/x402)

## Alternatives

- [All comparisons](/alternatives)
- [Head-to-head comparisons](/compare)
- [Tiiny Host](/tiiny-host-alternative)
- [GitHub Pages (private)](/github-pages-private-alternative)
- [Vercel](/vercel-alternative-for-agents)
- [ngrok](/ngrok-alternative-for-html)
- [Display.dev](/display-dev-alternative)
- [Static.app](/static-app-alternative)
- [OpenAI Codex Sites](/openai-codex-sites-alternative)
- [here.now](/here-now-alternative)
- [Shippage](/shippage-ai-alternative)
- [Best private hosting](/best-private-html-hosting)

## Use cases

- [All use cases](/use-cases)
- [Share with clients](/share-with-clients)
- [Send a file to a client](/share-html-file-with-client)
- [Share Claude artifacts](/share-claude-artifacts)
- [Share Jupyter notebooks](/share-jupyter-notebook-html)
- [Host Storybook privately](/host-storybook-privately)
- [Architecture diagrams](/share-architecture-diagrams)
- [AI-generated reports](/host-ai-reports)
- [Internal HTML tools](/internal-tool-hosting)
- [Private HTML hosting](/private-html-hosting)
- [Vibe-coded page hosting](/vibe-coding-hosting)
- [Leave a website builder](/website-builder-migration)

## Learn

- [Blog](/blog)
- [Glossary](/glossary)
- [FAQ](/faq)
- [Where AI output should live](/where-ai-output-lives)
- [Agent-loop hosting](/agent-loop-hosting)
- [Why agents need a publish primitive](/blog/why-agents-need-a-publish-primitive)
- [MCP servers explained](/blog/mcp-servers-explained-for-developers)
- [What changed in the 2026-07 MCP spec](/blog/mcp-2026-spec-changes)
- [Sites in Codex explained](/blog/sites-in-codex-explained)
- [Private-by-default hosting](/blog/private-by-default-html-hosting)
- [An agent paid us $1 (x402)](/blog/agent-paid-to-provision-itself)
- [When a loop hits a paywall](/blog/loop-engineering-paywall)
- [Pricing](/pricing)
- [Self-host (new)](/self-host)
- [Changelog](/changelog)
- [Docs](https://stacktr.ee/docs)
- [About](/about)
© 2026 Stacktree · stacktr.ee

[Privacy](/privacy)[Terms](/terms)[Security](/security)[Dashboard](https://app.stacktr.ee)[npm](https://www.npmjs.com/package/stacktree-mcp)[Sitemap](/sitemap.xml)[llms.txt](/llms.txt)[API spec](/openapi.json)

---
Full markdown summary of the Stacktree marketing surface: https://stacktr.ee/llms-full.txt
