> For the complete documentation index, see [llms.txt](https://help.distro.so/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.distro.so/routing/form-router.md).

# Form routing

Turn a website form submission into a meeting with the right teammate. A Form Router checks the prospect's answers and CRM relationships, applies your routing rules, and shows a scheduler or the appropriate redirect.

**Workspace admins configure routers.** Start with a [mapped form](https://help.distro.so/routing-forms/overview), a [team](https://help.distro.so/teams/create-a-team) with calendar availability, and an [event type](https://help.distro.so/event-types/create-an-event-type). Connect your CRM if you want ownership matching or CRM updates.

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQA3GQNrIYVrPQ90NBwRa%2Fuploads%2FJ2S5Ws2GDPR2Wum1u4my%2Fform-router-canvas-dark.png?alt=media&#x26;token=895ba167-adf2-4ff5-87c5-5d2580b35af7" alt="Northstar Labs&#x27; Website demo requests router in dark mode, showing the submission, routing rules, scheduler, outcome branches, and CRM actions."><figcaption><p>The canvas shows your saved draft. New submissions use the active version until you publish changes.</p></figcaption></figure>

### Find the right place

| I want to…                                   | Open…                                                                                                                                                                                        |
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Create or edit a router                      | **Form routing → Form Routers**                                                                                                                                                              |
| Map website fields                           | **Form routing → Forms**                                                                                                                                                                     |
| Match an existing CRM owner                  | **Ownership Rules**, then add the rule to **Lead Routing**                                                                                                                                   |
| Qualify prospects and distribute meetings    | **Distribution Rules**, then add the rule to **Lead Routing**                                                                                                                                |
| Install, review versions, or inspect changes | The router's **three-dot menu → Install router, Versions, or Audit**                                                                                                                         |
| Duplicate a router                           | **Three-dot menu → Duplicate**. Copies have no active version and can share referenced rules, forms, and event types. See [Router versions](https://help.distro.so/routing/router-versions). |
| Investigate a submission                     | **Routing Logs**, or **three-dot menu → Routing logs**                                                                                                                                       |

The Form Routers list offers table and card views. Search by name or configuration, filter by **Form**, **Event type**, or **Routing mode**, and save filters as a [view](https://help.distro.so/views). Table metrics summarize the last 30 days; use reports for deeper analysis.

### Create and configure a router

{% stepper %}
{% step %}

#### Create the router

Open **Form routing → Form Routers → New Form Router**. Enter a **Form router name** and choose **Create Form Router**.

Click a canvas card to open its settings. Save each panel before moving on. You can pan the canvas, use **+ / −** to zoom, or press **0** to fit the whole flow. These controls change only your view.
{% endstep %}

{% step %}

#### Connect your form

Open **Form Submission** and choose the **Connected form**. Check its selector and field mappings, especially email and fields used by your rules.

Enable **Normalize email aliases** if `alex+demo@example.com` should be treated as `alex@example.com`. Click **Save**.

Mapping a form does not install Distro on the website. Follow [Form mapping](https://help.distro.so/routing-forms/overview) if the form is missing or its fields have changed.
{% endstep %}

{% step %}

#### Set rule priority and distribution

Open **Lead Routing**. Add ownership rules for existing CRM relationships, then distribution rules for qualified prospects who still need a host.

Each list runs from top to bottom. Drag rows or use **Alt + arrow keys** to change priority. Put specific rules before broader fallback rules. Click a rule on the canvas to edit its conditions and assignment settings. Conditions can also use configured [enrichment data](https://help.distro.so/integrations/enrichment).

Choose **Strict round robin** to select a host before showing times, or **Flexible distribution** to offer times across eligible teammates and select a host for the chosen slot. Save the panel.

See [Ownership rules](https://help.distro.so/routing-rules/ownership-rules), [Distribution rules](https://help.distro.so/routing-rules/distribution-rules), and [Distribution methods](https://help.distro.so/routing/form-router/distribution-method).
{% endstep %}

{% step %}

#### Configure the meeting and outcomes

Open **Display Scheduler** to choose the event type and review meeting settings. A matched rule's event-type override takes precedence over the router default.

Configure the outcome cards for **Booking confirmation**, **Unqualified redirect**, and **No availability**. They represent different outcomes: a completed booking, a prospect who cannot be routed, or no available meeting time. Leave a URL blank to use the default experience for that outcome.

Save your changes. Make sure prospects who should qualify have an appropriate distribution rule; an unqualified redirect is not a fallback team.
{% endstep %}

{% step %}

#### Add optional validation and CRM actions

Use the **+** on the connector after **Form Submission** and choose **Email validation**. It inserts a ZeroBounce card and opens its settings. Connect ZeroBounce before enabling validation. See [Email verification](https://help.distro.so/integrations/email-verification).

Use the **+** beside **Display Scheduler** for CRM actions after routing, or the **+** below **Booking confirmation** for CRM actions after booking. Click an existing action card to edit it. Available actions depend on your connected CRM.

An unsaved action disappears if you cancel. Save the action to keep it in the draft.
{% endstep %}
{% endstepper %}

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQA3GQNrIYVrPQ90NBwRa%2Fuploads%2FhTUr9iEyfCeCFT3tCaQH%2Flead-routing-dark.png?alt=media&#x26;token=7f874abb-1b66-4fdd-90b3-a06bbad1c795" alt="Lead Routing settings in dark mode with ownership priority, distribution priority, and the distribution method selector."><figcaption><p>Set rule priority separately from the distribution method.</p></figcaption></figure>

### When CRM actions run

| Stage             | What happens                                                                                                                                                             |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **After routing** | Supported CRM records are created or updated after rule evaluation, alongside the scheduler or unqualified redirect. Email-validation rejections skip these actions.     |
| **After booking** | Meeting creation runs after a successful booking. Connected CRMs also sync mapped meeting fields.                                                                        |
| **Owner updates** | Configured on each rule. Ownership and strict-distribution updates can run during routing; flexible-distribution updates can run after booking, once a host is selected. |

The side branches show when actions run. They do not add an extra step for the prospect to complete. See [HubSpot](https://help.distro.so/crm/hubspot) or [Salesforce](https://help.distro.so/crm/salesforce) for supported records and mappings.

### Test, publish, and install

{% hint style="info" %}
**Save updates the draft. Publish activates it.** The header can show **Active v1 · Draft changes** while the website still uses v1. The **Publish** confirmation asks you to activate the saved changes.
{% endhint %}

{% stepper %}
{% step %}

#### Test the saved draft

Choose **Test route**, enter synthetic form answers and any CRM inputs, then select **Run simulation**. Check an existing CRM relationship, a new qualified prospect, and an unqualified prospect. Review the resulting rule, assignment, and warnings.

This is a safe simulation: it does not change submissions, credits, assignment history, routing logs, CRM records, calendar events, or bookings. It does not query live integrations or availability, so it cannot confirm that the website integration works.
{% endstep %}

{% step %}

#### Publish the version

Choose **Publish** and confirm activation when the saved configuration is ready. New submissions use that version. Attempts already in progress keep their starting version.

Use **three-dot menu → Versions** to inspect history or roll back. See [Router versions](https://help.distro.so/routing/router-versions) for shared settings and pinned installations.
{% endstep %}

{% step %}

#### Install and check the published website

Open **three-dot menu → Install router**. Choose the **Installation method** and **Form provider**, then copy the generated code for your router and connected form.

Follow the provider guide linked in the dialog. On the published website, check a qualified and an unqualified submission, the scheduler, and the original form destination. A real test can create records or send configured notifications; use controlled test details.
{% endstep %}
{% endstepper %}

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQA3GQNrIYVrPQ90NBwRa%2Fuploads%2FgNey9n2vei3TcfoZGsMR%2Ftest-route-dark.png?alt=media&#x26;token=6be3001c-208b-440e-8d35-63f183b06e2e" alt="Test route dialog in dark mode with synthetic form answers, CRM inputs, and the safe-simulation notice."><figcaption><p>Test route checks the saved configuration without creating real routing or booking records.</p></figcaption></figure>

| Installation method         | Use it for                                              |
| --------------------------- | ------------------------------------------------------- |
| **After a form → popup**    | Opening the scheduler after a website form submission.  |
| **After a form → embedded** | Showing the scheduler in a page container.              |
| **Button / in-app**         | Starting routing from your own button or application.   |
| **Direct URL**              | Starting routing from a link with the required answers. |

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQA3GQNrIYVrPQ90NBwRa%2Fuploads%2FS08MTIqvafdxc2keDGhG%2Finstall-router-dark.png?alt=media&#x26;token=6a56870b-3909-4e21-8ebc-14ca67223fba" alt="Install Router dialog in dark mode showing installation method, form provider, and the generated website snippet."><figcaption><p>Copy your own router's snippet; the screenshot is an example from the Northstar Labs test workspace.</p></figcaption></figure>

Installation differs by provider. Start with [Form mapping and installation guides](https://help.distro.so/routing-forms/overview). For custom HTML forms, Distro also attempts a JSON POST to the original form action; verify that your endpoint accepts it.

### Review results and troubleshoot

| What you see                              | What to check                                                                                                                                                                      |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A change is missing on the website        | Save the panel, publish the version, and check whether the installation is pinned to an earlier version.                                                                           |
| A prospect is unqualified                 | Check mapped answers, email validation, rule order, and eligible hosts in **Routing Logs**.                                                                                        |
| The wrong team or host is offered         | Check ownership priority before distribution rules, the matched rule's team, weights, and distribution method.                                                                     |
| The scheduler has no times                | Check the effective event type, host calendars, availability, buffers, and vacation settings. Use [Availability preview](https://help.distro.so/settings/calendar-troubleshooter). |
| The form submits but Distro does not open | Check the provider-specific snippet, form selector, published page, and original form submission behavior.                                                                         |

Use [Routing Insights](https://help.distro.so/reporting/reporting/routing-insights) for conversion and routing gaps, and [Booking Insights](https://help.distro.so/reporting/reporting/booking-insights) for meeting outcomes. **Audit** records configuration changes; **Routing Logs** explains individual submissions.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://help.distro.so/routing/form-router.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
