Skip to content

No account required

Start a project

Work out which products actually make money.

Contribution per unit after discounts, channel fees, payment fees, shipping, pick-pack and returns — the number that decides whether a product can afford to be advertised.

No account needed to start. You only pay when you like what you see.

  • .xlsx. Excel workbook. Every sheet read, including the ones that are notes rather than data.
  • .xls. Excel 97–2003. Read the same as a modern workbook.
  • .xlsm. Excel, macro-enabled. Values and formulas are read. Macros are never executed.
  • .ods. OpenDocument spreadsheet. LibreOffice and OpenOffice workbooks, read like Excel.
  • .numbers. Apple Numbers. Tables are pulled out of the Numbers package sheet by sheet.
  • .csv. CSV. Delimiter, quoting and encoding detected rather than assumed.
  • .tsv. Tab-separated. Read as delimited text.
  • .pdf. PDF. Checked for a text layer first. A PDF written by software keeps its table structure; a scan is read as an image and told apart from the first kind.
  • .docx. Word document. Tables are lifted out of the document; the prose around them is kept as context.
  • .pptx. PowerPoint deck. Tables and the data behind native charts are read slide by slide.
  • .rtf. Rich text. Tables extracted, formatting discarded.
  • .json. JSON. Nested objects are flattened into tables, keeping the path as the column name.
  • .ndjson. Newline-delimited JSON. Streamed a record at a time, so an export of any size is fine.
  • .xml. XML. Repeated elements become rows; attributes become columns.
  • .parquet. Parquet. Read columnwise, with the file's own types kept.
  • .sqlite. SQLite database. Every table read, with the foreign keys used to work out how they relate.
  • .db. SQLite database. Read as SQLite when the file is one, and reported plainly when it is not.
  • .pbix. Power BI report. The tables inside the report are read out of its model, along with the measures that were defined on top of them, so your own definitions are used rather than re-invented.
  • .pbit. Power BI template. A template carries the model and the measures without the data, and is read for both.
  • .twbx. Tableau packaged workbook. The packaged extract is read as data, and the workbook beside it supplies the calculated fields.
  • .twb. Tableau workbook. Calculated fields and the shape of each sheet are read.
  • .hyper. Tableau extract. Read straight through, table by table.
  • .txt. Plain text. Read as notes, or as data when the contents turn out to be a table.
  • .md. Markdown. Markdown tables become tables; the rest becomes context for the analysis.
  • .zip. Zip archive. Unpacked, and each file inside is treated as though you had uploaded it yourself.

What comes back

order_lines.csv
86,412 rowsChecked

Your best-selling product loses $2.15 a unit, and it paid for the stock you cannot sell.

The linen shirt is the top seller by volume and reports a 59% gross margin. After discounts, marketplace and payment fees, free shipping and a 26% return rate, it contributes −$2.15 per unit ordered — $8,988 over the year. Meanwhile $128,000 of stock, 31% of the total value, has not sold in nine months, and eight of the products that do sell were out of stock for 4.7% of the year.

$412,000Stock value+11.2%
31.0%Not sold in 9 months+4.3pp
214SKUs below zero
Open the full sample project

Where the linen shirt's margin goes

A 59% gross margin ends at −$8,988

  1. 01The best seller contributes −$2.15 per unit ordered.
  2. 02$128,000 of stock has not sold in nine months, and half of it was bought to hit a discount.
  3. 03Eight products that do sell were unavailable for 4.7% of the year.

01

It builds a landed cost before it builds a margin

What the goods cost lives in the purchase orders, not the sales export, and the two only meet through a SKU written four different ways. Inbound freight has to be allocated, and the choice matters: in the worked example, allocating by weight rather than by value moves 41 products across the break-even line, so the method is stated rather than assumed.

02

It applies returns per unit ordered, not per order

This is the arithmetic that changes signs. A returned unit costs the outbound shipping twice, the inspection and the unrecovered fee. For the share that cannot go out again at full price, it also costs a markdown. The example's best-selling product contributes $6.02 on a unit that stays sold and −$2.15 across every unit ordered.

03

It shows what would have to change

“Stop selling it” is rarely the answer and never the whole one. The output is the sensitivity: the price that makes it work, the return rate that makes it work and the fee tier that makes it work. The decision is made against numbers rather than against a verdict.

It expects a mess.

Most files that arrive here have several tables on one sheet, a title block above the data, totals stranded in the middle of it, and dates in more than one format. That is the normal case, not the awkward one.

  • Contribution per unit, per SKU, after everything
  • A margin bridge for any product, step by step
  • The products below zero, ranked by what they cost you
  • Return concentration, and whether it is a product problem
  • Cleaned .xlsx and methodology
sales_export_FINAL_v3(2).xlsx
A messy sales export, and the repairs Data Analysis App applies to it.
OrderDateCustomerAmt
1024107/02/26John Smith$84.00
102422 July 2026SARAH LOPEZ$41.00
102422 July 2026SARAH LOPEZ$41.00
1024345840s. lopez41
Not suppliedNot suppliedSUBTOTAL$166.00
102442026-07-03Amara Osei$127.50
  • Date format
  • Duplicate row
  • Serial date · text number
  • Total inside the data
Orders, landed costs, fees and return slips revealing contribution margin for two products.

Questions it works through

  • Which products lose money once returns are counted?
  • What would the price have to be for this one to work?
  • Which returns are a product problem rather than a customer one?
  • Am I advertising something that cannot afford advertising?

Questions people ask

What if I do not have a fee schedule?

A settlement or payout file is better than a fee schedule anyway, because it contains what you were actually charged. Failing both, standard rates for your channels are applied as a stated assumption you can override, and every rate used appears in the methodology rather than inside a formula.

What if my pick-pack and handling costs are only estimates?

Most are. An error in a standard cost moves every product by the same amount, so it changes the level and not the ranking — and the limitation is written on the finding rather than left for you to work out. Where a product's answer depends on that estimate, it says so.

Does it include advertising and overhead?

Not by default, because contribution is the right test for a catalogue decision and adding overhead only ever makes the answer worse. Where ad spend is available per product it is reported beside contribution, which is how you find a product whose margin cannot fund the traffic buying it.

How is this different from the margin in my store admin?

That is price minus cost, and it is why unprofitable products survive for years. The example's best seller reports a 59% gross margin there and contributes −$2.15 per unit ordered here — the difference is discounts, fees, free shipping and a 26% return rate, all of which are real and none of which appear in a gross margin.

Upload sales and costs

No account needed to start. You only pay when you like what you see.