Per-product margin: the data shops kept hidden for years now drives profit

Purchase cost per product is probably the most valuable column in a shop’s database and also the one most often left empty. This guide brings together everything about margin in e-commerce data: how to calculate and store it correctly, why it was kept under lock and key for years, what it does in product campaigns and how DataOrganizer uses it.

Concepts

Gross margin, net margin and markup: clear definitions

Before margin goes into the data, it has to be unambiguous. In shop practice, one word covers three different figures:

Definition

Product gross margin is the difference between the net selling price and the net purchase cost (plus any variable costs), expressed in euros or as a percentage of the selling price. It is the first measure of how much a sale really leaves in the business before fixed costs and advertising are counted.

Formula · gross margin

margin (€) = net selling price − net purchase cost − variable costs

Example: €20.33 − €10.25 − €2.83 = €7.25. As a percentage: 7.25 / 20.33 = 35.7%.

Formula · POAS (profit on ad spend)

POAS = gross profit from orders / ad spend

A POAS of 1.0 means advertising returns exactly as much gross profit as it costs. Below 1.0, you are paying to make sales.

The most common mistake concerns markup. Markup is calculated from the purchase cost, margin from the selling price, so the same figures give two different percentages:

Markup · calculated from cost

(25 − 12.50) / 12.50 = 100%

You buy for €12.50 net and sell for €25 net. The markup sounds impressive.

Margin · calculated from price

(25 − 12.50) / 25 = 50%

The same figures. From every euro of sales, 50 cents stays in the business, before advertising costs.

In conversations with suppliers and your agency, and in shop data, stick to one convention and name it explicitly. Throughout this guide, margin is calculated from the net selling price.

Source data

Where margin data comes from: purchase cost per SKU

Margin in analytics has one source: the purchase cost field on the product page. Most shop platforms have one (as cost, purchase price or a custom field); it just needs to be filled in and maintained. The alternative is a percentage margin per product, but an absolute purchase cost is more accurate: it behaves correctly with discounts, promotions and price changes.

To see what is at stake, simply break down a shelf price into its parts. This is what €25 gross looks like in an example online beauty shop (illustrative data):

Price anatomy · €25 gross on the shop front

VAT €4.67 purchase cost €10.25 logistics and packing €2.08 payments and fees €0.75 gross margin €7.25

Of €25 on the shop front, €7.25 remains before any advertising starts. Without purchase cost in the data, this figure is invisible and every report stops at revenue.

Keeping this data in order requires an ongoing process:

  1. Audit your coverage

    Calculate what percentage of active SKUs have a purchase cost filled in and what percentage of revenue they generate. Fill in the gaps starting with your best-selling products.

  2. Enter net costs per variant

    Always enter purchase cost net and at variant level (size or volume can have different supplier prices). Convert purchase currencies using a fixed rule.

  3. Update with every delivery

    A change in a supplier’s price list should reach the shop straight away, usually through a bulk import from a file. An outdated purchase cost can be worse than none at all, because it gives false confidence.

  4. Validate every quarter

    Spot-check the cost in the shop against purchase invoices and review products with a negative or suspiciously high margin: these are usually typos and mixed-up units.

Accounting note: margin is calculated on net prices, while revenue on the website and in many dashboards is often gross. Mixing these two worlds is the most common reason for “margins” that do not match the accounts.

Data culture

Why margin was a board-level secret for years

In many companies, the purchase cost lived for years only in the owner’s spreadsheet. The reasons were understandable: margin is sensitive commercial information, a leak makes life easier for competitors and suppliers, and inside the company it can spark disputes about pay. So access went to the board and accounting, while the rest of the company (not to mention the agency) worked on revenue alone.

Meanwhile, the environment changed. Advertising traffic became more expensive and product campaigns became automated: the algorithm is given a goal and decides on its own which products to show. If it only knows revenue, it will deliver revenue, including from products that leave not a single cent of profit. The e-commerce community now says this openly: after years of growth at any cost, the industry has moved to measuring profit, and POAS and per-product profitability have entered the standard campaign vocabulary.

Automation optimises what it sees. It sees revenue, so it delivers revenue, even when some orders leave not a single cent of margin.

The tension between confidentiality and usefulness is resolved by layered access. Nobody has to choose between a locked safe and full transparency:

