> ## Documentation Index
> Fetch the complete documentation index at: https://docs.os.default.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Routing demo requests to a booked meeting with Default

> How to route a demo request form to a booked meeting with Default: the Form Submission or API trigger starts a workflow, Multi-Branch and Enrich Data qualify the request, Match Record finds the existing account, and Display Scheduler books the account owner or the next rep in a round-robin queue, with a Not booked branch and reminders for people who don't book or don't show.

A demo request is a form on your website where a buyer asks to talk to sales. Demo request routing
decides who that buyer meets, and books the meeting before they leave the page. Default qualifies
inbound demo requests, routes them, and books the meeting in 1 workflow: it checks the request,
finds the account the person belongs to, opens the right rep's calendar on the same page, and
follows up with people who don't book.

This page walks through the whole motion. The feature pages it links to hold the detail for each
step.

## Demo request routing at a glance

| Step | Feature or node | What it does |
| - | - | - |
| 1. Capture | **Form Submission** or **API** trigger | Starts a run with the form answers. |
| 2. Qualify | **Multi-Branch** and **Enrich Data** | Turns away personal email addresses, fills in company details, and checks fit. |
| 3. Match | **Match Record** | Finds the Salesforce Account or HubSpot Company for the email's domain. |
| 4. Route | **Display Scheduler** hosts | Matched people book with the account owner. Everyone else books with the next rep in a queue. |
| 5. Book | **Display Scheduler** | Opens the calendar on your page and continues on **Booked** when the person books. |
| 6. Recover | The **Not booked** branch | Follows up with people who leave without booking. |
| 7. Remind | Event reminders and the **Meeting Status** trigger | Sends reminders before the meeting and follows up on no-shows. |

## Demo request forms Default can route

Default routes the demo request form you already have, or one you create in Default. Every
option needs an email field, because a submission without an email address starts no workflow.

