⚡ Promptolis Original · Productivity & Systems
🗂️ Airtable Database Architect
Designs your Airtable base structure: tables, fields, links, views, automations, sync sources — picking exactly where Airtable shines and where you need a real database instead.
Why this is epic
Most Airtable bases are designed by accident — table by table, as needs emerge — and break at month 6 when relationships get tangled. This Original designs the schema upfront with proper normalization, link structures, and views that scale.
Outputs the complete base architecture: tables, fields with types, links between tables, primary fields, view design per role, automation triggers, sync sources, permission strategy. Calibrated to YOUR data, not a generic template.
Honest about Airtable's limits. If your data should be in Postgres + a frontend, the Original says so — and proposes the migration path. Solo founders especially benefit from knowing 'when Airtable stops scaling.'
Calibrated to 2026 Airtable features: AI fields, Sync sources, Interface Designer, Automation scripts, Extensions. Picks the features that pay off for your scale and skips the ones that look fancy but waste setup time.
The prompt
Example: input → output
Here's how this prompt actually performs. Real input below, real output from Claude Opus 4.
<use-case>Lightweight CRM for our 8-person B2B SaaS sales team. Track companies → contacts → deals → activities. Currently using HubSpot starter but team finds it heavy/expensive for our stage. We want to move to Airtable.</use-case> <scale>~500 companies + ~1500 contacts + ~200 active deals now. In 18 months: ~3K companies, ~10K contacts, ~800 deals. In 3 years: ~10K companies, ~40K contacts, ~3K deals.</scale> <users>2 AEs, 2 SDRs, 1 sales lead, 2 founders (read-mostly), 1 ops/RevOps person who'll own the base.</users> <integrations-needed>Need: Slack (deal-stage-change alerts), Gmail (log emails to contacts), our app DB (push 'is_paying_customer' status to Airtable). Optional: Calendly (meeting logs), Apollo (enrichment).</integrations-needed> <key-questions-to-answer>1. Who has the most pipeline this quarter? 2. Which deals are stalled (no activity in 14 days)? 3. What's our deal-volume trend by stage? 4. Which accounts have multiple contacts engaging? 5. Which deals from inbound vs outbound?</key-questions-to-answer> <existing-state>HubSpot Starter currently. Have ~1500 contacts + ~200 deals. Want to migrate.</existing-state> <airtable-tier>Currently Free. Willing to upgrade to Pro ($20/user/month) for needed features.</airtable-tier> <budget-tolerance>Pro tier is OK. $200/month total Airtable cost is acceptable. Want to avoid hiring an Airtable consultant — prefer to learn the patterns.</budget-tolerance>
Airtable Base Architecture: B2B SaaS Sales CRM
Suitability Check
Yes, Airtable is the right tool for your scale and team. Specifically:
- 8-person team, ~3K companies, ~10K contacts, ~800 deals at 18-month projection — well within Airtable's gracefully-scalable range.
- HubSpot Starter at your stage is over-priced + over-configured. The CRM features you actually use are 30% of HubSpot's surface.
- You have RevOps capacity to maintain the base. Without an internal owner, Airtable bases drift.
The honest caveat: at the 3-year scale (10K companies, 40K contacts, 3K deals), you'll feel performance taxes. Specifically: views with rollups across 40K contacts will be sluggish. Plan: at the 18-month mark, evaluate moving to a Postgres+Retool architecture or HubSpot Pro. The migration plan we'll architect now keeps that door open.
Tables (the entity model)
1. Companies
- Purpose: the account-level entity
- Primary field: Company Name (formula:
{Name} & ' (' & {Domain} & ')') — human-readable and unique-ish - Records: ~500 now → ~3K (18mo) → ~10K (3y)
- Links: to Contacts (one-to-many), to Deals (one-to-many)
2. Contacts
- Purpose: individual people inside companies
- Primary field: Full Name (formula:
{First Name} & ' ' & {Last Name} & ' (' & {Email} & ')') - Records: ~1.5K now → ~10K (18mo) → ~40K (3y)
- Links: to Companies (many-to-one), to Activities (one-to-many), to Deals (many-to-many — multiple contacts can be on one deal)
3. Deals
- Purpose: sales opportunities
- Primary field: Deal Name (formula:
{Company Name (lookup)} & ' - ' & {Stage} & ' - $' & {Amount}) - Records: ~200 now → ~800 (18mo) → ~3K (3y)
- Links: to Companies (many-to-one), to Contacts (many-to-many), to Activities (one-to-many), to Owner-Users (many-to-one)
4. Activities
- Purpose: every interaction (email, call, meeting, note)
- Primary field: formula:
{Type} & ' - ' & {Date} & ' - ' & {Subject} - Records: ~5K now → ~30K (18mo) → ~100K (3y) — biggest table by record count
- Links: to Contacts (many-to-one), to Deals (many-to-one optional), to Owner-Users (many-to-one)
5. Users
- Purpose: sellers + ops + founders, for ownership and reporting
- Primary field: Full Name
- Records: ~10
- Links: to Deals (one-to-many as Owner), to Activities (one-to-many)
6. Pipeline Stages (lookup table)
- Purpose: define stages once, reference in Deals. Allows reordering/renaming without bulk updates.
- Primary field: Stage Name
- Records: ~6 (Inbound Lead, Discovery, Demo, Proposal, Negotiation, Closed-Won, Closed-Lost)
- Note: also could be a single-select on Deals; lookup table is more flexible if stages change
7. (Optional Phase 2) Email Threads
- For richer email logging beyond Activities
- Skip for v1; add at 18-month mark if needed
Fields per Table
Companies
| Field | Type | Purpose | Notes |
|---|---|---|---|
| Name | Single-line | Account name | Required |
| Domain | Single-line | e.g., 'acme.com' | Required, unique |
| Industry | Single select | Tech, Finance, Healthcare, etc. | ~10 options |
| Size | Single select | 1-10 / 11-50 / 51-200 / 201-1K / 1K-5K / 5K+ | |
| Country | Single select | ISO-style | |
| Website | URL | ||
| Notes | Long text | Free-form | |
| Owner | Linked record (Users) | Account owner (often the sales lead) | Single-select-style link |
| Is Paying Customer | Checkbox | Synced from app DB via automation | Read-only |
| Customer Since | Date | When they paid | Read-only |
| Total ARR | Currency | Synced from app DB | Read-only |
| Linked: Contacts | Linked record (Contacts) | The people at this company | |
| Linked: Deals | Linked record (Deals) | The deals at this company | |
| Computed: Total Open Pipeline | Rollup (Deals.Amount where Stage != Closed) | Live pipeline value | |
| Computed: Last Activity Date | Rollup (Activities.Date max) | Newest activity | |
| Computed: Active Deal Count | Count (Deals where Stage != Closed) |
Contacts
| Field | Type | Purpose | Notes |
|---|---|---|---|
| First Name | Single-line | ||
| Last Name | Single-line | ||
| Full Name | Formula | Display | Primary field |
| Required, unique | Used for dedup | ||
| Phone | Phone | ||
| Title | Single-line | ||
| Seniority | Single select | IC / Manager / Director / VP / C-level | |
| Linked: Company | Linked record | Many-to-one | Required |
| Linked: Deals | Linked record (Deals) | Many-to-many | |
| Linked: Activities | Linked record | One-to-many | |
| Lifecycle Stage | Single select | Lead / MQL / SQL / Customer / Past | |
| Source | Single select | Inbound form / outbound / event / referral / other | |
| Apollo Enrichment Date | Date | When last enriched | Updated by automation |
| Notes | Long text | ||
| Computed: Last Email Date | Rollup (Activities.Date max where Type=Email) | ||
| Computed: Activity Count L30D | Rollup (Activities count where Date > today-30) |
Deals
| Field | Type | Purpose | Notes |
|---|---|---|---|
| Deal Name | Formula | Display | Primary field |
| Linked: Company | Linked record | Many-to-one | Required |
| Linked: Primary Contact | Linked record (Contacts) | Single contact | |
| Linked: All Contacts on Deal | Linked record (Contacts) | Many-to-many — for multi-contact deals | |
| Stage | Linked record (Pipeline Stages) | Use lookup table for flexibility | |
| Stage (display) | Lookup (Pipeline Stages.Stage Name) | For filter/views | |
| Amount | Currency | Annual contract value | |
| Expected Close Date | Date | ||
| Owner | Linked record (Users) | The AE | |
| Source | Single select | Inbound / outbound / referral / partner / other | |
| Created Date | Created time | Auto | |
| Last Stage Change | Date | Updated by automation when Stage changes | |
| Last Activity Date | Rollup (Activities.Date max linked to this Deal) | ||
| Days Since Last Activity | Formula: `DATETIME_DIFF(TODAY(), {Last Activity Date}, 'days')` | For stalled-deal detection | |
| Is Stalled | Formula: `IF(AND({Days Since Last Activity} > 14, NOT(REGEX_MATCH({Stage (display)}, 'Closed'))), '🚨 Stalled', '')` | ||
| Linked: Activities | Linked record | One-to-many | |
| Notes | Long text | ||
| Won/Lost Reason | Long text | Filled at close |
Activities
| Field | Type | Purpose |
|---|---|---|
| Activity Name | Formula | Primary |
| Type | Single select | Email / Call / Meeting / Note / Task |
| Subject | Single-line | |
| Date | Date | When it happened |
| Notes | Long text | |
| Linked: Contact | Linked record | Required |
| Linked: Deal | Linked record | Optional |
| Linked: Owner | Linked record (Users) | Who did it |
| Source | Single select | Manually logged / Gmail sync / Slack-logged / etc. |
| Created Date | Created time |
Users
Standard: Name, Email, Role (single-select: AE / SDR / Sales Lead / Founder / RevOps), Active (checkbox)
Pipeline Stages
Name, Order (number for sorting), Probability (number 0-1), Is Closed (checkbox)
Link Structure
Users ─owns─→ Companies
Users ─owns─→ Deals
Users ─did─→ Activities
Companies ─has─→ Contacts (one-to-many)
Companies ─has─→ Deals (one-to-many)
Contacts ─on─→ Deals (many-to-many)
Contacts ─had─→ Activities (one-to-many)
Deals ─uses─→ Pipeline Stages (many-to-one)
Deals ─has─→ Activities (one-to-many)
Critical normalization point: company-level data (industry, size, country) lives ONLY on Companies. Contacts inherit via lookup. Deals inherit via lookup-through-Company. Don't duplicate — when a company changes industry, you only update one record.
Views per Role
For AEs (their personal pipeline)
- My Active Deals: Deals filtered by Owner = current user, Stage != Closed-Won/Lost. Sorted by Expected Close Date asc.
- My Stalled Deals: Deals filtered by Owner = current user, Is Stalled = '🚨 Stalled'. Most urgent.
- My Today's Activities: Activities filtered by Owner = current user, Date = today.
- My Won This Quarter: Deals filtered by Owner = current, Stage = Closed-Won, Created Date >= start-of-quarter.
For SDRs (lead-focused)
- My Inbound Queue: Contacts filtered by Lifecycle Stage = MQL, Owner = current. Sorted by activity recency.
- My Outbound Sequenced: Contacts I've enrolled in outbound — separate field or Activities-linked.
For Sales Lead (team-wide)
- Team Pipeline by Stage: Deals grouped by Stage. Quick visual of pipeline distribution.
- Stalled Deals (All): Is Stalled = '🚨 Stalled'. For weekly forecast call.
- Pipeline by Owner: Deals grouped by Owner. For 1:1 prep.
- Inbound vs Outbound Trend: Deals grouped by Source.
For Founders (read-mostly)
- This Quarter Summary: dashboard view (use Interface Designer) showing total open pipe, won this quarter, deal-volume by stage chart.
- Top 20 Companies by ARR: sorted by Total ARR desc.
For RevOps
- Data Quality: Contacts where Email is blank. Companies where Industry is blank. (Find data gaps to fill.)
- Sync Status: Companies where Apollo enrichment is stale (>90 days). Activities where Owner is blank.
For all (shared)
- Master Companies List: simple list with key fields
- Master Contacts List: simple list with key fields
Automations Worth Building
v1 (build immediately):
1. Slack Alert: Deal Stage Change
- Trigger: Record updated in Deals where Stage changes
- Action: Send Slack message to #sales channel: '{Owner} moved {Deal Name} from {Old Stage} → {New Stage}'
- Why: keeps team aware, signals momentum, social-proofs activity
2. Daily Stalled Deal Digest
- Trigger: Daily at 9am Pacific
- Action: Send Slack DM to each AE listing their stalled deals (Is Stalled = '🚨 Stalled')
- Why: stalled deals are the #1 silent killer; daily prompt forces action
3. Auto-update Last Stage Change
- Trigger: Record updated in Deals where Stage changes
- Action: Set 'Last Stage Change' field = today
- Why: lets you compute time-in-stage for forecast accuracy
v2 (build after 4 weeks of v1 use):
4. Sync Is-Paying-Customer from app DB
- Trigger: scheduled hourly via webhook from your app's DB or a sync source
- Action: update Companies.Is Paying Customer + Total ARR
- Why: keeps the 'paid customer' signal accurate without manual updates
5. Auto-create Activity from Gmail
- Trigger: Email sent to/from a Contact's email address
- Action: create Activity record linked to Contact, Type = Email
- Why: activity tracking without manual logging burden
- Caveat: Airtable's native Gmail sync is mediocre. Use Zapier or Make for reliable Gmail-to-Airtable bridge.
Sync Sources
Slack
- One-way: Airtable → Slack (deal-stage alerts, stalled-deal digest)
- No two-way needed for v1
Gmail
- One-way: Gmail → Airtable Activities (logs emails to/from contacts)
- Use Zapier (~$19/month for the volume) — Airtable's native is unreliable
App DB
- One-way: app DB → Airtable Companies (paying status, ARR)
- Use Airtable's native Sync source if your app DB is Postgres + accessible, or webhook-based via your backend
HubSpot (during migration only)
- One-way: HubSpot → Airtable for the 1500 contacts + 200 deals migration
- Airtable's HubSpot Sync extension handles initial pull
- After migration: disconnect; HubSpot is no longer source-of-truth
Apollo (enrichment)
- On-demand or scheduled: Apollo → Airtable Contacts (job title, seniority, company size)
- Use Airtable's Apollo extension or a custom Zap
Permission Design
Admin (RevOps + founders): Full base access
Editor (AEs + SDRs + Sales Lead):
- Edit access to all tables
- Cannot delete records
- Cannot modify base structure (table fields)
Read-only (board members or external advisors):
- Shared via Interface Designer dashboard
- See aggregated views only — total pipe, won this Q, top companies
- NO direct base access
Per-table considerations:
- Activities are write-heavy and noisy. Don't restrict — let everyone log.
- Pipeline Stages table: read-only for everyone except RevOps (only RevOps can add/reorder stages)
- Users table: only RevOps can edit
Scaling Boundaries
Comfortable range (your design works fluidly):
- Companies < 5K
- Contacts < 20K
- Deals < 1.5K
- Activities < 50K
- Total: ~75K records
Performance signs to watch for as you grow:
- Views with rollups (Total Open Pipeline) take >2s to load → first sign of strain
- Search across Activities slows noticeably (typical at >50K activities)
- Automations occasionally fail or delay (Pro tier hits limits at 25K runs/month)
- Interface Designer dashboards refresh slowly
At 18-month projection (10K contacts, 800 deals, ~30K activities): comfortable.
At 3-year projection (40K contacts, 3K deals, 100K activities): expect performance issues. Specifically:
- Activities table search will be slow
- Cross-table rollups will be visibly slow
- View loading on Companies (with the rollups) will hit 3-5s
Migration trigger: when (a) view loads exceed 5s AND (b) Activities table exceeds 75K records AND (c) you're on Business tier already. At that point, evaluate Postgres + Retool or moving back to HubSpot Pro.
Implementation Order
Week 1: Schema + Tables
- Create the 7 tables
- Add all fields per spec
- Set primary fields
- Build link structure
- Configure 1-2 critical views per table (no role-specific views yet)
Week 2: Migration from HubSpot
- Export HubSpot Companies → import to Airtable Companies
- Export Contacts → import (verify email-based dedup)
- Export Deals → import (preserve Stage history if possible)
- Spot-check 50 random records for accuracy
- Disconnect HubSpot as source-of-truth
Week 3: Views per role
- Build all role-specific views (AE, SDR, Sales Lead, Founder, RevOps)
- Test with each role's primary user
- Iterate based on feedback
Week 4: Automations v1
- Slack deal-stage-change alert
- Daily stalled-deal digest
- Auto-update Last Stage Change
- Test for 1 week
Week 5-6: Integrations
- Gmail → Activities sync (Zapier)
- App DB → Companies sync (paying status)
- Apollo enrichment
Week 7: Interface Designer dashboards
- Founder summary view
- Sales Lead pipeline overview
- Read-only board dashboard
Week 8: Polish + handoff
- Document the base in a 'README' base or Notion page
- Train each role on their views
- Establish RevOps weekly maintenance cadence
What This Base Won't Solve
- Email send infrastructure: Activities tracks emails but doesn't send them. Use Gmail / Apollo / Outreach for outbound sending.
- Deal-room collaboration: Airtable is for internal CRM, not customer-facing deal rooms.
- Quote/contract generation: out of scope. Use a separate tool (PandaDoc, etc.).
- Forecasting algorithms: rollups give you raw numbers; complex weighted forecasting requires custom formulas or external tooling.
- Compliance / SOC2-grade audit trail: Airtable has limited audit logging. If you need full record-of-changes, use a real CRM or layer on top.
- Marketing automation: sequences, drip campaigns, lead scoring — Airtable is the wrong tool. Use HubSpot Marketing Hub or similar.
Maintenance Cadence
Daily (RevOps, ~5 min):
- Skim daily stalled-deal digest
- Spot-check any anomalies in Slack alerts
Weekly (RevOps, ~30 min):
- Review Data Quality views (blank emails, blank industries)
- Verify automations didn't fail silently (Airtable shows failed automation runs)
- Add new Pipeline Stages if needed
Monthly (RevOps + Sales Lead, ~1 hour):
- Audit views — are any unused? Retire.
- Review automations — any noise? Tune triggers.
- Check sync source freshness — Apollo enrichment, app DB push
Quarterly (RevOps + Founders, ~half day):
- Performance review — view load times, automation queue
- Schema review — new fields needed? Old fields unused?
- Permission audit
- Plan tier evaluation (do you need Business tier yet?)
Annually (full audit):
- Migration evaluation: still scaling well? Or approaching the wall?
- Re-architect if outgrowing
Key Takeaways
- Airtable is right for your scale and team. Plan migration trigger around 18-month mark to keep options open.
- Normalize ruthlessly. Company-level data lives ONLY on Companies; Contacts and Deals lookup to it.
- The 5 critical views: AE personal pipeline, stalled deals, team pipeline by stage, founder summary, data-quality. Build these first.
- Automate the 3 things that pay off immediately: Slack stage alerts, daily stalled-deal digest, auto-Last-Stage-Change. Skip the others until you've used the base for 4 weeks.
- At 3-year projection scale (40K contacts, 100K activities), expect performance taxes. Plan migration to Postgres+Retool or HubSpot Pro at the 18-month evaluation.
- RevOps owns the base. Without an internal owner, Airtable bases drift within 6 months.
Common use cases
- Solo founder running their CRM in Airtable and watching it sprawl
- Operations lead at 5-50 person team migrating from spreadsheets to Airtable
- Product team using Airtable as a feature-request + roadmap tracker
- Agency managing client deliverables across multiple workspaces
- Founder evaluating Airtable vs Notion vs custom DB before committing
- Builder trying to figure out which Airtable features actually matter for their use case
Best AI model for this
Claude Opus 4. Database schema design needs reasoning about normalization, relationships, and scaling boundaries — exactly Claude's strengths. ChatGPT GPT-5 second-best.
Pro tips
- Normalize ruthlessly upfront. Duplicate data in 2 places will get out of sync within 4 weeks. Always link instead.
- Primary field design matters. Choose a field that's HUMAN-READABLE and unique — 'Customer Name + Domain' beats raw record IDs.
- Views are free. Create a view per role/use-case rather than making people filter every time. Sales view, Ops view, Founder view — different filters, same data.
- Don't over-automate early. Automations are powerful but break silently. Build manual workflows first; automate the ones you've manually run 10+ times.
- Linked records vs lookup vs rollup vs formula — they have different semantics. Wrong choice causes 'why is this number wrong' debugging sessions later.
- Airtable scales to ~50K records gracefully, ~500K painfully, beyond that you're paying performance taxes. Plan migration BEFORE you hit the wall.
- Permission design beats Permission audit. Role-based shared views > giving everyone admin and praying.
Customization tips
- Specify scale at multiple time horizons (now / 1y / 3y). Schema decisions optimize for the 3-year scale; views optimize for now.
- List ALL integrations needed, including read-only ones. Some integrations (Apollo, Calendly) need different fields than others (Slack alerts).
- Be specific about user roles. AE vs SDR vs Sales Lead vs Founder vs RevOps need different views — the architecture is calibrated to that.
- List the 3-5 KEY QUESTIONS the base must answer at a glance. Views are designed against these questions, not against generic 'show me all data' patterns.
- If migrating from another tool (HubSpot, Salesforce, spreadsheets), specify it. The migration plan is a real timeline.
- Use the Migration to Postgres Mode variant when you've outgrown Airtable — it designs the schema move with minimal disruption.
Variants
Solo Founder Mode
For 1-person operations — picks the minimum viable base structure with growth headroom for ~3 years.
Small Team CRM Mode
For Airtable-as-CRM in a small team — emphasizes deal pipeline, contact deduplication, and reporting views.
Project / Resource Tracking Mode
For agencies + ops teams managing projects, time, deliverables — emphasizes timeline + capacity + status workflows.
Migration to Postgres Mode
When your Airtable has outgrown its container — designs the schema migration to a real database with minimal disruption.
Frequently asked questions
How do I use the Airtable Database Architect prompt?
Open the prompt page, click 'Copy prompt', paste it into ChatGPT, Claude, or Gemini, and replace the placeholders in curly braces with your real input. The prompt is also launchable directly in each model with one click.
Which AI model works best with Airtable Database Architect?
Claude Opus 4. Database schema design needs reasoning about normalization, relationships, and scaling boundaries — exactly Claude's strengths. ChatGPT GPT-5 second-best.
Can I customize the Airtable Database Architect prompt for my use case?
Yes — every Promptolis Original is designed to be customized. Key levers: Normalize ruthlessly upfront. Duplicate data in 2 places will get out of sync within 4 weeks. Always link instead.; Primary field design matters. Choose a field that's HUMAN-READABLE and unique — 'Customer Name + Domain' beats raw record IDs.
Explore more Originals
Hand-crafted 2026-grade prompts that actually change how you work.
← All Promptolis Originals