Shopify · how-to
How to bulk add GPSR information to Shopify products
Adding GPSR information to one product is straightforward. Adding it to four hundred is a different problem, and it is the one that actually stops people. Shopify gives you three routes: the bulk product editor for tens of products, a CSV import for hundreds, and app write-back for catalogues that keep changing. This guide gives the exact field structure for each, plus the theme step that decides whether any of it is visible to a shopper.
The fastest answer, by catalogue size
| Catalogue | Use | Why |
|---|---|---|
| Under ~25 products | The bulk product editor | No file wrangling. You can see every cell you are filling. |
| 25 to a few thousand | A CSV import | One spreadsheet, one upload. This is the only native route that scales to a real catalogue. |
| Any size, but changing weekly | Automated write-back | A CSV is a snapshot. New products added after the import arrive empty and nothing tells you. |
The three routes are not exclusive. A common and sensible pattern is a CSV to fill the back catalogue once, then something automatic to keep new products from slipping through.
Decide your field structure before you touch anything
This is the step people skip, and it is the one that costs a re-do. Before any bulk operation you need to know exactly which fields you are filling, because the bulk editor, the CSV and any app all address fields by an exact namespace and key. Change your mind afterwards and you are migrating data, not editing it.
GPSR Article 19 wants the online offer to carry the manufacturer's name, postal address and electronic address, the same for the EU Responsible Person where the manufacturer is outside the EU, information identifying the product including a picture and its type, and the warnings and safety information that come with it. The product-identification item is normally already satisfied by any Shopify product page, since it has an image, a title and a SKU. The other three are what you have to add, and they map onto five fields. The full Article 19 list is in GPSR labelling requirements.
For reference, this is the exact structure Assuro writes, and it is a reasonable structure to copy even if you never install it:
| Field | Namespace and key | Shopify type |
|---|---|---|
| EU Responsible Person | gpsr.eu_responsible_person | multi_line_text_field |
| Manufacturer name | gpsr.manufacturer_name | single_line_text_field |
| Manufacturer address | gpsr.manufacturer_address | multi_line_text_field |
| Manufacturer email | gpsr.manufacturer_email | single_line_text_field |
| Safety warnings | gpsr.safety_warnings | multi_line_text_field |
Note the inconsistency in that table, because it is instructive. The manufacturer is split into three fields, which is the better pattern: separate values can be validated, reused and translated independently, and you can check across a catalogue whether an email is present. The Responsible Person is one multi-line field holding name, address and contact together, which is convenient to render and worse to check, since nothing can tell you the address line is missing. If you are designing this from scratch rather than matching an app, split it.
Create the definitions once in Settings → Custom data → Products → Add definition. Fields defined this way appear in the product editor with proper labels, which matters more than it sounds: an undefined metafield still holds data but is close to invisible to whoever maintains the store next.
Shopify does not have a Responsible Person field
Shopify's own guidance is explicit that it does not offer EU Responsible Person designation directly, and points merchants at the product description, a metafield, or an app from the App Store. There is no standard field waiting to be switched on, so whatever structure you invent is the structure you live with.
Method 1: the bulk product editor
Shopify's bulk editor turns selected products into a spreadsheet-like grid in the admin, and metafields can be columns in it.
- Go to Products, tick the products you want, and click Edit products.
- Click Columns, and under Metafields tick the GPSR fields you defined.
- Fill the cells. Values paste down a column, so a Responsible Person block that is identical across the catalogue takes one paste.
- Click Save, and clear any cell-level errors it flags.
Do not do this in Microsoft Edge
Shopify documents that bulk-editing metafields in Edge can fail because the browser limits URL length. Use Chrome, Firefox or Safari. This is a real trap, because the failure looks like a Shopify bug rather than a browser one.
The honest limit of this method is attention, not technology. It is comfortable for tens of products and grim for hundreds, and because every value is typed or pasted by a human, it is where inconsistent addresses and half-filled rows come from.
Method 2: a CSV import
Shopify's product CSV supports defined product metafields, and this is the route that actually scales. Export first, so you are editing Shopify's own column headers rather than guessing them: Products → Export, then open the file in a spreadsheet.
Metafield columns use the header format <name> (product.metafields.<namespace>.<key>), and the bare product.metafields.<namespace>.<key> also works. So the five fields above become:
EU Responsible Person (product.metafields.gpsr.eu_responsible_person)Manufacturer name (product.metafields.gpsr.manufacturer_name)Manufacturer address (product.metafields.gpsr.manufacturer_address)Manufacturer email (product.metafields.gpsr.manufacturer_email)Safety warnings (product.metafields.gpsr.safety_warnings)
The file must be UTF-8 with comma delimiters, or accented characters in an EU address arrive mangled. The value must match the metafield's declared type, or the column is rejected or silently ignored. And variant metafields are not supported in the CSV at all, so those need the variant bulk editor. If your safety warnings differ per variant rather than per product, that changes your plan.
Define the metafields before you export, not after
A product metafield is only included in your CSV export once it has been defined. Export first with nothing defined and the columns simply are not there, which reads as if the CSV does not support metafields at all. It does; the definitions just have to exist first.
Warnings are a special case: use Shopify's Disclosures field
For legally required warnings specifically, Shopify has a purpose-built feature that most GPSR write-ups miss. Disclosures is a standard product metafield that references metaobject entries, so you author a warning once as an entry and then attach it to as many products as you like. Shopify ships standard entries such as the California Prop 65 cancer warning and a small-parts choking hazard, and you can create custom ones with a title, content, symbol and jurisdictions.
On a product you attach one from the product's metafields area with + Disclosures. In bulk it goes through the same two routes as everything else: the products bulk editor, or the CSV using the shopify.disclosure column. Values look like shopify--disclosure-us-ca-prop65-cancer:prop-65-cancer for a standard entry and shopify--disclosure-custom:merchant-warning for one you authored.
Why bother when you could put the same text in a plain metafield? Because a disclosure is a reference, not a copy. Reword a warning that sits on three hundred products and you edit one metaobject entry rather than three hundred cells, and the entries carry a jurisdiction so a warning meant for California is not asserted at a shopper in Berlin.
The pragmatic split
Warnings and hazard statements in Disclosures, because they repeat across products and get reworded. Responsible Person and manufacturer details in your own defined metafields, because they are per-product identity data and Shopify has no standard field for them. Check what your app does here before assuming it matches: Assuro, for one, writes warning text into its own metafield rather than creating Disclosures entries, so the two approaches sit side by side rather than merging.
Method 3: automated write-back
Both native methods share one flaw: they are events, not states. You run the import on Tuesday, the fields are populated on Tuesday, and the product you add on Thursday has none of them. Nothing in Shopify notices, because as far as Shopify is concerned an empty metafield is a perfectly valid empty metafield.
That is the gap an app fills. Assuro connects to the store, reads the catalogue, and flags per product where its own records have no Responsible Person, manufacturer or warning assigned, rather than making you eyeball a spreadsheet. You define the Responsible Person and manufacturer once, and it writes them into the metafields above, creating the definitions so the fields show up properly in the product editor. It previews the first page of changes before you publish and says how many further products the run can touch, and a published run can be undone.
Two boundaries worth stating, because they apply to any tool in this category. Writing a field is data entry, not compliance: the app puts the information you provide into dedicated metafields, and cannot judge whether it is correct, whether the person you named accepted the mandate, or whether the product is safe. And a flag means the app's own records are empty, not that your storefront is silent. If you already state the Responsible Person in your descriptions, an app that has not been told about it will still call the product incomplete.
The step that decides whether any of this is visible
Filling metafields does not put anything on your storefront. This is a failure mode worth checking for specifically: the admin looks complete, the product page shows nothing, and the seller believes they are done. Article 19 is about what the shopper can see in the offer, so an invisible metafield satisfies exactly nothing.
- In Online Store → Themes → Customize, open a product template.
- In an Online Store 2.0 theme, add the metafield to the product information section; in Shopify's newer Horizon themes, add a block for it.
- For Disclosures specifically, Shopify provides a Disclosures theme block in Horizon and a Disclosures section for Online Store 2.0 themes.
- Save, then open a real product page in a private window and read it as a shopper would.
The Shop app is not your storefront
Disclosures appear automatically on product pages in the Shop app, which can make it look like the work is done. Your online store is separate and theme-dependent. Check both, and if you use a third-party theme, verify it supports the block at all before assuming.
Verify, then keep verifying
A bulk operation that half-worked looks identical to one that fully worked until someone checks. Export the catalogue again after the import and sort by each GPSR column. Treat every blank cell as a product to review rather than an automatic breach, because the requirements are conditional: the Responsible Person applies where the manufacturer is outside the EU, and warnings only where the product carries them. Do the same for products created since the last export, which is the population that quietly grows.
- Metafield definitions created before the first export
- Every product has a manufacturer name, address and contact
- Every non-EU-manufactured product has an EU Responsible Person
- Repeating warnings held as Disclosures entries rather than pasted per product
- The fields render on the live product page, checked in a private window
- A recurring check for products created after the bulk run
Which method for 10, 100, or 1,000 products
| Bulk editor | CSV import | Write-back app | |
|---|---|---|---|
| Realistic ceiling | Tens | Thousands | Paged, so no fixed ceiling |
| Handles variants | Yes, variant editor | No, product-level only | Depends on the app |
| Catches new products | No | No | Yes, if it re-checks after sync |
| Tells you what is missing | No | Only if you sort the export | Against its own records |
| Reversible | Manually | By re-importing the old file | Depends on the app |
| Effort per run | High | Medium, then low | Setup once, then review and publish |
If you take one thing from this: the hard part of GPSR on Shopify is not the first bulk edit, it is the hundredth product added afterwards. Pick the method that survives that. The wider set of obligations around this, of which the product page is only one, is in the EU compliance checklist for Shopify, and what the text itself has to say is in GPSR labelling requirements.
Frequently asked questions
Can I bulk edit metafields in Shopify without an app?
Yes. The products bulk editor handles metafields as columns once the definitions exist, and the product CSV import supports defined product metafields, using a column header that names the metafield's namespace and key. Neither needs an app. What they do not do is tell you which products are still missing data, or catch products you add later.
Does the Shopify CSV import support metafields?
For product metafields, yes, once the metafield is defined. Variant metafields are not supported through the CSV and need the variant bulk editor instead. The file must be UTF-8 with comma delimiters, and each value has to match the metafield's declared type or it will not import.
What is the Disclosures metafield?
A standard Shopify product metafield that references metaobject entries holding legally required warnings. Shopify ships standard entries such as the Prop 65 cancer warning and a small-parts choking hazard, and you can author custom ones. Because products reference an entry rather than copying its text, rewording a warning is one edit rather than one per product.
Do the metafields show on my product page automatically?
No, and this is where most stores fall down. Filling a metafield stores data; showing it requires adding it to the product template in your theme. Disclosures do appear automatically in the Shop app, which is misleading, because your online store still needs the Disclosures block or section added.
Should I put the Responsible Person in the product description instead?
It works for a handful of products and it is legitimate. It stops working at scale: you repeat it by hand on every product, you cannot bulk-check whether it is present, and updating the address means editing every description. Metafields hold the same information in a form you can sort, export and bulk-edit. Be aware that ordinary metafield values are still stored per product, so changing an address is a re-import rather than one edit. Only a referenced metaobject, which is how Disclosures work, gives you true edit-once reuse. The three display options are compared in [how to add a Responsible Person to your Shopify product page](/blog/how-to-add-responsible-person-shopify).
Is my catalogue compliant once the fields are filled?
No. Filling the fields satisfies the part of GPSR about what the online offer must show. It says nothing about whether the product is safe, whether your technical documentation exists, or whether the Responsible Person you named has accepted the mandate. It is a necessary step, not the whole obligation.
See where your store actually stands
Connect your Shopify store and Assuro flags which products are missing GPSR and EPR data, country by country, and tracks every deadline. Free to scan, no credit card.
Check your store for free