Unadhi Guides

Legal Metrology check sheet for Shopify and WooCommerce stores in India: which product pages are missing MRP, net quantity, maker's address or country of origin

Updated 23 Oct 2026 · Disclosure: the product scraper linked below is an Unadhi product on the Apify Store. This guide is free, and the sheet works just as well with a product CSV exported from your own Shopify or WooCommerce admin. Current Apify pricing is only on the Store page. This page has no affiliate links and nobody paid to be mentioned. This is general information, not legal advice.

What you get: one Google Sheet for an Indian brand selling pre-packaged goods from its own Shopify or WooCommerce store, with one row per product and a column for each declaration that rule 6(10) of the Legal Metrology (Packaged Commodities) Rules, 2011 asks an e-commerce entity to show online: maker, packer or importer name and address, country of origin (imported goods), net quantity, MRP inclusive of all taxes, best before or use by (where the goods can go bad) and dimensions (where size matters), plus consumer care contact. A Missing column lists, in words, what each product page does not say yet, and a Next step column tells you whether to fix the page, check it by hand or leave it. Formulas are below. The example rows are made up.

The finished sheet

check tab (example rows are made up)

ProductPrice (₹)MRP on page (₹)Net qtyMaker / packer / importerImported?Country of originCan go bad?Best beforeConsumer careMissingNext step
Example Turmeric Powder 200 g149180yesyesNYyesyesall found
Sample Cold-Pressed Coconut Oil 1 L420yesNYyesMRP, maker/packer/importer, best before / use byfix page
Demo Bamboo Toothbrush (pack of 4)299249yesyesYNcountry of origin, consumer careprice above MRP shown: check first
Test Gift Hamper1,499NYno description textcheck page by hand

Who this is for

The slow part is not knowing the list. It is opening a few hundred product pages to see which ones forgot the MRP line, the net quantity or the importer's address. This sheet reads every product description at once and shows only the pages that need work.

What the rules ask for (the short version)

Step 1: get every product's description (tab products)

With the product scraper

Open the E-commerce Product Data Scraper (Shopify, WooCommerce, any shop) on the Apify Store and use this input (JSON tab), with your store's homepage:

{
  "startUrls": [{ "url": "https://www.example-store.in" }],
  "maxProductsPerShop": 500,
  "maxListingPages": 10,
  "includeDescription": true
}

Export the dataset as CSV, then in your sheet use File → Import → Upload, "Insert new sheet", and name the tab products. Keep the headers.

Free, without the scraper

Export your products from your store admin (Shopify: Products → Export; WooCommerce: Products → Export), import the file as the products tab and rename the headers you need to title, price and description (in Shopify's export these are Title, Variant Price and Body (HTML); the HTML tags do not stop the formulas). The url column is optional. Keep one row per product, not per variant: Shopify puts extra variants and images on rows with an empty title, so filter those out first.

Step 2: the check tab

Each row of check reads the same row of products by header name, so column order does not matter. In hidden helper column Q2 put the description:

=INDEX(products!$A:$ZZ, ROW(), MATCH("description", products!$1:$1, 0))

Product in A2 uses the same formula with "title", URL in R2 with "url" and Price in B2 with "price". Copy row 2 down as far as the products go.

MRP on page in C2 picks up the first number written after "MRP":

=IFERROR(VALUE(REGEXREPLACE(REGEXEXTRACT(Q2,
 "(?i)M\.?R\.?P\.?[^0-9]{0,30}([0-9][0-9,]*(?:\.[0-9]+)?)"), ",", "")), "")

The yes/blank columns all use one pattern; change only the words in quotes:

D2 Net qty:      =IF(REGEXMATCH(Q2, "(?i)net\s*(qty|quantity|wt|weight|content|vol)"), "yes", "")
E2 Maker:        =IF(REGEXMATCH(Q2, "(?i)(manufactured|marketed|packed|imported)\s*by|manufacturer|packer|importer"), "yes", "")
G2 Origin:       =IF(REGEXMATCH(Q2, "(?i)country\s*of\s*origin|made\s*in\s"), "yes", "")
I2 Best before:  =IF(REGEXMATCH(Q2, "(?i)best\s*before|use\s*by|expiry"), "yes", "")
J2 Care:         =IF(REGEXMATCH(Q2, "(?i)(customer|consumer)\s*care|complaint"), "yes", "")
S2 Size:         =IF(REGEXMATCH(Q2, "(?i)dimension|size|[0-9]\s*(cm|mm)\b"), "yes", "")
T2 Incl. taxes:  =IF(REGEXMATCH(Q2, "(?i)incl[a-z.]*\s*(of\s*)?all\s*tax"), "yes", "")

Type Y or N yourself in Imported? (F), Can go bad? (H) and, in hidden column U, Size matters?. The sheet cannot know these. Words that also appear in your own text (for example "size" in a care line) can give a false "yes", so spot-check a few rows.

Step 3: Missing and Next step

Missing in K2 lists, in words, what the page does not say:

=IF(A2="", "", IF(Q2="", "no description text",
 TEXTJOIN(", ", TRUE,
  IF(C2="", "MRP", IF(T2="", "MRP: add 'inclusive of all taxes'", "")),
  IF(D2="", "net quantity", ""),
  IF(E2="", "maker/packer/importer", ""),
  IF(AND(F2="Y", G2=""), "country of origin", ""),
  IF(AND(H2="Y", I2=""), "best before / use by", ""),
  IF(AND(U2="Y", S2=""), "dimensions", ""),
  IF(J2="", "consumer care", ""))))

Next step in L2:

=IF(A2="", "",
 IF(Q2="", "check page by hand",
 IF(AND(C2<>"", B2>C2), "price above MRP shown: check first",
 IF(K2="", "all found", "fix page"))))

Sort by Next step. "check page by hand" means the description is empty: many themes show the label details in a separate tab, a metafield or a photo of the pack, which the description does not contain. Open those pages and look. "fix page" rows need the missing items added. "price above MRP shown" means the selling price in the store is higher than the MRP written in the description, so one of them is out of date.

Step 4: a summary tab

Products checked:     =COUNTA(check!A2:A)
All found:            =COUNTIF(check!L:L, "all found")
Fix page:             =COUNTIF(check!L:L, "fix page")
Check by hand:        =COUNTIF(check!L:L, "check page by hand")
Price above MRP:      =COUNTIF(check!L:L, "price above MRP*")
No MRP line:          =COUNTIF(check!K:K, "MRP*")
No net quantity:      =COUNTIF(check!K:K, "*net quantity*")
No maker/packer:      =COUNTIF(check!K:K, "*maker/packer/importer*")

Re-run the scrape (or re-export) after you fix pages and paste the new CSV over the products tab: the counts update by themselves.

A block you can paste into each product description

MRP: ₹[amount] (inclusive of all taxes)
Net quantity: [200 g / 1 L / 4 pieces]
Manufactured by: [name], [full address with PIN code]
Packed by: [name and address, if different]
Imported by: [name and address in India, for imported goods]
Country of origin: [country, for imported goods]
Best before: [period or date, if the product can go bad]
Dimensions: [size, if size matters]
Consumer care: [name or office], [address], [phone], [email]

Keep the wording the same as on the label, and update the page whenever the label or the MRP changes. If the details live in a theme tab or metafield rather than the description, the checks above will not see them; that is fine, as long as the page shows them.

Check before you call it done

Partner programme opening soon

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.

Sources

Related

← All guides

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