Platform
Chatbot Builder Bulk Messaging Team Inbox Mini CRM API & Webhooks AI Integration WhatsApp Flows
Industries
E-commerce & D2C Real Estate Education Healthcare Finance & BFSI Logistics Hospitality Retail
Integrations
Learn
Learning Hub Help & Docs Connect Guides Automation Codex Blog Message Templates
Pricing Start Free Trial →
HomeConnect › Connect Airtable to WhatsApp
Airtable Integration Guide · Forms / Productivity

Connect Airtable to WhatsApp

Log every WhatsApp lead directly into an Airtable base, look up records by email or phone before personalising a message, and keep your Airtable CRM in sync with WhatsApp conversations automatically.

Published 23 June 2026  ·  7 min read  ·  Forms / Productivity

Before following this guide, read the External API Request step foundation guide. It covers every field so this guide can focus on Airtable-specific values.

Airtable API keys were disabled in February 2024

Legacy API keys (starting with key...) stopped working on 1 February 2024. The only authentication method today is a Personal Access Token (PAT), created at airtable.com/create/tokens. If any guide tells you to go to Account settings to find your API key, it is outdated.

401/403 almost always means a missing scope or base not added to the token

Airtable PATs have two separate permission dimensions: scopes (what the token can do) and base access (which bases it can reach). Both must be configured. Adding scopes but forgetting to add the base to the token causes 403. Adding the base but forgetting the write scope causes 403. Check both before debugging anything else.

Step 1: Create a Personal Access Token

1
Go to airtable.com/create/tokens and click Create new token. Give it a descriptive name.
2
Under Scopes, add: data.records:read, data.records:write, and schema.bases:read.
3
Under Access, click Add a base and select the base you want to write to. This step is separate from scopes and is required.
4
Click Create token. Copy the token immediately. It is shown only once.
Official docs

Airtable Web API: airtable.com/developers

Step 2: Find your Base ID and table name

The Base ID and table name form the API URL for every request.

Finding your Base ID and table name
Base URL pattern:
https://api.airtable.com/v0/{baseId}/{tableName}

Base ID: in your browser URL when inside a base.
  https://airtable.com/app123abc456/tblXXXXX/...
  Base ID = app123abc456 (starts with 'app')

Table name: the tab name in Airtable, e.g. 'Leads' or 'Contacts'.
  URL-encode spaces: 'WhatsApp Leads' -> 'WhatsApp%20Leads'

Full example URL:
https://api.airtable.com/v0/app123abc456/Leads

Step 3: Create a record in Airtable from WhatsApp

When a customer opts in or provides their details on WhatsApp, create a record immediately.

External API Request Step · WA.Expert
Select Method
POST
Request URL
https://api.airtable.com/v0/{{{{BASE_ID}}}}/Leads
Select Auth Type
No Auth (Bearer in header below)
Header Parameters
AuthorizationBearer YOUR_AIRTABLE_PAT
Content-Typeapplication/json
Select Body Type
JSON
Body
{{"fields":{{"Name":"{{{{customer_name}}}}","Email":"{{{{customer_email}}}}","Phone":"{{{{customer_phone}}}}","Source":"WhatsApp","Status":"New"}}}}
Choose Response Type
JSON
POST /v0/{baseId}/{tableName} — body and response
Body:
{{
  "fields": {{
    "Name":   "Priya Sharma",
    "Email":  "priya@example.com",
    "Phone":  "+919820000001",
    "Source": "WhatsApp",
    "Status": "New"
  }}
}}

Response (HTTP 200):
{{
  "id":          "recAbCdEfGhIjKl",
  "createdTime": "2026-06-23T08:30:00.000Z",
  "fields": {{
    "Name":   "Priya Sharma",
    "Email":  "priya@example.com",
    "Phone":  "+919820000001",
    "Source": "WhatsApp",
    "Status": "New"
  }}
}}

Map: id -> record_id
Field names must match the column headers in your Airtable table exactly,
including capitalisation.
Field names must match your column headers exactly

If your Airtable column is called 'Full Name', use 'Full Name' in the fields object. 'Name' and 'full name' will fail silently or create a new field. Check the exact column names in your Airtable base before mapping.

To check whether a WhatsApp contact already exists in Airtable before creating a duplicate, use a filtered GET request.

