---
title: 'How to Integrate Airtable with Salesforce'
description: 'Sync Airtable and Salesforce records — native actions, Make/Zapier patterns, two-way sync architecture, and when Airtable belongs alongside Salesforce.'
canonical_url: 'https://www.business-automated.com/tutorials/airtable-salesforce-integration'
md_url: 'https://www.business-automated.com/tutorials/airtable-salesforce-integration.md'
last_updated: 2026-07-20
---

Most teams asking how to integrate [Airtable](/airtable-consultant) with Salesforce don't actually want to replace one with the other. They want Salesforce to keep running the sales motion and Airtable to handle everything sales hands off — onboarding, delivery, projects, custom client data, billing. The integration is the seam between the two systems.

This guide walks through the four real patterns we build for enterprise clients: Airtable's native Salesforce sync, two-way Make/Zapier flows, custom API integrations for high volume, and the architecture decisions that prevent the integration from becoming a maintenance burden.

For native actions specifically (Salesforce automation actions inside Airtable), see our deeper guide on [syncing Airtable to Salesforce with native actions](/tutorials/sync-airtable-to-salesforce-native-actions). This guide covers the broader picture.

## Pattern 1: Native Salesforce Sync (Salesforce → Airtable)

The simplest setup, available on Airtable's Team plan and above. Salesforce is the source of truth; Airtable mirrors a read-only copy.

### How to set it up

1. In Airtable, click **Add or import** at the top of the bases list.
2. Choose **Salesforce**.
3. Sign in with a Salesforce user that has API access enabled.
4. Pick the Salesforce object (Accounts, Contacts, Opportunities, Leads, Cases, or a custom object) or a Salesforce report as the source.
5. Choose which fields to import.
6. Set refresh frequency — every 5 minutes on most plans.

Airtable creates a new synced table. The data is read-only on the Airtable side; edits must happen in Salesforce.

### What it's good for

- **Linking Salesforce records to Airtable objects.** Sync Accounts into Airtable, then build Projects, Invoices, or Tasks that link to those Account records.
- **Reporting layers.** Pull Opportunities into Airtable for cross-system dashboards combining sales pipeline with delivery data.
- **Field-restricted teams.** Salesforce licenses are expensive; Airtable Editor seats are not. Sync enough Salesforce data to Airtable that ops teams can do their work without needing Salesforce logins.

### What it can't do

Native sync is **one-way only** — you can't push Airtable edits back through this channel. For write-back, use native Salesforce actions in automations or Make/Zapier (covered next).

For Airtable's official docs, see the [Salesforce sync integration guide](https://support.airtable.com/docs/salesforce-sync-integration).

## Pattern 2: Native Salesforce Actions in Automations (Airtable → Salesforce)

Available on Business and Enterprise plans, native Salesforce automation actions let you create and update Salesforce records from Airtable without Make or Zapier.

### The actions available

- **Create Salesforce record** — accepts the object type and field values.
- **Update Salesforce record** — requires a Salesforce record ID.
- **Find Salesforce record** — looks up a record by field criteria.

### Common automation: deal-to-Salesforce-opportunity

When a project closes in Airtable, create a renewal opportunity in Salesforce automatically.

1. **Trigger:** *When record matches conditions* — Project Status = "Complete" AND Renewal Likelihood = "High."
2. **Find action:** Find Salesforce Account by Account ID stored on the project.
3. **Create action:** Create Salesforce Opportunity with stage = "Discovery," amount = project budget × 0.8, close date = 30 days out.
4. **Update Airtable record:** write the new Opportunity ID back to the project.

This is the cleanest write pattern because there's no third-party tool to break. It only works on Business+ Airtable plans — for Team plans, fall back to Make/Zapier.

## Pattern 3: Make / Zapier for Two-Way Sync

When you need bidirectional flow with conflict logic, transformations, or complex branching, Make and Zapier are the workhorses. We use [Make](/make-automation-agency) for most client projects because of better error handling.

### Salesforce → Airtable: the inbound pattern

1. **Trigger:** Make's Salesforce *Watch records* (Accounts/Contacts/Opportunities) or scheduled *Search records*.
2. **Search:** Airtable *Search records* by stored Salesforce ID.
3. **Router:**
   - If found → Airtable *Update record*.
   - If not found → Airtable *Create record* with the Salesforce ID.

### Airtable → Salesforce: the outbound pattern

1. **Trigger:** Airtable *Watch records* (or an Airtable automation webhook for low-latency).
2. **Search:** Salesforce *Search record* by stored Airtable ID custom field.
3. **Router:**
   - If found → Salesforce *Update record*.
   - If not found → Salesforce *Create record*, then write the new ID back to Airtable.

### True two-way sync: the conflict resolution problem

If both sides can edit the same field, you have to define what wins. Three patterns:

| Strategy | How it works | When to use |
| --- | --- | --- |
| **Last-write-wins** | Most recent `Last Modified` wins | Low-conflict workflows |
| **Field-level ownership** | Specific fields belong to specific tools | Most enterprise setups |
| **Source of truth + mirror** | One tool is canonical; other is read-only | Recommended default |

Don't build true two-way sync if you can avoid it. The maintenance cost is real.

## Pattern 4: Custom API Integration for High Volume

