Unadhi Guides

Unit price check sheet for EU web shops: does every product page show the price per kg or litre? (Price Indication Directive 98/6/EC Article 3) for accountants, bookkeepers and web agencies

Updated 28 Oct 2026 · Disclosure: the Apify Actor mentioned below is built and published by Unadhi. Legal facts come only from the EU texts and the Court of Justice judgment on EUR-Lex listed in Sources, all read on 28 Oct 2026. This guide is for information only, not legal advice.

Partner programme opening soon: join the free waitlist. Planned terms are 50% of each referred sale (75% once you have 5+ paying customers), single level, paid through Gumroad only from revenue received.

What you get: a finished unit price check sheet in three tabs: a products tab with one row per product or variant, formulas that read the pack size from the product title, work out the price per kilogram or litre, and name the result (OK, FIX or CHECK BY HAND); an offer and advert check for Black Friday emails and posts; and a fix note to send to each shop owner. Five made-up example rows show how it fills in.

Short answer: under Article 3(1) of the Price Indication Directive (98/6/EC), a trader offering products to consumers must indicate both the selling price and the unit price. The unit price is the final price, including VAT and all other taxes, for one kilogram, one litre, one metre, one square metre or one cubic metre, or another single unit customarily used in that Member State for that product (Article 2(b)). It is not needed where it is identical to the selling price (Article 3(1)); for products sold in bulk only the unit price is needed (Article 3(3)); and any advertisement that mentions the selling price must also show the unit price (Article 3(4)). Both prices must be "unambiguous, easily identifiable and clearly legible" (Article 4(1)). Member States can waive or narrow the rule in several ways (Articles 3(2), 5, 6 and 10), so check the national law.

The pain this page is about

A bookkeeper with ten food, drink, cosmetics or cleaning-product web shops among her clients, or a web agency that built 30 Shopify and WooCommerce shops, gets the question: "does our shop show prices the way the law wants?" Opening every product page by hand and doing "4.99 for 250 g is 19.96 per kg" on a calculator takes days. A product scraper exports every product's title and price in one run; the sheet does the arithmetic and lists only the pages that need a fix.

Step 1: export every product with the scraper

Run our E-commerce Product Data Scraper on the shop's homepage or category pages. It returns one row per product with url, shop, title, brand, price, currency, sale price, availability, SKU/GTIN and variants, read from Shopify products.json, the WooCommerce Store API or schema.org data on the page. A SHOPS_SUMMARY record gives each shop a status (ok, blocked-by-terms, blocked-by-robots, rate-limited, no-products-found and others); shops that are blocked or return nothing are not charged. If the shop is your client's, its terms will usually let you check it; if the scraper skips it, export the product list from the shop's own admin instead and use the same sheet.

Our working rule: put one row per variant (250 g, 500 g, 1 kg), because each pack size has its own unit price.

Step 2: tab 1, products (one row per product or variant)

ColumnWhat to writeSource
A. Product URLFrom the export: url
B. Shop statusFrom SHOPS_SUMMARY: ok or the reason it was skipped
C. TitleFrom the export: title plus the variant name, for example "Organic coffee beans 500 g"
D. Selling priceFrom the export: price (the price a consumer pays, including VAT)Art. 2(a)
E. CurrencyFrom the export: currency
F. Pack amount=IFERROR(VALUE(SUBSTITUTE(REGEXEXTRACT(LOWER(C2),"(\d+(?:[.,]\d+)?)\s?(?:kg|g|ml|cl|l)\b"),",",".")),"")Formulas are our working rule. REGEXEXTRACT and SWITCH work in Google Sheets; in Excel type F and G by hand
G. Pack unit=IFERROR(REGEXEXTRACT(LOWER(C2),"\d\s?(kg|g|ml|cl|l)\b"),"")
H. Amount in kg or litres=IF(F2="","",F2*SWITCH(G2,"kg",1,"g",0.001,"l",1,"cl",0.01,"ml",0.001))
I. Per=SWITCH(G2,"kg","kg","g","kg","l","litre","cl","litre","ml","litre","")
J. Unit price (worked out)=IF(H2="","",ROUND(D2/H2,2))
K. Unit price shown on page?Y/N: open the page; is a price per kg or litre next to the price, as easy to see and read?Art. 3(1), 4(1)
L. Unit price shown (amount)The number on the page, blank if K is N
M. Special case?Write MULTIPACK (6 x 330 ml), DRAINED (tins and jars with a drained weight), DEPOSIT (returnable bottle or jar), or leave blankArt. 4(2); C-543/21
N. Result=IF(B2<>"ok","CHECK BY HAND: shop "&B2,IF(M2<>"","CHECK BY HAND: "&M2,IF(F2="","CHECK BY HAND: no pack size in title",IF(J2=D2,"OK: unit price equals selling price",IF(K2<>"Y","FIX: show "&TEXT(J2,"0.00")&" "&E2&" per "&I2,IF(ABS(L2-J2)>0.01,"CHECK: page shows "&L2&", we work out "&J2,"OK: unit price shown"))))))Labels are our working rule, not a legal test