External API Request Step · WA.Expert
Select Method
GET
Request URL
https://api.airtable.com/v0/{{{{BASE_ID}}}}/Leads?filterByFormula=%7BEmail%7D%3D%22{{{{customer_email}}}}%22
Select Auth Type
No Auth (Bearer in header below)
Header Parameters
AuthorizationBearer YOUR_AIRTABLE_PAT
Select Body Type
None (GET, no body)
Choose Response Type
JSON
GET with filterByFormula — decoded URL and response
URL (decoded for readability):
GET https://api.airtable.com/v0/app123abc456/Leads
    ?filterByFormula={{Email}}='priya@example.com'

URL-encoded (what you actually send):
    ?filterByFormula=%7BEmail%7D%3D%22priya%40example.com%22

Response:
{{
  "records": [
    {{
      "id": "recAbCdEfGhIjKl",
      "fields": {{
        "Name":   "Priya Sharma",
        "Email":  "priya@example.com",
        "Status": "Contacted"
      }}
    }}
  ]
}}

records is empty -> contact not found -> create new record
records has items -> map records[0].id, records[0].fields.*

Worked example: log WhatsApp lead to Airtable

Automation flow — WhatsApp opt-in to Airtable record
Trigger: Customer messages 'DEMO' on WhatsApp.

Bot collects:
  {{customer_name}}  = Priya Sharma
  {{customer_email}} = priya@example.com
  {{customer_phone}} = +919820000001

Step 1 — Check if record exists (GET):
GET https://api.airtable.com/v0/app123abc456/Leads
    ?filterByFormula={{Email}}='priya@example.com'
Authorization: Bearer pat...

Response: records = [] (not found)

Conditions: if records not empty -> use records[0].id, send existing-contact reply
            if records empty     -> run Step 2

Step 2 — Create record (POST):
POST https://api.airtable.com/v0/app123abc456/Leads
Body: {{fields: {{Name:"Priya Sharma", Email:"priya@example.com",
                  Phone:"+919820000001", Source:"WhatsApp", Status:"New"}}}}

Response: {{id: 'recAbCdEfGhIjKl', fields: {{...}}}}

Bot replies:
'Thanks Priya! We have added you to our demo list.
Our team will reach you at +919820000001 within 24 hours.'

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedPAT missing or wrong formatEnsure the header is 'Authorization: Bearer pat...' with a space after Bearer. Copy the PAT again from airtable.com/create/tokens. Tokens starting with 'key...' are the old disabled keys.
403 ForbiddenMissing scope or base not added to tokenCheck both dimensions: (1) data.records:write scope is added to the token, (2) the specific base is added under Access in the token settings. Both are required.
Field not saved, 422 errorField name mismatchThe field name in the POST body must match the column header exactly, including capitalisation and spacing. Check the exact name in your Airtable table.
Empty records on GET searchfilterByFormula syntax or URL encoding wrongTest with a simplified formula first: filterByFormula=1. Then add field filters. URL-encode curly braces as %7B/%7D and spaces as %20.
Duplicate records being createdNot checking before creatingAdd a GET lookup step before POST. If records is not empty, update the existing record instead of creating a new one.
Table not foundTable name in URL doesn't matchUse the exact table name from the Airtable tab. URL-encode spaces. You can also use the table ID (starting with tbl) from the URL instead of the name.

Common questions

Do Airtable API keys still work?
+
No. Disabled February 1, 2024. Use a Personal Access Token from airtable.com/create/tokens. Paste the PAT wherever a tool asks for an API key.
Why 401/403 with a correct token?
+
Check both: (1) the required scope is added (data.records:write), (2) the specific base is added under Access in the token. Both are required independently.
Where is the Base ID?
+
In the URL when inside a base: airtable.com/app123abc456/... The Base ID starts with 'app'.
How do I look up a record by email?
+
GET /v0/{baseId}/{tableName}?filterByFormula={Email}='email@example.com'. URL-encode curly braces and @ signs. Empty records array means not found.
How do I create a record?
+
POST /v0/{baseId}/{tableName} with Authorization Bearer and body {fields: {ColumnName: value}}. Field names must match column headers exactly.
Does this incur extra WA.Expert charges?
+
One automation action per External API Request call. Included on Complete plan. Starter: from Rs. 49 per 1,000 actions.

Connect Google Sheets to WhatsApp

Log WhatsApp data to a Google Sheet as a lightweight Airtable alternative.

Read guide →

Connect Notion to WhatsApp

Create Notion database entries from WhatsApp leads.

Read guide →

External API Request Step

Master every field in WA.Expert's HTTP action step.

Read foundation guide →

Connect Airtable to WhatsApp today

Free trial, no credit card. If you get stuck, we answer live on WhatsApp.

Start Free Trial → Book a Demo
1