Airtable Bridge for Odoo
by ResilientByte Maroc https://odoo.kone-adama.com , Kone Adama https://odoo.kone-adama.com$ 25.02
Airtable Bridge for Odoo
Full bidirectional sync between Airtable and Odoo — dynamic mapping, quotas, webhooks and a migration assistant.
PAT or OAuth
Connect with a Personal Access Token for a single account, or OAuth for multi-client / public setups (agencies managing several customers' bases).
25 field types supported
Text, number, currency, percent, checkbox, date, select, user, attachment, link to another record, formula, rollup, AI fields and more — each with the right Odoo conversion.
Migration assistant
Point it at a whole Airtable base: it analyzes every table, suggests Odoo models, flags incompatible fields, runs a bounded test import, then migrates everything for real.
Key features
- Authentication via Airtable Personal Access Token, or OAuth for multi-client / public use
- Discovery of workspaces, bases, tables, views, fields and schema through the Airtable Meta API
- Dynamic, per-table field mapping to any Odoo model, with smart name-based Odoo field guessing
- Converters for every Airtable field type: text, long text, rich text, number, currency, percent, rating, duration, barcode, checkbox, date, date-time, email, phone, URL, single/multiple select, user, attachment, link to another record, formula, rollup, lookup, AI-generated text and more
- Bidirectional synchronization: Airtable → Odoo, Odoo → Airtable, or both
- Attachment retrieval and record-to-record relation resolution (auto find-or-create by name)
- Strict quota management: 5 requests/second/base throttling, batching (max 10 records/call), 429 handling with automatic backoff, configurable daily safety quota
- Full webhook lifecycle: create, receive (ping + cursor-based payload fetch), automatic periodic refresh, disable, and loop prevention through data-hash comparison
- Migration assistant: analyze a base, suggest Odoo models per table, detect incompatible field types, preview, run a bounded test import, produce an anomaly report, then migrate for real
- Technical sync queue, logs, conflict resolution and a supervision dashboard with KPIs
- Domain filters to restrict exactly which Odoo records get exported
- Multi-company, dedicated security groups, tokens and secrets hidden from the UI and logs
Odoo compatibility
This module is developed and tested for Odoo 16.0 Community, following the same modular architecture as our other connectors so that ports to further versions stay straightforward.
1. Create a Personal Access Token
Go to airtable.com/create/tokens and create a token with at
least these scopes: data.records:read, data.records:write,
schema.bases:read, and webhook:manage if you plan to use
real-time webhooks. Under Access, add the base(s) you want to sync
— a token with no base access will authenticate successfully but return zero
bases when browsing.
2. Connect your Airtable account
Go to Airtable Connector > Configuration > Connections and create a new connection:
- Auth Type: Personal Access Token (recommended for a single account) or OAuth for public / multi-client use.
- Personal Access Token: paste the token created in step 1.
- Environment: a free-text label (Production, Staging...) to organize multiple connections — Airtable itself has no server environments.
- Daily Call Quota: an optional safety cap on API calls per day (0 = unlimited); combined with the built-in 5 requests/second/base throttling.
Click Test Connection to verify the token. The connection state turns green ("Connected") once confirmed.
3. Create a Model Mapping
From the connection form, use Discover Bases & Tables to
browse everything the token can see, or Register Table by ID if you
already know the Base ID and Table ID (both are visible in the Airtable URL, e.g.
airtable.com/appXXXXXXXXXXXXXX/tblXXXXXXXXXXXXXX/...). Then go to
Model Mappings > New and set:
- Airtable Source: connection, base, table, and optionally a specific Airtable view or a filter formula to restrict which records are imported.
- Odoo Target: the Odoo model to sync with (Contacts, CRM leads, products, or any custom model).
- Direction: Airtable → Odoo, Odoo → Airtable, or Bidirectional.
- Conflict Strategy: Last Modified Wins, Keep Odoo, Keep Airtable, or Manual (always opens a Conflict record).
- Odoo Export Domain: an optional Odoo domain (e.g.
[('id','in',[46,47,48])]) to restrict exactly which Odoo records are ever pushed to Airtable — strongly recommended before your first export. - Sync Frequency: how often the scheduled sync runs for this mapping.
4. Discover Fields and fine-tune the Field Mapping
Click Discover Fields: the connector reads every column of the Airtable table and automatically creates a Field Mapping row for each one, guessing the matching Odoo field from its name, and marking formulas/rollups/lookups/AI fields as read-only automatically (the Airtable API will not accept writes on them). Open the Field Mappings smart button to review and adjust:
- Odoo Field: change the auto-guessed target field, or map a field the guesser did not recognize.
- Used as Matching Key: the field(s) used to detect that an existing Odoo record and Airtable record refer to the same entity (typically Name).
- Read-only (cannot write): automatically set, can be reviewed.
- Conflict Priority: per-field override of which side wins.
Airtable Single select, Multiple select, User and Link to another record fields are automatically resolved into real Odoo Many2one / Many2many relations (target records are found or created by name on the fly), and Attachment fields are downloaded and attached to the Odoo record.
5. Run your first sync
From the Model Mapping form, use Initial Import (pull every matching Airtable record into Odoo once), Initial Export (push matching Odoo records into Airtable, respecting the Odoo Export Domain), or Synchronize Now for a full bidirectional pass — the same logic the scheduled cron uses. Every run creates a Sync Job with its exact status, duration, HTTP result and record count.
If you want real-time updates instead of waiting for the next scheduled run, click
Register Webhook. Airtable requires the notification URL to be a
publicly reachable HTTPS address (set Webhook Base URL on
the connection if your Odoo instance isn't served on the same domain as
web.base.url) — this is an Airtable platform requirement, not a
limitation of this connector.
6. Resolve conflicts
When the same record changed on both sides and the mapping's Conflict Strategy is Manual (or the automatic strategy could not decide), a Conflict record shows the Odoo value and the Airtable value side by side. Choose Keep Odoo, Keep Airtable, or Apply Manual Value after editing the value yourself.
7. Migrating a whole Airtable base
Rather than mapping tables one by one, open the Migration Assistant from a connection and give it a Base ID. It walks you through five steps:
- Select Base: enter the Airtable Base ID.
- Analysis: every table is fetched, incompatible field types and relation fields are flagged, and an Odoo model is suggested per table based on its name (you can always override the suggestion).
- Preview: an anomaly report lists tables with no suggested model, computed fields that will import read-only, and relations that require their target table to be migrated too.
- Test Import: creates the real Model/Field Mappings for the tables you kept, then imports a bounded sample (5 records per table) so you can inspect the result in Odoo before committing further.
- Final Migration: runs the full import, with no record limit, for every mapping created during the test step.
Keeping an eye on things
The Dashboard gives you, at a glance: active connections, records synced today, pending jobs, failed jobs, open conflicts and webhooks received today, plus recent connections and sync jobs. Sync Logs gives a line-by-line technical trace of every job, and secrets (tokens, passwords) are always redacted before being stored or displayed. If a job fails, it automatically retries with exponential backoff up to the mapping's Max Retries; a single bad record never blocks the rest of a batch, so one failure results in a "Partially Successful" job rather than losing the whole run.
Support
ResilientByte Maroc / Kone Adama — odoo.kone-adama.com
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Contacts (contacts)
• Discuss (mail) |
| Lines of code | 2757 |
| Technical Name |
odoo_airtable_connector |
| License | OPL-1 |
| Website | https://odoo.kone-adama.com |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module