# Free Funnel with Deep Link

## The Problem

You are using Zellify for lead generation, onboarding, or quizzes — but you are not charging at this stage. There is no paywall in your funnel. After the user completes the flow, you want to route them to your mobile app or web product, and you need a way to identify them on the other side.

***

## How It Works

1. The end-user goes through your Zellify funnel (quiz, onboarding, personalization, etc.)
2. At the email collection step, the user submits their email. The **Registration Webhook** fires, delivering the email, quiz answers, and `app_user_id` to your backend
3. Your backend creates a user account using the email and `app_user_id`
4. The end-user reaches the final page (no paywall), which contains a **Deep Link Button** configured with `app_user_id`
5. The end-user taps the button, is routed to your app or web product, and the `app_user_id` identifies them

{% @mermaid-zoom/diagram content="sequenceDiagram
participant User as End-User
participant Zellify as Zellify
participant Backend as Your Backend
participant App as Your App / Web Product

```
User->>Zellify: Goes through funnel (quiz, onboarding, etc.)
User->>Zellify: Enters email
Zellify->>Backend: Registration Webhook<br>(email, answers, context.appUserId)
Backend-->>Backend: Creates user account with app_user_id
Zellify-->>User: Shows final page with Deep Link Button
User->>App: Taps Deep Link Button (carries app_user_id)
App->>Backend: Looks up user by app_user_id
Backend-->>App: Account and quiz data ready" %}
```

***

## What Zellify Handles

* Generates a unique `app_user_id` for every funnel visitor
* Fires the [Registration Webhook](https://docs.zellify.app/integrate-with-zellify/registration-webhook) with email, quiz answers, and `app_user_id` when the user submits their email
* Provides the Deep Link Button component, which interpolates `app_user_id` (and `email`) into any URL

***

## What You Need to Set Up

### 1. Configure the Registration Webhook

Since there is no payment in this flow, the Registration Webhook is your primary way to capture user data.

1. Go to Dashboard → Settings → Developers (<https://dash.zellify.app/settings?tab=developers>)
2. Click **Configure**
3. Enter your webhook endpoint URL
4. Save and securely store the webhook secret

For the full payload structure and signature verification, see [Registration Webhook](https://docs.zellify.app/integrate-with-zellify/registration-webhook).

### 2. Handle the Registration Webhook in your backend

Your backend receives the webhook payload containing:

* `email` — the visitor's email address
* `answers` — all quiz/form responses collected in the funnel
* `context.appUserId` — the unique `app_user_id`
* `context.funnelId`, `context.campaignId`, `context.experimentId` — attribution data

Create a user account with `email` and `app_user_id`. Store quiz answers if your product uses them for personalization.

### 3. Configure the Deep Link Button on your final page

Add a **Deep Link Button** component to the last page of your funnel. Configure it with `app_user_id` interpolation:

* **For mobile apps:** set the URL to your deeplink scheme (or a deferred deeplink provider URL). The app reads `app_user_id` from the deeplink to identify the user
* **For web products:** set the URL to your signup or login page with `app_user_id` and `email` as query parameters

### 4. Identify the user in your product

When the user arrives at your app or web product:

* Extract `app_user_id` from the deeplink or URL parameters
* Call your backend to look up the user by `app_user_id`
* The account and any quiz data stored from the Registration Webhook are already available

***

## The Linking Key

Without a paywall, there is no payment provider metadata involved. The linking is simpler:

1. **Registration Webhook** — `context.appUserId` in the payload, used by your backend to create the account
2. **Deep Link Button URL** — `app_user_id` interpolated into the link, carried to your app or web product

Your backend matches on `app_user_id` at both steps. No payment provider is in the loop.

***

## When to Use This

* **Lead generation funnels** — capture email and quiz data, then send users to your product
* **Onboarding-first flows** — run users through a personalized quiz before they see your app, so the in-app experience can be tailored from the start
* **Freemium acquisition** — get users into your free tier through a web funnel, then upsell inside the app later

If you later add a paywall to this funnel, the same `app_user_id` will flow into Stripe/Paddle metadata, and you can extend the integration using any of the other guides.

***

## Related

* [Registration Webhook](https://docs.zellify.app/integrate-with-zellify/registration-webhook)
* [Mobile App with Custom Backend](https://docs.zellify.app/integrate-with-zellify/integration-guides/mobile-app-custom-backend)
* [Web App with Signup Page](https://docs.zellify.app/integrate-with-zellify/integration-guides/web-app-signup-page)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zellify.app/integrate-with-zellify/integration-guides/free-funnel-deeplink.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
