# B2B Lead Enrichment (Apollo & CRM)

> Automatically enrich new inbound leads with Apollo.io data and route them based on company size.

**Building on the basics · about 20 minutes · 4 steps**

Catch a form submission carrying only a work email, look the company up in Apollo, and route the lead by headcount. Over 1,000 employees goes to an enterprise AE; everything else goes to the automated sequence.

Where the earlier recipes reacted to an app's own trigger, this one starts from a webhook. That means it works with any form that can send a web request, not only the ones Glow has a trigger for.

[Webhook](/build/triggers/webhook) → Enrichment call → [Conditions](/build/action-steps/conditions) → Your CRM

## What you will use

- A **Webhook** trigger, so any form can start the run.
- An enrichment call, whose response the routing then reads.
- A **Conditions** step, to split the lead by company size.

## Prerequisites

- A form that can send a web request to a URL (Typeform, Webflow, or your own site).
- A connected **Apollo.io** or **Clearbit** account.
- A connected **CRM** (e.g., Salesforce, HubSpot, or Pipedrive).

---

## Building the Workflow

### 1. The Trigger: Form Submission (Webhook)
Add a **Webhook** trigger to your canvas. Point your lead form (Typeform, Webflow, or your own site) at this URL, so every submission posts the visitor's email to the workflow.

### 2. The Enrichment: Apollo

Add an **Apollo.io** action step, or any other enrichment app you use. Open **Apps** in the dock, pick Apollo.io, and choose its organization enrichment action from the list.

Map the domain of the incoming email into the action's domain field. Instead of adding an extra text-splitting step, use [Data Transformation](/build/core-concepts/data-transformation) directly in the token:

```
{{ 1.email | extract_domain }}
```

Apollo returns a large record covering the company's headcount, industry, annual revenue and headquarters location. Run the step once and read its **Executions** tab to see the real field names before you map them.

### 3. The Logic: Condition Step (Routing)

Enterprise leads go to a senior AE; everything else goes to the automated sequence.
Add a **Conditions** step.

- **Enterprise:** `{{ 2.ret.estimated_num_employees }}` is `Greater Than` `1000`.
- **Everything else:** leave this to the step's **ELSE** output. You do not write a condition for it. ELSE fires only when none of the conditions above matched, so no lead can take both paths. A second condition testing for _fewer_ than 1,000 employees is not the same thing.

Apollo is an app step, so its output sits under `ret`. Insert the path with the Workflow data panel rather than typing it.

### 4. The Action: CRM Update

At the end of the Enterprise path, add a **Salesforce** (or HubSpot) step.
Select the "Update Lead" action.
Map the enriched Apollo data (Industry, Headcount, Revenue) into the corresponding fields in your CRM. Assign the lead owner to your Enterprise AE queue.

Off the **ELSE** output, add the step that handles SMB leads: the same CRM update with a different owner, or a step that drops them into a nurture sequence. Leave it unconnected and those leads simply stop there.

> **Pro-Tip:** If Apollo cannot find the company, you can add an **Error Path**
> to the Apollo step. Route the red error terminal to a **Glow AI Agent**
> equipped with a "Search the web" tool to scrape the prospect's company website
> as a fallback.

## Test and go live

### Send a controlled webhook

Use the Webhook trigger's test flow to send an address at a company domain you are allowed to look up. Keep the payload small, for example `{ "email": "ada@example.com" }`, and replace the address with a domain that produces a known enrichment result in your account.

### Confirm the enrichment shape

Open the enrichment step's stored output. Insert its employee-count field into Conditions from the Workflow data panel, then run once with data above your threshold and once with data below it. Confirm the first takes **Enterprise** and the second **ELSE**.

### Check the CRM

Open the destination record and confirm industry, headcount, revenue and owner match the enrichment result. If enrichment returns no company, verify the error path or your chosen fallback handles it without creating a misleading CRM record.

### Set the workflow Live

Replace the form's test URL with the Live webhook URL, set the workflow **Live**, and submit one controlled form entry. Confirm one run and one correctly routed CRM update.

## What's Next?

👉 **[Continue to AI Support Router with Tools →](/getting-started/cookbook/ai-customer-support-router)**

- Build the same routing logic step by step in the [Branching](/getting-started/tutorials/lead-routing-tutorial) tutorial.
- Clean and normalize inbound values with [Data Transformation](/build/core-concepts/data-transformation).
- Wire up the fallback path described above using [Error Handling & Retries](/build/core-concepts/error-handling).