Why the special cases go to a person: a multipack title such as "6 x 330 ml" holds two numbers and the formula reads only the first; for pre-packed products that must show both net weight and net drained weight, Article 4(2) says the unit price of the net drained weight is sufficient; and for drinks or yoghurt in returnable containers, the Court of Justice held that the deposit is not part of the selling price (C-543/21, 29 June 2023), so our working rule is to work out the unit price on the price without the deposit and show the deposit separately.

Step 3: tab 2, offer and advert check (one row per Black Friday email, post or banner)

Article 3(4) covers advertisements, not only product pages: any advertisement that mentions the selling price of a product must also indicate the unit price. Article 6a adds that a price reduction announcement must show the prior price (the lowest price in at least the 30 days before the reduction). The Commission's 2021 guidance on Article 6a says that where a reduction is announced by a general statement (for example "20% off everything"), the prior price does not have to be on the same medium; it must then be shown at the point of sale, on the price tags or in the price section of the online shop.

ColumnWhat to write
A. Advert"BF email 27 Nov", "Instagram post coffee deal"
B. Mentions a selling price?Y/N
C. Unit price in the advert?Y/N
D. Announces a reduction?Y/N
E. Prior (30-day lowest) price shown?Y/N. For a general statement such as "20% off everything", write Y if the prior price is shown on each product page
F. Result=TRIM(IF(AND(B2="Y",C2<>"Y"),"ADD unit price. ","")&IF(AND(D2="Y",E2<>"Y"),"ADD prior price.","")) (empty = nothing found; our working rule)

For the prior-price check itself, use our Black Friday 30-day lowest price sheet.

Step 4: tab 3, fix note (one row per shop with a FIX)

ColumnWhat to write
A. Shop domainFor example client-shop.example
B. Fix count=COUNTIFS(Products!A:A,"*"&A2&"*",Products!N:N,"FIX*")
C. Note to send="Hello, we checked the product pages of "&A2&" on "&TEXT(TODAY(),"dd mmm yyyy")&". "&B2&" products show a price but no price per kg or litre. EU price rules ask for both. The list with the worked-out unit prices is attached. We can help you add them."
D. Sent on / fixed onDates

Made-up example (five rows, tab 1 results only)

Product (made up)PriceUnit price on pageResult
Organic coffee beans 250 g4.99 EURnoneFIX: show 19.96 EUR per kg
Olive oil 0,75 l12.90 EUR17.20 EUR / lOK: unit price shown
Rice 1 kg3.49 EURnoneOK: unit price equals selling price
Craft beer 6 x 330 ml11.40 EURnoneCHECK BY HAND: MULTIPACK
Tea shop with scraping-forbidding termsCHECK BY HAND: shop blocked-by-terms

These rows are invented to show the formulas. They are not real shops or products.

Try it on one client shop first

Free gift: copy-paste input for one client shop

{ "startUrls": [{ "url": "https://client-shop.example" }], "maxProductsPerShop": 100, "maxListingPages": 10, "includeDescription": false }

Replace the address with your client's shop. Related sheets: Black Friday real discount check · GPSR product page check · website legal notice check · wholesale line sheet.

Frequently asked questions

Does the unit price rule apply to online shops?

Article 1 covers products "offered by traders to consumers" and does not limit this to physical shops, and Article 3(4) extends it to advertisements that mention a selling price. A shop selling only to businesses is outside the Directive, because "consumer" means a natural person buying outside their trade or profession (Article 2(e)).

Can a small shop skip the unit price?

Only if national law says so. Article 6 let Member States exempt certain small retail businesses for a transitional period where unit pricing would be an excessive burden; Article 5 lets them waive the unit price for products where it would not be useful or would confuse, and draw up a list of non-food products where it still applies; Article 3(2) lets them exclude products supplied as part of a service, auctions, and works of art and antiques; and Article 10 allows stricter national rules. These choices differ between countries.

Per kg, or per 100 g?

Article 2(b) names one kilogram, litre, metre, square metre or cubic metre, or "a different single unit of quantity which is widely and customarily used in the Member State concerned" for that product. Which other units are allowed is a national matter; check your country's price indication law before changing the per-kg column. Recital 8 of the Directive gives the reason: some products are customarily sold in quantities other than one kilogram or litre.

Is the deposit on bottles part of the price?

No, according to the Court of Justice in famila-Handelsmarkt Kiel (C-543/21, 29 June 2023): the selling price includes unavoidable and foreseeable components the consumer must pay (para. 19), but a deposit is refunded when the container comes back, so it is not part of the "final" selling price under Article 2(a) (paras. 20 to 23, 29). Showing it separately lets consumers compare prices (para. 27).

What happens if the unit price is missing?

Member States set the penalties, which must be "effective, proportionate and dissuasive" (Article 8(1), as amended by Directive (EU) 2019/2161).

Not legal advice. The sheet only checks whether a unit price is shown and whether it matches simple arithmetic on the title; it does not check national reference units, labelling law or the placement national rules require. When in doubt, ask your chamber, consumer authority or a lawyer. Spotted an error? Write to mininglife7@gmail.com and we correct it.

Sources

← All guides

Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.