Level 1Board and finance

The full picture: purchase costs in absolute amounts, supplier contracts, margins per product, category and sales channel (own shop vs marketplace). This is where pricing and purchasing decisions are made.

Level 2E-commerce team

Margins without purchase price lists: percentages and profitability per product and category, profit rankings, the impact of promotions. Enough to plan the range and campaigns.

Level 3Agency and media

Segments instead of amounts: labels such as high-margin and low-margin in the feed, the shop’s overall POAS, a list of products excluded from promotions. Enough to build campaigns for profit.

Key takeaway

Confidentiality protects purchase amounts, while campaigns need margin-based results. The two can be reconciled: supplier price lists stay within a small circle, and only percentages, segments and labels are shared outside. Keeping an accurate purchase cost in the shop system is the condition for both at once.

Applications

What per-product margin is used for in practice

Once the purchase cost is in the data, a single column feeds several very different decisions:

AreaWhat per-product margin changes
Prices and promotionsdiscounts are planned from the product’s real margin; items that fall below the threshold after the discount are dropped from the campaign
Choosing products for campaignsbudget is scaled on products that combine demand with margin; fast-moving low-margin items work for visibility, but with a deliberate cap
Feed labelsvalues such as high-margin and low-margin make it possible to split product campaigns without revealing amounts
Assessing sales channelsthe same item has different profitability after marketplace fees than in your own shop; the decision needs numbers, not intuition
Purchasing and stocka profit ranking (not a turnover ranking) shows which stock is really worth replenishing first
Measuring marketingPOAS and profit after advertising costs instead of ROAS alone; a budget that looks “cheap per click” can be expensive in profit

The scale of the reshuffle is best shown by comparing two rankings of the same range (online beauty and pharmacy shop, 30 days, illustrative data):

Revenue ranking

Skincare gift set€6,150 revenue
SPF 50 cream€4,950 revenue
Pharmacy shampoo 1 l€3,550 revenue
Retinol serum€2,875 revenue

Gross profit ranking

SPF 50 cream€2,227.50 margin (45%)
Retinol serum€1,437.50 margin (50%)
Skincare gift set€1,107.50 margin (18%)
Pharmacy shampoo 1 l€532.50 margin (15%)

The revenue leader drops to third place in profit, while number four moves up to second. Every decision made on the left ranking (budgets, promotions, purchasing) targets different products from one made on the right.

Real risk

A campaign measured on ROAS readily scales products from the left ranking. The gift set generates impressive revenue at an 18% margin, so after deducting advertising costs it can fall to zero or below. Without margin in the data, nobody will notice, because the campaign report shows green.

Trends

POAS and profit-first in product campaigns

The industry shift of recent years can be summed up in one sentence: from measuring revenue to measuring profit. In practice it consists of three elements, all based on purchase cost per SKU:

First, POAS alongside ROAS. Two campaigns with an identical ROAS of 5 cannot be compared if one sells products with a 45% margin and the other 15%. POAS brings them to a common denominator: how much gross profit remains from every euro spent on advertising. Values below 1 mean losing money, even with a ROAS that looks decent.

Second, margin-based conversion value. Increasingly, instead of revenue, advertising platforms receive a value that reflects profit, so that automated strategies bid more aggressively where a sale leaves more behind. This is the direction taken by both large shops and specialised tools.

Third, segmenting campaigns by margin. Margin labels in the feed divide the catalogue into groups with different goals: profit leaders get budget for scaling, fast-moving low-margin items get a cap, and the long tail gets a test. The mechanics of labels and campaign splitting are covered in separate guides: product feed and Merchant Center.

Methodological note: ad cost at the level of a single product exists in the source data only for Google product campaigns, and one ad sells various products from the basket. For this reason, POAS from shop orders is calculated reliably for the whole shop (gross profit from paid orders divided by total ad spend), not for a single SKU; per channel or campaign it can only be estimated from conversion values in GA4 or the ad platforms. The guide to conversions and attribution explains this in more detail.

DataOrganizer

How DataOrganizer uses margin from the shop system

Where the data comes from: the shop integration pulls the product catalogue every day together with the purchase cost field (per SKU and variant), as well as order lines with actual selling prices after discounts. Combining the two produces gross profit per product, category, order and day, and, once commissions and marketplace fees are added, the profitability of marketplace sales as well.

