> ## 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.

# Following up on trade show and event leads with Default

> Follow up on trade show, conference, and webinar leads with Default: import the list into Salesforce or HubSpot, and a CRM Record Created trigger with a Condition starts a workflow that checks for existing records with Match Record, runs Enrich Data, routes each lead to the account owner or a Round-Robin queue, adds it to the rep's sequence, and sends a Slack message for the hottest leads.

Leads from a trade show, conference, or webinar usually arrive after the event as a list: badge scans
from the booth, or the people who registered for a webinar. Each person on the list needs an owner and
a first touch from that owner. In Default, you import the list into Salesforce or HubSpot, and a
workflow picks up each new record, checks it against the records you already have, enriches it, gives
it an owner, and starts the follow-up with that owner as the sender.

## Event lead follow-up at a glance

| Step | Feature or node | What it does |
| - | - | - |
| 1. Get the list in | Your CRM's import, then **CRM Record Created** with a **Condition** | Each imported record starts 1 run. The **Condition** keeps out records from other sources. |
| 2. Check what you have | **Match Record** on the person | People already in your CRM go to their current owner. See [Duplicate CRM records](/enrichment/duplicates). |
| 3. Enrich | **Enrich Data** | Adds title, company size, and other details the badge scan lacks. |
| 4. Match the account | **Match Record** on the Account or Company | Finds the company your team already works. |
| 5. Route | **Update Record**, or **Round-Robin** then **Update Record** | Gives account leads to the account owner and everyone else to the next rep in a queue. |
| 6. Follow up | A sequencing node, or **Send Slack Message** | Adds the lead to a sequence sent by the rep, or alerts the rep about the hottest leads. |

## Choose how the event list reaches Default

| Path | Use it when | What starts each run |
| - | - | - |
| Import the list into your CRM (recommended) | You get the list after the event as a file | **CRM Record Created**, with a **Condition** on the value your import sets |
| Zapier or an incoming webhook | Your badge scanner, event app, or webinar platform can send each lead as it's captured | **Incoming Webhook**. See [Send leads from a scanner, event app, or webinar platform](#send-leads-from-a-scanner-event-app-or-webinar-platform). |
| The Default API | Your own system or script sends the leads | **API** |

The CRM import is the most dependable path for a list. It uses your CRM's own import and its handling
of existing records, and every record it creates starts its own run. If your event or webinar tool
already creates records in your CRM through its own integration, the same trigger picks those records
up.

## Setup for event follow-up

