Takealot Store Management
The ECOSIRE Takealot Store Management module connects your Takealot seller account to Odoo. Takealot is South Africa's largest online retailer. The module talks to the official Takealot Seller API to manage your offers, import your sales, and reconcile your settlement statements.
Compatibility: Odoo 17 / 18 / 19 (Community or Enterprise)
Current public catalogue version: 17.0 → 17.0.2.1.12, 18.0 → 18.0.2.1.12, 19.0 → 19.0.2.1.12
Privately supplied verified support build: 19.0 → 19.0.2.1.31
Price: $499 USD (one-time, per Odoo version)
Module licence: OPL-1. The privately supplied Odoo 19 support build 19.0.2.1.31 has no separate runtime key activation.
This page is the overview. The step-by-step installation, configuration and settlement guide lives at Takealot Store Management — installation & configuration.
What this module does
- Offers — list, count and update your Takealot offers; create new offers against an existing Takealot PLID; stock counts and stock-health statistics
- Sales & orders — scheduled import of your Takealot sales orders into Odoo, with customer records derived from order data, plus per-order customer invoices
- Returns — import seller returns and their detail, and raise or update a return dispute (the seller-side action the Seller API supports)
- Finance — read the Takealot statement file into the settlement (every row, the fees, the VAT, any Seller Capital repayment and the disbursement), check it against Takealot's own arithmetic, and post a balanced journal entry with per-fee-type expense lines and the VAT contained in them
- Catalogue — Takealot PLID lookup, Add-a-Product categories, category attribute expansion, brand search
- Webhooks — register, list, test and delete webhook subscriptions against the real
/webhooksresource - Reports — request an async report task, poll its status, and download the result
- Operations — queue-based async processing, scheduled polling, an OWL dashboard, and multi-company record rules
What this module does not do
The Takealot Seller API is, in Takealot's own words, "the initial phase of the Seller API". Some things you may expect from other marketplace connectors are not possible, because the platform exposes no endpoint for them. This module does not fake them:
- No shipment or order-status push. Fulfilment status flows from Takealot to Odoo. There is no seller-side endpoint to mark an order shipped, cancel it, or set its status on Takealot.
- No returns approve/reject. Returns are handled through the dispute flow, not an approve/reject call.
- No stock-quantity write endpoint. Stock is a property of an offer, updated through the offer, not a separate inventory API.
- No payouts or adjustments endpoints. Statement documents and their downloadable files are what the API exposes; line-level amounts come from the statement file.
- No brand-request or product-submission endpoint. New products go through Takealot's own Add-a-Product / loadsheet flows in the Seller Portal.
Prerequisites
- Odoo 17, 18, or 19 (Community or Enterprise)
- The Takealot connector archive for your Odoo major version; the privately supplied Odoo 19 support build
19.0.2.1.31needs no separate ECOSIRE license-client module or activation key - A Takealot seller account with Seller API access enabled
- An API key generated from the Takealot Seller Portal (API Integration → Seller API → Authentication). Only the account owner can generate one, and there is one key per account.
Quick start
- Obtain the ZIP for your Odoo version through your purchase or project-delivery channel.
- Extract it into your Odoo addons directory and restart Odoo.
- Apps → Update Apps List, search for Takealot Store Management, install.
- In Takealot Store Management → Configuration, create a configuration, paste your API key, and click Test Connection.
- Run the initial import from Operations, then let the scheduled actions take over.
Full detail — including statement-to-bank accounting, the scheduled-action list, and troubleshooting — is in the installation & configuration guide.
Private support-build changes after public 2.1.12
- 2.1.31: a multi-unit order is imported at the price the customer actually paid. Takealot gives each line its total price, the importer read that as the unit price, and Odoo multiplied by the quantity again -- five units at R249 (R1,245) became R6,225 through the clearing account. Editable quotations are corrected on upgrade; confirmed or invoiced orders are listed in the Takealot log so the correction is made deliberately as an accounting entry.
- 2.1.30: order and customer history imports work for ranges longer than six months. Takealot refuses a date filter wider than six months, so importing from 2023 failed on its first request and returned nothing. The range is now split into consecutive six-month slices, oldest first; each completed slice is kept if a later one fails, re-running resumes instead of duplicating, and a range that ends before it starts is refused up front.
- 2.1.29: upgrading reworks the Reconciliation Variance already stored on existing settlements, so an affected settlement reads 0.00 without anyone reopening it. Nothing is posted, changed or unposted.
- 2.1.28: a debit order is treated as money paid in to the Takealot balance, and the journal entry posts it in the correct direction.
- 2.1.27: Import Stock Levels names the stock it could not import instead of finishing quietly.
- 2.1.26: Import Statement Files reads the weekly statement documents from the Seller API, and Probe Statement Window reports -- read-only -- which statement windows a connected instance can see.
- 2.1.25: stock import writes to the product each Takealot offer is mapped to, and Paid versus In Payment on the clearing journal follows the reconciliation state.
- 2.1.24: one Takealot offer can no longer overwrite another's stock on a shared product, and clearing payments produce real journal entries.
- 2.1.23: imported invoices and clearing payments use the Takealot company's currency, an automatic re-import no longer reopens a locally fulfilled order, and analytics periods follow the Takealot company's local calendar.
- 2.1.22: the four Analytics charts fill their cards instead of drawing at a fraction of the available width.
- 2.1.21: Sales Trend, Customer Growth, Top Products and Inventory Status draw their data; confirming an imported order keeps its Takealot order date; a month of analytics keeps its last trading day; and the automatic clearing payment is dated on the invoice rather than the import.
- 2.1.20: settlement accounting is corrected across the board -- input VAT is the VAT Takealot actually charged, fee reversals net against their own fee instead of counting as refunds, the settlement entry carries tax grids so the Tax Report populates, Seller Capital repayments and debit orders are booked, imported invoices can be paid automatically against instance-level Auto Pay and Clearing Journal settings, backfilled invoices are dated on the Takealot order date, returns imported before their order relink, and credit notes reduce the VAT201 boxes instead of increasing them.
- 2.1.19: payouts inherit their amounts from the covering settlement, "Create Bank Statement" refuses to book a zero, and the VAT201 schedule can leave Draft.
- 2.1.18: the per-record "Import from Takealot" on a payout accepts the live epoch format Takealot sends.
- 2.1.17: genuine transaction reconciliation follows the connector-owned
statement_line_idlink instead of querying the removedtakealot_transaction_idfield on Odoo core models. - 2.1.16: payout bank-statement creation uses supported connector links and no longer writes removed custom fields on Odoo core bank-statement models.
- 2.1.15: payouts default to the active company's currency, including single-currency databases where the Currency field is hidden.
- 2.1.14: settlement reconciliation preserves the audited workbook totals and blocks a non-zero variance.
- 2.1.13: the Odoo 19 connector no longer requires the separate ECOSIRE runtime-enforcement dependency.
What's new in 2.1.11-2.1.12
- 2.1.12: the statement file is read for you. Takealot publishes each weekly statement as a document, so the fee, VAT, Seller Capital and disbursement figures used to be typed in by hand. Upload the file on a settlement and press Read Statement File: every row is imported as Takealot published it, the totals are filled in, and the statement is checked against Takealot's own arithmetic. A statement that does not tie is flagged with the exact shortfall rather than quietly posted.
- 2.1.12: the VAT201 schedule no longer overstates VAT payable. The input VAT boxes were shown but never filled while the net payable subtracted them. Box 6 is now calculated from posted purchase documents and the settlement's input VAT, and the net payable recalculates when you enter box 5.
- 2.1.12: a delivered Mr D Food order cannot be deleted by accident.
- 2.1.11: packaging only. An internal file was removed from the published module; no functional change.
What's new in 2.1.5–2.1.10
-
2.1.10: settlements and payouts find statements that exist. The connector read only the first 100 statement documents Takealot returned and compared statement periods as text, so sellers with a longer history were told no statement matched their settlement date. The full statement history is now searched and periods are read correctly.
-
2.1.8: VAT-inclusive pricing is one dropdown. Set a price-included 15% Takealot Sales Tax (plus an optional zero-rated/exempt tax) on the connection and imported orders invoice at the Takealot listing price — R249 stays R249. Per-product ZA VAT flags are on the product form's Takealot tab.
-
2.1.8: administrators see every menu. Manager and Administrator now include the Finance, Operations and Analytics roles, so Payouts, Settlements, VAT201, DC Inbound and Analytics appear without extra user setup. Upgrading repairs existing databases.
-
2.1.8: dashboard accuracy. The chart tooltip uses your company currency instead of a hardcoded
$, the Customers card counts buyers in the selected period, and the mislabelled "Return Rate" is now Cancellation Rate. Reconcile on a payout with no captured lines says so instead of reporting success. -
Date-filtered imports now use the dates you choose. Order and customer imports always send the Seller API's required start and end dates, while refund and payout imports honour the Operations wizard's full date range.
-
Warehouses and imported orders now line up. Import Locations creates or updates the seller's merchant warehouses, Takealot distribution centres found in the offer feed appear as locations ready for you to map, and draft imported orders inherit the instance's Default Warehouse. Confirmed orders are never rewritten.
-
Stock import works across both Takealot stock families. The connector reads stock held at Takealot distribution centres and lead-time stock held at merchant warehouses, aggregates locations mapped to the same Odoo warehouse, and creates imported products as stockable products.
-
Returns and finance dates accept the formats Takealot actually sends. Epoch seconds or milliseconds, ISO timestamps and date-only values are parsed consistently for returns, statements and payouts, so real rows are no longer dropped or treated as outside the chosen window.
-
Empty and failed runs are explicit. A seller with no returns is distinguished from a failed request, missing financial permissions produce a clear error, archived ZAR is reactivated instead of duplicated, and Operations reports created, updated and failed counts.
Odoo 17, 18 and 19 currently publish 2.1.12 in the catalogue. A privately
supplied, verified Odoo 19 support build 2.1.31 includes the licence-free
runtime and corrected settlement-to-bank workflow; it is not the public
catalogue archive.
API details
| Field | Value |
|---|---|
| Auth method | Static API key in the Authorization header, formatted Key <api_key> (not Bearer) |
| Base endpoint | https://seller-api.takealot.com/v2 |
| Offers | /offers, /offers/count, /offers/offer/{identifier}, /offers/stock_counts |
| Sales & orders | /sales, /sales/summary, /sales/orders, /sales/orders/{order_id}/customer_invoices |
| Returns | /returns, /return/{seller_return_id}/details |
| Finance | /financial/statements, /financial/statement/download/{financial_document_id} |
| Webhooks | /webhooks, /webhooks/{webhook_id}, /webhooks/test |
| Rate limiting | Per-endpoint throttling; HTTP 429 with a Retry-After header |
| Pagination | page_number + page_size (max 100) |
| Marketplace | South Africa only — ZAR, country ZA |
| Official docs | seller-api.takealot.com/api-docs |
Dashboard
The built-in OWL dashboard provides:
- KPI cards — Revenue, Orders, Customers, Products, Average Order Value and Sync Health, each with a period-over-period delta
- Sales trend line chart with date filtering, and an order-status doughnut chart
- Period filters — Today, 7 days, 30 days, 90 days, Year, or a custom range
- Activity feed of recent sync log entries, and quick actions for Products, Orders, Customers, Queue, Logs and Settings
- Status footer — queue jobs, errors, out-of-stock and sync rate
- Auto-refresh, with dark-mode support
Troubleshooting
| Issue | Solution |
|---|---|
| Connection failed | Verify the API key and that Seller API access is enabled. The header must be Authorization: Key <api_key> — Bearer will return 401. |
| 401 Unauthorized | Regenerate the API key in the Seller Portal. Only the account owner can do this, and regenerating invalidates the previous key. |
| HTTP 429 | You are being throttled. The module honours Retry-After; if it persists, lengthen your sync intervals. |
| Sync not running | Check that the Odoo scheduled actions for this module are active. |
| Orders not importing | Verify the date range and filters on the import. Orders arrive as flat order-item rows and are grouped per order. |
| Duplicate products | Review the PLID/SKU mapping — a Takealot PLID is an integer, the SKU is your own string. |
| Settlement shows no amounts | Line-level amounts live in the statement file, which is attached to the record — the JSON listing returns document metadata only. |
| Odoo 19 asks for an ECOSIRE activation key | If support supplied 19.0.2.1.31 or later, run an Odoo module upgrade. The privately supplied support build has no separate runtime key activation. |