| Where the form lives | How the submission reaches Default | Setup guide |
| - | - | - |
| A form you create in Default | In **Forms**, select **Create new**, then **New form**. Default doesn't design or host the form: you place it on your site with the code from its **Install** tab, either **Embed this form** or **Use the SDK**, and style it yourself. | [Create a form in Default](/forms/your-forms#create-a-form-in-default) |
| A form coded into your page | The Pixel captures it once you add it with **Catalog forms**. | [Your forms](/forms/your-forms#add-forms-from-your-site) |
| A HubSpot form | The Pixel captures it. Set the form to show a thank-you message instead of redirecting, so the calendar has a page to open on. | [HubSpot forms](/forms/hubspot) |
| A Marketo form | The Pixel captures it and tells Marketo to skip the form's follow-up page. | [Marketo forms](/forms/marketo) |
| A Pardot form | Your page reports the submission with the Forms software development kit (SDK). The Pixel doesn't capture Pardot submissions on its own. | [Pardot forms](/forms/pardot) |
| Your own server | Your server calls the **API** trigger. The response carries a booking page link to show the person. | [Route and book through the API](/api/route-and-book) |

## Setup for demo request routing

| Requirement | Where | Why |
| - | - | - |
| The Pixel on the pages with the form, loading with the page | **Signals**. See [Set up the Pixel and Forms SDK](/pixel-sdk-setup). | It captures the submission and opens the calendar. The **API** trigger doesn't need it. |
| The form added to Default, with its email field mapped | **Forms**. See [Your forms](/forms/your-forms#map-form-fields). | Default only accepts submissions from forms it knows. |
| Salesforce or HubSpot connected | **Settings** → **Integrations**. See [Salesforce](/settings/integrations/salesforce) or [HubSpot](/settings/integrations/hubspot). | **Match Record** reads the account and its owner. |
| Each rep mapped to their CRM user | **Settings** → **Users**, then a member's **Integrations**. See [Users](/settings/users). | Default turns the account owner into the Default user whose calendar it shows, and writes the booked rep back as the CRM owner. |
| A queue of reps for new accounts | **Routing** → **Queues** and **Policies**. See [Queues](/queues) and [Policies](/policies#general). | The queue's policy picks the rep for people without an account. Include **Meetings** in the policy's **Assignment Units** so the queue counts these bookings. |
| A demo event hosted by the queue | **Scheduling** → **Event Types**. Create a **Team event** and add the queue as a host. See [Events](/events#hosts-and-attendees). | The calendar offers this event's times. |
| A connected calendar for every rep | Each rep's **My Calendar** settings, under **Calendars**. See [My Calendar](/settings/availability#calendars). | Default books on the rep's calendar. |
| Enrichment providers or a waterfall | [Waterfalls](/settings/configurations/waterfalls) | **Enrich Data** uses them. You don't need an account or API key with the provider. Default bills enrichment in credits. |

## Build a demo request routing workflow

This example routes a `Request a demo` form in Salesforce. People from an existing Account book
with the Account owner. Everyone else books with the next rep in a queue named `Inbound AEs`
through a Team event named `30-minute demo`.

<Steps>
  <Step title="Start from the demo request form">
    In **Workflows**, create a workflow and add the **Form Submission** trigger. Set
    **Connected Form** to `Request a demo`. For requests your server sends, use the **API**
    trigger with the same form instead.
  </Step>

  <Step title="Turn away personal email addresses">
    Add **Multi-Branch** with a branch named `Personal email` whose condition is the form's email
    field **is not work domain**. Connect that branch to a **Redirect** node that sends the visitor
    to a page asking for a work email. Checking before **Enrich Data** saves enrichment credits.
  </Step>

  <Step title="Enrich the request and check fit">
    On **Else**, add **Enrich Data** with **Enrichment target** set to **Both** and your waterfall
    as **Enrichment source**. Then add a second **Multi-Branch** with a branch named `Qualified`,
    for example where the enriched number of employees is at least 50. On its **Else**, add
    **Redirect** to a resources page. For more checks, see
    [Lead qualification](/lead-routing/qualification).
  </Step>

  <Step title="Find the existing account">
    On `Qualified`, add **Match Record**. Set **CRM** to **Salesforce** and **Record** to
    **Account**. Under **Match Details**, select **Edit**, choose the **Website** field and the
    **domain matches** operator, pick the email from the trigger, and choose **Domain from email**.
    Select **Save changes**. Under **Prioritize matched records by**, select **Add tiebreaker** and
    choose **Largest by employees**.
  </Step>

  <Step title="Book matched people with the account owner">
    On **Match**, add **Display Scheduler** and set **Event** to `30-minute demo`. Turn off
    **Use event hosts** and add the Account's **Owner ID** from the **Match Record** step as the
    host. Set **Fallback Host (Optional)** to a team lead, so the person still sees times when the
    owner has none.
  </Step>

  <Step title="Book everyone else with the queue">
    On **No Match**, add a second **Display Scheduler** with **Event** set to `30-minute demo`, and
    leave **Use event hosts** on. The event's queue host, `Inbound AEs`, picks the rep with its
    routing policy.
  </Step>

  <Step title="Record the booking in Salesforce">
    On each **Booked** branch, add **Create Record** with **Platform** set to **Salesforce** and
    **Record Type** set to **Lead**. In **Mapped Fields**, map the name, email, and company, and
    set **Owner ID** to the **User ID** of the **Primary host**, under **Scheduling** in the data
    picker.
  </Step>

  <Step title="Follow up with people who don't book">
    On the owner's **Not booked** branch, add **Send Slack Message** to the Account's **Owner ID**
    so the owner can reach out. On the queue's **Not booked** branch, add **Round-Robin** with
    `Inbound AEs` and a sequencing node that sends as **Latest assigned user**. See
    [Leads who didn't book](/scheduling/follow-up-unbooked-leads).
  </Step>

  <Step title="Test and publish">
    Select **Test**, fill in a sample with your own work email, and select **Run Test**. Then
    select **Publish** and check that the status next to the
    [deployment switch](/workflows#the-deployment-switch) reads **Live**. A new workflow goes live
    when you first publish it. If the status reads **Paused**, turn the switch on. Then submit the
    form on your live page with a test email, and the calendar opens on the page.
  </Step>
</Steps>

<Warning>
  A test books a real meeting on the rep's calendar, writes to Salesforce, and counts toward the
  queue's round robin. Use test records, and cancel test meetings in [Meetings](/meetings).
</Warning>

Keep the nodes before each **Display Scheduler** to the ones that decide the host, because the
person waits while they run. Put CRM writes, alerts, and other steps on the **Booked** and
**Not booked** branches. See
[How Default books a meeting from a form submission](/forms/scheduler).

A few refinements:

* **Send only current reps' accounts to their owner.** Add a condition to **Match Details** that
  the Account's **Owner ID** equals your account executives' queue, joined with **and**. Accounts
  owned by anyone else take **No Match** and go to the queue. See
  [Salesforce lead-to-account matching](/lead-routing/matching/salesforce-lead-to-account).
* **Avoid duplicate records.** Check for an existing Lead or Contact before **Create Record**, so a
  repeat request doesn't create a second record. See
  [Salesforce contact matching](/lead-routing/matching/salesforce-contacts).
* **Pick the right fallback.** When the owner has no Default user mapping, Default hosts the
  meeting with the **Fallback Host (Optional)** only when it is a member. A queue as the fallback
  covers an owner with no open times, not a missing mapping.

## Salesforce and HubSpot differences

| Step | Salesforce | HubSpot |
| - | - | - |
| Find the account | **Record** set to **Account**. Match the Account's **Website** with **domain matches**. | **Record** set to **Company**. Match the Company Domain Name property with **domain matches**. |
| Host on **Match** | The Account's **Owner ID** | The Company owner property |
| Rep mapping in **Settings** → **Users** | Salesforce User ID | HubSpot Owner ID |
| Record the person | **Create Record** for a **Lead**, with the owner in **Owner ID** | **Create Record** for a **Contact**, with the owner in the contact owner property. Match the contact first, so a repeat request doesn't create a second contact. |

For the HubSpot steps, see
[HubSpot contact-to-company matching](/lead-routing/matching/hubspot-contacts-to-companies) and
[HubSpot contact matching](/lead-routing/matching/hubspot-contacts).

## Use Rules of Engagement for fit and territory

When fit rules and territories decide who takes a demo request, a
[Rules of Engagement](/rules-of-engagement) ruleset can replace the fit check and the queue choice.
Rules that disqualify route to **No one**, and the others route to a queue, for example by region
or company size.

Place the Rules of Engagement node after **Enrich Data** and connect **Resolved** to
**Match Record**. On **No Match**, turn off **Use event hosts** in **Display Scheduler** and set the
host to **Latest resolved user**. On that scheduler's **Booked** branch, set **Owner ID** to
**Latest resolved user**, so the pick counts toward the queue when its policy includes **Objects**
in **Assignment Units**. The **Match** branch still books with the account owner, so its **Booked**
branch keeps **Owner ID** set to the **Primary host**.
Connect **Else** to your not-qualified path. See
[Qualify and route with Rules of Engagement](/lead-routing/qualification#qualify-and-route-with-rules-of-engagement)
for the ruleset and for the check when a queue has no active members.

## Reduce no-shows after a demo request is booked

* **Turn on reminders for the demo event.** New events start with reminders off. Open the event,
  go to **Messages**, then the **Reminders** tab, turn on **Enable reminders**, and select
  **Add reminder** for each one, for example 1 day and 15 minutes before. Reminders go by email
  and text message (SMS).
* **Give guests a way to reschedule.** Put reschedule and cancel links in the reminder, so a guest
  moves the meeting instead of skipping it.
* **Follow up on no-shows.** Reps mark a no-show by hand with **Mark as no-show**. A workflow that
  starts on the **Meeting Status** trigger with **No show** selected can alert the host and add the
  person to a sequence.

See [Reminders and no-shows](/scheduling/reminders-and-no-shows).

## Check that demo requests route and book

* **The run.** Open the workflow and select **Runs**, then open a run. It shows the path the
  request took, whether **Match Record** found an Account, and when the **Display Scheduler** node
  waited, booked, or continued without a booking. See [Run logs](/workflows/run-logs).
* **The queue's pick.** In **Routing**, select **Assignments**, then **Meeting assignments**, and
  open the row to see why the queue chose that rep. Meetings booked with the account owner don't
  appear here, because no queue picked them. See [Routing logs](/lead-routing/logs).
* **The meeting.** The booked meeting is listed in [Meetings](/meetings).
* **The CRM record.** The Lead or Contact shows the rep the person booked with as its owner.

## Troubleshoot demo request routing

| What you see | What to check |
| - | - |
| The form submits, but no calendar appears | Check that the workflow reads **Live**, that the submission has an email, and that the Pixel loads with the page. See [Troubleshoot form scheduling](/forms/scheduler#troubleshoot-form-scheduling). |
| Publishing fails because another workflow already responds to the visitor | 1 form can have only 1 live workflow with a **Display Scheduler** or **Redirect** node. Pause the other workflow or combine the 2. |
| A person from a known account books with the queue | **Match Record** took **No Match**. Check the run: the email may use a personal domain, or the Account's **Website** may be empty or on another domain. |
| The run fails at the owner's **Display Scheduler** with "Display Scheduler CRM user could not be mapped to a Default user" | Map the owner in **Settings** → **Users**, or set a member as **Fallback Host (Optional)**. |
| The calendar shows no times | Check that the hosts have connected calendars and open time in the event's availability. For the queue, check that it has active members who aren't out of office. |
| Queue bookings don't count toward the round robin | Include **Meetings** in the policy's **Assignment Units**. |

Related: [Lead routing software from Default](https://www.default.com/product/lead-routing-software) and [Sales scheduling software from Default](https://www.default.com/product/sales-scheduling-software)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.