If your CRM’s native lead routing feels like it was designed for a 2014 lead form, you are not alone. Most teams end up building routing in something more flexible, and Airtable has quietly become the default for that. It gives you relational tables, formulas, and automations without a full salesforce.com implementation.
I am Elene, and this is the recipe I give RevOps leads who want Airtable to be their routing engine for identified website visitors. Leadpipe handles identification, Airtable does the matching and assignment logic, and your CRM receives a pre-routed, pre-scored record. Setup is about 30 minutes. The lift in response times is the kind of change you can measure within a week.
What you will build
An Airtable base that receives every identified US B2B visitor, matches against your target account list, applies routing logic (round-robin, named-account, territory), assigns an owner, sets an SLA timer, and pushes the routed record into your CRM or Slack.
Prerequisites
| Requirement | Notes |
|---|---|
| Leadpipe account | Start free with 500 identifications |
| Airtable account | Team plan ($20/user/mo) minimum for automations |
| Zapier or Make account | Optional for the webhook bridge |
| Airtable admin | To build tables and automations |
| Time | 30 minutes |
This recipe is complementary to the Salesforce integration and Close CRM integration. You can run Airtable as the routing layer in front of either CRM, or as a standalone routing board for a small team.
The architecture
Leadpipe webhook (First Match)
│
▼
Zapier / Make bridge (lowercase domain, filter bots)
│
▼
Airtable base: "Visitor routing"
├─ Table: Visitors (incoming)
├─ Table: Accounts (target list)
├─ Table: Reps (territories)
└─ Automation: match + assign + SLA timer
│
▼
Downstream: CRM record / Slack ping / email alert
Airtable is the routing brain. Leadpipe is the event source. Your CRM or Slack is the destination. Keeping the three separate makes the routing logic debuggable and lets you change CRMs without rewriting anything.
Step 1: Build the Airtable base
Create a new base called “Visitor routing” with three tables.
Table 1: Visitors (incoming)
| Field | Type | Notes |
|---|---|---|
| Visitor ID | Autonumber | Primary |
| From Leadpipe | ||
| First name | Single line | |
| Last name | Single line | |
| Phone | Phone | |
| Company | Single line | |
| Domain | Single line | Lowercased, stripped |
| Industry | Single select | |
| Employees | Number | |
| Job title | Single line | |
| Seniority | Single select | IC, Manager, Head, Director, VP, C-level, Founder |
| Department | Single select | |
| LinkedIn URL | URL | |
| Country | Single select | |
| State | Single line | |
| City | Single line | |
| Last page | Single line | |
| Pages viewed | Long text | Comma-separated |
| Visit duration | Number | Seconds |
| Intent score | Number | 1-100 |
| Intent topics | Multiple select | |
| Return visitor | Checkbox | |
| Created at | Created time | |
| Matched account | Link to Accounts | Filled by automation |
| Assigned rep | Link to Reps | Filled by automation |
| SLA due | Formula | Created at + duration |
| SLA status | Formula | On track / At risk / Breached |
| Routed to CRM | Checkbox | Set by downstream automation |
Table 2: Accounts (target list)
| Field | Type |
|---|---|
| Name | Single line |
| Domain | Single line (primary) |
| Owner | Link to Reps |
| Tier | Single select: Tier 1 / Tier 2 / Tier 3 |
| Territory | Single select |
| Notes | Long text |
Populate this with your real target list. If you have a Salesforce or HubSpot account list, export it to CSV and import into Airtable. This is the table your routing logic reads against.
Table 3: Reps (territories)
| Field | Type |
|---|---|
| Name | Single line |
| Slack handle | Single line |
| Territory | Multiple select |
| Segment | Multiple select: SMB / Mid-market / Enterprise |
| Active | Checkbox |
| Assigned this week | Count (linked Visitors) |
The “Assigned this week” field powers round-robin by letting you sort by least-assigned.
Step 2: Feed Leadpipe webhooks into Airtable
You can either push directly via Airtable’s API from your own middleware, or use Zapier to bridge Leadpipe to Airtable. Both paths work. The Zapier path is faster to set up.
Zapier bridge
- New Zap. Trigger: Webhooks by Zapier, Catch Hook. Copy the URL, paste in Leadpipe’s webhook settings.
- Configure Leadpipe: Settings, Integrations, Webhooks, Add Webhook. Destination = the Zapier URL. Trigger: First Match. Fields: include everything.
- Formatter step in Zapier: lowercase and strip
www.from company_domain. - Filter step:
visit_durationgreater than 20,emaildoes not containgmail.com, yahoo.com, outlook.com. - Airtable action: Create Record in the Visitors table. Map every incoming field to the corresponding Airtable column.
Sample payload for reference (full schema in our webhook payload reference):
{
"email": "paula.fernandez@sendhaus.co",
"first_name": "Paula",
"last_name": "Fernandez",
"phone": "+1-646-555-0121",
"company_name": "Sendhaus",
"company_domain": "sendhaus.co",
"company_industry": "Marketing",
"company_employee_count": 60,
"job_title": "Founder",
"seniority": "Founder",
"department": "Exec",
"linkedin_url": "linkedin.com/in/paulafernandez",
"city": "Brooklyn",
"state": "New York",
"country": "US",
"page_url": "/pricing",
"pages_viewed": ["/", "/features", "/pricing"],
"visit_duration": 304,
"intent_score": 81,
"matched_topics": ["lead generation", "intent data"],
"return_visit": true
}
A GDPR reminder: for EU and UK visitors, Leadpipe defaults to company-level unless the visitor has consented. Your Airtable Visitors row for those regions will have Company and Domain filled in with blank Email, First name, Last name fields. That is correct under GDPR (see our GDPR-compliant visitor identification post).
Step 3: Build the routing automation
Inside the Airtable base, open Automations. Create a new automation.
Trigger: When a record is created in Visitors
Action 1: Find matching account
Find records. Table: Accounts. Condition: Domain equals {{Visitors.Domain}}. Limit: 1.
Action 2: Conditional logic
Branch based on whether a matching account was found.
Branch A: matched account. This is a target account.
- Update the current Visitor row. Set Matched account to the found Account record.
- Set Assigned rep to the account’s Owner.
- Set SLA due to Created at + 1 hour.
- Send a Slack or email ping to the rep.
Branch B: no match. Use routing rules.
- Run a script step. Input: the Visitor’s country, industry, employees, seniority.
- Output: the Rep to assign, based on these rules in order:
- Country in
DE, FR, NL, UK, IE→ pick EMEA rep with least assignments this week. - Country =
USAND employees over 500 → pick Enterprise rep. - Country =
USAND employees 50-500 → pick Mid-market rep via round-robin. - Else → SMB queue.
- Country in
Script for round-robin (paste into Airtable’s Run a script action):
const config = input.config();
const visitorId = config.visitorId;
const segment = config.segment;
const repsTable = base.getTable('Reps');
const query = await repsTable.selectRecordsAsync({
fields: ['Name', 'Segment', 'Active', 'Assigned this week'],
});
const eligible = query.records.filter(
(r) =>
r.getCellValue('Active') &&
(r.getCellValue('Segment') || [])
.map((s) => s.name)
.includes(segment)
);
eligible.sort(
(a, b) =>
(a.getCellValue('Assigned this week') || 0) -
(b.getCellValue('Assigned this week') || 0)
);
const chosen = eligible[0];
if (chosen) {
const visitors = base.getTable('Visitors');
await visitors.updateRecordAsync(visitorId, {
'Assigned rep': [{ id: chosen.id }],
});
output.set('assignedName', chosen.getCellValue('Name'));
}
- After the script, update SLA due based on intent: intent score over 70 → 1 hour SLA, 40-70 → 4 hour SLA, under 40 → 24 hour SLA.
Action 3: Notify the assigned rep
Send email or Slack message. Subject: “New visitor assigned: {Company} ({Intent score})”. Body includes Visitor fields and SLA due time. If you prefer Slack-native, pair this with the Slack visitor alerts recipe.
Action 4: Push to CRM
If your system of record is a CRM, this is where you hand off. Airtable’s Salesforce or HubSpot automation steps can push the routed Visitor to the CRM with the Assigned rep pre-filled. Our Salesforce integration and Pipedrive integration cover the mapping on the CRM side.
Step 4: The SLA view
Create a view on the Visitors table called “SLA dashboard”.
- Sort by SLA due ascending.
- Color rows: SLA status = Breached red, At risk yellow, On track green.
- Group by Assigned rep.
This is the view your sales manager opens on Monday morning. Anything red is a failure of your response SLA, and the person to the right of it is who owes an answer.
Formula for SLA status:
IF(
{Routed to CRM} = 1,
"Closed",
IF(
NOW() > {SLA due},
"Breached",
IF(
NOW() > DATEADD({SLA due}, -15, 'minutes'),
"At risk",
"On track"
)
)
)
What this looks like in practice
Paula, founder of Sendhaus, a 60-person marketing agency in Brooklyn, lands on your pricing page at 11:04 am. She spends 5 minutes, looks at your case studies page, then bounces.
- Leadpipe identifies her. Webhook fires.
- Zapier normalizes the domain and creates a row in Airtable: Sendhaus, sendhaus.co, 60 employees, Marketing, Paula Fernandez, Founder.
- Airtable automation runs. No match in Accounts (Sendhaus was not on the target list). Routing script: Country=US, employees=60, segment=SMB. Picks the SMB rep with the fewest assignments this week, let’s say Rena.
- SLA due is set to 12:04 pm (intent score 81, so one-hour SLA).
- Rena gets a Slack ping and an email: “New visitor assigned: Sendhaus (Intent 81). Pricing page, 5 minutes, founder. SLA 12:04 pm.”
- Rena clicks the LinkedIn link in the ping, sends a one-line Loom at 11:29 am referencing Paula’s pages viewed. Paula replies at 2:14 pm. Meeting booked for Thursday.
Twenty-five minutes from the pixel to a booked meeting. That is what a routing layer buys you when it is actually used.
Troubleshooting and edge cases
Round-robin imbalance. The “Assigned this week” field resets how? It does not, automatically. Add a scheduled automation (every Monday at midnight) that clears Assigned this week for all reps. Otherwise the assignment drifts toward whoever joined last.
Territories overlap. If a visitor matches multiple segment criteria (US mid-market with over 500 employees), your script needs a priority order. The example script handles this top-to-bottom. Put named-account match first, then enterprise, then mid-market, then SMB.
Out-of-office reps. Add an Active checkbox on the Reps table. Flip it off for vacations. The script filters on Active, so unavailable reps are skipped.
Duplicate rows for return visitors. If you do not want a new row per return visit, change Step 2’s Create Record action to Find Record (by Domain) with a Paths step, same pattern as the Notion watchlist recipe.
GDPR EU visitors without a named contact. Your automation should tolerate an empty Email and First name. Route the account (based on Domain and firmographics) and notify the rep that it is a company-level identification. Still actionable.
Airtable rate limits. 5 requests per second per base. For high-volume sites, batch writes in your middleware or skip Airtable as the real-time landing and let it ingest a 5-minute rollup instead.
SLA timers look broken. Airtable’s NOW() function updates lazily, not continuously. If your SLA view looks stale, click into the view, and it will recompute. For real-time accuracy, pair with a scheduled automation that runs every 15 minutes to refresh.
Extending the recipe
- Pair Airtable routing with Slack visitor alerts so the Slack ping in Step 3 has the full payload and a “Claim this lead” button.
- Push routed records into Salesforce, Close, or Attio so Airtable is the routing brain and the CRM is the system of record.
- Add Clay enrichment upstream of Airtable to pre-enrich phone numbers and revenue before the routing decision runs.
- If you already run n8n instead of Zapier, see the Leadpipe n8n automation recipe for the same bridge pattern.
- Use the Leadpipe MCP server to let Claude query the Airtable base and suggest the next action for each row. An AI pair SDR on top of a routing board.
Why Airtable works better than your CRM’s native routing
CRM routing was designed around form fills: one lead at a time, a small ruleset, and no live scoring. Modern routing needs to read identified-visitor intent, check against a target list, apply territory logic, set SLAs, and do all of it in seconds. Airtable handles that with normal human-editable tables and scripts, which matters because the RevOps person who maintains the logic is rarely a developer.
The best routing engine is the one your RevOps lead can read without opening a help doc.
Every plan ships with the same identity graph, 23 REST endpoints, webhooks, and a 27-tool MCP server. Start in 5 minutes →