Airtable + Notion: client onboarding on autopilot
You close a lead, then the real work starts. Copy details into Airtable, spin up a Notion project, send a confirmation email, post an update in Slack, double-check the booking, then chase a payment that “should already be in the system.”
This is where Airtable Notion onboarding gets messy for agency owners and consultants. Ops leads feel it too, because they’re the ones untangling statuses and reminders when things drift out of sync.
This workflow connects your lead intake, booking updates, reminders, and paid onboarding so records stay aligned and clients move forward without you babysitting every handoff.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Airtable + Notion: client onboarding on autopilot
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Data", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Enrich with Clearbit (Option.."]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Create Airtable Record"]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Create Notion Project Page"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send Slack Notification"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Log Error to Slack"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Trigger1"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Success1"]
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Error1"]
n30@{ icon: "mdi:message-outline", form: "rounded", label: "Send Auto-Reply Email", pos: "b", h: 48 }
n10 --> n11
n10 --> n18
n18 --> n15
n16 --> n10
n30 --> n17
n12 --> n13
n14 --> n30
n13 --> n14
n11 --> n12
end
subgraph sg1["Flow 2"]
direction LR
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Payment Data", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Mark Lead as Paid in Airtable"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Create Onboarding Checklist .."]
n22["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Send WhatsApp Welcome (Optio.."]
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Notify Slack - Payment"]
n24["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Update Financial Tracking"]
n25["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Trigger2"]
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Success2"]
n27["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Error2"]
n31@{ icon: "mdi:message-outline", form: "rounded", label: "Send Welcome Email", pos: "b", h: 48 }
n25 --> n19
n31 --> n22
n31 --> n23
n31 --> n24
n19 --> n20
n19 --> n27
n23 --> n26
n24 --> n23
n20 --> n21
n22 --> n23
n21 --> n31
end
subgraph sg2["Flow 3"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Trigger"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Booking Data", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Update Airtable Lead Record"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Update Notion Page"]
n4@{ icon: "mdi:location-exit", form: "rounded", label: "Create Google Calendar Event", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Notify Slack"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Error"]
n28@{ icon: "mdi:message-outline", form: "rounded", label: "Send Pre-Call Survey Email", pos: "b", h: 48 }
n0 --> n1
n3 --> n4
n1 --> n2
n1 --> n9
n28 --> n8
n2 --> n3
n4 --> n28
end
subgraph sg3["Schedule Daily Check Flow"]
direction LR
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Daily Check", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Get Upcoming Calls (24h)"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Mark Reminder Sent"]
n29@{ icon: "mdi:message-outline", form: "rounded", label: "Send 24h Reminder", pos: "b", h: 48 }
n29 --> n7
n5 --> n6
n6 --> n29
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5 trigger
class n10,n19,n1 decision
class n12,n13,n20,n21,n24,n2,n3,n6,n7 database
class n11,n16,n17,n18,n22,n25,n26,n27,n0,n9 api
classDef customIcon fill:none,stroke:none
class n11,n12,n13,n14,n15,n16,n17,n18,n20,n21,n22,n23,n24,n25,n26,n27,n0,n2,n3,n8,n9,n6,n7 customIcon
The Problem: Client Onboarding Breaks at the Handoffs
Client onboarding usually isn’t “hard.” It’s just relentless. A lead comes in from a form, then you retype the same data into Airtable and Notion. A booking happens, but the status doesn’t change everywhere, so someone sends the wrong email. A call is tomorrow, yet no reminder goes out because it relies on a human noticing. And once payment lands, the welcome kit still doesn’t get sent because it’s stuck behind a Slack message you meant to post “later.” Later turns into never. Honestly, this is where good leads quietly slip away.
None of these alone is the problem. Together, they are.
- You end up doing the same data entry in two places (and fixing it when one copy is wrong).
- Status updates drift between “Booked,” “No-show,” and “Paid,” which means your team works from stale information.
- Reminder emails go out inconsistently, so no-shows stay higher than they should be.
- Payment-to-onboarding takes hours because it depends on someone noticing and kicking off the checklist.
The Solution: One Workflow for Leads, Bookings, Reminders, and Paid Onboarding
This n8n workflow runs four connected automations that usually live in separate tools and separate people’s heads. It starts with webhooks from your form, scheduler, and payment provider. When a lead arrives, the workflow validates the submission, optionally enriches the email with Clearbit, then creates matching records in Airtable and Notion so your pipeline and delivery workspace stay in sync. When a booking comes in, it updates the lead status, revises the Notion record, creates a Google Calendar event, emails a pre-call survey, and posts the update to Slack. Each day, a scheduled check finds calls happening in the next 24 hours and sends reminders automatically. When payment succeeds, the workflow marks the lead as paid, generates a Notion onboarding checklist, sends a welcome email (and optional WhatsApp message via Twilio), logs financial info in Airtable, and notifies Slack.
The workflow begins with three webhooks (lead intake, booking, payment) plus a daily schedule. In the middle, it keeps Airtable and Notion aligned while email, calendar, and Slack happen automatically. The final result is a client who feels guided, and a team that isn’t chasing crumbs across tabs.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you book 5 calls a week and close 2 into paid clients. Manually, you might spend about 10 minutes creating records in Airtable and Notion per lead (50 minutes), another 10 minutes per booking to update statuses, add a calendar event, and send the survey (50 minutes), plus 5 minutes per call to remember and send reminders (25 minutes). That’s roughly 2 hours weekly, not counting payment follow-ups and welcome kits. With this workflow, you mainly maintain templates and glance at Slack. The webhooks handle the rest, and the daily reminder run happens on its own.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for lead pipeline and reminders tracking
- Notion to create projects and onboarding checklists
- Gmail to send auto-replies, surveys, reminders
- Google Calendar to create and manage booked calls
- Slack for team notifications and error logging
- Clearbit API key (get it from your Clearbit dashboard)
- Twilio credentials (get them from Twilio Console) for WhatsApp
Skill level: Intermediate. You will connect accounts, paste webhook URLs into your tools, and update Airtable/Notion IDs.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Lead intake lands instantly. A form submission hits the lead webhook, gets validated, and (optionally) enriched via Clearbit before creating records in Airtable and Notion.
Bookings update the pipeline. When your scheduler fires a booking webhook, the workflow checks booking details, updates the lead in Airtable, revises the matching Notion record, then creates a Google Calendar event for the call.
Client comms go out without you thinking about them. Gmail sends the pre-call survey after the calendar event is created, and Slack gets a booking update so the team knows what’s happening.
Payments flip the onboarding switch. A payment webhook verifies the event, marks the lead as paid in Airtable, generates a Notion onboarding list, then sends the welcome email and optional WhatsApp message. It also appends a financial record in Airtable and posts a payment notice in Slack.
You can easily modify the email templates and Slack routing to match your process. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
This workflow starts with three inbound webhooks and a daily schedule, so configure each trigger with the correct paths and response handling.
- Open Incoming Lead Webhook and set Path to
lead-intake, HTTP Method toPOST, and Response Mode toresponseNode. - Open Incoming Booking Webhook and set Path to
booking, HTTP Method toPOST, and Response Mode toresponseNode. - Open Incoming Payment Webhook and set Path to
payment-success, HTTP Method toPOST, and Response Mode toresponseNode. - Open Daily Schedule Trigger and confirm the cron Expression is
0 9 * * *to run daily at 9:00.
Step 2: Validate Lead Inputs and Optional Enrichment
This step ensures incoming lead data is complete and optionally enriches it before adding records.
- In Validate Lead Input, confirm the conditions check
={{$json.email}}and={{$json.name}}with Operation set toisNotEmpty. - Open Optional Clearbit Enrich and set URL to
https://api.clearbit.com/v2/people/find, with Send Query enabled and query parameteremailset to={{$json.email}}. - Credential Required: Connect your httpHeaderAuth credentials in Optional Clearbit Enrich for Clearbit authentication.
- Confirm Optional Clearbit Enrich outputs into Add Airtable Lead as shown in the workflow.
Step 3: Connect Primary Services (Airtable, Notion, Calendar, Slack)
Several nodes write to Airtable, Notion, Google Calendar, and Slack. These services require credentials even though they’re not configured in the JSON.
- Credential Required: Connect your Airtable credentials to all Airtable nodes (6+ nodes handle lead updates, payments, reminders, and financial records).
- Credential Required: Connect your Notion credentials to Create Notion Project, Revise Notion Record, and Generate Onboarding List.
- Credential Required: Connect your Google Calendar credentials to Add Calendar Event.
- Credential Required: Connect your Slack credentials to Slack Lead Alert, Slack Error Log, Slack Payment Notice, and Post Booking to Slack.
Step 4: Configure Lead Intake and Auto-Reply
After a valid lead is received, the workflow creates records, alerts your team, and sends an auto-reply.
- In Add Airtable Lead, set Table to
tblLeadsand Operation toappend. - In Create Notion Project, set Title to
={{$json.name}} - {{$json.company || 'Lead'}}and update Page ID to your Notion database ID. - In Slack Lead Alert, confirm the message includes the Notion link reference
{{$('Create Notion Project').item.json.url}}. - In Send Lead Auto-Reply, keep Send To as
={{$json.email}}and message/subject content as provided. - Credential Required: Connect your gmailOAuth2 credentials in Send Lead Auto-Reply.
Step 5: Configure Booking Workflow and Pre-Call Survey
Valid booking data updates Airtable and Notion, creates a calendar event, sends a survey, and posts to Slack.
- In Check Booking Details, verify the conditions check
={{$json.email}},={{$json.calendlyEventId}}, and={{$json.scheduledAt}}with Operation set toisNotEmpty. - In Update Lead in Airtable, confirm Status is
Bookedand fields map to={{$json.timezone}},={{$json.scheduledAt}},={{$now.toISO()}}, and={{$json.calendlyEventId}}. - In Add Calendar Event, select the correct calendar in Calendar and keep Operation as
createEvent. - In Dispatch Pre-Call Survey, keep Send To as
={{$json.email}}and subjectYour call is confirmed! Quick pre-call survey. - Credential Required: Connect your gmailOAuth2 credentials in Dispatch Pre-Call Survey.
- In Post Booking to Slack, keep the message template that references
{{$('Add Calendar Event').item.json.htmlLink}}.
Step 6: Configure Payment Processing and Parallel Actions
Payment events validate inputs, update Airtable, create a Notion onboarding checklist, and run three actions in parallel.
- In Verify Payment Details, confirm checks for
={{$json.leadEmail}},={{$json.amount}}, and={{$json.stripePaymentIntent}}. - In Mark Lead Paid, ensure Payment Amount maps to
={{$json.amount / 100}}and Stripe Payment Intent to={{$json.stripePaymentIntent}}. - In Generate Onboarding List, set Title to
=Onboarding - {{$('Mark Lead Paid').item.json.fields.Name}}and update the Notion Page ID. - Send Client Welcome Email outputs to both Optional WhatsApp Welcome, Slack Payment Notice, and Append Financial Record in parallel.
- In Optional WhatsApp Welcome, keep the Twilio URL and body parameters using
{{$env.TWILIO_ACCOUNT_SID}}and{{$env.TWILIO_WHATSAPP_NUMBER}}. - Credential Required: Connect your headerAuth credentials in Optional WhatsApp Welcome for Twilio authentication.
- Credential Required: Connect your gmailOAuth2 credentials in Send Client Welcome Email.
Step 7: Configure 24h Reminder Flow
The daily schedule pulls upcoming calls and sends reminders, then flags Airtable records as notified.
- In Fetch Next 24h Calls, set Table to
tblLeadsand Operation togetAllRecords. - In Send 24h Reminder Email, keep Send To as
={{$json.email}}and time format as{{DateTime.fromISO($json['Booking Date']).toFormat('h:mm a')}}. - In Flag Reminder Sent, set Reminder Sent to
trueand Reminder Sent At to={{$now.toISO()}}. - Credential Required: Connect your gmailOAuth2 credentials in Send 24h Reminder Email.
Step 8: Configure Error Responses and Logging
Invalid requests return JSON responses and log errors to Slack.
- In Return Lead Error, keep Respond With set to
jsonand response body={{ { "success": false, "error": "Invalid lead data" } }}. - In Return Booking Error, keep response body
={{ { "success": false, "error": "Invalid booking data" } }}. - In Return Payment Error, keep response body
={{ { "success": false, "error": "Invalid payment data" } }}. - In Slack Error Log, confirm the message includes
{{$json.error?.message || 'Unknown error'}}and{{$('Incoming Lead Webhook').item.json.email}}.
Step 9: Test and Activate Your Workflow
Run end-to-end tests for each entry point before turning the workflow on.
- Click Execute Workflow and send a test payload to Incoming Lead Webhook; confirm Return Lead Success returns JSON and Slack/Notion/Airtable updates occur.
- Send a test payload to Incoming Booking Webhook; verify Post Booking to Slack includes a valid calendar link.
- Send a test payload to Incoming Payment Webhook; confirm Send Client Welcome Email triggers and parallel actions run.
- Trigger Daily Schedule Trigger manually to ensure Send 24h Reminder Email and Flag Reminder Sent execute.
- When tests pass, toggle the workflow to Active for production use.
Common Gotchas
- Airtable credentials can expire or need specific permissions. If things break, check your Airtable personal access token scopes and the Base access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 60–90 minutes if your Airtable and Notion databases are already created.
No. You’ll mostly paste webhook URLs and select the right fields in Airtable and Notion.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Clearbit and Twilio costs if you enable enrichment or WhatsApp.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Update the Airtable nodes that write to your Leads table (base/table names and field mappings), then adjust the Notion nodes that create the project and onboarding checklist using your own Database IDs. Most teams also tweak the four Gmail “Email Send” nodes to match their tone and links (booking link, survey URL, welcome kit). If you want WhatsApp, keep the Twilio HTTP request; if you don’t, disable it and the rest still runs clean.
Usually it’s an expired or under-scoped personal access token. Regenerate the token in Airtable, confirm it has access to the correct Base, and then reselect the Base/Table in the Airtable nodes so n8n refreshes the schema. If it fails only on higher volume days, you may also be hitting rate limits or writing to a field type that doesn’t match the value being sent.
If you self-host n8n, there’s no execution cap (it mainly depends on your server). On n8n Cloud, your monthly execution limit depends on the plan, and this workflow typically uses one execution per webhook event plus the daily reminder run.
Sometimes. This workflow has multiple entry points (lead, booking, payment, plus a daily schedule), branching logic with error handling, and several multi-tool updates that are easier to keep organized in n8n. Zapier or Make can absolutely do parts of it, but you may end up splitting it into several zaps/scenarios, which makes troubleshooting annoying and can cost more as volume grows. n8n also gives you self-hosting if you want predictable costs. If you want a second opinion on what fits your stack, Talk to an automation expert.
Set this up once and your onboarding stops living in people’s heads. The workflow handles the repetitive stuff so you can spend your attention on delivery, not duct tape.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.