DEV Community

Richa Singh
Richa Singh

Posted on

How to Build an Airtable Integration for Modern ERP Integration Services

Airtable often starts as a lightweight operational database, but things get complicated when its records need to stay synchronized with an ERP Integration Services. A sales team may create or update a customer in Airtable while the ERP needs to create a partner, update inventory, trigger an order workflow, or maintain an accounting reference.

The problem is rarely the API call itself. The difficult part is handling data mapping, duplicate events, rate limits, retries, partial failures, and system ownership without creating inconsistent records. This is where ERP Integration Services need to be designed as an integration architecture rather than a collection of API requests.

A practical solution is to place an integration layer between Airtable and the ERP, using webhooks, queues, validation, transformation, and idempotent processing.

Context and Setup

The recommended architecture treats Airtable as an external application and keeps ERP business rules inside the ERP or a dedicated integration service.

A typical flow looks like this:

Airtable → Webhook → API Gateway → Queue → Integration Worker → ERP API → Sync Database

This architecture becomes particularly useful when multiple Airtable records can change within a short period.

Airtable's Web API currently documents a limit of 5 requests per second per base, while list-record responses return a maximum of 100 records per page. Airtable also recommends implementing backoff when the API returns a 429 response.

That means an integration should not simply process every change by immediately calling the ERP and Airtable APIs. Instead, it should control the flow of data.

A typical stack could include:

  • Airtable Web API and Webhooks
  • Node.js or Python integration service
  • AWS API Gateway
  • Amazon SQS
  • PostgreSQL
  • Docker
  • Odoo, ERPNext, or a custom ERP API
  • CloudWatch for monitoring

The database should maintain an explicit relationship between systems:

airtable_record_id
erp_record_id
entity_type
sync_status
last_synced_at
last_error
Enter fullscreen mode Exit fullscreen mode

This mapping becomes important when the same record is updated multiple times or when an integration needs to replay a failed event.

Designing ERP Integration Services Around Events

The integration should process changes as events instead of treating every Airtable update as a synchronous transaction.

Step 1: Define the Data Contract

Start by deciding exactly how Airtable fields map to ERP entities.

For example, an Airtable customer table could contain:

Airtable Field Integration Field ERP Field
Customer Name customer.name Partner Name
Email customer.email Email
Phone customer.phone Phone
External ID customer.external_id External Reference
Status customer.status Customer Status

The integration layer should validate the payload before making an ERP request.

For example, if external_id is missing, the worker should reject the event rather than attempting to identify a customer using an unreliable field such as the company name.

This separation also makes future ERP changes easier. If the ERP changes its customer API, the Airtable schema does not necessarily need to change with it.

Step 2: Capture Changes and Queue Them

Airtable's Webhooks API can notify an external application when records change, allowing the integration to react without continuously polling the database.

The webhook endpoint should remain lightweight. Its job is to authenticate the request, identify the event, and place it onto a queue.

The actual ERP operation can then happen asynchronously.

A simplified Node.js worker could look like this:

import fetch from "node-fetch";