When Make/Zapier costs add up (typically above 50,000 syncs/month) or you need sub-second latency, build a custom integration against the Salesforce REST or Bulk API and Airtable REST API.

### When the API is worth it

- **Bulk operations.** 100K+ records per month. Salesforce Bulk API handles 10,000 records per batch; Airtable bulk endpoints handle 10. Plan accordingly.
- **Sub-second latency.** Salesforce platform events → AWS Lambda → Airtable write, in under 500ms end-to-end.
- **Compliance.** Integration runs inside your own infrastructure with full audit trails.
- **Complex transformations.** Joining multiple Salesforce objects into denormalized Airtable rows is easier in code than in Make.

### Architecture sketch

```text
Salesforce Platform Event
        ↓
   AWS Lambda / Cloud Function
        ↓
   Airtable Bulk API
        ↓
Airtable Record (with Salesforce ID)
```

For the reverse direction, an Airtable webhook automation calls the same Lambda, which calls the Salesforce REST API.

## Comparison: Which Pattern Fits Which Job

| Need | Best Pattern | Plan Required |
| --- | --- | --- |
| Mirror Salesforce Accounts in Airtable | Native sync | Team+ |
| Create Salesforce Opportunity from Airtable | Native action | Business+ |
| Two-way sync of Contacts with conflict logic | Make/Zapier | Any |
| Sync 100K+ records monthly | Custom API | Any (eng resources) |
| Cross-system reporting | Native sync into Airtable | Team+ |
| Real-time platform event reactions | Custom API with Lambda | Any |

## Architecture Decisions That Matter

### Pick a source of truth per object

For every object you sync, decide which tool owns it.

- **Accounts and Contacts:** Usually Salesforce. Sales and marketing own them.
- **Opportunities (in pipeline):** Salesforce. Until they close-won.
- **Projects (post-close):** Airtable. Delivery owns them.
- **Custom objects beyond Salesforce schema:** Airtable. Cheaper and more flexible than Salesforce custom objects.

### Use Salesforce IDs as join keys

Every Airtable record mirroring a Salesforce object needs a `Salesforce ID` field (Single line text, 18-character format preferred). Every Salesforce object mirroring an Airtable record needs an `Airtable Record ID` custom field. Sync on IDs, never on email or name.

### Use Salesforce External ID fields for upserts

Salesforce supports designating a custom field as an "External ID" — this enables the Upsert API, which creates-or-updates in a single call based on the External ID value. Add an `Airtable Record ID` External ID field on every synced Salesforce object. Make's Salesforce Upsert module uses this directly.

### One scenario per direction per object

Don't build "the everything syncer." Build:

- Salesforce Accounts → Airtable Companies
- Salesforce Contacts → Airtable Contacts
- Salesforce Closed-Won Opportunities → Airtable Projects
- Airtable Project Status → Salesforce Opportunity Custom Field

Each is independently testable, debuggable, and changeable.

## Common Mistakes

**Mistake 1: Trying to replace Salesforce with Airtable for an enterprise sales team.** Airtable is not Salesforce. If your sales motion depends on territory management, complex forecasting, or AppExchange tools, stay on Salesforce. Integrate, don't migrate.

**Mistake 2: Syncing every field.** Sync only the fields downstream workflows need. The more fields, the more conflict logic, the more breakage.

**Mistake 3: Blowing through Salesforce API limits.** Professional Edition has 1,000 calls/day. A naïve Make scenario polling every 5 minutes burns through that in a day. Use the Bulk API for batches, and trigger-based webhooks (Salesforce Outbound Messages or Platform Events) instead of polling.

**Mistake 4: Not handling Salesforce required fields.** When you Create a record from Airtable, Salesforce rejects the call if required fields are missing. Map every required field, or your automation silently fails.

**Mistake 5: Forgetting Person Accounts vs. Standard Accounts.** If your Salesforce org uses Person Accounts, the Contact object has different behavior. Confirm your sync handles both models.

## Troubleshooting

**Sync returns "INVALID_LOGIN" errors.** The Salesforce user's password changed, or the connected app's OAuth token expired. Reconnect in the integration tool.

**Records created in Airtable but not appearing in Salesforce.** The Create action is running but failing — open the automation run history. Most often it's a required field missing or a validation rule blocking the insert.

**Duplicate records in Airtable after re-syncing.** The native sync re-imported records as new because the source field changed. The Salesforce ID column should always be your join key — confirm it's set as the unique field.

**Native Salesforce actions greyed out in Airtable Automations.** You're on the Team plan or lower. Native actions require Business or Enterprise.

**Make scenario hits rate limits intermittently.** Add a throttle module set to 5 requests/second for Airtable and 10 requests/second for Salesforce. For batch syncs, switch to the Bulk API module.

## Next Steps

Salesforce integration is rarely a single project — most enterprise setups grow 4–8 distinct scenarios over a year. Start with one direction on one object, run it for a month, and add the next.

For complementary patterns, see our [HubSpot integration guide](/tutorials/airtable-hubspot-integration), [build a CRM in Airtable](/tutorials/how-to-build-crm-in-airtable), and [native Salesforce actions deep dive](/tutorials/sync-airtable-to-salesforce-native-actions). When the integration design needs to span sales, ops, finance, and reporting cleanly, we scope and build the full pipeline. [Get in touch](/contact).


## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
