# Custom domains

Serve forms from your own domain instead of the default formbase URL.

> ✅ **Pro feature** — included in the Pro plan.


## Custom domains

Replace the default form.formbase.so URL with your own domain — like forms.yourcompany.com. Respondents see your brand in the address bar, and you get full control over social preview metadata. SSL is provisioned automatically.

<h2 id="setup">Set up a custom domain</h2>

<h2 id="dns-record">DNS record</h2>

<p>Create a single CNAME record at your DNS provider:</p>

<p>No TXT or A records are needed. formbase handles domain verification and security certificates automatically via the CNAME record.</p>

<h2 id="status">Domain status</h2>

<p>
  Status only changes when you ask for it. <strong>Check DNS</strong> on the domain card runs the check; there is no background poller, so a
  domain sits at Pending DNS until you click it again.
</p>

<p>
  On an active domain, click the <strong>link icon</strong> on the domain card to see which share links currently use that domain.
</p>

<h2 id="custom-slugs">Custom slugs</h2>

<p>
  Once a domain is active, each share link assigned to it gets a custom slug instead of the default 8-character code. For example:{' '}
  <code>forms.yourcompany.com/feedback</code> instead of <code>form.formbase.so/a1b2c3d4</code>.
</p>

<p>Slug rules:</p>
<ul>
  <li>3–64 characters</li>
  <li>Lowercase letters, numbers, and hyphens only</li>
  <li>Cannot start or end with a hyphen</li>
  <li>Must be unique per domain</li>
  <li>
    Seven slugs are reserved: <code>login</code>, <code>auth-callback</code>, <code>preview</code>, <code>payment</code>, <code>api</code>,{' '}
    <code>admin</code>, and <code>health</code>
  </li>
</ul>

<p>
  A link's original <code>form.formbase.so/&lt;code&gt;</code> URL keeps working after you assign a slug, and so does the same 8-character
  code on your own hostname. Nothing you already printed or emailed breaks.
</p>

<h2 id="social-preview">Social preview metadata</h2>

<p>
  Each domain has its own social preview settings — the title, description, image, and favicon that appear when someone shares a link on
  social media or messaging apps. Open the metadata editor by clicking the sliders icon on the domain card. A "Hide from search engines"
  toggle lets you add a noindex tag.
</p>

<p>
  Forms can also override the domain defaults with per-form metadata. The fallback order is: per-form settings → domain defaults → the
  form's cover image → generic formbase preview. This means you can set a branded baseline on the domain and only customize individual forms
  when needed.
</p>

<h2 id="limits">Limits</h2>

<ul>
  <li>
    The domain quota is a single pool shared between custom form domains and custom email domains — every domain you add counts toward the
    same cap
  </li>
  <li>
    Up to <strong>5 domains total</strong> per workspace on Pro, up to <strong>20 total</strong> on Business
  </li>
  <li>Bare root domains (e.g., yourcompany.com without a subdomain) are not supported — use a subdomain like forms.yourcompany.com</li>
  <li>
    Custom domains require a <strong>Pro or Business plan</strong>
  </li>
  <li>
    Bot protection on custom-domain forms requires your own <a href="/building-forms/captcha-bot-protection">Cloudflare Turnstile</a> keys —
    set them up on the same Domains page
  </li>
</ul>

> ℹ️ **Removing a domain**
> <p>
>     Deleting a custom domain unlinks it from all share links that use it. Those links fall back to the default form.formbase.so URL.
>     Respondents with bookmarks to the old custom domain URL will see an error, but the default share link URL continues to work.
>   </p>

<h2 id="downgrades">What happens if your plan lapses</h2>
<p>
  If your subscription ends or a payment fails, connected domains keep serving your forms for about <strong>60 days</strong>. After that,
  the domain disconnects and your share links fall back to the default formbase.so URLs — forms keep collecting, but bookmarks and printed
  QR codes pointing at the branded URL stop working. The grace-period emails name the exact cutoff date. Re-subscribe before that date and
  nothing changes; after it, add the domain again from the Domains page. See{' '}
  <a href="/subscription-billing/upgrading-downgrading#what-gets-deleted">upgrading &amp; downgrading</a>.
</p>

<h2 id="next-steps">Next steps</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Custom email domains](/branding-domains/custom-email-domains) — Send notifications from your own address
  - [Authentication gate](/sharing-publishing/authentication-gate) — Password protect or require login to submit
</div>