What it is used for in practice: a ready-made view of products with margin instead of rankings based on turnover alone, margin segments of the catalogue, a comparison of profitability between your own shop and marketplaces after fees, POAS and profit after ad costs for the whole shop against total spend from connected ad platforms, and margin labels that return to Merchant Center via a Google Sheet and split campaigns. The precondition for all of this remains the purchase cost field in your shop: analytics cannot invent a margin that is not in the data.

AI assistant DataOrganizer app
sources connectedlast 30 days
Show products with high revenue and a margin below 20%.
AI
Joining order lines with product purchase costs…
AI

Two products combine high revenue with a margin below the 20% threshold:

ProductRevenueMargin €Margin %
Skincare gift set€6,150€1,107.5018%
Pharmacy shampoo 1 l€3,550€532.5015%
SPF 50 cream (for comparison)€4,950€2,227.5045%

Two levers to consider: a price adjustment or negotiating the purchase cost. Until a decision is made, I can give both products the low-margin label in the Merchant Center sheet so that scale-focused campaigns do not promote them.

Margin per categoryProfitability: shop vs marketplace

Confidentiality in practice

Raw purchase costs stay in the backend; only aggregates go out. The AI assistant works on aggregated results (percentage margins, totals, segments), so the team and the agency get insights without seeing supplier price lists. It is the same principle of layered access, just implemented in the data.

FAQ

Frequently asked questions about e-commerce margin

What is the difference between margin and markup?

Markup is calculated from the purchase cost, margin from the selling price. A product bought for €12.50 and sold for €25 net has a 100% markup but a 50% margin. Confusing the two inflates expectations: a 50% markup is a margin of just 33%. In data and in conversations with your agency, always specify which figure you mean.

Where is the product purchase cost entered in the shop system?

Most platforms have a dedicated purchase cost field on the product or variant page; where it is missing, a custom field or attribute is used. The value should be net, per SKU and variant, and updated when supplier prices change (most conveniently via a bulk import from a file). A percentage margin per product also works, but an absolute purchase cost is more accurate when discounts apply.

Should margin be shared with an advertising agency?

Share margin-based results, not necessarily the purchase costs themselves. Layered access works well: management sees amounts, the team sees percentages and profitability, and the agency sees segments and labels (high-margin, low-margin) plus the shop’s overall POAS. Without this, the agency optimises for revenue only and spends part of the budget supporting products that make no profit.

What is POAS and how does it differ from ROAS?

POAS (profit on ad spend) divides gross profit by ad spend, whereas ROAS divides revenue. Two campaigns with a ROAS of 5 can have completely different POAS if they sell products with margins of 45% and 15%. A POAS below 1 means the advertising costs more than the profit it leaves. Calculate it for the whole shop, using paid orders, purchase cost per SKU and total ad spend.

How should margin be calculated with discounts and promotions?

Always from the actual net selling price after the discount, as recorded in the order line. Discounts eat into margin faster than their size suggests: a product with a 50% margin loses about 40% of its profit at a 20% discount, and about 80% at a 40% discount. Plan your promotion policy on per-product margins and exclude items that fall below the break-even threshold.

Cheat sheet for the whole guide

Three rules for working with margin in data

1. Purchase cost per SKU is source data that needs looking after. Net, at variant level, updated with each delivery and validated against invoices. Everything downstream (margins, POAS, labels, profit rankings) inherits the quality of this single field in the shop system.

2. Layered access reconciles confidentiality and usefulness. Purchase amounts stay within a small circle, the team works with percentages, the agency with segments and POAS. The days when margin lived only in the owner’s spreadsheet ended along with cheap traffic: automated campaigns without margin data optimise profit blindly.

3. Measure profit and treat revenue as a means. A profit ranking looks different from a turnover ranking, and POAS differs from ROAS. DataOrganizer calculates both automatically: from the purchase cost in your shop, order lines, marketplace commissions and ad spend, with aggregates going out and price lists kept safely in the backend.


DataOrganizer · profit, not just revenue

See your margins in connected data

Connect a shop with purchase costs filled in, and per-product margins, whole-shop POAS and margin labels will be calculated from your data. Demo account available instantly; you only pay for connected sources.