---
id: "tools/funnels/deploying-funnels"
title: "Deploying Funnels"
description: "Once you've created and published your funnel, you can deploy it by sharing the generated URL with your users. Funnels are hosted by RevenueCat and accessible via unique URLs for each environment."
permalink: "/docs/tools/funnels/deploying-funnels"
slug: "deploying-funnels"
version: "current"
original_source: "docs/tools/funnels/deploying-funnels.mdx"
---

> **AI agents:** This is the Markdown version of a RevenueCat documentation page. For the complete documentation index, see [llms.txt](https://www.revenuecat.com/docs/llms.txt).

Once you've created and published your funnel, you can deploy it by sharing the generated URL with your users. Funnels are hosted by RevenueCat and accessible via unique URLs for each environment.

## Publishing your funnel

Before you can deploy a funnel, it must be published. To publish:

1. Open your funnel in the Funnel Editor
2. Ensure you have at least one step configured
3. Click **Publish** in the top-right corner
4. Confirm the publish action

Once published, your funnel will be available via shareable URLs. You can continue editing after publishing—changes will be saved as drafts until you publish again.

:::info\[Inactive vs. Published]

- **Inactive**: Your work-in-progress funnel. Changes are automatically saved but not accessible via public URLs.
- **Published**: Your live funnel that's accessible via shareable URLs. Users will see the published version when they access your funnel URL.
  :::

## Getting your funnel URL

After publishing, you can access your funnel URLs:

1. Open your published funnel in the Funnel Editor
2. Click **Share URL** in the top-right corner
3. You'll see your funnel's shareable URL. For **Stripe Billing** and **RevenueCat Billing** apps, separate **Production** and **Sandbox** URLs are available. For **Paddle** apps, you'll see a single URL for the connected app's environment (see the note below).

### Production vs. Sandbox

| Environment | Description | Use case |
| :---------- | :---------- | :------- |
| **Production** | Your live funnel with real payment processing | Share with actual customers |
| **Sandbox** | Test environment with test payment processing | Testing, QA, internal review |

:::warning\[Environment selection]
Make sure you're using the correct environment URL. Production URLs process real payments, while Sandbox URLs are for testing only.
:::

:::info\[Paddle funnels have a single Share URL]
Paddle uses separate apps for its sandbox and live environments, so a funnel built on a Paddle app has only one Share URL, for that app's environment. The Production and Sandbox split above applies to **Stripe** and **RevenueCat Billing**, where a single account covers both modes.

To test a funnel that uses Paddle, build it on your Paddle **sandbox** app config (with products and an Offering imported from your Paddle sandbox account), then open **Share URL** and complete checkout with [Paddle's test cards](https://developer.paddle.com/concepts/payment-methods/credit-debit-card). See [Configuring Payments](https://www.revenuecat.com/docs/tools/funnels/configuring-payments) and [Paddle Billing](https://www.revenuecat.com/docs/web/integrations/paddle#testing-in-sandbox).
:::

## Funnel URL format

Funnel URLs follow this format:

```
https://signup.cat/{link_id}/{app_user_id}
```

The URL includes:

- **Base domain**: RevenueCat's hosted funnel domain (or your custom domain, if configured).
- **Link ID**: Unique identifier for your funnel.
- **App User ID**: Path for specifying the user visiting the funnel. If an App User ID is not provided, an anonymous user will be created.

:::info\[Funnels with authentication steps]
If your funnel includes an [authentication step](https://www.revenuecat.com/docs/tools/funnels/creating-funnels#authentication-steps), you do not need to provide an App User ID in the URL. The authentication step will collect the user's identity and attach it to the session automatically.
:::

:::info\[Apple Pay & Google Pay on custom Funnel domains]
RevenueCat automatically registers `signup.cat`, as well as any [custom Funnel domain](#custom-domains) you've configured, with your Stripe account once the domain is verified — so Apple Pay and Google Pay work out of the box on both RevenueCat-hosted and custom funnel domains.

If Apple Pay or Google Pay don't appear after your custom domain is verified, see the [troubleshooting steps](https://www.revenuecat.com/docs/web/web-billing/payment-methods#configuring-apple-pay--google-pay) — the RevenueCat Stripe app may have a pending permission update that needs to be approved.
:::

:::info\[Redemption Links]
If your app has Redemption Links enabled, anonymous users who purchase on the web can redeem their purchase in-app using the Redemption Links flow. [Learn more about Redemption Links](https://www.revenuecat.com/docs/web/redemption-links).

If your app does not have Redemption Links enabled, **Funnels cannot be used with anonymous users**.
:::

## Custom domains

By default, your funnels are hosted at `signup.cat`. You can configure a custom domain so that your funnel URLs use your own domain instead (e.g., `onboarding.example.com`).

Custom domains are configured at the project level in **Project settings → Domains**, and apply to all funnels in that project.

### Setting up a custom domain

1. Navigate to **Project settings → Domains**
2. Select **Use a custom domain**
3. Enter your domain name (without protocol, e.g., `onboarding.example.com`)
4. Click **Save changes** — the dashboard will display the DNS records you need to configure

### Configuring DNS records

After saving, you'll see a table of DNS records to add to your DNS provider. The table shows:

| Column | Description |
| :----- | :---------- |
| Type | The DNS record type (e.g., CNAME) |
| Name | The hostname to configure at your DNS provider |
| Value | The value to point the record to |

Copy these values and create the corresponding records with your DNS provider. DNS changes can take some time to propagate globally.

### Verifying your domain

Once you've configured your DNS records:

1. Click **Verify configuration** in the RevenueCat dashboard
2. RevenueCat will check that your DNS records are correctly configured
3. The domain status badge will update to show the verification state

| Status | Description |
| :----- | :---------- |
| Pending verification | DNS records have been saved but verification hasn't started yet |
| Verification in progress | RevenueCat is actively checking your DNS configuration |
| Verified | Your custom domain is active and ready to use |
| Verification failed | DNS records could not be verified — check your configuration and retry |

If verification fails, review your DNS records for typos and ensure they've had time to propagate, then click **Retry verification**.

:::info\[Funnel share URLs with custom domains]
Once your custom domain is verified, the **Share URL** dialog in the Funnel Editor will automatically show URLs using your custom domain. RevenueCat will also register the verified domain with your connected Stripe account, so Apple Pay and Google Pay become available on your custom domain without any extra setup.
:::

## URL parameters

Funnels support two types of URL parameters: UTM parameters and custom parameters.

### UTM parameters

UTM parameters (such as `utm_source`, `utm_medium`, `utm_campaign`, etc.) are automatically processed by RevenueCat when included in your funnel URLs. You don't need to configure them in your funnel settings—simply include them in the URL when sharing your funnel:

```
https://signup.cat/{link_id}/?utm_source=email&utm_medium=newsletter&utm_campaign=spring2024
```

These parameters are automatically tracked in analytics and can be used for filtering and segmentation in your funnel analytics dashboard, or as conditions for the branching logic in your funnel. However, it's your responsibility to include these parameters in the URLs you share—RevenueCat will process them automatically once they're present.

### Custom parameters

Custom URL parameters can be used for branching logic and personalization within your funnel. Unlike UTM parameters, custom parameters must be configured in your funnel settings before they can be accessed.

To configure custom parameters:

1. Open your funnel in the Funnel Editor
2. Go to **Settings** → **Parameters**
3. Add parameters with their types (string, number, boolean, or string array)

Once configured, you can include them in your funnel URL and access them in your funnel's branching logic:

```
https://signup.cat/{link_id}/?custom_param=value
```

Custom parameters are also forwarded to your analytics integrations as `page_url_parameters` on funnel events sent to Amplitude, Mixpanel, and Segment, so you can segment and report on them downstream. See [Amplitude](https://www.revenuecat.com/docs/integrations/third-party-integrations/amplitude#funnels-events), [Mixpanel](https://www.revenuecat.com/docs/integrations/third-party-integrations/mixpanel#funnels-events), and [Segment](https://www.revenuecat.com/docs/integrations/third-party-integrations/segment#funnels-events) for sample payloads.

## Updating published funnels

You can update your published funnel at any time:

1. Make your changes in the Funnel Editor
2. Changes are automatically saved as drafts
3. When ready, click **Publish** again to make changes live

:::warning\[Live updates]
When you publish changes, they immediately become live. Users accessing your funnel URL will see the updated version. There's no rollback mechanism, so test thoroughly before publishing.
:::

### Version history

The Funnel Editor shows when your funnel was last published. You can compare the current draft with the published version using the version picker in the editor header.

## Next steps

- Learn how to [analyze funnel performance](https://www.revenuecat.com/docs/tools/funnels/analyzing-funnels)
- Understand [Redemption Links](https://www.revenuecat.com/docs/web/redemption-links) for linking web purchases to in-app accounts
- Review [payment configuration](https://www.revenuecat.com/docs/tools/funnels/configuring-payments) for Funnels setup
