The client tracked product details and prices in a Google Sheet. Every time a price changed in Odoo, someone copied the new figure into the sheet by hand. That worked while the catalogue was small, but it created the usual problems: updates arrived late, two versions of the truth existed, and a missed edit could send a wrong price to a customer. The client wanted to keep using Google Sheets without maintaining prices twice.
This was a custom O2B build, not an off-the-shelf connector. Odoo has its own spreadsheet features, and some editions include Google-related capabilities, but they did not cover the client's workflow. We built a dedicated API connection between Odoo and the client's Google Sheet. Odoo remains the source of truth: when a product price changes, the matching row in Google Sheets updates automatically. The client also sets a profit margin in Odoo, and the sheet shows the selling price calculated from the cost and that margin.
At a high level, the build follows the same pattern as most integrations:
Because this is a custom build, direction and timing are choices rather than fixed rules. The sync can run one way, from Odoo to Google Sheets, or two ways, and it can run in real time or on a schedule. A two-way sync needs extra rules so that an edit in the sheet does not overwrite a newer price in Odoo. If the connection fails, Odoo is unaffected: the sheet keeps its last successful values, the failure is logged, and the team can be notified. These details are confirmed against each client's process before go-live.
Both approaches can work. The right choice depends on where the data lives, who needs to edit it, and how quickly it has to change.
| What matters | Odoo's built-in spreadsheet features | Custom O2B sync |
|---|---|---|
| Where the data lives | Inside Odoo, using Odoo's spreadsheet and pivot tools | Google Sheets, with Odoo as the source |
| Live price updates | Data is viewed inside Odoo; external sharing is limited | Prices and margins are written to the sheet automatically |
| Sharing and collaboration | Follows Odoo user access | Uses Google's native sharing and permissions |
| Two-way editing | Not the purpose of the built-in tools | Possible, with rules to prevent overwrites |
| Setup effort | Low, if the team already works inside Odoo | Custom API work, field mapping and error handling |
In short, Odoo's own tools are convenient when everyone works inside Odoo. A custom sync such as this one is the better fit when a team already runs part of its process in Google Sheets and does not want to move it. If you need the connection built, our Odoo integration services cover the API work, field mapping and testing.
If the margin logic needs to match how your team prices products, it usually becomes part of an Odoo customization rather than a simple field copy.
Yes. There is no universal built-in button in every edition, but Odoo can connect to Google Sheets through a custom API connection like the one in this case. Odoo also has its own spreadsheet features in some editions, which may be enough if the data does not need to live in Google Sheets.
It can be real-time or scheduled, depending on how it is built. A real-time sync fires when a price or margin changes; a scheduled sync runs at set intervals. The right choice depends on how quickly the sheet must reflect Odoo.
A two-way sync is possible, but it needs rules to avoid overwriting data. Without them, an old value in the sheet could replace a newer price in Odoo. Most teams start one way and add the reverse direction only where it is clearly needed.