async function syncCustomer(event) {
  // Why: Convert Airtable-specific fields into the ERP's data contract.
  const customer = mapAirtableCustomer(event);

  // Why: Reject incomplete records before consuming ERP API capacity.
  if (!customer.externalId || !customer.email) {
    throw new Error("Required customer fields are missing");
  }

  const response = await fetch(process.env.ERP_CUSTOMER_URL, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.ERP_TOKEN}`,
      "Idempotency-Key": customer.externalId
    },
    body: JSON.stringify(customer)
  });

  // Why: Queue infrastructure can retry transient ERP failures.
  if (!response.ok) {
    throw new Error(`ERP request failed: ${response.status}`);
  }

  return response.json();
}
Enter fullscreen mode Exit fullscreen mode

The important part is not the HTTP request. It is the idempotency strategy.

If Airtable generates two events for the same logical change, the ERP Integration Services should not create two customer records. The external ID or idempotency key gives the integration a stable way to recognize that the entity already exists.

Step 3: Control Rate, Retries, and Failures

A production integration should assume that APIs will occasionally fail.

Instead of retrying immediately in a tight loop, place failed events back into the queue using controlled retry intervals.

A useful processing pattern is:

  1. Receive the Airtable event.
  2. Validate the payload.
  3. Check whether the event has already been processed.
  4. Transform the Airtable data into the ERP contract.
  5. Call the ERP API.
  6. Store the resulting ERP identifier.
  7. Mark the event as completed.
  8. Retry transient failures with exponential backoff.
  9. Move repeatedly failed events to a dead-letter queue.

This architecture gives the operations team a way to inspect failures without losing the original event.

It also prevents one unavailable ERP endpoint from blocking every subsequent Airtable change.

Why Batching Matters for Airtable Integration

Batching becomes important when an initial synchronization involves thousands of Airtable records.

Airtable supports batch operations of up to 10 records per request, while its Web API pagination supports up to 100 records per page.

Instead of processing records individually:

Record 1 → API
Record 2 → API
Record 3 → API
...
Enter fullscreen mode Exit fullscreen mode

the integration can retrieve records in pages, transform them, and process supported operations in batches.

However, batching should not mean blindly sending the maximum number of records. The optimal batch size also depends on ERP transaction limits, validation complexity, database locking, and downstream API behavior.

For this reason, production ERP Integration Services typically need configurable concurrency rather than a fixed number hardcoded into the worker.

Real-World Application

At Oodles, we have worked on ERP integrations where external applications needed to exchange operational information with Odoo without forcing every surrounding system to understand Odoo's internal data model.

One example is the Delm8 Route Planner implementation, where Odoo was integrated into operational workflows involving sales, purchase, inventory, accounting, and warehouse processes. The architecture used APIs to connect Odoo with surrounding applications and services.

The architectural lesson applies directly to Airtable integrations: external systems should communicate through clearly defined contracts rather than directly manipulating ERP-specific structures.

For example, Airtable should be able to say:

Create customer
External ID: CUST-1042
Name: Example Company
Email: ops@example.com
Enter fullscreen mode Exit fullscreen mode

The integration layer then determines how that request maps to the ERP.

This approach keeps the external application simple while allowing the ERP implementation to evolve independently. Teams evaluating Oodles for this type of architecture can also use the same principle when connecting CRM, ecommerce, warehouse, accounting, and other business applications.

Key Takeaways

  • Treat Airtable as an external system rather than embedding ERP business logic into Airtable automations.
  • Use webhooks to detect changes and queues to decouple event ingestion from ERP processing.
  • Store Airtable and ERP identifiers together so repeated events remain idempotent.
  • Respect Airtable's documented API limits and implement controlled retries for 429 responses.
  • Use batching for bulk synchronization, but tune concurrency according to both Airtable and ERP constraints.

Start a Technical Discussion

Airtable becomes much more useful when it can participate in a controlled data pipeline rather than acting as an isolated operational database. The right design depends on record volume, synchronization direction, ERP capabilities, failure tolerance, and how quickly changes need to reach downstream systems.

If you are planning an Airtable-to-ERP workflow or need to redesign an existing integration, you can discuss the architecture and requirements through ERP Integration Services.

FAQ

Can Airtable integrate directly with an ERP?

Yes, Airtable can communicate with an ERP through APIs and webhooks, but production workflows usually benefit from an intermediate integration service. The middleware can handle authentication, field mapping, validation, retries, rate limiting, idempotency, logging, and ERP-specific transformations.

Does Airtable support real-time ERP synchronization?

Airtable can send change notifications through its Webhooks API, allowing an external service to react when records change. The integration can then place events into a queue and process ERP Integration Services updates asynchronously, which is generally safer than repeatedly polling Airtable.

How should Airtable API rate limits be handled?

Airtable currently documents a limit of 5 Web API requests per second per base. An integration should therefore control concurrency, batch supported operations, and retry 429 responses using backoff rather than continuously retrying failed requests.

When are ERP Integration Services better than Zapier or Make?

Low-code automation platforms can work for simple workflows, but dedicated ERP Integration Services become more suitable when an integration requires custom transformations, queues, idempotency, complex validation, high-volume processing, audit trails, or application-specific monitoring.

How can duplicate Airtable records be prevented from creating duplicate ERP records?

Use a stable external identifier and store the Airtable-to-ERP relationship in an integration database. Before creating an ERP entity, the worker checks whether that external identifier already exists. This makes repeated webhook events safe to process.

Top comments (0)