Profitability by Channel
What each channel actually leaves you, commission already deducted
Crosses each channel's sales against what the marketplace actually paid out, its fees and product cost, and returns profit and margin by channel and by product. And flags the orders where the data isn't there.
How you get it
Every development works in all three Odoo environments. The only thing that changes is how we deliver it.
Odoo Online (SaaS)
You do not need the ability to install modules. A Millora consultant comes in with temporary access that you authorize and implements it with Odoo Studio. When they are done, you revoke the access.
Odoo.sh or your own server
You receive the module and the installation guide by email as soon as payment clears. Install it yourself, or we install it with you.
Installation · shell
# 1 · copia el módulo a tu addons_path
cp -r millora_rentabilidad_por_canal /mnt/extra-addons/
# 2 · reinicia y actualiza la lista de apps
odoo-bin -u all -d tu_base --stop-after-init
# 3 · instala desde Apps
# busca "Profitability by Channel"What it solves
The problem
The amount on a sales order is not what landed in your account. Between the two sit the channel's commission, the shipping cost, listing charges and refunds. On a marketplace that gap isn't a detail: it is half the answer.
And every channel charges differently. The one that sells the most can easily be the one that leaves the least, and no sales report shows it — because sales reports look at the sale, not at the payout.
Today the answer gets assembled by hand, in a spreadsheet, once a month. By the time it is ready it can no longer inform what to list, what to pause or which product to push. And nobody rebuilds it midweek to check a hunch.
How it works
You pick a period and, if you want, specific channels or products. One button generates the report.
For every order, the report goes looking for the channel's real money movements — what it paid out and what it charged — and ties them to the order by the marketplace order number. It strips the tax so they can be compared against the sale, and spreads them across the order's products in proportion to what each one contributes.
Cost comes from the product's standard cost times the quantity sold. Profit is paid-out minus charged minus cost.
And here is the decision that changes the number: margin is calculated on what the channel paid out, not on the sales order amount. That is the difference between a real margin and a paper one.
There are two ways to date the period, and they do not agree: by the date the order landed in Odoo, or by the marketplace's own date. An order sold on the 31st that downloaded on the 1st falls in different months depending on which you use. Closing by channel date is what makes the report reconcile against the marketplace statement.
The output is a set of total cards and a table per channel, broken down product by product, with margin colour-coded — red for a loss, amber below the threshold, green above — plus a channel subtotal and a grand total. Every report is stored with its period and its filters, so it can be reopened.
What it does not do
It does not invent what it doesn't have, and it says so. If an order is missing the channel's money movements, or carries no marketplace order number, it is computed with zero income and zero expense: a notice at the top counts how many, and those rows come out flagged in amber. A spectacular margin carrying that flag is not a good business, it is missing data — and it is exactly what a quieter report would let you believe.
Cost is today's, not the day of the sale. It uses the standard cost in force when the report runs. If cost changed, the same period will give a different number next time. A historical close has to be frozen.
The per-product split is an allocation. Commission arrives per order, not per product; it is distributed according to what each product contributes to that order's sale. It is a reasonable allocation, not a measurement.
It assumes the general VAT rate. Channel amounts arrive with tax and are divided out to be compared against the sale. A catalogue at zero or border rate needs adjusting.
It is not a live dashboard and does not replace accounting. It is generated on demand, per period, and it is a commercial decision tool: it does not reconcile against journal entries.
What changes
The question of which channel makes money stops being a monthly spreadsheet exercise and becomes a button. It can be run midweek, on a single channel or a single product, when the doubt shows up rather than when the close is due.
And the question that actually matters gets an answer: not which one sells the most, but which one leaves the most — which are often not the same.
What's included
- Crosses every order with the channel's real money movements, tied by the marketplace order number
- Calculates profit and margin by channel and by product, product cost included
- Bases margin on what the channel paid out, not on the sales order amount
- Shows the gap between the sale as recorded and what was actually paid out
- Dates the period by Odoo's date or by the marketplace's date, your choice
- Filters by channels and by products, or runs across the whole catalogue
- Colour-codes margin: loss in red, below threshold in amber, healthy in green
- Reports how many orders carry no money movements and flags those rows one by one
- Excludes cancelled and refunded orders, recognising how each channel spells that status
- Stores every generated report with its period and its filters, so it can be revisited
Requirements
- Sales module active
- Odoo Marketplugin: it is what pulls the channel's money movements and writes the marketplace order number onto the sale. Without it the report has nothing to cross against
- One sales team per channel, which is how the report groups
- Standard cost loaded on the products, or cost will come out as zero
- A catalogue on the general VAT rate, or adjusting the calculation to the rate that applies
You might also need
Denied Products in Sales
What they asked for and you didn't have, recorded instead of deleted
Sales
Sales Order Validation
What you shipped and never invoiced, in one list
Sales
Payment Allocator
You decide how much goes to each invoice, not the order of the list
Accounting & tax

