Airtable is a flexible database that looks like a spreadsheet but works like a database - with views, filters, linked records, and automations built in. Connecting InstantDM to Airtable gives you a powerful, customizable lead tracking system where every Instagram DM interaction is logged automatically.
This guide covers setup via Make.com, Zapier, and Airtable's direct API.
Why Use Airtable with InstantDM?
- Flexible schema - add any fields you want without rigid CRM structures
- Multiple views - see your Instagram leads as a grid, kanban board, calendar, or gallery
- Built-in automations - trigger emails, Slack messages, or scripts when new records arrive
- Linked records - connect leads to campaigns, products, or team members
- Shareable - give your team filtered views without giving them full database access
- Free tier - 1,000 records per base on the free plan
Common Use Cases
- Log every Instagram lead with name, email, phone, and flow data
- Build a kanban board to track lead status (New → Contacted → Qualified → Closed)
- Create filtered views per campaign or per team member
- Trigger Airtable automations to send follow-up emails
- Use as a lightweight CRM for small teams
What You'll Need
| Requirement | Details |
|---|---|
| InstantDM account | Trendsetter, Trendsetter Pro, or any Multi plan |
| Airtable account | Free plan works; paid plan for higher record limits |
| InstantDM API key | Found at Settings → API in your InstantDM dashboard |
| Automation platform (optional) | Make.com or Zapier for no-code setup |
Step 1: Set Up Your Airtable Base
Before connecting, create a base to receive the data.
- Go to airtable.com and click Add a base.
- Name it Instagram Leads (or whatever you prefer).
- Create a table called Leads with these fields:
| Field Name | Field Type | Purpose |
|---|---|---|
| Name | Single line text | Lead's full name |
| Lead's email address | ||
| Phone | Phone number | Lead's phone number |
| Instagram Username | Single line text | Their IG handle |
| Flow Name | Single line text | Which DM flow they completed |
| Interest | Single line text | What they're interested in |
| Status | Single select | New, Contacted, Qualified, Closed |
| Source | Single select | Instagram DM (for filtering) |
| Captured At | Date | When the lead was captured |
| Notes | Long text | Additional context |
Tip: Set the default value for Status to "New" and Source to "Instagram DM" so every record is pre-tagged.
Method 1: Via Make.com (Recommended)
Step 1: Set Up the Webhook
Follow Steps 1-4 in the Make.com integration guide to create a webhook scenario.
Step 2: Add an Airtable Module
- After the webhook trigger, add a Filter:
eventequalsflow_completed. - Click "+" and search for Airtable.
- Select Create a Record.
- Connect your Airtable account.
- Select your base (Instagram Leads) and table (Leads).
Step 3: Map Fields
| Airtable Field | Make.com Mapping |
|---|---|
| Name | {{data.response_variables.full_name}} |
{{data.response_variables.email}} | |
| Phone | {{data.response_variables.phone}} |
| Instagram Username | @{{data.username}} |
| Flow Name | {{data.flow_name}} |
| Interest | {{data.response_variables.interest}} |
| Status | New |
| Source | Instagram DM |
| Captured At | {{timestamp}} |
Step 4: Test and Activate
- Run once in Make.com.
- Trigger a test event from InstantDM.
- Check your Airtable base - a new row should appear.
- Activate the scenario.
Method 2: Via Zapier
Step 1: Create the Zap
Follow the Zapier integration guide to set up a webhook trigger.
Step 2: Add Airtable Action
- Add a Filter:
eventexactly matchesflow_completed. - Add Airtable → Create Record.
- Connect your Airtable account.
- Select your base and table.
- Map fields as shown in Method 1.
Step 3: Test and Activate
- Test with sample data.
- Verify the record in Airtable.
- Turn the Zap on.
Method 3: Direct API Integration
Airtable's API is straightforward and well-documented.
Step 1: Get Your Airtable Credentials
- Go to airtable.com/create/tokens.
- Create a Personal Access Token with these scopes:
data.records:readdata.records:write
- Select the base(s) to grant access to.
- Copy the token.
- Get your Base ID from the Airtable API docs page (it starts with
app). - Get your Table ID or use the table name.
Step 2: Build a Webhook Receiver
const express = require('express');
const app = express();
app.use(express.json());
const AIRTABLE_TOKEN = process.env.AIRTABLE_TOKEN;
const BASE_ID = 'appXXXXXXXXXXXXXX';
const TABLE_NAME = 'Leads';
app.post('/instantdm-webhook', async (req, res) => {
const { event, timestamp, data } = req.body;
if (event !== 'flow_completed') {
return res.status(200).json({ status: 'skipped' });
}
const record = {
records: [{
fields: {
'Name': data.response_variables.full_name || data.username,
'Email': data.response_variables.email,
'Phone': data.response_variables.phone,
'Instagram Username': `@${data.username}`,
'Flow Name': data.flow_name,
'Interest': data.response_variables.interest || '',
'Status': 'New',
'Source': 'Instagram DM',
'Captured At': timestamp,
},
}],
};
try {
const response = await fetch(
`https://api.airtable.com/v0/${BASE_ID}/${encodeURIComponent(TABLE_NAME)}`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${AIRTABLE_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(record),
}
);
const result = await response.json();
res.status(200).json({ status: 'created', id: result.records?.[0]?.id });
} catch (error) {
res.status(500).json({ status: 'error', message: error.message });
}
});
app.listen(3000);
Logging Multiple Event Types
You can log more than just flow_completed events. Create separate tables or use a single table with an "Event Type" field.
Single Table Approach
Add an Event Type field (Single select) and map all events:
app.post('/instantdm-webhook', async (req, res) => {
const { event, timestamp, data } = req.body;
const fields = {
'Event Type': event,
'Instagram Username': `@${data.username}`,
'Captured At': timestamp,
};
// Add event-specific fields
switch (event) {
case 'flow_completed':
fields['Name'] = data.response_variables?.full_name || '';
fields['Email'] = data.response_variables?.email || '';
fields['Phone'] = data.response_variables?.phone || '';
fields['Flow Name'] = data.flow_name;
fields['Interest'] = data.response_variables?.interest || '';
break;
case 'comment':
fields['Notes'] = `Comment: ${data.comment_text}`;
break;
case 'dm_received':
fields['Notes'] = `DM: ${data.message_text}`;
break;
}
// ... create record
});
Building Useful Views
Once data is flowing in, create views to organize it:
Kanban View (Lead Pipeline)
- Click Views → Kanban.
- Group by the Status field.
- Columns: New → Contacted → Qualified → Closed.
- Drag leads between columns as they progress.
Filtered View (By Campaign)
- Click Views → Grid.
- Add a filter: Flow Name contains "Black Friday".
- Save as "Black Friday Leads".
Calendar View
- Click Views → Calendar.
- Use the Captured At field as the date.
- See when leads are coming in over time.
Gallery View (Lead Cards)
- Click Views → Gallery.
- Each lead appears as a card with key fields visible.
- Great for team review meetings.
Airtable Automations
Airtable has built-in automations that trigger when records are created or updated.
Send an Email When a New Lead Arrives
- Go to Automations in your base.
- Click Create automation.
- Trigger: When a record is created in the Leads table.
- Action: Send an email.
- Configure the email with field values from the new record.
Send a Slack Message
- Trigger: When a record is created.
- Action: Send a Slack message.
- Connect your Slack workspace.
- Format the message with lead details.
Run a Script (Advanced)
- Trigger: When a record is created.
- Action: Run a script.
- Write JavaScript to call external APIs, enrich data, or perform custom logic.
Troubleshooting
| Issue | Solution |
|---|---|
| Record not appearing in Airtable | Check the automation platform execution log. Verify the Airtable connection and base/table selection. |
| "Field not found" error | Field names are case-sensitive in the API. Ensure exact match including spaces. |
| Single select value rejected | The value must exist as an option in the field. Add "Instagram DM" and "New" as options first. |
| API returning 422 | Check the field types. Dates must be in ISO 8601 format. Emails must be valid format. |
| Hitting record limits | Free plan allows 1,000 records per base. Upgrade or archive old records periodically. |
| Duplicate records | Airtable doesn't have built-in dedup. Add a search step in Make.com/Zapier before creating, or use Airtable's "Find Records" action. |
Frequently Asked Questions
Can I use Airtable as a CRM replacement?
For small teams and simple sales processes, yes. Airtable with a kanban view, status field, and automations works well as a lightweight CRM. For complex sales processes with forecasting, sequences, and territory management, a dedicated CRM like HubSpot or Pipedrive is better.
How many Instagram leads can Airtable handle?
Free plan: 1,000 records per base. Plus plan: 50,000. Pro plan: 500,000. Enterprise: custom. For most Instagram automation use cases, the Plus plan is sufficient.
Can I connect Airtable to other tools?
Yes. Airtable integrates with Make.com, Zapier, and has its own automation engine. You can also use the Airtable API to connect to any custom tool.
Is Airtable better than Google Sheets for this?
Airtable is better for structured data with relationships, views, and automations. Google Sheets is better for simple logging and when you need spreadsheet formulas. If you want a kanban board, filtered views, and linked records, use Airtable. If you just need a flat list, Google Sheets works fine.
What's Next
- Set up Notion for a team-friendly alternative.
- Connect to Google Sheets for simple spreadsheet logging.
- Read the HubSpot guide for a full CRM solution.
- Build a Custom AI Agent to qualify leads before logging them.
- Explore the full API docs at instantdm.com/instagram-api-docs.