What the manager sees: one screen for four channels
Channel pricing — the automation under the hood
No M code, no API. The manager opens one file, clicks "Refresh", grabs a coffee for 5 minutes, then spends 20 minutes eyeballing the list — and prices on four channels are updated all at once.
Power Query in M, target-price math in Excel formulas, a synchronous export into 4 templates. No manual template downloads from back-offices — the API does it all in one pass.
01How it worked before us
The pricing manager used to keep this schedule: Monday — Shopify, Wednesday — Amazon, Friday — Etsy, Walmart "whenever I get to it". Each channel took 1–2 hours: download the template from the back-office, move it into Excel, recompute the formulas, check RRP, upload it back.
Because the days differed, prices drifted between channels. Customers found the same product on Shopify and Amazon at different prices and started asking questions. When a marketplace changed its fees, the formulas went stale, and for a couple of weeks something would inevitably be selling at a loss.
The distributor sells on four major channels: Shopify, Amazon, Etsy, Walmart. All four want their own pricing logic — each has its own set of fees, fulfillment rates, payment processing, its own penalties for different categories and dimensions. On top of that the brand enforces an RRP with an allowed deviation band.
Before our work the manager did this:
- Download a template → export → recompute in Excel → upload. 1–2 hours per channel. Four channels — a whole day.
- Fees changed — formulas went stale. A day after updating, it would turn out some items had slipped into the red.
- RRP — in a separate file owned by someone else. To answer "can we set price X?" you had to gather data from three places.
- Channels updated on different days. Not by design, but because the manager ran out of time. The result — inconsistent prices, unhappy customers, RRP conflicts.
02What we built
One screen for four channels
A separate Excel file, "Auto-prices", holds the main table. One row per SKU, one column block per channel. Color coding shows at a glance which items are inside the RRP band, which are above and which below.
| SKU | Brand | RRP | Cost | Shopify | Amazon | Etsy | Walmart | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| fee | price | fee | price | fee | price | fee | price | ||||
* Price = the computed target price including each channel's fee. The dot on the left is the status against RRP.
The manager starts with the summary. If everything's green — apply. If there are ambers/reds — open the specific SKUs and decide for each: wait, change the RRP, or accept the deviation deliberately.
How the data refreshes
One click. The API pulls fresh fees and current prices from all 4 back-offices, Google Sheets supplies the current RRP and costs, the formulas recompute target prices — all the manager has to do is look.
Where the manager enters data
Everything that needs editing by hand lives in Google Sheets. Not in Excel. That matters: the department head or category manager can open a browser anytime, change an RRP or a cost, and on the next refresh it flows into the model.
| SKU | Price type | Value, $ | Effective date |
|---|---|---|---|
| SKU-A01 | RRP | 32.80 | 05/15/2026 |
| SKU-A01 | Wholesale | 18.20 | 05/15/2026 |
| SKU-A01 | Cost | 10.80 | 04/01/2026 |
| SKU-A01 | Min. allowed | 27.60 | 05/15/2026 |
| SKU-B01 | RRP | 52.50 | 05/15/2026 |
The format is "long" — several rows per SKU (RRP, wholesale, cost, minimum). That gives flexibility: you can keep different price types independently, add new types without reworking the model. Power Query pivots it into the shape it needs.
Once the manager has checked everything — export
On hidden sheets "Export_Shopify", "Export_Amazon", "Export_Etsy", "Export_Walmart" the rows already sit in each channel's required format: correct columns, correct IDs. The manager copies the contents, opens the channel back-office, and applies them.
Architecture
The crucial point: no manual template downloads from back-offices. The M code pulls everything it needs over the API in one pass. Excel is where the business logic lives, not where copy-paste lives.
Channel APIs in M code
Power Query in M can make HTTP requests. Each channel has its own function: pull the token from the hidden sheet, do a GET/POST, parse the JSON, shape it into a table. All four functions are structurally similar; the shared wrapper:
// fnCh_Fees — shared fee-request function // Takes: channel key, endpoint, params let Creds = Excel.CurrentWorkbook(){[Name="API_Tokens"]}[Content], fnCh = (channel as text, endpoint as text, params as record) => let token = Table.SelectRows(Creds, each [Channel]=channel){0}[Token], URL = "https://api." & channel & ".../" & endpoint, resp = Json.Document( Web.Contents(URL, [ Headers = [#"Authorization" = "Bearer " & token, #"Content-Type" = "application/json"], Query = params ])), table = Table.FromRecords(resp[items]) in table in fnCh
On top — per-channel wrappers that know their endpoints:
// Shopify_Fees — current rates per listing let Source = fnCh("shopify", "v1/fees", [channelType = "online"]), Expand = Table.ExpandRecordColumn(Source, "fee", {"transaction", "payment", "fulfillment"}), Types = Table.TransformColumnTypes(Expand, {{"transaction", type number}, {"payment", type number}}) in Types
On the "Auto-prices" sheet every SKU automatically gets fresh fees — without copying tables out of a back-office.
Web.Contents with retry and pause settings. Refreshing the whole file takes 3–7 minutes — most of that is waiting on API responses, not computation.
Google Sheets — the single source of base prices
The same Google Sheet that holds the purchasing parameters (lead time, thresholds) also holds the pricing parameters. One sheet — both systems. Convenient, because the buyer and the pricing manager see the same thing.
| Field | What it means |
|---|---|
Price type | RRP / Wholesale / Cost / Min. allowed |
Value | Numeric value in dollars |
Effective date | The date the price applies from (for deferred changes) |
Power Query pivots the "long" format into "wide" — each SKU becomes a row with RRP, Wholesale, Cost and so on as columns. That feeds the Excel target-price formulas.
The target-price formula
The basic idea: the target price must cover all costs and leave the target margin without breaking the RRP band. All components are assembled on the sheet:
As a real Excel formula:
=([@Cost] + [@[Logistics, $]] + [@[Payment, $]] + [@[Target margin, $]] ) / (1 - [@[Channel fee]])
The result is checked against the RRP band:
=IF([@[Target price]] < [@RRP] * (1 - [@[Allowed deviation]]), "BELOW RRP", IF([@[Target price]] > [@RRP], "ABOVE RRP", "IN BAND"))
The manager walks the "BELOW RRP" / "ABOVE RRP" items visually and decides what to do with them (raise the minimum allowed, change the margin, or leave it out of band deliberately).
A one-shot update of 4 channels
On the "Auto-prices" sheet each channel has its own section with its own fee column and its own output template:
When the manager has finished the visual check, the four "Export_*" sheets are already ready to copy. Each one is formatted strictly for upload into the matching back-office. Prices change on all four channels in sync, on the same day.
03Timeline and outcome
| Stage | From start |
|---|---|
| Agreeing the formulas, connecting the first channel API | ~3 mo |
| Connecting Amazon, Etsy, Walmart | +1–2 mo |
| Export templates, shakedown | 5–6 mo |
A similar problem on your side?
Tell us — in 30 minutes we'll figure out what's possible.
