An ERP and Airtable integration often starts with a simple requirement: move operational records from Airtable into an ERP without forcing teams to re-enter data. The problem appears when that workflow grows. Duplicate records, inconsistent field types, failed API requests, and partial updates can leave the ERP and Airtable out of sync.
This is where ERP Integration Services need more than a direct API connection. The integration should define ownership of data, normalize payloads, handle retries, and make synchronization observable. In this guide, we will build an Airtable integration pattern using a backend service, REST APIs, and a queue-oriented approach.
For teams evaluating an integration architecture, ERP integration services can also be structured around existing ERP APIs rather than tightly coupling Airtable to the ERP database.
Context and Setup
The recommended architecture places an integration service between Airtable and the ERP:
Airtable
|
| REST API
v
Integration Service
|
+--> Validation / Mapping
|
+--> Queue / Retry Layer
|
v
ERP API
|
v
ERP Database
The integration service becomes the control point for authentication, transformation, retries, logging, and business rules.
This matters because Airtable's Web API currently limits requests to 5 requests per second per base. Records are also returned in pages of up to 100 records, while batch operations can handle up to 10 records per request.
For developers, this means an integration should not assume that one API call represents one complete synchronization cycle.
There is also a broader reason to keep the API boundary explicit. The 2024 Stack Overflow Developer Survey reported that 90% of respondents preferred API and SDK documentation as a technical documentation source, reinforcing the importance of well-defined integration contracts.
Designing ERP Integration Services for Airtable
The key design decision is to treat Airtable as an external data source rather than as an extension of the ERP database.
Step 1: Define the system of record
First, decide which platform owns each entity.
For example:
- Airtable owns temporary operational requests.
- The ERP owns customers, invoices, inventory, and financial records.
- The integration service maps Airtable fields to ERP entities.
- A synchronization ID connects the external record with its ERP counterpart.
- Updates are rejected when mandatory ERP fields are missing.
A simple mapping might look like:
Airtable ERP
------------------------------------------------
record.id -> external_reference
Company Name -> customer.name
Email -> customer.email
Order Value -> sales_order.amount
Status -> sales_order.status
This prevents a common integration failure: allowing both systems to modify the same business field without a defined ownership rule.
Step 2: Build the Airtable ingestion layer
The ingestion service should fetch records incrementally, validate them, and transform them into an internal representation.
A Node.js example:
import axios from "axios";
const airtableUrl =
`https://api.airtable.com/v0/${process.env.BASE_ID}/${process.env.TABLE_ID}`;
async function fetchRecords(offset) {
return axios.get(airtableUrl, {
headers: {
Authorization: `Bearer ${process.env.AIRTABLE_TOKEN}` // Why: keeps credentials outside source code
},
params: {
pageSize: 100, // Why: uses Airtable's maximum page size
offset
}
});
}
async function syncAirtable() {
let offset;
do {
const response = await fetchRecords(offset);
for (const record of response.data.records) {
await processRecord(record); // Why: isolates transformation from API retrieval
}
offset = response.data.offset;
} while (offset);
}
The important part is pagination. A production integration should also persist a cursor or synchronization checkpoint so a process restart does not require a complete reload.
Step 3: Add retries and idempotency
A failed ERP request should not automatically create a second customer or sales order.
Use an idempotency key derived from the Airtable record ID and business operation:
async function processRecord(record) {
const idempotencyKey = `airtable:${record.id}`;
// Why: prevents duplicate ERP creation after a retry
if (await alreadyProcessed(idempotencyKey)) {
return;
}
const payload = mapToERP(record);
await sendToERP(payload, {
"Idempotency-Key": idempotencyKey
});
await markProcessed(idempotencyKey);
}
For higher-volume systems, place ERP operations behind a queue such as Amazon SQS. The worker can then control concurrency instead of allowing every Airtable record to trigger an immediate ERP request.
This is particularly important for Airtable because exceeding its API rate limit produces HTTP 429 responses. Airtable recommends waiting before retrying, and its current documentation specifies a 5-request-per-second per-base limit.
Why this architecture instead of a direct Airtable-to-ERP connection?
A direct connection is acceptable for a small workflow with a few records and limited business rules. It becomes harder to maintain when you introduce transformations, multiple ERP endpoints, audit requirements, retries, or additional sources.
An integration service gives the architecture a dedicated place for:
- Schema validation
- Authentication
- Data transformation
- Retry policies
- Rate limiting
- Audit logging
- Dead-letter processing
- Monitoring
That approach also makes it easier to replace Airtable later without rewriting the ERP's internal business logic.
Real-World Application
In one of our ERP integration projects at Oodles, the implementation involved aligning business workflows with an ERP platform, configuring the ERP around operational requirements, and managing integration and implementation activities rather than treating the ERP as an isolated application. Oodles' public ERP work includes ERPNext implementation projects focused on process optimization, configuration, and integration.
The broader lesson from this type of implementation is that integration quality depends on the boundary between systems. Mapping rules, ownership, validation, and retry behavior should be designed before API calls are written.
Oodles works across ERP platforms and API-driven systems, including Odoo, ERPNext, Zoho, QuickBooks, and Salesforce.
Conclusion: Key Takeaways
- Define ownership first: Decide which platform is authoritative for every business entity and field.
- Use an integration layer: Keep Airtable-specific API logic outside the ERP's core business logic.
- Design for pagination: Airtable returns records in pages, so synchronization must handle continuation tokens.
- Make writes idempotent: Retries should never create duplicate ERP records.
- Control request rates: Airtable's 5 requests-per-second per-base limit should influence queue and worker design.
Start a Technical Discussion
If you are designing an Airtable-to-ERP workflow, the most useful starting point is usually the data contract: identify the source entities, ERP destinations, synchronization direction, failure scenarios, and expected volume.
For architecture questions or integration requirements, you can discuss them with the Oodles engineering team through ERP Integration Services.
FAQ
1. What are ERP Integration Services?
ERP Integration Services connect an ERP platform with external applications such as Airtable, CRM systems, marketplaces, payment platforms, or internal applications. They typically include API integration, data mapping, validation, synchronization, authentication, error handling, monitoring, and workflow orchestration.
2. Can Airtable integrate directly with an ERP?
Yes. Airtable can communicate with an ERP Integration Services through REST APIs, webhooks, or an integration platform. A middleware service is preferable when the workflow requires transformations, retries, rate limiting, audit logs, or synchronization across multiple systems.
3. How should Airtable API rate limits be handled?
Airtable currently enforces a rate limit of 5 requests per second per base. Applications should use controlled concurrency, batching where appropriate, exponential backoff, and retry handling for HTTP 429 responses.
4. Why is idempotency important in ERP integrations?
Idempotency prevents the same external event from creating duplicate ERP records. An integration can store an external record ID or idempotency key and check it before processing a write operation.
5. Are ERP Integration Services suitable for Airtable workflows?
Yes. ERP Integration Services are suitable when Airtable is used for operational data while the ERP remains the authoritative system for customers, orders, inventory, accounting, or other core records. The integration layer can control mapping and synchronization between them.
Top comments (0)