← Back to skumetrica.com

Reference

Contribution

Which of these products is actually worth selling, once every cost against it — fees, cost of goods and advertising — is counted.

Advertising

The advertising spend Amazon's Ads API attributed to this product and channel in the period, wherever it appears — as a column in the main table or as a step in one product's own breakdown.

Good: Not shown as a figure at all when it cannot be trusted for this row — see "not known" under Cost of goods and Advertising, and the note at the top of the page about how much of the window advertising data actually covers.

From: contribution_ads() in public/inc/contribution.php, matched to each SKU and channel.

Against target

How this product's Contribution compares with the required profit set on the Settings page — positive means it cleared the bar, negative means it fell short.

Good: Only shown once a target is configured, and only for rows with a complete Contribution; a row that cannot state one gets no verdict, because a product nobody can judge yet is not the same as one that is failing.

From: target_verdict() in public/inc/metrics.php.

Amazon's fees

The referral fee, fulfilment fee, promotions and refunds Amazon filed against this SKU and channel, combined into one figure.

Good: Read beside Revenue and Cost of goods, not alone — it is one part of the row's Bottom line.

From: contribution_rows()['fees_usd'] in public/inc/contribution.php.

Amount

The dollar value of a line — either a cost type in the "Costs no product carries" block, or a step in one product's own money breakdown.

Good: In the account-level block, compare against Revenue to see how much of the business's costs cannot be pinned to a single product; there is no fixed "small enough" share.

From: contribution_unattributed()['by_type'] for the block table; the per-SKU $steps built in public/contribution.php for the other.

Before what is missing

What the rows that could not state a complete Contribution add up to anyway — their Bottom line, added together, even though they are missing a cost.

Good: Never added to the Contribution figure beside it: an absent cost is not zero, so a row missing one is kept out of the total that claims to be complete.

From: contribution_totals()['incomplete_bottom_line'] in public/inc/contribution.php.

Bottom line

The column heading for what a row actually kept after its own costs — what it means changes row by row, and the last column, "What it is", names which figure this particular row is showing.

Good: Only add Bottom line figures together across rows that carry the same label in "What it is" — the totals above the table already enforce this by only summing complete Contribution rows.

From: contribution_rows()['contribution'] where complete, otherwise ['bottom_line'], in public/inc/contribution.php.

Contribution

What these products earned, added together, but only across the rows where every cost — fees, cost of goods and advertising — is actually known.

Good: Compare against "Before what is missing" beside it, and against the required-profit bar further down the page, rather than against zero.

From: contribution_totals()['contribution'], summing only rows with no excludes.

Cost of goods

What the units in this row cost to reach the shelf they sold from — the landed cost recorded in Settings, times the units sold.

Good: Shown as "not known" rather than zero when this account has no cost on record for those units for the period they sold in — a missing cost is never treated as a free one.

From: contribution_rows()['cogs'], from the cogs table via cogs_as_of().

Costs no product carries

Costs Amazon files once against the whole account rather than against any single product — the monthly subscription, inbound freight, storage and the like — shown as a block because there is no honest way to say which product they belong to.

Good: Compare against total revenue for a sense of scale; splitting this pro-rata across products would put an estimate on a page whose whole point is that its figures are the ones Amazon actually charged, so it deliberately is not done.

From: contribution_unattributed() in public/inc/contribution.php.

Per unit

A money figure on the row, divided by the units that sold — the same number the Units column shows, so every per-unit figure on the row is over the same base.

Good: Compare against the product's own selling price, not against other products' per-unit figures directly, since price points differ.

From: contribution_rows()['contribution_per_unit'] / ['bottom_line_per_unit'], or a step's amount divided by units in one product's own breakdown.

Product

The listing, SKU and channel this row is about — one SKU can appear more than once if it trades on more than one marketplace.

Good: Not a figure.

From: the product catalogue and contribution_rows()['sku']/['channel'].

Revenue

What buyers paid for this row in the period, from the order reports.

Good: Compare against Amazon's fees and Cost of goods on the same row to see where the money actually goes.

From: contribution_rows()['gross_usd'].

Rows

How many separate charges of that type Amazon filed against the account, with no product attached.

Good: Not a figure to judge alone — context for Amount, beside it.

From: contribution_unattributed()['by_type'], a count of order_fees rows.

Running

The total so far, after each step is added, in one product's own money breakdown — it ends on the row's own bottom line.

Good: Not a target — a running total exists to show the path, not to be compared against anything.

From: computed step by step in public/contribution.php as each line is added.

Step

One stage in one product's own walk from revenue to its bottom line — refunds, referral fee, fulfilment, promotions, other fees, cost of goods, advertising — in the order Amazon takes them.

Good: Not a figure; a label for the row.

From: the $steps built per product in public/contribution.php.

Units

The units that sold on this row. Any that shipped free — a replacement, say — are counted here too and noted separately underneath, because a free unit still cost you the goods.

Good: This is the base every other figure on the row is measured over, so dividing any of them by it gives a real per-unit figure. It is deliberately not the count of units Amazon has finished filing fees for: that number lags behind what sold, and using it as the divisor made cost of goods read half as much again as the cost the seller had actually entered.

From: contribution_rows()['sold_units'].

What

The name of the fee type, in the "Costs no product carries" block — what Amazon actually called the charge, in plain words.

Good: Not a figure.

From: fee_label() applied to contribution_unattributed()['by_type'].

What it is

States which figure the Bottom line column is actually showing for that row — Contribution, when every cost is known; a narrower figure like "profit before ads" when one is not; or a note that the row is cost-only or a credit.

Good: Read this before comparing Bottom line across rows — two rows with different labels here are not measuring the same thing.

From: contribution_label() in public/inc/contribution.php, applied per row.

← Back to the course map