Help
What this app does not do
Mikata PID checks and fills the three product identifiers (M-PID, NS-PID, S-PID) in your Shopify product data. It does not assign HS codes, calculate duties or VAT, create or lodge customs declarations, or talk to any customs authority or carrier on your behalf. It cannot tell you whether a specific parcel will clear customs, and it does not guarantee clearance: carriers and customs authorities apply their own checks. The manufacturer codes themselves must come from your manufacturer or supplier; the app shows you where they are missing and helps you enter them, but it cannot look them up or invent them. You remain responsible for the correctness of the codes in your store.
1. The three identifiers (EU definitions in one line each)
From 1 November 2026, EU customs requires these three product identifiers on B2C import declarations (voluntary since 1 July 2026; enforcement starts 1 November 2026):
- M-PID (merchant product identifier): the code assigned by the online seller or marketplace. Required for every product, no exception.
- NS-PID (non-standardised manufacturer product identifier): the code assigned by the manufacturer, producer or product supplier that does not follow an international standard. Required for every product, no exception. If the manufacturer has none, the manufacturer is expected to assign one; the manufacturer may also use the S-PID as the NS-PID.
- S-PID (standardised manufacturer product identifier): a code based on an international standard, in practice a GTIN/EAN, UPC or ISBN. Required only where one exists; if none exists, an exception code is declared.
These identifiers are required on the customs declaration for distance sales of goods with an intrinsic value of up to EUR 150 per consignment, in practice B2C e-commerce parcels; B2B shipments are in principle outside the scope (Commission guidance of 5 October 2026, section 8).
How strictly declarations are checked in the first months is up to each member state's customs authority. For example, Dutch Customs has said it will first monitor how declarants fill in the identifiers and discuss improvements with them, and expects full compliance from early 2027; German customs has said a transitional arrangement is being examined (both read on 1 November 2026). The obligation itself applies from 1 November 2026 under Commission Delegated Regulation (EU) 2026/1022, and label systems may already refuse parcels that lack the identifiers regardless of how customs enforces: Shopify Shipping does so from 1 November 2026 (see section 2).
The identifiers describe goods that physically cross the EU border. A variant that is not shipped — a digital product, a service, a gift card sent by e-mail — is never declared, so the App does not check it (see "Not shipped" below). The App reads Shopify's "This is a physical product" setting (requires shipping) on each variant to tell the two apart.
2. How the App maps them to Shopify fields
| Identifier | Shopify field the App reads and writes |
|---|---|
| M-PID | the variant's SKU |
| NS-PID | a barcode of type NS_PID (new in Shopify's 2026-10 API) |
| S-PID | a barcode of type GTIN, EAN, UPC or ISBN |
| "No S-PID exists" | an App-reserved metafield ($app:pid.spid_status = none), so that "not entered yet" and "confirmed none" are kept apart |
| Carrier-guide metafields | custom.ns_manufacturer_pid, custom.std_manufacturer_pid and custom.std_manufacturer_pid_type (the convention some carriers' setup guides ask for) are read as a second source and shown as "carrier field only". The App never writes them. |
Barcodes without a type (shown as Custom in Shopify) are not treated as an S-PID. If one looks like a valid GTIN or ISBN, the App suggests giving it a type. The barcode of type NS_PID and the typed GTIN/EAN/UPC/ISBN barcode are the fields that carriers and apps read from Shopify, so the App always writes there (check your carrier's own guide for what it reads).
Shopify's own handling (Shopify Shipping and Managed Markets labels). Since 24 October 2026 Shopify adds the three identifiers to customs documents itself when you buy labels in the Shopify admin (Shopify Help Center: "Adding product identifiers for shipments to the European Union"). There, M-PID is the variant's ID (nothing to enter), S-PID is the typed barcode (a Custom barcode that is a valid GTIN is also accepted), and NS-PID is the barcode of type NS-PID, falling back to the standardized barcode, any other barcode, the SKU and finally the variant's ID. Shopify's "Has no standardized identifier" declaration lives in the product's Shipping section (More details), and it is that declaration, not the App's "confirmed none" metafield, that Shopify's labels read; if you buy labels in Shopify, turn it on there as well. The App follows the EU guidance rather than Shopify's full fallback: a valid S-PID may stand in for a missing NS-PID (shown as Review, with "Use S-PID as NS-PID" to write it into the barcode), but a SKU or a variant ID is not a manufacturer code, so a variant with neither an NS-PID nor a valid S-PID is Needs fix. The App always asks for an explicit SKU and writes the codes into Shopify's barcode fields, so that carriers, apps and fulfilment partners outside Shopify Shipping, which read those fields directly, receive them too.
3. The Check screen
Click "Run check". The App reads every variant in your store (nothing is changed) and shows four tiles — Checked, OK, Needs fix, Review — and a table with the columns Product, SKU (M-PID), NS-PID, S-PID, Status and Findings. Click a tile or a filter button (Checked / Needs fix / Review / OK / Not shipped) to filter, and use the search box to find a product, variant or SKU. Checked = OK + Needs fix + Review; variants that are not shipped are counted separately.
Status:
- OK: the variant has an SKU, an NS-PID and either an S-PID with a valid check digit or a declaration that none exists.
- Needs fix: something required is missing or invalid. Fix it before the deadline.
- Review: nothing is blocked, but something is worth a look (an empty NS-PID that a valid S-PID can stand in for, a duplicate S-PID, an untyped barcode that could be an S-PID, or a code that exists only in a carrier metafield).
- Not shipped: the variant does not require shipping in Shopify (digital product, service, gift card sent by e-mail), so it never passes customs and nothing is required of it. It is listed under the "Not shipped" filter with whatever identifiers it has, and it does not count towards Checked, OK, Needs fix or Review. A gift card that is shipped as a physical card is checked like any other product. If a physical product shows here, turn on "This is a physical product" in its shipping settings in Shopify and run the check again.
Findings and what they mean:
- "SKU (M-PID) is blank" — the variant has no SKU. Add one in Shopify (the App does not write SKUs). Needs fix.
- "SKU (M-PID) is used by another variant" — two variants share an SKU. The M-PID must be unique in your store. Change one of them in Shopify. Needs fix.
- "Manufacturer code (NS-PID) missing and no S-PID to stand in" — there is no barcode of type NS_PID and no valid standardised barcode either. Get the code from your manufacturer or supplier (or assign one if you are the manufacturer) and enter it on the Fix screen. Needs fix.
- "No NS-PID barcode; the S-PID stands in (the EU guidance allows it and Shopify's labels do it). Click "Use S-PID as NS-PID" so carriers and apps that read the NS-PID field get it too" — there is no barcode of type NS_PID, but the variant has a valid GTIN/EAN/UPC/ISBN. The EU guidance lets the manufacturer use the S-PID as the NS-PID and Shopify's own labels fall back to it, so nothing is blocked; carriers and apps that read the NS-PID field directly still need it written there. Click "Use S-PID as NS-PID" on the Fix screen, or enter the manufacturer's own code if you have one. Review.
- "GTIN/EAN/UPC/ISBN (S-PID) missing and not declared as none" — no standardised barcode and no "No S-PID exists" declaration. Either enter the code or tick "No S-PID exists". Needs fix.
- "GTIN/EAN/UPC/ISBN (S-PID) fails its check digit" — the number is mistyped or incomplete. Check it against the packaging or the supplier's list. Needs fix.
- "GTIN/EAN/UPC/ISBN (S-PID) is used by another variant" — the same standardised number appears on two variants. Usually a copy-paste mistake; customs may treat them as the same product. Review.
- "An untyped barcode looks like a GTIN/ISBN: give it a type so customs can use it" — the barcode exists but has no type, so carriers cannot tell it is an S-PID. On the Fix screen the App pre-fills it with the suggested type; confirm and apply. Review.
- "NS-PID found only in the carrier field (custom.ns_manufacturer_pid); copy it to Shopify's NS-PID barcode, the field carriers and apps read from Shopify" — the code is in a carrier-guide metafield but not in the NS_PID barcode. On the Fix screen the value is pre-filled; "Copy from carrier fields" does it for all rows. Review.
- "S-PID found only in the carrier field (custom.std_manufacturer_pid); copy it to a typed Shopify barcode, the field carriers and apps read from Shopify" — same for the standardised code. The type is pre-filled only when the value passes the check digit for that type; otherwise choose the type yourself. Review (or Needs fix if the value also fails its check digit).
4. The Fix screen (Pro)
Run the check first; the Fix screen works on its result and lists only the rows that need attention. Nothing is written until you preview and apply.
- Type by hand: enter the NS-PID, or the S-PID with its type (GTIN, EAN, UPC, ISBN), or tick "No S-PID exists". Rows with a blue edge have unsaved edits.
- "Use S-PID as NS-PID": for every row that has a valid S-PID and an empty NS-PID, copies the S-PID into the NS-PID field. The EU guidance allows a manufacturer to use the S-PID as the NS-PID; use this only when that is what your supplier does.
- "Copy from carrier fields": fills every empty NS-PID or S-PID field from the carrier-guide metafields where the value is verified. Only Shopify barcodes are written; the carrier metafields stay as they are.
- Paste a sheet: copy rows from a spreadsheet your supplier filled in and paste them into "Paste a sheet", then click "Read sheet". A header row is required. Columns: SKU, NS-PID, S-PID, S-PID type (GTIN, EAN, UPC, ISBN; default GTIN), S-PID none (yes/no). The carrier-guide column names
ns_manufacturer_pid,std_manufacturer_pidandstd_manufacturer_pid_typeare accepted too. Rows are matched by SKU; SKUs that are not among the rows needing attention are listed, not applied. - "Preview changes" shows exactly what will change per variant and what will be skipped (with the reason). "Apply to Shopify" writes product by product and shows progress. Rows that fail are listed with Shopify's error message and can be retried with "Retry failed". After writing, the check runs again so the table reflects the new state.
5. The Export screen (Pro)
Choose a format, then click "Download CSV". Rows that still need fixing are left out unless you tick "Include rows that still need fixing"; variants that are not shipped are always left out of the Carrier and Shipmondo formats (a carrier has nothing to declare for them). The file is UTF-8 with a byte-order mark so Excel opens it correctly.
- Carrier (generic): one row per variant with Product, Variant, SKU (M-PID), NS-PID, S-PID, S-PID type and Status. For carrier portals (check their column names) or your own records.
- Shipmondo: the columns
sku,m_pid,ns_pid,s_pidfor Shipmondo's product import. - Shopify product CSV: the columns URL handle, Title, Option1–3 name and value, SKU and Barcodes, in the format of Shopify's current product CSV, for re-import into Shopify (Products → Import, with the option to overwrite products that have a matching handle). Columns the file does not contain, such as price and stock, keep their current values in Shopify. This format always contains every variant of every product, shipped or not and whatever the filter above says: when Shopify overwrites a product from a CSV, variants that are missing from the file are deleted (we verified this on a test store), so never import a shortened copy of this file.
6. FAQ
Q: Why does the App not calculate duties or HS codes? A: Because that is a different job with different data. Duties depend on the HS code, origin and value of each product; this App only checks the three identifiers that customs uses to recognise the product. Keeping it to one job keeps it reliable. Apps that specialise in HS codes exist in the Shopify App Store.
Q: Where is my data stored? A: In your Shopify store only. The App runs in your browser inside the Shopify admin and talks to Shopify directly. Our server only delivers the App's files, confirms that the page was opened by a signed-in user of your store (the sign-in token Shopify attaches is checked and discarded), and answers Shopify's compliance webhooks; it never receives your product data. See the Privacy Policy.
Q: Where do I get the manufacturer codes (NS-PID)? A: From your manufacturer or supplier: ask for their product list with their own item codes (model number, article number). If you make the products yourself, you are the manufacturer and can assign your own codes; the EU guidance sets no required format. If a GTIN exists, you may use it as the NS-PID too.
Q: My store has thousands of variants. How long does a check take? A: The App reads in batches within Shopify's API limits and shows progress. Roughly a minute per thousand variants on a standard plan; you can cancel and run again later. A check never changes anything.
Q: Does the App guarantee my parcels will clear EU customs? A: No. The App helps you get the identifiers complete and well-formed. Carriers and customs authorities apply their own checks, and other requirements (HS code, value, product safety rules) are outside this App.
Support
Email dun.der.head11@gmail.com. See also the Terms of Use and the Privacy Policy.