Ozon Store Management
This is the installation and configuration guide for Ozon Store Management, the module you downloaded from your ECOSIRE dashboard. Everything on this page describes the ozon_store_management module exactly as it ships today — the facts below were read out of the released build, not from a roadmap.
| Technical name | ozon_store_management |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 17.0 → 17.0.2.3.0, 18.0 → 18.0.2.3.0, 19.0 → 19.0.2.3.0 |
| Price | $499 USD — one-time, per Odoo version |
| Odoo module licence | OPL-1 |
| Category | Connector |
ozon_store_management is licensed under OPL-1 (Odoo Proprietary License v1.0) and carries no ECOSIRE licence client: no key to obtain, no activation step, no domain binding and no dependency on a separate download. One archive is published per supported Odoo major (17.0, 18.0, 19.0) — install the one that matches the series you run. See Licence.
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 |
| ECOSIRE licence client | Not required. This module declares no such dependency — install the connector archive on its own |
| Python packages | requests |
| Platform account | An Ozon 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 download from the Odoo App Store. One archive is published per Odoo major version, so pick the one that matches the series you run.
2. Extract into your addons path
unzip ozon_store_management_v19_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/ozon_store_management/__manifest__.py # sanity check
The module must end up as a single top-level ozon_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 Ozon Store Management and click Install.
- Odoo pulls in the Odoo apps listed above automatically. There is no licence client to install and no key to enter — the install completes on its own.
When the install finishes, a Ozon menu appears in the main Odoo app switcher.
Licence
ozon_store_management is distributed under OPL-1 and installs on its own.
- There is no licence key to obtain or enter, and no activation step — nothing in the module asks for a key, and no licence record, activation screen or License Status screen is involved.
- The module makes no licence-check call. Nothing in it contacts an ECOSIRE licence API, and there is no background re-verification job, no activation slot and no domain binding to manage.
- Your purchase receipt — the ecosire.com order or the Odoo App Store order slip — is your proof of licence. There is nothing to register with us, and no domain to release if you move the module to another database or host.
This changed in module version 2.1.0. Older builds (before 19.0.2.1.0) carried an extra declared dependency and the checks that came with it. Both are gone from the shipped module: depends no longer names it, and no feature was lost. If you are updating from one of those builds, nothing extra needs installing and nothing needs removing.
Configuration
Connect to Ozon
Create a connection record on the ozon.configuration model. The fields the module defines for the connection are:
| Field | Technical name | Type | Required |
|---|---|---|---|
| Configuration Name | name | Char | Yes |
| Client ID | client_id | Char | Yes |
| API Key | api_key | Char | Yes |
| Company | company_id | Many2one | Yes |
| Ozon URL | ozon_url | Char | No |
| 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.
Ozon authenticates with a Client ID and an API Key — there is no store URL or OAuth refresh token involved, and the module's Test Connection wizard collects exactly those two and saves the credential onto your configuration record.
The same record carries 7 behaviour checkboxes — sync_products, sync_orders, sync_customers, sync_inventory, auto_sync_products, auto_sync_orders, auto_sync_customers. 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 module's own source contacts these hosts: api-seller.ozon.ru, docs.ozon.ru. Your firewall must allow outbound HTTPS to them.
Scheduled actions
The module installs 6 scheduled actions (Settings → Technical → Scheduled Actions):
| Scheduled action | Runs every | Enabled on install |
|---|---|---|
| ozon: Sync Products | 1 hour | Yes |
| ozon: Sync Orders | 30 minutes | Yes |
| ozon: Sync Customers | 6 hours | Yes |
| ozon: Sync Inventory | 15 minutes | Yes |
| ozon: Test Connection | 1 day | Yes |
| ozon: Cleanup Old Logs | 1 day | Yes |
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.
The inventory job does not merely report: it submits your Odoo on-hand quantity to Ozon as one asynchronous stock task per run, keyed on offer_id as Ozon requires. The task id Ozon returns is written to the run log, so you can follow the result with Ozon's import-status operation.
Webhook and API endpoints your server exposes
These are the HTTP routes this module adds to your Odoo instance. Only the public one is reachable without an Odoo login.
| Endpoint | Auth | Purpose |
|---|---|---|
/ozon/webhook | public | Webhook receiver — see the note below, it currently rejects every delivery |
/ozon/api/status | logged-in user | connection and sync status read by the dashboard |
/ozon/api/sync | logged-in user | triggers a sync from the dashboard |
/ozon/dashboard/data | logged-in user | dashboard KPI data |
/ozon/webhook is closed in this build — sync runs on the scheduled actionsThe route exists and is publicly reachable, but it fails closed: ozon.webhook._verify_signature() rejects every delivery and the endpoint answers HTTP 403. Ozon pushes events, but no inbound delivery-signature scheme for Ozon is pinned in our platform contract yet, and we would rather reject a payload than trust an unsigned one. So there is nothing to register in your Ozon seller portal today — scheduled polling is the supported path. Leave the scheduled actions above enabled; they are how this build stays current.
Behind that check, the 2.3.0 build carries a handler for each of Ozon's four notifications, on Ozon's own event names:
| Ozon notification | What the handler does once a delivery is accepted |
|---|---|
posting.created | Re-reads the posting over the Seller API and imports it into Odoo |
posting.status_changed | Re-reads the posting and refreshes it in Odoo |
posting.cancelled | Records Ozon's status and leaves a note on the sales order — it does not cancel the order for you; review it and cancel or credit manually |
chat.new_message | Reads the conversation and posts the buyer's message onto the linked sales order |
These handlers run only once the delivery-signature check above is in place; until then, the scheduled actions do the same work on their own interval.
The webhook record's Topic field offers exactly those four notifications and nothing else. A topic outside that set is refused rather than counted as a delivery, so webhook statistics and the delivery log only ever describe something that really happened. When you upgrade from an earlier build, existing webhook records are migrated: order topics are re-pointed at their Ozon equivalent, and topics Ozon does not have are disabled, with the original value kept in the record's description.
Using the module
The module's menu is laid out as:
- Ozon → Dashboard
- Ozon → Orders
- Ozon → Postings
- Ozon → Products
- Ozon → Catalog — Ozon Products, Product Images, Categories, Chestny ZNAK Codes
- Ozon → Customers
- Ozon → Logistics — FBS Warehouses, FBO Warehouses, Carriers, Returns
- Ozon → Finance — Realization Reports, Refunds, Analytics
- Ozon → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports, Risk
- Ozon → Configuration — Settings, Workflows, Auto Workflow Rules, Daily Digests, Ozon Customers (Masked)
A normal first run is:
- Save the connection record and confirm the module reports a successful connection 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. The Export Wizard's Export Limit caps how many offers one run considers, which is the safe way to test the inventory push before the 15-minute job takes over.
- Watch the log records during the first full sync. Failures are recorded there rather than raised at the user.
Who can do what
- Company isolation. Every Ozon record that belongs to a company — including imported Ozon customers, orders and products — carries a multi-company record rule, so a user only sees the Ozon data of the companies they are allowed into.
- Queue and marking-code actions need the Ozon manager group. Processing, retrying or cancelling a queue job, retrying its failed lines, and the two Chestny ZNAK marking-code transitions are reserved for Ozon managers. Other internal users can open the records but cannot move them through their lifecycle.
Compliance fields on the product form
The Ozon tab of the product form carries the EAEU compliance fields: TN VED HS-code, marking category, RU NDS rate and the barcode preflight. Chestny ZNAK Required follows from the marking category you pick, and the barcode preflight follows the linked Ozon product card, so both are shown read-only.
The dashboard
The dashboard shows revenue, orders, customers, products and sync activity for your Ozon connection, with a revenue chart and a top-products list. Every money figure is shown in your company currency — RUB, KZT, BYN or whichever currency your company uses — not a hard-coded dollar sign.
What's new since 19.0.2.0.3
2.3.0 (current on Odoo 17, 18 and 19)
- Ozon's four notifications have handlers, on Ozon's own event names —
posting.created,posting.cancelled,posting.status_changedandchat.new_message. See Webhook and API endpoints: the receiving endpoint still rejects every delivery in this build, so scheduled polling remains the supported path. - The webhook topic list is Ozon's own. The field previously offered 21 event names from a different marketplace, none of which Ozon sends, so no subscription could ever match a real delivery. It now offers the four Ozon notifications and refuses anything else. Existing records are migrated on upgrade.
- Webhook statistics and the delivery log reflect reality. An event that matched no handler used to be counted as a successful delivery; it no longer is.
- Cross-company isolation on customers, orders and products. Those three models were the only ones in the module without a multi-company record rule, so a user in one company could read another company's imported Ozon customers, orders and products. They now carry the same rule as the rest of the module.
- The queue and marking-code buttons ask who is pressing them. Seven actions —
process,retry,canceland retry failed lines on the queue, and the two Chestny ZNAK marking transitions — now require the Ozon manager group.
2.2.0
- One Ozon buyer is one contact. The posting importer and the standalone customer import now build the buyer's contact through the same shared helpers, so the same buyer no longer exists twice — once with an address and once without — depending on which scheduled job ran first.
- The dashboard shows your currency, not dollars. The KPI cards, the revenue chart tooltip and the top-products list take their symbol from the company currency.
- The whole Ozon Seller API surface is wired in — 84 routes, up from 23. That adds buyer chats and reviews, promotions and flash sales, FBO supply orders, rFBS returns handling, cash-flow and turnover analytics, report generation, delivery polygons and Premium programme scoring.
- Inventory sync writes your stock back to Ozon (see Scheduled actions); previously it matched your products and reported the count but wrote nothing.
- Attribute sync reads the Ozon category catalogue — the description-category tree, a category's attributes and their allowed values — and a search action finds an allowed value by text.
- Shipping method sync reads your Ozon warehouses and delivery methods, so Odoo carriers can be mapped to real Ozon delivery methods.
- Test Connection works. The wizard now collects the two things Ozon authenticates with — Client ID and API Key — and both buttons complete: the connection is proven and the credential is saved onto your configuration.
- The EAEU compliance fields are reachable on the Ozon tab of the product form (see Compliance fields).
- The Export Wizard's inventory push runs instead of declining, with an Export Limit to cap a test run.
- Controls that changed nothing are gone — the import wizard's sync-frequency picker, the auto-workflow's validate payment switch, and the express flags on FBO warehouses and carriers. Each promised behaviour no code performed; nothing the module acted on was removed.
2.1.0
- The licence-client dependency was removed — the module now installs and runs standalone, with every activation check deleted and no feature lost. See Licence. The four shared buyer-enrichment helpers that had arrived through that dependency were kept, so buyer name, country, state and ZIP enrichment on order import is unchanged.
2.0.7
- One bad record can no longer poison a whole sync run. Every per-record sync, import and action loop wraps its body in a flushing savepoint, so a single failing record rolls back alone instead of aborting the batch, poisoning the recompute, or rolling back every good record while the logs claim success.
Troubleshooting
Installation
| Symptom | Cause and fix |
|---|---|
The requests library is required | requests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo. |
| Odoo does not list the module after Update Apps List | The folder landed one level too deep or too shallow. See step 2 — ozon_store_management/__manifest__.py must resolve. |
Syncing
| Symptom | Cause and fix |
|---|---|
| The connection will not validate | Re-check the Client ID and API Key. Most failures are a mistyped key, or a key generated without the permissions the sync needs. |
| 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 module's log records for that run. Rate limiting and rejected field values are the two common causes; both are logged with the platform's own error text. |
| Ozon's webhook deliveries are refused with HTTP 403 | Expected in this build — the receiver rejects every delivery until a verified signature scheme is in place. Rely on the scheduled actions. |
| A queue or marking-code button is refused | Those actions need the Ozon manager group. Ask an administrator to add you to it. |
| 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.0 |
| 18.0 | 18.0.2.3.0 |
| 19.0 | 19.0.2.3.0 |
ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.2.3.0 is the Odoo 19 build of module version 2.3.0. Your installed version is shown in Apps.