Magento Store Management
This is the installation and configuration guide for Magento Store Management, the ECOSIRE connector between Magento 2 / Adobe Commerce and Odoo. Everything on this page describes the magento_store_management module exactly as it ships today — the facts below were read out of the released build, not from a roadmap.
| Technical name | magento_store_management |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 17.0 → 17.0.3.0.2, 18.0 → 18.0.3.0.2, 19.0 → 19.0.3.0.2 |
| Price | $499 USD — one-time, per Odoo version |
| Odoo module licence | OPL-1 (Odoo Proprietary License v1.0) |
| Category | Connector |
Since 17.0.2.1.0, 18.0.2.1.0 and 19.0.2.1.0 the module installs and runs on its own. There is no ecosire_license_client dependency and no in-app activation step: install it and connect your store. Your right to use it is governed by the OPL-1 terms of your purchase.
Requirements
| Requirement | Detail |
|---|---|
| Odoo | 17.0, 18.0 or 19.0, Community or Enterprise. Self-hosted or Odoo.sh — Odoo Online (SaaS) cannot install third-party modules |
| Odoo apps | base, sale_management, stock, account, delivery, mail, web, product, contacts — Odoo installs any that are missing |
| Python packages | requests |
| Platform | A Magento 2.4+ Open Source or Adobe Commerce store with the REST API reachable from your Odoo server |
| Credentials | A Magento Integration Access Token with the API resources you want to sync |
Install the Python package into the same interpreter that runs Odoo:
sudo -u odoo pip install requests
Installation
1. Get the module
Buy and download the build for your Odoo version from the Odoo Apps Store or from your ecosire.com dashboard. Each Odoo version is a separate build — take the one that matches the Odoo you run.
2. Extract into your addons path
unzip magento_store_management*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/magento_store_management/__manifest__.py # sanity check
The module must end up as a single top-level magento_store_management/ directory with __manifest__.py directly inside it. If your ls check fails, the folder landed one level too deep or too shallow — move it so the path above resolves.
3. Restart Odoo and install
sudo systemctl restart odoo
- Go to Apps and click Update Apps List (developer mode must be on).
- Search for Magento Store Management and click Install.
- Odoo pulls in the Odoo apps listed above automatically.
When the install finishes, a Magento menu appears in the main Odoo app switcher.
Upgrading from a 2.0.x build
To upgrade from an older 2.0.x build, replace the module folder with the new build, restart Odoo and upgrade Magento Store Management from Apps. Your connection records, mappings and sync history are kept. Any helper module the old build pulled in can stay installed; this connector no longer uses it.
Configuration
1. Create the Magento integration token
- In the Magento Admin, go to System → Extensions → Integrations and click Add New Integration.
- Give it a name, and under API grant the resources you intend to sync (Catalog, Sales, Customers, Inventory/Stores as needed).
- Save, then use Activate on the integration row and approve the access request.
- Copy the Access Token Magento shows. Integration access tokens do not expire on their own.
2. Connect to Magento
Go to Magento → Configuration → Settings and create a connection record (magento.configuration). The fields the module defines for the connection are:
| Field | Technical name | Type | Required |
|---|---|---|---|
| Configuration Name | name | Char | Yes |
| Magento URL | magento_url | Char | Yes — your store's base URL, e.g. https://shop.example.com |
| Access Token | access_token | Char (masked, administrators only) | Yes |
| Company | company_id | Many2one | Yes |
| Timeout (seconds) | timeout | Integer | No — default 30 |
| Sync Frequency | sync_frequency | Selection | No — default every hour |
| Marketplace | marketplace | Char | No |
The fields marked Yes are enforced by the model — Odoo will not let you save the record without them. The technical name is the reliable identifier if your screen wording differs.
The same record carries 7 behaviour checkboxes — sync_products, sync_orders, sync_customers, sync_inventory (on by default) and auto_sync_products, auto_sync_orders, auto_sync_customers (off by default). They gate what the module is allowed to do automatically once it is connected. Leave anything you are not ready for switched off, and turn them on one at a time.
The connector talks only to the Magento URL you enter — the REST API under /rest/<store view>/V1/ on your own store (the default store view unless an operation needs another scope). Your firewall must allow outbound HTTPS from Odoo to that host.
Use Magento → Operations → Test Connection before importing anything. The result is stored on the record (connection_status, last test time and the error message), and a failed test is reported as a notification without losing that record.
Scheduled actions
The module installs 6 scheduled actions (Settings → Technical → Scheduled Actions):
| Scheduled action | Runs every | Enabled on install |
|---|---|---|
| magento: Sync Products | 1 hour | Yes |
| magento: Sync Orders | 30 minutes | Yes — but it imports nothing until Import Orders Automatically is on (see below) |
| magento: Sync Customers | 6 hours | Yes |
| magento: Sync Inventory | 15 minutes | Yes |
| magento: Test Connection | 1 day | Yes |
| magento: Cleanup Old Logs | 1 day | Yes |
19.0.3.0.1The scheduled Sync Orders action imports nothing until you tick Import Orders Automatically on the store configuration (next to Auto Sync Orders, and both are required). This switch is deliberately off by default: builds before 19.0.3.0.1 never created orders from the scheduled run, so an upgrade must not start writing into your books on its own. The Sync Orders and Sync Now buttons and the order import wizard import on demand regardless, so you can evaluate the result before you let the schedule do it unattended.
Intervals above are the shipped defaults. Adjust them to your volume — but be aware that your Magento server, not Odoo, sets the API rate limits, and shortening a sync interval is the usual cause of throttling errors in the logs.
Webhook and API endpoints your server exposes
These are the HTTP routes this module adds to your Odoo instance. Only the public ones are reachable without an Odoo login.
| Endpoint | Auth | Purpose |
|---|---|---|
/magento/webhook | public | Webhook receiver — see the note below, it currently rejects every delivery |
/magento/api/status | logged-in user | connection and sync status read by the dashboard |
/magento/api/sync | logged-in user | triggers a sync from the dashboard |
/magento/dashboard/data | logged-in user | dashboard KPI data |
/magento/order_import/template | logged-in user with order-import rights | downloads the CSV template used by Import Orders (Spreadsheet) |
/magento/webhook is closed in this build — sync runs on the scheduled actionsThe route exists and is publicly reachable, but it fails closed: magento.webhook._verify_signature() rejects every delivery and the endpoint answers HTTP 403. Magento Open Source has no native outbound webhooks — polling with updated_at filters is the standard pattern — and for Adobe Commerce 2.4.4+ deliveries no delivery-signature scheme is pinned in our platform contract yet. The module will not process an unauthenticated payload, so there is nothing to register in your Magento / Adobe Commerce admin today — scheduled polling is the supported path. Leave the scheduled actions above enabled; they are how this build stays current. The webhook buttons on the webhook records show a message explaining this rather than failing.
Magento REST coverage
Odoo 19 build (19.0.3.0.2)
The Odoo 19 build implements the complete Magento 2 / Adobe Commerce REST V1 surface in our researched platform contract, and a test checks it in both directions: every documented operation is implemented, and the connector calls no operation the contract does not document. Available operations, grouped:
- Catalog — products, product attributes and attribute sets (create, update, attach and detach attributes), product media, custom options, bundle options, downloadable links; category create/update/delete, category products and category search.
- Inventory — legacy stock item and stock status; MSI sources, source items (update and delete), stocks and stock-source links.
- Orders — orders, order comments and order e-mail; invoice search and capture; shipment search and shipment tracking; guest and customer carts through to placing an order.
- Returns — credit memo search and e-mail; Adobe Commerce returns (RMA) with reason codes.
- Customers — create, update, delete, addresses, password reset and customer groups.
- Promotions — coupons (single and bulk create, get, update, delete), cart price rules and catalog price rules, including applying catalog rules.
- Store data — reviews, tax classes, tax rates, tax rules, CMS pages and blocks, store views, store groups, websites, currencies, countries and the enabled-modules list.
- Adobe Commerce — gift cards, store credit balances and reward points (these endpoints exist only on Adobe Commerce, not on Magento Open Source).
- Bulk — asynchronous and bulk product and stock operations under
/rest/<store view>/async/V1/, with per-item bulk status.
What the scheduled actions and wizards sync automatically is products, orders, customers and inventory; the wider surface above is what the connector can call from Odoo.
Odoo 17 and 18 builds (17.0.3.0.2, 18.0.3.0.2)
The Odoo 17 and 18 builds sync products, orders, customers and inventory through the same scheduled actions, wizards and dashboard. The expanded REST coverage listed above ships in the Odoo 19 build.
Using the module
The module's menu is laid out as:
- Magento → Dashboard
- Magento → Products
- Magento → Orders
- Magento → Customers
- Magento → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports
- Magento → Configuration — Settings
A normal first run is:
- Save the connection record and confirm Test Connection succeeds before importing anything.
- Review the mapping records so imported data lands on the right Odoo records.
- Run a small import first — restrict it by date or by a handful of products — and check the results before letting the scheduled actions take over.
- Watch the log records during the first full sync. Failures are recorded there rather than raised at the user, and one bad record is rolled back on its own without stopping the rest of the run.
Import Orders (Spreadsheet) imports orders you cannot reach through the API: click Download template (CSV), fill in one row per order line keeping the header row, upload the file and click Import. The rows go through the same path as a scheduled sync, so they carry the store binding and Magento's identifiers.
Until the store is connected, the dashboard shows a Finish connecting your store banner with an Open Configuration button, and Sync Health shows a dash rather than a percentage, because nothing has synced yet. Empty charts say so instead of drawing a blank chart.
The Export Wizard pushes products, customers and inventory to Magento through the sync service. It honours its create missing and update existing switches and reports how many records failed rather than showing a blanket success.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| Odoo refuses to install the module | A required Odoo app or the requests Python package is missing. Install requests into the interpreter that runs Odoo and update the apps list. |
| The connection will not validate | Re-check the Magento URL (base URL only, no /rest suffix) and the access token. A 401 means the token is wrong or the integration is not activated in Magento. |
| Nothing syncs even though the connection is fine | The scheduled actions are disabled at the Odoo level, the matching sync_* checkbox is off, or Odoo's cron worker is not running. Check Settings → Technical → Scheduled Actions and that --max-cron-threads is greater than zero. |
| Sync starts then stops part-way | Read the module's log records for that run. Rate limiting and rejected field values are the two common causes; both are logged with Magento's own error text. |
| Product descriptions import empty on an old build | Fixed in 19.0.3.0.0: descriptions are read from Magento's custom_attributes. Upgrade the module and re-run the product import. |
| Orders are never matched to existing Odoo orders on an old build | Fixed in 19.0.3.0.0: orders are matched on Magento's entity_id / increment_id. Upgrade and re-run the order import. |
| Gift card, store credit, reward point or RMA calls fail | Those endpoints exist only on Adobe Commerce. Magento Open Source answers them with an error. |
| Records import but map to the wrong Odoo values | Fix the mapping records under the module's configuration, then re-run the import. |
| Duplicated products or customers | Run the initial import once. If a first attempt half-finished, check the existing records before re-running rather than importing on top. |
Version history
| Odoo version | Version you download today |
|---|---|
| 17.0 | 17.0.3.0.2 |
| 18.0 | 18.0.3.0.2 |
| 19.0 | 19.0.3.0.2 |
ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.3.0.2 is the Odoo 19 build of module version 3.0.1. Your installed version is shown in Apps.
What changed
17.0.3.0.2,18.0.3.0.2,19.0.3.0.2— screen fixes. The dashboard opens on Odoo 17 again (it stopped with a client error), follows Odoo's dark theme, and explains empty charts. A store that is not connected yet shows a setup banner and no misleading 100% sync health. Import Orders (Spreadsheet) has a working Download template (CSV) button. The mapping wizard shows the right Odoo and Magento fields for every mapping type (category, order status, payment, shipping, customer group, attribute); the import, export and mapping wizards preselect your store, show a prompt when none is chosen and no longer open with a date picker or field already focused. Imported Products, Imported Customers and Sync Logs explain an empty list, and the Sync Logs columns fit on a phone (more columns are available from the column picker).17.0.3.0.1,18.0.3.0.1,19.0.3.0.1— orders are now imported for real: the published builds fetched page one, counted every order as failed and created nothing. An order lands as a quotation carrying the buyer, the lines, the order currency and its exchange-rate evidence, the original shipping charge and its discount as separate figures, the item discount and coupon, tax, the payment method and the platform's status history, and a re-run updates that order instead of duplicating it. Every imported record is bound to the store it came from, so a second store can no longer overwrite the first store's products, orders and contacts. Syncs follow every page of the collection instead of reading page one. The synced-record counters describe the run rather than the lifetime total, and a partial run no longer stamps a success time. A missing exchange rate fails closed instead of importing at a 1:1 rate. Product media, categories, brand and descriptions are imported, refund evidence is stored and classified, and credentials and customer PII are redacted from the logs. The dashboard's date window includes its end day, converts before labelling a total with the company currency, and every dashboard read is scoped to the caller's companies. Queue actions require a Magento manager, and a translation template ships for every series.19.0.3.0.0— the full researched Magento 2 / Adobe Commerce REST V1 surface (see Magento REST coverage), with a contract test in both directions. Product, order and customer imports now process Magento's pageditemsresults correctly; product descriptions are read fromcustom_attributes; orders are matched onentity_id/increment_id. Failed syncs and connection tests keep their log entries and report through a notification. The Export Wizard really pushes products, customers and inventory. Bulk calls use the shared transport, so a rejected token or throttle reports its real status with retry and rate-limit handling, and they are addressed under/rest/<store view>/async/V1/. The description no longer advertises customer segments, which the module does not sync.17.0.2.1.0,18.0.2.1.0,19.0.2.1.0— theecosire_license_clientdependency was removed: the module installs and runs standalone under OPL-1. Every sync method and scheduled action is unchanged.2.0.4builds — each record in a sync loop is processed in its own savepoint, so one bad record rolls back alone instead of failing the whole run.