Zalando Store Management
Zalando Store Management connects a Zalando Partner Program account to Odoo. This page is the installation and configuration guide for the module you downloaded from your ECOSIRE dashboard. Everything below describes the zalando_store_management module as it ships today.
| Technical name | zalando_store_management |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 17.0 → 17.0.2.3.3, 18.0 → 18.0.2.3.3, 19.0 → 19.0.2.3.3 |
| Price | $599 USD — one-time, per Odoo version |
| Odoo module licence | OPL-1 |
| Category | Connector |
19.0.2.3.3, 18.0.2.3.3, 17.0.2.3.3)Screens that read cleanly on desktop, phone and dark mode.
- Mapping wizard shows both sides. Category, payment, shipping, customer group and attribute mappings now each show the Odoo value and its Zalando counterpart, with examples, so every mapping type can be created (before, only the order status pair did).
- Dark mode reaches the dashboard. Under Odoo's dark theme the dashboard, its cards and its chart axes and legends now follow the dark colours instead of staying light grey.
- Empty charts say they are empty. With no orders in the period, the Order Status and sales charts show a short message, and a banner offers Sync Now.
- Fits on a phone. A long store name stays on one line with an ellipsis; order and sync log lists use short column labels, show the sync outcome next to the log name, and keep secondary counters as optional columns.
- Cleaner dialogs. Import, export and mapping dialogs write "Zalando" consistently, no longer repeat the title, use the full width for the store field and put the main action in the footer beside Close.
- Sync Logs opens on every log. The menu no longer filters to errors only, so a healthy store shows its sync history.
- Small fixes. The store badge icon renders, and empty Orders and Customers lists explain how to import data.
19.0.2.3.2, 18.0.2.3.2, 17.0.2.3.2)Hardened against 36 known real-world failure cases.
Every behaviour in this release comes from a defect a customer actually hit on one of our connectors, and each one is now proven by a named test that drives the case which used to break.
- Dashboard currency. The dashboard added foreign-currency orders to company-currency orders and labelled the total with your company's symbol, so a merchant selling in EUR read a euro amount as dollars. Each currency is now converted at your configured rate before it is summed and charted, and a currency with no exchange rate configured is left out and reported instead of being counted as 1:1.
- Offer health totals. The products-synced counter counted every product checked rather than every product changed, so running the sync several times inflated it. It now counts what actually changed.
- Zalando screens open Zalando views. Orders, Products and Customers fell back to the broad Odoo screens, which list every record in the database and hide the connector's own fields. They now open dedicated Zalando lists and forms showing the external order and article identifiers, the platform status and the sync state.
- A failed dashboard load is visible. The error banner now appears above the KPI cards, carries an alert role and a Retry button, the loading state announces itself, and a recoverable load failure is logged as a warning rather than an error.
Dashboard and sync endpoints now respect company boundaries.
- Company boundaries. In a database with more than one company, the dashboard and the status and sync endpoints could reach the Zalando connection, orders and sync activity of another company. They now work only with the connections of the companies you are currently working in (the company switcher), and a connection of another company is refused without returning anything about it. We recommend every multi-company installation upgrades.
- Only Zalando Managers start a sync. Starting a sync from the dashboard, the Sync buttons or the sync endpoint now requires the Zalando Manager group. Zalando Users keep their read access. Scheduled syncs are unaffected.
- Queues and the operation console. Processing, retrying or cancelling a queue, and running an operation from Run Zalando Operation (19.0), also require the Zalando Manager group.
- Dashboard fixes. Orders created today are counted, Top Products lists the period's best-selling products, the Order Status chart shows its data, sync-log durations are shown in seconds, and amounts use your company's currency.
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 account | A Zalando seller/partner account with API access |
Install the Python packages into the same interpreter that runs Odoo:
sudo -u odoo pip install requests
Installation
1. Download the ZIP for your Odoo version
Sign in at ecosire.com and open your dashboard downloads, or use the ZIP you received from the Odoo App Store.
2. Extract into your addons path
unzip zalando_store_management_v19_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/zalando_store_management/__manifest__.py # sanity check
The archive contains a single top-level zalando_store_management/ directory. If your ls check fails, the module folder ended up one level too deep — move it up so __manifest__.py sits directly inside zalando_store_management/.
3. Restart Odoo and install
sudo systemctl restart odoo
- Go to Apps and click Update Apps List (developer mode must be on).
- Search for Zalando Store Management and click Install.
- Odoo pulls in the Odoo apps listed above automatically.
When the install finishes, a Zalando menu appears in the main Odoo app switcher.
Licensing
zalando_store_management installs and runs standalone on Odoo 17, 18 and 19 -- there is no separate ECOSIRE dependency to install first, no key to enter and nothing to switch on afterward. Your use of the module is governed by the OPL-1 licence.
Configuration
Connect to Zalando
Open Zalando → Configuration → Settings and create a record (model zalando.configuration). The connection fields are:
| Label | Technical name | Required | Values |
|---|---|---|---|
| Client ID | client_id | Yes | Text |
| Client Secret | client_secret | Yes | Text |
| Merchant ID | merchant_id | No | Text |
Client ID and Client Secret are required; Merchant ID identifies your Zalando merchant account. Sandbox Mode targets Zalando's test environment.
The same record carries 8 behaviour checkboxes — sandbox, sync_products, sync_orders, sync_customers, sync_inventory, auto_sync_products, auto_sync_orders, auto_sync_customers. They gate what the connector 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.
Credentials are issued from the Zalando partner portal — see docs.partner.zalando.com. The connector talks to api.merchants.zalando.com (or api.merchants-sandbox.zalando.com in Sandbox Mode).
When the fields are filled in, click Test Connection. The record's status moves to connected only when the platform answers successfully — do not run a first import until it does.
Public endpoint: the webhook receiver
The module registers one publicly reachable HTTP route. It is the only endpoint on this module served without an Odoo login, so it is worth knowing exactly what it does before you expose your instance.
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/zalando/webhook | POST | public (no Odoo session) | Receives inbound Zalando event deliveries |
This receiver currently rejects every delivery, on purpose. ECOSIRE's platform contract for Zalando does not pin an inbound delivery-signature scheme, which means a payload arriving at /zalando/webhook cannot be proven to have come from Zalando rather than from anyone else who can reach your instance. Rather than trust an unsigned payload, signature verification fails closed: the endpoint answers HTTP 403 with {"status": "rejected", "message": "signature verification failed"} and processes nothing from the request.
What that means for you in practice:
- You do not need to register this URL with Zalando. Pointing Zalando at it will produce nothing but 403s.
- Your data still syncs. Product, order, customer and inventory syncing on this connector is driven by the scheduled actions below, which poll the Zalando API on your behalf. Real-time push is not how this connector stays current.
- The route is safe to leave exposed. It reads the request body and headers, finds no verifying webhook record, logs the rejection with the caller's IP, and returns. Nothing is written and no record is created.
- The
zalando.webhookrecords under the connector's menu (name, topic, delivery URL, secret, delivery and failure counters) exist so the receive path is ready the day a signed Zalando delivery scheme is available. They do not enable inbound push today.
The module's remaining routes — /zalando/api/status, /zalando/api/sync and /zalando/dashboard/data — are internal JSON-RPC endpoints used by the module's own screens. They require a logged-in Odoo user and are not part of your external setup.
Scheduled actions
The module installs 6 scheduled actions (Settings → Technical → Scheduled Actions):
| Scheduled action | Runs every | Enabled on install |
|---|---|---|
| zalando: Sync Articles | 60 minutes | Yes |
| zalando: Sync Orders | 5 minutes | Yes |
| zalando: Sync Customers (GDPR no-op) | 1 days | No |
| zalando: Sync Inventory | 15 minutes | Yes |
| zalando: Test Connection | 1 days | Yes |
| zalando: Cleanup Old Logs | 1 days | Yes |
The job marked No above is installed but inactive. Enable it only if you actually use that capability, and read the note in the module-specific notes section first.
Intervals above are the shipped defaults. Adjust them to your volume — but be aware that the platform, not Odoo, sets the API rate limits, and shortening a sync interval is the usual cause of throttling errors in the logs.
Using the module
The Zalando menu is laid out as:
- Zalando → Dashboard
- Zalando → Products
- Zalando → Orders
- Zalando → Customers
- Zalando → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports
- Zalando → Configuration — Settings
A normal first run is:
- Test Connection until the instance reads connected.
- Review the mapping records (categories, order statuses, payment and shipping methods) 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 Logs view during the first full sync. Every sync writes a log line; failures are recorded there rather than raised at the user.
Module-specific notes
- The Sync Customers job ships disabled and is a deliberate no-op: Zalando does not release buyer personal data to partners, so there is nothing to import. Leave it off.
- Zalando calls products articles — the product sync job is named Sync Articles accordingly.
- Orders sync every 5 minutes by default, which is much tighter than the other connectors; relax it if you hit rate limits.
Troubleshooting
Syncing
| Symptom | Cause and fix |
|---|---|
| Test Connection fails | Re-check every required field in the table above. Most failures are a mistyped secret, or credentials created for the sandbox while the connector points at production (or vice-versa). |
| Nothing syncs even though the connection is fine | The scheduled actions are disabled at the Odoo level, 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 Logs view for that run. Rate limiting and rejected field values are the two common causes; both are logged with the platform's own error text. |
| 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.2.3.3 |
| 18.0 | 18.0.2.3.3 |
| 19.0 | 19.0.2.3.3 |
ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.2.0.3 is the Odoo 19 build of module version 2.0.3. Your installed version is shown in Apps.