Baserow Connector
by ResilientByte Maroc https://odoo.kone-adama.com , Kone Adama https://odoo.kone-adama.com$ 20.01
Baserow Connector
Synchronize Odoo with Baserow Cloud or any self-hosted instance — bidirectional, scheduled, and webhook-driven.
Cloud or self-hosted
Works with Baserow Cloud (api.baserow.io) or any self-hosted instance — the URL is never hard-coded, so you point the connector at your own Baserow.
Dynamic field mapping
Discover workspaces, databases, tables and fields automatically, then map any Baserow table to any Odoo model with smart field-name guessing.
Bidirectional sync
Manual or scheduled synchronization, duplicate detection, conflict resolution and a technical supervision dashboard.
Key features
- Authentication via Baserow Database Token (per-workspace, read/write on table data)
- Optional JWT login (email + password) to unlock workspace/database/table browsing and remote table creation
- Automatic discovery of workspaces, databases, tables and fields, or direct "Register Table by ID"
- Dynamic, per-table field mapping to any Odoo model (contacts, CRM, products, custom models)
- Smart field-name guessing when discovering fields (Email → email, Phone → phone, Name → name, etc.)
- Bidirectional synchronization: Odoo → Baserow, Baserow → Odoo, or both
- Automatic conversion of Baserow single/multiple select and link-to-table fields into real Odoo Many2one / Many2many relations
- Manual and scheduled synchronization with retry and exponential backoff
- Duplicate detection via a dedicated binding table (one Odoo record <-> one Baserow row)
- Configurable conflict resolution strategy per mapping (last modified wins, keep Odoo, keep Baserow, manual)
- Webhook receiver for real-time updates pushed from Baserow, with secret verification
- Technical sync queue, sync jobs, logs and a supervision dashboard with KPIs
- Domain filters to restrict exactly which Odoo records get exported
- Multi-company, dedicated security groups, tokens and passwords 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. Connect your Baserow account
Go to Baserow Connector > Configuration > Connections and create a new connection. Fill in:
- URL:
https://api.baserow.iofor Baserow Cloud, or your self-hosted instance's base URL. - Database Token: create one in Baserow under Settings > API tokens, scoped to the workspace you want to sync. This token can read and write table rows, but cannot browse workspaces/databases/tables.
- Email / Password (optional, "Browsing"): your regular Baserow account credentials. Set these only if you want to use "Discover Bases & Tables" to browse and pick tables visually, or to create new tables directly from Odoo. If left empty, use "Register Table by ID" instead (see step 2). These credentials are stored encrypted and are never shown back in the UI or in logs.
Click Test Connection to verify the Database Token is valid. The connection state turns green ("Connected") once confirmed.
2. Find your table: discover or register by ID
Two ways to point the connector at a Baserow table:
- Discover Bases & Tables (requires the optional Email/Password above): lists every workspace, database and table your Baserow account can see, and lets you drill down and pick one.
- Register Table by ID (works with the Database Token alone):
open the table in Baserow's web app, copy the numeric table ID from the URL
(e.g.
https://baserow.io/database/491170/table/1072569/...→ table ID1072569), and paste it into the wizard. The connector fetches the table's fields directly.
Either way, the table and its fields are added to the connector's resource catalog and become available when creating a Model Mapping.
3. Create a Model Mapping
Go to Baserow Connector > Model Mappings > New and set:
- Baserow Source: instance, database and table to sync from/to.
- Odoo Target: the Odoo model to sync with (Contacts, CRM leads, products, or any custom model).
- Direction: Odoo → Baserow, Baserow → Odoo, or Bidirectional.
- Conflict Strategy: Last Modified Wins (automatic, based on timestamps), Keep Odoo, Keep Baserow, or Manual (always opens a Conflict record for a human decision).
- Delete Policy and Allow Deleting Rows in Baserow: control what happens when a synced record is archived/deleted on either side.
- Odoo Export Domain: an optional Odoo domain (e.g.
[('id','in',[46,47,48])]) to restrict exactly which Odoo records are ever pushed to Baserow — strongly recommended before your first export so you do not accidentally push every record of the model. - Baserow Filter (JSON): an optional Baserow view/filter to restrict which rows are imported.
- Cron Interval Number / Type: how often the scheduled sync runs for this mapping (e.g. every 1 Hours).
4. Discover Fields and fine-tune the Field Mapping
From the Model Mapping form, click Discover Fields: the connector reads
every column of the Baserow table and automatically creates a Field Mapping row for each
one, guessing the matching Odoo field from its name (e.g. "Email" → email,
"Phone" → phone, "Company Name" → name). Open the
Field Mappings smart button to review and adjust every row:
- Odoo Field: change the auto-guessed target field, or map a field the guesser did not recognize.
- Used as Matching Key: mark the field(s) used to detect that an existing Odoo record and Baserow row refer to the same real-world entity (typically the name field).
- Read-only (cannot write): automatically set for Baserow formulas, lookups, rollups and other computed fields the API will not accept writes on.
- Conflict Priority: per-field override of which side wins when both sides changed the same field.
Baserow Single select, Multiple select and Link to table fields are automatically resolved into real Odoo Many2one / Many2many relations (records are found or created by name on the fly) instead of being flattened to plain text.
5. Run your first sync
From the Model Mapping form, use:
- Initial Import: pull every matching Baserow row into Odoo once, creating the Odoo records and their Bindings.
- Initial Export: push matching Odoo records into Baserow once (respect the Odoo Export Domain to avoid exporting unwanted records).
- Synchronize Now: run a full bidirectional pass immediately, the same logic the scheduled cron uses.
- Register Webhook (optional): registers a Baserow webhook so that row changes on the Baserow side are pushed to Odoo in real time instead of waiting for the next scheduled run. A secret is generated per connection and verified on every incoming call.
Every run creates a Sync Job you can inspect for its exact status, duration, HTTP result and the number of records processed.
6. Resolve conflicts
When the same record changed on both sides and the mapping's Conflict Strategy is set to Manual (or the automatic strategy could not decide), a Conflict record is created showing the Odoo value and the Baserow value side by side. From there, choose Keep Odoo, Keep Baserow, or Apply Manual after editing the value yourself.
7. Keep an eye on things: dashboard, logs and troubleshooting
The Dashboard gives you, at a glance: active connections, records synced today, pending jobs, failed jobs, open conflicts and webhooks received today, plus the recent connections and sync jobs. Sync Logs gives a line-by-line technical trace of every job (useful when reporting an issue), and secrets (tokens, passwords, API keys) 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, after which it is marked Failed for manual review. A single bad row never blocks the rest of a batch: each record is processed independently, 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 | 2705 |
| Technical Name |
odoo_baserow_connector_pro |
| License | OPL-1 |
| Website | https://odoo.kone-adama.com |
Baserow Connector
This document describes how to set up and use the Baserow Connector module.
Prerequisites
You need a Baserow Database Token:
- In Baserow, go to your workspace settings and create a Database Token scoped to the database(s) you want to synchronize.
- Note the token value and, if self-hosting, the base URL of your instance (e.g. https://baserow.mycompany.com).
Connecting an instance
- Go to Baserow Connector > Configuration > Connections.
- Click New, fill in the instance URL and Database Token.
- Click Test Connection to verify the credentials.
- Click Discover Bases & Tables to populate the list of accessible databases and tables.
Creating a mapping
- Go to Baserow Connector > Model Mappings, click New.
- Select the instance, database and table, and the target Odoo model.
- Click Discover Fields to list the table's Baserow fields.
- Choose a synchronization direction (Baserow to Odoo, Odoo to Baserow, or bidirectional) and a conflict resolution strategy.
- On the Field Mapping tab, map each Baserow field to an Odoo field. Mark one field as Used as Matching Key to enable duplicate detection when importing.
- Set the mapping to Active and click Synchronize Now, or wait for the next scheduled run.
Conflict resolution
When both Odoo and Baserow have changed the same record since the last sync, and the mapping's strategy requires it, a record appears under Baserow Connector > Conflicts. Review the Odoo and Baserow values and click Keep Odoo Value, Keep Baserow Value, or enter a manual value and click Apply Manual Value.
Webhooks
From a mapping, click Register Webhook to have Baserow push real-time updates to Odoo instead of waiting for the next scheduled sync. A shared secret (configured on the connection) is required on every incoming call; requests without a valid secret are rejected.
Automatic synchronization
The module ships with scheduled actions (Settings > Technical > Scheduled Actions):
- Scheduled Synchronization - runs every active mapping according to its configured interval.
- Process Sync Queue and Retries - retries failed jobs with exponential backoff.
- Cleanup Old Sync Logs - removes logs older than 90 days.
Troubleshooting
Every sync attempt creates a Sync Job record under Baserow Connector > Sync Jobs, with the redacted request/response, HTTP status, error message and a detailed log. Check this first if a mapping fails to synchronize.
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