---
title: Connecting a custom domain
description: How to point your own hostname at a product page — the DNS records Insy asks for, why the status only moves when you press Sync Status, and what your domain actually serves.
---

A custom domain puts one of your product pages on a hostname you own, like `shop.example.com`. You
add the domain in Insy, add the DNS records Insy shows you, and the certificate is issued for you.
The product itself does not move or change — the same page is served on both addresses.

Custom domains hang off **a product**. This page covers connecting a domain, getting it verified,
what it serves once it is live, and how to remove it.

> **Products only, one domain each**
>
> There is no custom domain for a community or for a creator profile — the setting exists on a
> product's Integrations screen and nowhere else. Insy shows a single domain per product; to change
> it, remove the current one and add another.

## Step 1 — Add the domain in Insy

1. **Open the product's Integrations screen**

    Go to the product and open **Integrations**. The **Custom Domain** card is there, and its button
    reads **Connect** while no domain is attached and **Manage Domain** once one is.

2. **Enter the hostname**

    The dialog has one field, **Domain**, with `shop.example.com` shown as the example. Type the
    exact hostname you want the product served from, in that same form.

3. **Press Connect Domain**

    Insy registers the hostname with Cloudflare, which is what issues the certificate and answers
    requests for it. On success the dialog switches straight to the manage view with your DNS
    records in it.

> **A rejected hostname is not saved**
>
> Insy does not check the shape of what you type — whatever you enter goes straight to Cloudflare. If
> Cloudflare comes back with verification errors, they are listed in red in the dialog and **nothing
> is stored**. Correct the hostname and submit again; there is no half-finished record to clean up.

## Step 2 — Add the DNS records

The manage view shows a **Required DNS Records** table with **Type**, **Name** and **Value**
columns, and a copy button next to the values you need. Add every row of it at whatever service
hosts your domain's DNS.

| Row | Type | Name | Value |
| --- | --- | --- | --- |
| Routing | `CNAME` | your hostname, exactly as you entered it | the target shown in the table |
| Ownership | usually `TXT` | generated for your domain | generated for your domain |

> **The actual values are not in this documentation, on purpose**
>
> Neither value is a constant that could be written down here. The CNAME target is server-side
> configuration on Insy's end, and the ownership record's name and value are generated by Cloudflare
> for your specific domain. **Copy them from the table in the dialog** — any value you find elsewhere
> is a guess.

The ownership row's type is whatever Cloudflare returns for your domain, and falls back to `TXT`
when Cloudflare does not state one. There is one ownership row, and pressing **Sync Status**
replaces it with whatever Cloudflare reports at that moment — always copy from the table in front of
you rather than from an older screenshot.

The routing record is always a `CNAME` on that exact hostname. Insy has no A-record path and no
separate handling for a root domain — whatever you enter, the table asks for a CNAME.

## Step 3 — Check the status

The manage dialog's main button is **Sync Status**. Pressing it asks Cloudflare where the domain
stands and rewrites the status badge, the error message and the **Last checked** timestamp with the
answer.

> **Nothing checks in the background**
>
> There is no polling, no scheduled job and no notification. The status you see is from the last time
> **you** pressed Sync Status — Insy will not tell you when the domain goes live, and a domain that
> became active hours ago still reads `Pending` until you press the button.

The badge is one of six states:

| Badge | What it means |
| --- | --- |
| **Active** | The hostname is verified and the certificate is issued. The domain is live. |
| **Pending** | Cloudflare has not verified the hostname yet. |
| **SSL Pending** | The hostname is verified, but the certificate is not issued yet. |
| **Error** | Anything else. The reason is shown above the DNS table. |
| **Deleted** | Cloudflare reports the hostname as deleted. |
| **Unknown** | No status has been recorded yet. |

A second button, **Refresh Validation**, asks Cloudflare to run domain-control validation again. It
only appears when your domain's nameservers are Cloudflare's own — on any other DNS host, Sync
Status is the only control you get.

## Certificates

The certificate is automatic. When the domain is added, Insy requests a domain-validated
certificate with HTTP validation and a minimum TLS version of **1.2**. You do not upload a
certificate, buy one, or renew one.

Until the certificate is issued the status reads **SSL Pending**. **Refresh Validation** asks
Cloudflare to run domain-control validation for the certificate again.

## How long it takes

Insy states no propagation time, sets no deadline, and enforces no timeout — there is no point at
which a pending domain is given up on or cleaned up. How long verification takes is down to your DNS
provider and Cloudflare, not to Insy.

In practice this means the workflow is: add the records, walk away, come back later and press
**Sync Status**. If it is still `Pending` well after your DNS changes are visible elsewhere, treat
that as a wrong record rather than as slow propagation, and re-check the Name and Value against the
table.

## What your domain serves once it is live

Requests to your domain are answered with the same product page that lives on `insy.io` — the same
content, prices and checkout. A few things are worth knowing about that copy:

- **Only the root of the domain serves the product.** `https://shop.example.com` shows your product
  page. A deeper path such as `/pricing` has nothing behind it.
- **The canonical URL still points at insy.io.** The page sets its canonical link, `og:url` and
  `twitter:url` to `https://insy.io/p/your-slug`, which tells search engines the insy.io copy is
  the one to index.
- **The share preview is your SEO image, or a product picture.** Insy generates share cards for
  product pages on insy.io, but the custom-domain copy does not use them. It falls back to one of
  the product's own pictures, and if the product has neither, the page shares without an image.
- **There is nothing to allowlist.** A connected custom domain is recognised automatically when the
  page calls the Insy API, so no extra origin configuration is needed on your side.

## Removing the domain

**Remove Domain** at the bottom of the manage dialog asks for confirmation and then deletes the
hostname from Cloudflare and the record from Insy in one go. The confirmation says it plainly: this
cannot be undone. After that the domain no longer resolves to your product, and reconnecting means
going through this page again from Step 1 with fresh records.

Insy never touches your DNS — not when connecting, not when removing. The records you added stay in
your DNS until you delete them yourself.

## When it isn't working

- **Your domain redirects to insy.io.** The hostname reached Insy but could not be matched to a
  product, so the request is sent to `https://insy.io` instead. Check that the domain in the panel
  is spelled exactly like the hostname you are visiting, and that it has not been removed.
- **Status is stuck on Pending.** Nothing re-checks on its own, so first press **Sync Status** —
  the state you are looking at may simply be old. If it is genuinely still pending, compare every
  Name and Value in the table against your DNS entries character by character.
- **There is a red error message.** The text above the DNS table comes verbatim from Cloudflare —
  hostname verification errors and certificate validation errors, joined with semicolons. It
  describes what Cloudflare could not do, and is the most specific information available.
- **Refresh Validation never appears.** The button is shown only when a nameserver lookup says your
  domain is on Cloudflare. It also misreads multi-part suffixes: for a hostname under `.co.uk`, the
  lookup checks `co.uk` rather than your actual zone, so the button stays hidden even when your
  domain is on Cloudflare.
- **You renamed the product and the domain broke.** The hostname-to-product lookup is cached for
  **10 minutes**. After a slug change, give it that long before concluding something is wrong.
