Skip to Content
PlatformCustom Domains

Custom Domains

A published build isn’t live traffic yet. To serve real visitors your funnel must be reachable at a custom domain you own, behind an active campaign. This page is the go-live model: how domains serve, how to attach and verify one, how campaigns route to your funnels, and the exact URL a visitor hits.

A custom domain is required to serve a funnel — outside the preview link, your funnel only goes live on a domain you own and have verified. There’s no shared *.appfunnel.net URL to fall back on, so set up a domain before you plan to launch.

Attach and verify a domain

Custom domains are a project setting. Open the project’s Custom Domain settings:

Add a custom domain to serve your funnels on your own branded URL.

Enter the hostname (placeholder quiz.example.com) and Save. Appfunnel registers it and creates an unverified domain record. You then prove ownership via DNS.

The settings screen shows a status icon and a DNS record table with copy buttons:

  • Red — unverified. Add the records below.
  • Yellow — verified but not yet pointed at Appfunnel.
  • Green — verified and configured. Live.

Add the TXT record shown to prove ownership (Please set the following TXT record to verify ownership of {domain}:), plus the A/CNAME record that points the host at Appfunnel. Then refresh verification, or hit Verify to re-check.

“DNS changes can take up to 48 hours to propagate.” In practice it’s usually much faster, but a freshly-added record that doesn’t verify immediately isn’t broken — give DNS time before re-checking.

[IMAGE OF the Custom Domain settings showing the TXT/A/CNAME table with copy buttons and a red unverified status]

At serve time, the incoming host must match a domain record that is verified. Anything else returns a 404 (covered in Troubleshooting). Domain records are per-project — a domain serves the campaigns and funnels of the project it’s attached to.

Campaigns

A campaign is the routing layer between a domain and a funnel. It owns a slug (the path visitors hit) and links to one or more funnels. Create one from the Campaigns page (New Campaign).

Slug rules

  • The slug is unique per project.
  • It cannot be a bare locale code (a 2–4-character string like en or pt-br). A leading URL segment is used for language routing, so a locale-shaped slug would be ambiguous. Pick something descriptive: summer-quiz, sleep-plan.

Link a published funnel to the campaign. A funnel can serve multiple campaigns, and a campaign can hold more than one funnel (when you’re testing one funnel against another). Re-linking the same funnel returns Funnel is already linked to this campaign.

Activate — the gotcha

A new campaign defaults to PAUSED, and a paused campaign 404s. Only an Active campaign serves traffic. Everything can be correct — domain verified, funnel published live, slots bound — and visitors still get a 404 until you activate the campaign. This is the single most common reason “my funnel is live but the URL doesn’t work.” Activate it explicitly.

The live URL

Once the domain is verified, the campaign is active, and the funnel is published, the funnel serves at:

https://<custom-domain>/<campaign-slug>

With a page slug and a locale, the full shape is:

https://<custom-domain>/<campaign-slug>/<page-slug> https://<custom-domain>/<locale>/<campaign-slug>/<page-slug>

The optional leading <locale> segment (e.g. /de/…) is how a specific language is served — this is why a campaign slug can’t itself be a locale code. Language can also be forced with ?language=de; see Localization for the full resolution order.

Ignore any older /f/<slug> URL shape you may see in stale UI copy — it’s outdated. The live shape is https://<custom-domain>/<campaign-slug>.

Go-live checklist

Before you share a link, confirm all four. A miss on any one produces a 404, and the 404 won’t tell you which:

Domain verified

Green status in Custom Domain settings.

Campaign active

Status is ACTIVE, not Paused — the most-missed step.

Funnel published live

The editor’s Releases pill reads Live (not Draft). See Publishing.

Slot bindings live

Every offering slot resolves to an offering with a live price — the same check that runs when you publish. See Offerings & Catalog.

Troubleshooting

The styled 404

An unverified domain, a paused campaign, an unpublished funnel, and a genuinely non-existent slug all return the same styled 404:

The page you’re looking for doesn’t exist or is no longer available

The 404 doesn’t tell you which of these it is — so when you hit one, diagnose it by walking the go-live checklist above rather than reading the error.

Propagation after publish or rollback

A publish or rollback takes effect for new visitors within about 10 seconds. If a just-published change or a just-activated campaign isn’t live yet, wait ~10 seconds and retry before assuming something’s wrong.

Last updated on