What is a sales channel?
A sales channel is where an order was placed: on your own store (PrestaShop,
Shopware, WooCommerce — a storefront you run) or on a marketplace (Amazon,
connected through the Selling Partner API — a storefront someone else runs).
Every store view in Saldo Metrics carries exactly one channel_type,
own_store or marketplace, and every order inherits it from the store view
it was placed on.
This is a different axis from the marketing channel. Google Ads, Meta,
Klaviyo and "direct" are dim_channel rows: they describe what brought a
buyer to a store. A marketplace is not one of those rows. It is a store view,
because it takes the order, holds the money and owns the customer — the
things a storefront does, not the things an ad platform does. Keeping the two
axes apart is what lets you ask "how much did we sell on Amazon?" without
that being confused with "how much did Amazon Ads bring in?".
Formula
sales channel = store_view.channel_type -- 'own_store' | 'marketplace'
order's sales channel = channel_type of the store view the order was placed on
Worked example
A merchant runs a PrestaShop store and an Amazon DE listing. In one month the shop takes €48,000 of net revenue and Amazon takes €12,000. Ad spend is €6,000 on Meta and Google (own-store channels) and €1,500 on Amazon Ads (a marketplace channel).
- Net revenue, contribution margin and the P&L show all €60,000 — both sales channels count, and the marketplace's referral and fulfilment fees are already inside its margin.
- Filter the dashboard to Marketplace and every widget drops to the €12,000 side; filter to Own store and it shows the €48,000 side.
- MER and blended ROAS divide the €48,000 own-store revenue by the €6,000 own-store spend. The €1,500 of Amazon Ads is not in that denominator, because the €12,000 it helped drive is not in that numerator either.
How Saldo Metrics computes it
canonical.dim_store_view.channel_type is set when a store view is created,
from its source platform (canonical.default_channel_type: Amazon defaults
to marketplace, every module-connected shop to own_store), and can be
overridden in Settings → Stores & Brands; a resync never overwrites the override.
Order-, line- and margin-grain views (v_orders, v_contribution_margin,
v_order_lines) carry store_view_key, so a sales-channel split is a join
to dim_store_view — v_sales_channel_kpis rolls revenue, margin and order
count up to one row per channel type, and the Sales channel dimension on a
custom metric does the same join for any formula built on those views.
The channel_type filter in the filter bar resolves to the set of store
views of that type, cut down to the stores you may see, and then behaves
exactly like a store filter — it can only narrow what you already have
access to.
On the spend side, canonical.dim_channel.sales_scope mirrors the same two
values. Advertising channels that sell on a marketplace (Amazon Ads) are
marketplace; every other ad channel is own_store. v_channel_mer,
v_blended_roas_monthly, the true-ROAS and attribution views, the ad_spend
custom-metric measure and the marketing-mix model all fence their spend to
sales_scope = 'own_store'. Marketplace ad spend is reported on its own
(v_marketplace_ad_spend_monthly, against the platform's own attributed
revenue) and in the P&L's advertising line, where it is labelled with its
scope — it is never silently pooled with own-store spend.
Why it matters
Marketplace revenue and marketplace ad spend both come from a system that tracks its own conversions, and neither reaches your pixel or your customer records. Pool that spend against on-site margin and MER looks worse than it is; pool that revenue into an attribution model that never saw the click and "direct" quietly absorbs it. Keeping each side of a marketplace on its own sales channel means own-store efficiency numbers stay honest, and marketplace numbers are read next to the only revenue figure that belongs to them.
Common mistakes
- Looking for Amazon under marketing channels. It is a store view. The Stores page and the Sales channel filter are where it lives; the attribution and MER views deliberately do not know it.
- Expecting marketplace ad spend inside MER or blended ROAS. It is kept
out by
sales_scope, on purpose — readv_marketplace_ad_spend_monthly(spend against the platform's own reported revenue) for that side. - Reading a channel filter as a store selection. A channel filter is a set of stores, so a single-store display currency does not apply; the org display currency does.
- Assuming the customer pages split the same way. They do not show marketplace buyers at all — see Marketplace order for why.
Where you see this in the app
The Sales channel filter in the filter bar (shown once an organisation has
more than one channel type), the channel type on each store in Settings →
Stores & Brands, the Sales channel dimension when building a custom metric, and the
trailing channel_type column on a dashboard export taken under that filter.