| Requirement | Where | Why |
| - | - | - |
| Salesforce or HubSpot connected | **Settings** → **Integrations**. See [Salesforce](/settings/integrations/salesforce) and [HubSpot](/settings/integrations/hubspot). | The trigger and the CRM nodes read and write the CRM. |
| A value that marks the event on every imported row | Your CRM import | The trigger's **Condition** runs the workflow only for this list. |
| Enrichment providers or a waterfall | **Settings** → **Integrations** → **Enrichment**, and [Waterfalls](/settings/configurations/waterfalls) | **Enrich Data** uses them. Default supplies the data and bills it in enrichment credits, so you don't need an account or API key with the provider. |
| A queue with a routing policy | **Routing** → **Queues**. See [Queues](/queues) and [Policies](/policies). | **Round-Robin** picks the rep from it. Include **Objects** in the policy's **Assignment Units**. |
| The sequencing tool connected, and each rep mapped | **Settings** → **Integrations**, and **Settings** → **Users**. See [Send routed leads to sales sequences](/guides/routed-leads-to-sequences#setup-for-sequencing-from-default). | The sequencing node sends as the rep through their mapping. |
| Slack connected, and each rep mapped to Slack | **Settings** → **Integrations**. See [Slack](/settings/integrations/slack). | **Send Slack Message** reaches the rep by direct message. |

## Build the workflow for an imported Salesforce list

This example follows up on a trade show list imported as Salesforce Leads. People who are already
Contacts stay with their owner. Leads from a company with an Account go to the account owner, and the
rest go to the next rep in a queue named `Event follow-up`. People who asked for a demo at the booth
get a Slack alert to their rep, and everyone else joins the rep's Outreach sequence.

Before you import, add 2 columns to the file: `Lead Source` set to `Trade Show` on every row, and
`Rating` set to `Hot` for the people who asked for a demo at the booth.

<Steps>
  <Step title="Add the trigger">
    In **Workflows**, create a workflow and add the **CRM Record Created** trigger. Set **CRM** to
    **Salesforce** and **Record** to **Lead**. Add a **Condition**: `Lead Source` is `Trade Show`.
  </Step>

  <Step title="Check for an existing Contact">
    Add **Match Record**. Set **CRM** to **Salesforce** and **Record** to **Contact**, and under
    **Match Details**, match the Contact's **Email** to the Lead's **Email** from the trigger.

    On the **Match** branch, add **Send Slack Message**. Set **Recipients** to the Contact's
    **Owner ID** from the **Match Record** step, so the owner hears that their contact was at the
    event. To fold the Lead into the Contact, see
    [Merge a duplicate lead into the existing contact](/lead-routing/matching/salesforce-contacts#merge-a-duplicate-lead-into-the-existing-contact).
  </Step>

  <Step title="Enrich the lead">
    On the **No Match** branch, add **Enrich Data**. Set **Enrichment target** to **Both**,
    **Enrichment source** to your waterfall, and **Email / Domain (optional)** to the Lead's
    **Email** from the trigger.
  </Step>

  <Step title="Match the Account">
    Add **Match Record** with **CRM** set to **Salesforce** and **Record** set to **Account**. Under
    **Match Details**, choose **Website** and **domain matches**, pick the Lead's **Email** from the
    trigger, and choose **Domain from email**. Under **Prioritize matched records by**, add
    **Largest by employees** and then **Most recently modified**. See
    [Salesforce lead-to-account matching](/lead-routing/matching/salesforce-lead-to-account).
  </Step>

  <Step title="Give account leads to the account owner">
    On the **Match** branch, add **Update Record**. Set **Platform** to **Salesforce**,
    **Record Type** to **Lead**, and **Record to update** to the Lead's record ID from the trigger.
    Under **Fields**, add **Owner ID** and choose the Account's **Owner ID** from the
    **Match Record** step.
  </Step>

  <Step title="Round-robin the rest">
    On the **No Match** branch, add **Round-Robin** and set **Queue** to `Event follow-up`. Then add
    **Update Record** for the Lead and set **Owner ID** to **Latest assigned user**.
  </Step>

  <Step title="Alert the rep about the hottest leads">
    After each **Update Record**, add **Multi-Branch** with a branch named `Hot`, where the Lead's
    `Rating` from the trigger is `Hot`. On `Hot`, add **Send Slack Message**. Set **Recipients** to
    the rep on that branch: the Account's **Owner ID**, or **Latest assigned user**. In **Message**,
    type `{{` to insert the lead's name, title, and company.

    Hot leads skip the sequence, so the rep's own follow-up reaches them first.
  </Step>

  <Step title="Add everyone else to the rep's sequence">
    On each **Else** branch, add **Add to Outreach Sequence**. Set **Sequence** to
    `Trade show follow-up` and **Email** to the Lead's **Email** from the trigger. Set
    **Sending mailbox** to the Account's **Owner ID** on the account branch, and to
    **Latest assigned user** on the round-robin branch.
  </Step>

  <Step title="Test and publish">
    Select **Test**, fill in a sample Lead with your own email and `Lead Source` set to
    `Trade Show`, and select **Run Test**. Check the Lead owner in Salesforce and the prospect in
    Outreach. 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.
  </Step>
</Steps>

<Warning>
  A test performs real actions. It changes the Lead owner, counts the routing assignment, sends the
  Slack message, and enrolls the person in the sequence, which can send real emails. Use your own
  email and a test sequence.
</Warning>

<Tip>
  Import 2 or 3 test rows before the full list, and check their runs. Every row in the full import
  starts a run, so a wrong **Condition** or owner field affects the whole list.
</Tip>

To use another sequencing tool, swap the sequencing node. See
[Send routed leads to sales sequences](/guides/routed-leads-to-sequences).

## Salesforce and HubSpot differences for event lists

| | Salesforce | HubSpot |
| - | - | - |
| **Record** on the trigger | **Lead** | **Contact** |
| Value that marks the event | `Lead Source`, or a custom field such as `Event name` | A custom property such as `Event name` |
| People already in the CRM | An imported Lead can share an email with an existing Contact, so step 2 checks Contacts first. | HubSpot's import updates a contact that has the same email instead of creating one, so these people start no **CRM Record Created** run. |
| Match the company | Account **Website** **domain matches** the Lead's email | Company **Company Domain Name** **domain matches** the contact's email. See [HubSpot contact-to-company matching](/lead-routing/matching/hubspot-contacts-to-companies). |
| Owner field in **Update Record** | **Owner ID** on the Lead | **Contact owner** on the Contact |
| Sequencing node | Any supported tool, for example **Add to Outreach Sequence** | Any supported tool, or **Enroll in HubSpot Sequence** with **Contact** set to the contact from the trigger and **Sending HubSpot user** set to the rep |
| How new records reach Default | Salesforce pushes record changes to Default | HubSpot notifies Default when a contact is created |

To follow up with people the import updated instead of created, build a second workflow on
**CRM Record Updated** with a **Condition** of **Fields Updated** **contains any of** the field
that marks the event. In HubSpot, Default checks for changed records every few minutes. See
[Triggers](/workflows/triggers#crm-record-updated).

## Send leads from a scanner, event app, or webinar platform

Some badge scanners, event apps, and webinar platforms can send each lead as it's captured, directly by
webhook or through Zapier. Use this path when reps should follow up during the event:

1. **Start with the Incoming Webhook trigger.** Under **Connected Webhook**, select
   **Create new webhook**, and give the **Ingestion URL** and **Bearer secret** to the tool or to a
   Zap. Capture a sample, and under **Identity mapping**, map the email field to **Person email**.
   See [Connect Zapier to Default](/settings/integrations/zapier).
2. **Check the CRM first.** The person may not be in your CRM yet. Add **Match Record** for the
   Contact by the email in the request, and in Salesforce a second **Match Record** for the Lead on
   its **No Match** branch. Send people you find to their owner.
3. **Create the record instead of updating it.** On **No Match**, build steps 3 to 8 above, but use
   **Create Record** in place of **Update Record**. In **Mapped Fields**, map **Email**,
   **Last Name**, and **Company** from the request or from **Enrich Data**, since Salesforce needs
   the last 2 to create a Lead and later requests find the person by email. Set **Owner ID** to the
   Account's **Owner ID** or **Latest assigned user**.
4. **Mark hot leads from the request.** Branch on a field the tool sends, for example a demo request
   flag from the scanner app.

Each request starts 1 run. 2 requests for the same person seconds apart can both take **No Match**, so
keep your CRM's duplicate protection on, for example a Salesforce duplicate rule that blocks new Leads
with an existing email.

To send leads from your own system, or a list row by row from a script, start the workflow with the
**API** trigger instead. It needs a **Connected Form** that defines the fields each call sends. Each
API key can make 30 requests per minute, about 1,800 leads an hour. See
[Route and book through the API](/api/route-and-book).

## What to expect after you import an event list

* **1 run per new record.** An import of 300 Leads starts 300 runs. Each run uses enrichment credits
  for each provider that returns data, and each round-robin lead counts as 1 assignment in the queue.
* **Owners copied from the Account don't count toward round robin.** Only an owner that comes from a
  **Round-Robin** node counts as a queue assignment.
* **The owner changes in the CRM.** The Lead or contact owner moves from the person who ran the import
  to the rep the workflow chose.
* **Every decision is in the run.** Open the workflow, select **Runs** at the top, and open a run. The
  **Match Record** steps show which Contact or Account matched, and **Multi-Branch** shows why a lead
  took `Hot` or **Else**. See [Run logs](/workflows/run-logs).

## Troubleshoot event lead follow-up

| What you see | What to check |
| - | - |
| The import finished but no runs started | Check that the status reads **Live**, that the **Condition** value matches what the import wrote, and that the import created records rather than updating existing ones. In Salesforce, see the Change Data Capture limit on the [Salesforce page](/settings/integrations/salesforce#how-salesforce-changes-reach-default). |
| Runs started for leads that were not at the event | Make the **Condition** specific to this list, for example an `Event name` value per event instead of a shared `Lead Source`. |
| Leads from known companies went to round robin | A personal email such as `gmail.com` never matches an Account. Check the Account's **Website**, and add an **or** condition that matches the company domain from **Enrich Data**. |
| The sequencing node fails on the account owner branch | Map the Account owner in **Settings** → **Users** for both Salesforce and the sequencing tool. Default finds the owner's sender in the tool through those 2 mappings. |
| People already in your CRM received the sequence | In Salesforce, keep the Contact check from step 2 before routing. Check that no sequencing node sits on a **Match** branch for an existing person. |
| The Slack alert for a hot lead never arrived | Check that Slack is connected, that the rep is mapped to their Slack user in **Settings** → **Users**, and that the `Hot` branch matches the value in the file. |

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


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