Best Buy Store Management
This is the installation and configuration guide for Best Buy Store Management, the module you downloaded from your ECOSIRE dashboard. Everything on this page describes the bestbuy_store_management module exactly as it ships today — the facts below were read out of the released build, not from a roadmap.
| Technical name | bestbuy_store_management |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 17.0 → 17.0.2.2.7, 18.0 → 18.0.2.2.7, 19.0 → 19.0.2.2.6 |
| Price | $499 USD — one-time, per Odoo version |
| Odoo module licence | OPL-1 |
| Category | Sales/Sales |
Open Apps → Best Buy Store Management and read the version shown on the card.
- Odoo 17/18
2.2.7— current Odoo 17 and 18 build. It carries the 2.2.6 runtime remediation and corrects the App Store description to state that the verified connector is Canada-only and to identify the correct target Odoo major version. - Odoo 19
2.2.6— current Odoo 19 build. It includes the order-import, CAD-currency, tax, shipment, return and honest-failure corrections documented below. - Odoo 17/18/19
2.2.5or earlier — upgrade before importing or re-importing orders. Those builds do not contain the complete currency, tax and current shipping-contract remediation.
Each Odoo major version is a separate build: 17.0.2.2.7 and 18.0.2.2.7 are the Odoo 17 and 18
builds of module version 2.2.7. Buy and install the build that matches the Odoo you actually run.
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, portal, product, contacts, digest — Odoo installs any that are missing |
| ECOSIRE dependency | None. The connector installs and runs standalone |
| Python packages | requests |
| Platform account | A Best Buy Canada Marketplace seller account with API access (an API key issued in your seller portal) |
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
Download the build for your Odoo major version from wherever you purchased it — your ecosire.com dashboard, or the Odoo App Store. Each Odoo major version is a separate package, so take the one matching the Odoo you run.
If you bought on the Odoo App Store some time ago, check the version you have against Version history before installing; the archive you downloaded at purchase time may pre-date the current build. Email info@ecosire.com and we will send you the current package.
2. Extract into your addons path
unzip bestbuy_store_management_v18_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/bestbuy_store_management/__manifest__.py # sanity check
The module must end up as a single top-level bestbuy_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 Best Buy Store Management and click Install.
- Odoo pulls in the Odoo apps listed above automatically.
When the install finishes, a Bestbuy menu appears in the main Odoo app switcher.
Software terms
The connector is distributed under the OPL-1 terms included in the package. The Odoo package is
self-contained and does not call an ECOSIRE service as part of its runtime.
Deployment
Installing and configuring this connector is a self-service process — this page is the complete guide, and no ECOSIRE access to your systems is required at any point. If you would like us to carry out the deployment for you we are happy to, but it is an optional convenience, never a condition of using the module. Keeping your credentials and infrastructure in-house is a perfectly normal choice and changes nothing about the support you receive.
Configuration
Connect to Best Buy
Best Buy's Marketplace runs on the Mirakl Operator platform (the same connector family as Takealot
and Carrefour). There is no OAuth step — you paste a static seller API key that Best Buy issues
in your seller portal, and every request sends it as a raw Authorization header. Create a
connection record on the bestbuy.instance model. The fields the module defines for the connection
are:
| Field | Technical name | Type | Required |
|---|---|---|---|
| Instance Name | name | Char | Yes |
| Seller Portal URL | shop_url | Char | No — optional label |
| API Base URL | api_base_url | Char | No — defaults to the verified Canada operator URL |
| Shop ID | shop_id | Char | No — multi-shop accounts only |
| Marketplace | country_code | Selection (US / Canada) | No — defaults to Canada |
| API Key | api_key | Char (password) | Effectively required — the connector cannot authenticate without it |
| API Secret | shared_secret | Char (password) | No — only if your seller account was issued a companion secret |
| Alternate API Key | access_token | Char (password) | No — fallback used only when API Key is empty, kept for stores configured before the field was renamed |
| Company | company_id | Many2one | Yes |
Canada uses the verified
https://marketplace.bestbuy.ca/apidefault. If Best Buy or another Mirakl operator issued a different tenant URL for your seller account, enter that exact URL in API Base URL. The connector does not guess a public host for other tenants.
Seller Portal URL is now an optional, purely informational label — the connector never calls it. If you manage more than one Best Buy shop under one seller account, set Shop ID to tell the connector which one this instance is; leave it blank for a single-shop account.
The same record carries 3 order-workflow checkboxes — auto_confirm_order, auto_create_invoice,
auto_validate_invoice — plus a Stock Field setting (see Publishing offers and
stock below). Leave anything you are not ready for switched off, and
turn features on one at a time.
The Canada default contacts marketplace.bestbuy.ca. A seller-issued value in API Base URL
replaces that default for the instance. Your firewall must allow outbound HTTPS to the selected
operator host.
Order currency and tax handling (version 2.2.6 or later)
An imported order must carry Mirakl's currency_iso_code. The connector selects or activates the
matching Odoo currency and uses a company-safe pricelist in that currency. It preserves the exact
numeric order, line and shipping amounts sent by Best Buy; it does not relabel CAD amounts as
USD and does not perform an exchange-rate conversion during import.
Re-import is an idempotent repair path. With Skip Existing Records off, it updates the existing mapped sale order and can repair its currency/pricelist, buyer, date, lines and shipping without adding duplicate lines. The 2.2.6 migration can also backfill the stored currency label on older orders; it deliberately never changes their numeric amounts.
Tax is source-driven:
- When
taxesorshipping_taxesis absent or empty, the connector clears Odoo product-default taxes for that imported line. It never guesses GST or PST from the delivery address. - When Best Buy sends line or shipping tax entries, configure the provider code under the connection's Order Tax Mappings section. The mapping must point to a compatible Odoo sales tax; when the payload includes a rate or calculation rule, the mapping must match it.
- An unknown or incompatible tax code fails that order visibly. A non-empty top-level
order_taxestotal also fails visibly because Mirakl does not say how to allocate that total safely across Odoo lines.
Public endpoints this module exposes
None. Best Buy Marketplace (Mirakl) has no webhook or push capability for sellers, so this connector does not run an inbound HTTP receiver of any kind — synchronization is entirely schedule- and action-driven from the Odoo side (see Scheduled actions and Using the module below). If you previously registered a callback or install URL for an earlier version of this connector, you can remove it — nothing in the current build listens on it.
Official API contract coverage
The contract was refreshed on 2026-08-28 from Mirakl's current official Seller API OpenAPI source. It contains all 125 of 125 official operations in that source, including the 11 operations Mirakl marks deprecated. The Odoo connector calls 23 operations; all 23 reconcile to the contract, none is undocumented, and none uses a deprecated operation.
This is complete official-catalog and connector-call coverage, not a claim that the module implements every feature in the Mirakl platform. Authenticated availability still depends on the permissions and capabilities enabled for your own Best Buy seller key.
Scheduled actions
The module installs 11 scheduled actions (Settings → Technical → Scheduled Actions):
| Scheduled action | Runs every | Enabled on install |
|---|---|---|
| Bestbuy: Sync Products | 30 minutes | Yes |
| Bestbuy: Sync Orders | 15 minutes | Yes |
| Bestbuy: Sync Customers | 60 minutes | Yes |
| Bestbuy: Sync Inventory | 10 minutes | Yes |
| Bestbuy: Process Queue Jobs | 5 minutes | Yes |
| Bestbuy: Auto Risk Detection | 30 minutes | Yes |
| Bestbuy: Generate Analytics | 4 hours | Yes |
| Bestbuy: Cleanup Old Logs | 24 hours | Yes |
| Bestbuy: Process Workflows | 10 minutes | Yes |
| Bestbuy: Daily Summary Report | 1 day | Yes |
| Best Buy: Import Returns | 6 hours | No — enable it yourself |
If your list instead shows Bestbuy: Import Payout Reports and Bestbuy: Import Refunds, and
has no Best Buy: Import Returns, you are on a 2.0.x build — those two actions called
endpoints that do not exist on Best Buy's platform and were withdrawn. Upgrade, and Odoo removes
them for you.
Best Buy: Import Returns ships disabled on purpose: it only has data to pull once Best Buy has enabled the returns feed for your seller API key. Once your key is approved for returns, turn it on under Settings → Technical → Scheduled Actions.
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 module's menu is laid out as:
- Bestbuy → Dashboard
- Bestbuy → Orders
- Bestbuy → Refunds
- Bestbuy → Products
- Bestbuy → Customers
- Bestbuy → Payouts
- Bestbuy → Analytics
- Bestbuy → Operations — Run Operations, Queue Jobs, Logs
- Bestbuy → Configuration — Instances, Locations, Payment Gateways, Scheduled Actions, Compliance
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.
- Watch the log records during the first full sync. Failures are recorded there rather than raised at the user.
Order actions
Open a record under Bestbuy → Orders to work it manually:
- Accept on Best Buy — confirms the order back to the marketplace.
- Push Tracking — sends Mirakl's flat tracking fields through OR23, using the mapped carrier code when available and the carrier name otherwise, then marks the order shipped through OR24. You do not have to click this yourself for a normal delivery: validating the linked Odoo delivery (Inventory → Transfers, the Validate button) runs the same two-step flow.
- Cancel on Best Buy — cancels through current OR29 without an invented request body.
Returns and refunds
- Import Returns — enable the Best Buy: Import Returns scheduled action (see Scheduled actions) once your seller key has the returns feed, or run it on demand from Bestbuy → Operations → Run Operations (operation Import Returns). Imported returns land under Bestbuy → Refunds.
- Accept Return / Receive Return — process an imported return through its lifecycle from the return record's buttons.
- Push Refund — sends the refund back to Best Buy once you have created the matching credit note in Odoo. A Create Credit Note button on the same record generates it for you first if you have not already.
Publishing offers and stock
- Offer stock publish — from Bestbuy → Products, publishing an offer sends the quantity
from whichever Odoo field is set as Stock Field on the connection record (Configuration →
Instances). Leave Stock Field empty and the connector uses
qty_available; set it tofree_qtyorvirtual_availableif that better matches how you want Best Buy stock levels calculated. - Delete Offer — removing an offer from Best Buy is a deliberate, confirmed action from the product record, not a side effect of archiving the product in Odoo.
- Inventory pull — imports stock levels from your mapped Best Buy locations into Odoo (Bestbuy → Operations → Run Operations, operation Import Stock Levels, or the Sync Inventory scheduled action).
Manual sync wizard (Run Operations)
Bestbuy → Operations → Run Operations opens the Operations Center wizard. Pick your Instance and an Operation:
| Operation | What it does |
|---|---|
| Import Products | Pulls your Best Buy offers and maps them to Odoo products |
| Import Orders | Pulls orders in the selected date range |
| Import Customers | Builds customer records from already-imported orders (Best Buy has no separate customer API) |
| Import Stock Levels | Pulls stock for locations mapped to an Odoo warehouse |
| Import Payment Gateways | Seeds the Best Buy Marketplace payment gateway record |
| Import Returns | Pulls the returns feed so returns can be accepted and received |
| Export Products | Publishes your mapped offers to Best Buy |
| Export Stock Levels | Pushes Odoo stock levels to your mapped Best Buy locations |
| Update Order Status / Export Fulfillment | Pushes fulfillment/tracking info to Best Buy |
Three options travel with whichever operation you pick:
- Skip Existing Records — do not touch a record that is already mapped in Odoo (available on every import).
- Specific IDs — a comma-separated list of Best Buy IDs (e.g.
123456,789012) to import only those records instead of the full window. - From Date / To Date — applies to Import Orders only; it defaults to the last 24 hours.
Only operations with a real, working implementation are on the list — there is no menu entry that promises something the connector cannot yet do.
List calls cap Mirakl's max parameter at 100, including when a larger value is requested. When a
provider call fails, the affected record and queue job remain failed with the provider error; the
wizard and dashboard do not convert that failure into a success notification.
Troubleshooting
Installation
| Symptom / error code | Cause and fix |
|---|---|
| Odoo reports a missing third-party dependency | You are installing an older package. Replace it with the current build for your Odoo major; current packages have no ECOSIRE runtime dependency. |
The requests library is required | requests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo. |
Syncing
| Symptom | Cause and fix |
|---|---|
| The connection will not validate | Re-check every required field in the table above. Most failures are a mistyped secret, or credentials created for a sandbox while the module points at production (or vice-versa). |
| Cannot connect / host not found | You are pointed at a generic Best Buy address. Best Buy issues each seller a tenant-specific API host — copy the exact API Base URL shown in your seller portal into the connection record; do not guess it from the Marketplace (US/CA) selection. |
| Offer updates appear accepted but nothing changes | You are on a build older than 2.1.0. Earlier versions called an offer-update endpoint that does not exist on Mirakl, so the call silently failed to change anything on Best Buy's side. Upgrade to 2.1.0 or later, where offer publish/update/delete use the real Mirakl operation. |
| 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. |
| 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. |
| A tax-code or tax-rate error stops an order | Add or correct the code under the connection's Order Tax Mappings, then re-import with Skip Existing Records off. Do not replace the missing source tax with an address-based guess. |
An order reports unsupported top-level order_taxes | The provider sent a total without a safe line allocation. Keep the order failed and contact support with a sanitized payload; do not manually force the amount onto an arbitrary line. |
| CAD amounts appear under a USD pricelist | Upgrade Odoo 17/18 to 2.2.7 or Odoo 19 to 2.2.6, then re-import the order with Skip Existing Records off. The repair changes the currency/pricelist label without converting numeric amounts. |
Version history
| Odoo version | Version you download today |
|---|---|
| 17.0 | 17.0.2.2.7 |
| 18.0 | 18.0.2.2.7 |
| 19.0 | 19.0.2.2.6 |
ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.2.2.6 is the Odoo 19 build of module version 2.2.6. Your installed version is shown on the module's card under Apps.
2.2.7 (2026-08-28) — current Odoo 17/18 release
- Corrects the App Store description to identify the supported marketplace as Best Buy Canada. The previous package text contained a stale heading claiming two marketplaces even though its verified API host, configuration and runtime were Canada-only.
- Corrects the Odoo 17 description's requirement, related-module links and release labels. The earlier generated backport incorrectly retained Odoo 19 metadata.
2.2.6 (2026-08-28) — current Odoo 19 release; Odoo 17/18 runtime remediation
- Requires the order's exact ISO currency, creates or selects a company-safe matching pricelist, and repairs older mapped orders without foreign-exchange conversion or duplicate lines.
- Clears product-default taxes when Best Buy supplies no tax arrays; applies explicit line and shipping taxes only through validated code/rate mappings; rejects unsafe top-level tax totals.
- Uses current Mirakl shipment, cancellation and return envelopes: OR23 then OR24, OR29 without a body, and wrapped RT21 actions. Single-order reads use OR11 filtering instead of deprecated OR12.
- Caps list pagination at 100 and keeps failed records/jobs visibly failed.
- Reconciles the 23 runtime operations to a complete 125-operation current official catalog.
2.2.5 (2026-08-26) — Mirakl order import repair
- Replaced Shopify-shaped order parsing with Mirakl's
order_id,commercial_id,created_dateandorder_linesfields. - Restored real buyers, per-unit pricing, order dates, shipping lines and Mirakl line identifiers.
- Removed discounts, tips and import-duty lines that depended on fields Mirakl does not send.
2.2.4 (2026-08-24) — listing and visual-assets release
- Publishes the current verified listing and visual assets across Odoo 17, 18 and 19.
- Runtime and API behaviour remain the verified 2.2.3 behaviour.
2.2.3 (2026-08-23) — Canada and standalone remediation
- Corrects the Canada operator default to
https://marketplace.bestbuy.ca/apiwhile retaining seller-issued tenant URLs. - Removes the obsolete inbound-push configuration surface and inactive health schedule.
- Completes company-isolation, workflow access-control and standalone-package remediation.
2.2.0 (2026-08-19) — standalone build
- Removed the former ECOSIRE runtime dependency so the connector installs and runs on its own.
- Use of the module remains governed by the
OPL-1terms included in the package.
2.1.0 (2026-08-18) — API-correctness release
This release was reconciled call-by-call against Best Buy's official Mirakl Marketplace Seller API documentation. If you are on an earlier version, upgrade — several actions that appeared to succeed previously did not actually reach Best Buy.
- Connection rebuilt around how Best Buy actually authenticates. The former OAuth-style "Connect to Best Buy" flow could never authenticate against Best Buy Marketplace and has been removed. You now paste a static seller API key directly (see Connect to Best Buy); Seller Portal URL became an optional label; new Shop ID and Marketplace (US/CA) settings were added; API Base URL is user-editable.
- No more inbound webhook endpoints. The connector no longer exposes any public URL — Best Buy Marketplace has no webhook/push mechanism for sellers, so sync is fully schedule- and action-driven.
- Offer, refund and returns calls now use real Mirakl operations. Offer publish/update/delete, refund push, and returns import previously called endpoints that do not exist on Best Buy's platform and failed silently or with an error; they now use the documented operations.
- New: order actions (Accept on Best Buy, push tracking, cancel) wired end-to-end; returns import and processing; refund push from the refund flow; offer stock publish honoring your chosen Stock Field; the manual sync wizard's Skip Existing / Specific IDs options now actually filter what gets imported.
- Shipping labels are no longer fabricated placeholders — the module calls your configured carrier, or tells you plainly that no carrier is configured.
- Dashboard now follows your company currency instead of a hardcoded
$, and its date filters no longer write to the database on every read.