Make.com + Airtable: Build Automated Database Pipelines
Connect Make.com to Airtable and you turn a spreadsheet-style database into a fully automated data pipeline — without writing a single line of code.
Airtable handles data storage with spreadsheet flexibility. Make handles logic, triggers, and cross-app routing. Together they cover the full CRUD lifecycle: creating records when leads arrive, updating statuses when tasks complete, searching for existing entries before inserting duplicates, and deleting stale data on schedule.
This tutorial walks through every Airtable module Make offers, then builds a real-world content calendar scenario that auto-publishes to social media when a record status changes to Ready.
Why Make + Airtable?
Airtable's native automations are limited to single-table triggers and a handful of actions. Make unlocks:
- Multi-step cross-app workflows — Airtable record → Slack notification → Google Calendar event → email in one scenario
- Conditional branching — update a record only if a field matches a condition
- Linked record resolution — traverse relationship fields and pull data from related tables in the same scenario
- Bi-directional sync — keep Airtable in sync with external CRMs, databases, or spreadsheets
- Scheduled pulls — poll Airtable on a timer even when no trigger fires
Make supports 3,000+ app integrations and its visual scenario builder makes the data flow easy to trace and debug. Sign up free at Make.com — the free plan covers 1,000 operations/month.
Prerequisites
Before building your first scenario you need:
- A Make account (free tier available)
- An Airtable account with at least one base and table
- An Airtable personal access token (Settings → Developer Hub → Personal Access Tokens)
The token needs the following scopes for the operations in this guide:
| Scope | Required for |
|---|---|
data.records:read | Watch, search, list records |
data.records:write | Create, update, delete records |
schema.bases:read | Read table/field metadata |
Connecting Airtable to Make
- Open Make and create a new Scenario.
- Click + to add a module, search for Airtable, and select any module.
- Click Add next to the connection field.
- Choose OAuth 2.0 (recommended) or API Token.
- For API Token: paste your personal access token and click Save.
- Select your Base and Table from the dropdowns — Make reads your schema automatically.
Once the connection is saved it is reusable across every Airtable module in your account.
Core Airtable Modules in Make
Make's Airtable app ships seven core modules. Here is what each one does and when to use it.
| Module | Type | Best for |
|---|---|---|
| Watch Records | Trigger | Start a scenario when a record is created or updated |
| Search Records | Action | Find existing records before creating duplicates |
| List Records | Action | Pull all records from a view for batch processing |
| Get a Record | Action | Fetch a single record by its Airtable record ID |
| Create a Record | Action | Insert a new row into a table |
| Update a Record | Action | Modify fields on an existing record |
| Delete a Record | Action | Remove a record from a table |
Watch Records (Trigger)
The Watch Records trigger polls Airtable on the schedule you set and returns new or modified records since the last check.
Configuration:
- Connection — your saved Airtable connection
- Base — select your base
- Table — select your table
- Trigger field — choose the field Make monitors for changes (typically a "Last Modified" field or the built-in "Created Time")
- View — optionally restrict monitoring to a specific filtered view
- Limit — maximum records to return per cycle (default 100)
Important: Airtable does not push webhooks by default. Make polls on the interval you configure in the scenario scheduler (minimum every 1 minute on paid plans). For true real-time triggers, create a dedicated Airtable automation that sends a webhook to Make's custom webhook URL — found in Make under Webhooks → Custom Webhook after you add the module — then use a Webhooks → Custom Webhook trigger instead.
Search Records
Use Search Records before creating a record to prevent duplicates. It returns an array of matching records.
Key fields:
- Formula — an Airtable formula string, e.g.
{Email} = "john@example.com"orAND({Status} = "Active", {Priority} = "High") - View — limit the search scope to a filtered view (faster on large tables)
- Max Records — cap the result count
After a Search Records module, add an If/Else router: proceed to Create if the result array is empty, skip to Update if a record is found.
Create a Record
Maps any Make bundle field to an Airtable field. Supports all native field types:
- Text, Number, Checkbox, Date — map directly
- Single Select / Multiple Select — pass the exact option label as a string
- Linked Records — pass an array of record IDs from the related table
- Attachments — pass an array of objects with
urland optionalfilenamekeys
{
"Name": "{{1.customerName}}",
"Email": "{{1.email}}",
"Status": "New",
"Priority": "High",
"Tags": ["enterprise", "Q2"],
"Profile Photo": [{ "url": "{{1.avatarUrl}}", "filename": "avatar.jpg" }]
}
Update a Record
Requires the Record ID of the target row. Always retrieve it from a prior Get or Search step — never hardcode it.
Pattern:
- Search Records → find the record → extract
{{1.id}} - Update a Record → set Record ID to
{{1.id}}→ map fields to update
Only the fields you explicitly map are modified. Fields left unmapped in the module configuration are untouched in Airtable. Note: if you map a field to an empty value, Airtable will clear that field's content.
Delete a Record
Takes a single Record ID. Pair with a Search or Watch trigger to delete records matching a condition.
Working with Views and Filters
Airtable views are pre-filtered, pre-sorted slices of a table. In Make you can scope Watch Records and List Records to a specific view name to avoid processing irrelevant rows.
Practical uses:
- Watch only the "Pending Approval" view so Make fires only when new items enter that filtered state
- List only the "This Week" view for a Monday morning digest email
- Search inside the "Active Clients" view to avoid matching archived records
When using formula-based filters in Search Records, mirror your view logic as an Airtable formula string:
AND(
{Status} = "Active",
IS_AFTER({Due Date}, TODAY())
)
Handling Linked Records and Attachments
Linked Records
Linked record fields store an array of record IDs from a related table. To resolve them:
- Add a Get a Record module after your trigger.
- Set Base/Table to the related table.
- Set Record ID to the first element of the linked field array:
{{1.LinkedField[].id}}. - Use the returned fields in subsequent steps.
For multiple linked records, add an Iterator module between the trigger and the Get module to loop through each record ID individually.
Attachments
To upload an attachment to Airtable from Make:
- Use an HTTP → Get a File module to download the file from its URL.
- Map the
dataoutput to the Airtable Create/Update Record attachment field as:[{ "url": "{{2.url}}", "filename": "{{2.fileName}}" }]
To read attachments, the field returns an array of objects. Each object has a url (temporary signed URL), filename, size, and type.
Real-World Scenario: Content Calendar → Auto-Publish
Let's build the scenario referenced in this guide's introduction: a content calendar in Airtable that automatically posts to Twitter/X and sends a Slack notification when a record's Status field changes to "Ready".
Airtable Setup
Create a table called Content Calendar with these fields:
| Field | Type |
|---|---|
| Title | Single line text |
| Body | Long text |
| Status | Single select (Draft / Ready / Published) |
| Platform | Single select (Twitter / LinkedIn) |
| Published At | Date |
| Last Modified | Last modified time |
Add a Last Modified field — Make's Watch Records trigger uses it to detect changes.
Scenario Architecture
[Watch Records: Content Calendar]
↓
[Router]
├── Branch 1: Status = "Ready" AND Platform = "Twitter"
│ ↓
│ [Twitter: Create a Tweet]
│ ↓
│ [Airtable: Update Record → Status = "Published", Published At = now]
│ ↓
│ [Slack: Send a Message]
│
└── Branch 2: Status = "Ready" AND Platform = "LinkedIn"
↓
[LinkedIn: Create a Post]
↓
[Airtable: Update Record → Status = "Published"]
Step-by-Step Build
Step 1 — Add the trigger
- Add module: Airtable → Watch Records
- Select your Content Calendar table
- Set Trigger Field to Last Modified
- Set Maximum number of records to 10
- In the scenario scheduler, set the interval to every 15 minutes
Step 2 — Add a Router
Click the small arrow after the trigger module and select Router. This splits execution into parallel branches based on conditions.
Step 3 — Branch 1 (Twitter)
- Click the first branch and add a Filter
- Set condition:
StatusEqual to (text)ReadyANDPlatformEqual to (text)Twitter - Add Twitter → Create a Tweet
- Map the Text field to
{{1.Body}}(up to 280 characters — consider truncating) - Add Airtable → Update a Record:
- Record ID:
{{1.id}} - Status:
Published - Published At:
{{now}}
- Record ID:
- Add Slack → Create a Message:
"✅ Published to Twitter: {{1.Title}}"
Step 4 — Branch 2 (LinkedIn)
Mirror Branch 1 with a LinkedIn filter and LinkedIn post module.
Step 5 — Test
- Click Run Once in Make to execute one test cycle
- In Airtable, set a record's Status to Ready
- Watch the Make execution log — each module shows its input/output bundle
Step 6 — Activate
Turn on the scenario toggle. Make will now poll every 15 minutes and publish any record that transitions to Ready.
Advanced Patterns
Bi-Directional Sync: Airtable ↔ External CRM
Keep Airtable in sync with an external system like HubSpot or Salesforce:
- Inbound: Watch Records (Airtable) → search CRM for matching contact → create or update CRM record
- Outbound: Watch new CRM contacts → Search Records (Airtable) → create or update Airtable record
Use the Search Records module with a formula matching on a shared unique ID (e.g., email address) to avoid duplicates in both directions.
Scheduled Data Aggregation
Pull data from external APIs into Airtable on a schedule:
- Schedule trigger — every morning at 8 AM
- HTTP → Make a Request — call an external API
- Iterator — loop through each result item
- Airtable → Search Records — check if the record exists
- Router → Create if new / Update if exists
This pattern works well for syncing product inventory, job listings, or pricing data from external sources into Airtable as a lightweight database.
Error Handling with Rollback
For scenarios where a failed Airtable write could corrupt data:
- Enable Error Handling on the Create/Update module (click the wrench icon)
- Add a Resume or Rollback directive
- Route errors to a dedicated Slack notification so failures never go unnoticed
Make.com Pricing for Airtable Automation
| Plan | Operations/month | Min interval | Price |
|---|---|---|---|
| Free | 1,000 | 15 min | $0 |
| Core | 10,000 | 1 min | ~$9/mo |
| Pro | 10,000+ | 1 min | ~$16/mo |
| Teams | 10,000+ | 1 min | ~$29/mo |
Each Airtable module execution counts as one operation. A scenario with Watch → Router → Update → Slack consumes 4 operations per trigger cycle. At 1,000 records/month that is 4,000 operations — well within the Core plan.
Make vs. Other Automation Tools for Airtable
| Tool | Airtable modules | Visual builder | Free tier ops | Best for |
|---|---|---|---|---|
| Make | 7 (full CRUD + watch) | ✅ Full scenario canvas | 1,000/mo | Complex multi-step pipelines |
| Zapier | 6 | ❌ Linear only | 100/mo | Simple 2-step Zaps |
| n8n | Community node | ✅ Node graph | Unlimited (self-host) | Developers who self-host |
| Airtable Automations | Native (limited) | ❌ Single-table only | Unlimited | Single-table triggers only |
Make wins on complex scenarios and visual debugging. Zapier wins on simplicity for 2-step automations. For teams comfortable with infrastructure, n8n is a cost-effective self-hosted alternative.
Interlinking with Data Extraction
Airtable works best as a destination for structured data. If you need to populate your Airtable base with scraped data from the web — product prices, lead information, social mentions — you can connect Apify to Make and route Actor results directly into Airtable records:
- Apify Actor Run Finished webhook → Make custom webhook trigger
- Apify → Get Dataset Items → retrieve scraped rows
- Iterator → loop through items
- Airtable → Search Records → check for duplicates
- Router → Create new / Update existing
This architecture lets you run automated web data collection pipelines that land directly in your Airtable base. See the Apify + Zapier guide for the webhook pattern — it applies equally to Make.
In Make, add any Airtable module to your scenario, click Add next to the connection field, and authenticate with either OAuth 2.0 or an Airtable personal access token. Make reads your base and table schema automatically once connected.
Make polls Airtable on a schedule (minimum every 1 minute on paid plans). For near-real-time behavior, create an Airtable native automation that sends a webhook to Make's custom webhook URL when a record changes — this eliminates the polling delay entirely.
Make supports the full CRUD lifecycle: Watch (trigger on new/modified records), Search, List, Get, Create, Update, and Delete. All standard field types are supported including linked records, attachments, single/multi select, and formulas.
Use the Search Records module before Create. Pass an Airtable formula that matches on a unique field (e.g., `{Email} = "john@example.com"` with the mapped bundle value substituted in). Add a Router after the search: if the result array is empty, proceed to Create; if it contains a record, proceed to Update with the found record ID.
Yes. Linked record fields return an array of record IDs. Use an Iterator module to loop through them, then a Get a Record module pointed at the related table to resolve each linked record's fields.
Each module execution counts as one operation. A typical Watch → Search → Create scenario uses 3 operations per triggered record. The Make free tier provides 1,000 operations/month, which handles roughly 300 record-triggered scenarios.
