Free vs Paid Airtable
| Plan | Storage | Records | Automations | Cost |
|---|---|---|---|---|
| Free | 1GB | 1,000/base | 100 runs/month | $0 |
| Plus | 5GB | 5,000/base | 5,000 runs/month | $10/month |
| Pro | 20GB | 50,000/base | 50,000 runs/month | $20/month |
| Enterprise | Unlimited | Unlimited | Unlimited | Custom |
The free tier is surprisingly capable for solo builders. Upgrade to Plus when you hit the 1,000 record limit.
When Airtable makes more sense than Notion or Spreadsheets:
- You need to view data as a Kanban, Calendar, or Gallery
- You need automations triggered by data changes
- Multiple people need to edit data with strict permissions
- You need to link records between tables (relational data)

Setting Up a Business CRM in Airtable
Tables You Need
Contacts: Name, Email, Phone, Company, Stage (lead/prospect/customer/churned), Last Contact, Notes
Companies: Company name, Industry, Size, ARR, Contact person (linked to Contacts)
Deals: Deal name, Value, Stage (discovery/proposal/negotiation/won/lost), Close date, Company (linked), Owner
Interactions: Date, Type (email/call/meeting), Notes, Contact (linked), Deal (linked)
Views to Create
| View | Type | Purpose |
|---|---|---|
| Pipeline | Kanban (by Stage) | See all deals by stage |
| This Week | Calendar (by Close date) | Deals closing soon |
| Hot Leads | Grid (filtered: Stage = prospect) | Focus on best opportunities |
| Client Directory | Gallery | Visual contact cards |
| Revenue Forecast | Grid (grouped by month) | Revenue planning |
Airtable Automations
Automation 1: New Lead Notification
Trigger: Record created in Contacts table
Action: Send Slack message to #leads with: Name, Email, Company, Source
Automation 2: Deal Won → Onboarding
Trigger: Deal stage changed to "Won"
Action sequence:
- Send congratulations email to sales person
- Create onboarding record in an Onboarding table
- Send welcome email to client (via Gmail integration)
- Post in #wins Slack channel
Automation 3: Follow-Up Reminder
Trigger: Scheduled (runs every day at 8am)
Condition: Find contacts where Last Contact > 14 days ago AND Stage = "Customer"
Action: Create task in Contacts table + Send email reminder to account owner
Automation 4: Invoice → Payment Tracking
Trigger: Invoice status changed to "Sent"
Action: Set Due Date = today + 30 days
Secondary trigger: Due Date is today AND Status != "Paid"
Action: Send reminder email to client
Airtable Formulas You Actually Need
// Days since last contact
DATETIME_DIFF(TODAY(), {Last Contact}, 'days')
// Revenue forecast (deals in pipeline × close probability)
IF({Stage} = "Negotiation", {Value} * 0.7,
IF({Stage} = "Proposal", {Value} * 0.4,
IF({Stage} = "Discovery", {Value} * 0.2, 0)))
// Color-code deal health
IF(DATETIME_DIFF(TODAY(), {Last Activity}, 'days') > 14, "🔴 At Risk",
IF(DATETIME_DIFF(TODAY(), {Last Activity}, 'days') > 7, "🟡 Needs Attention",
"🟢 Active"))
// Month from date
DATETIME_FORMAT({Close Date}, 'MMMM YYYY')
Connecting Airtable to Your Stack
| Integration | Use Case | Method |
|---|---|---|
| Typeform | Form responses → CRM records | Zapier / Make / n8n |
| Stripe | Payment → Update customer record | Webhook + n8n |
| Gmail | Send emails from Airtable | Airtable automations built-in |
| Slack | Notifications when records change | Airtable automations built-in |
| Calendly | Booking → Add to CRM | Zapier |
| Invoice Ninja | Create invoices from deal data | API + n8n |
When to Move Off Airtable
Airtable becomes limiting when:
- You have >50,000 records
- You need complex SQL queries
- You need real-time data (Airtable updates can be slow)
- You need to embed data in a customer-facing product
At that point, migrate to Supabase (PostgreSQL) and build a proper backend.

