EAN Check.comEAN Check.com

Bulk GS1 Digital Link Generator

Convert a whole product catalogue to GS1 Digital Link URLs from a single paste. The tool detects Excel (tab), CSV or one-GTIN-per-line data, takes a custom resolver domain, and exports a CSV and a ZIP of QR codes. Everything runs in your browser.

By The eancheck teamPublished Updated

Qualifiers (GS1 Application Identifiers)

Click a chip to add or remove it. Batch, expiry and serial are selected by default.

3 of 12 qualifiers selected

Expected columns (without a header row):

GTINBatch / Lot (10)Serial (21)Expiry (17)

A header row using names like gtin, batch, (10) or expiry is auto-detected and used instead of the positional schema.

Downloads

The CSV downloads at once. The PNG and SVG ZIPs load the QR library on the first click, then make one file per valid row. PNGs are 1024 × 1024 with medium error correction; SVGs scale to any print size. Everything runs in your browser and nothing is uploaded.

Pasting from Excel, CSV, or your PIM

The textarea at the top of this page accepts three input shapes and detects which one you pasted on every keystroke, so there is no format to choose first.

Newline list

Paste one GTIN per line with no other columns. The tool builds a plain /01/{gtin} Digital Link for each row. Useful when you want a resolver URL per product and have not yet decided which qualifiers to encode.

Tab-separated (Excel paste)

Copy a range of cells from Excel, Google Sheets or LibreOffice and paste directly. The tool detects the tab delimiter with no configuration. If the first row looks like a header (fields matching things like GTIN, Batch, (10) or Expiry) it is used to map columns to GS1 Application Identifiers. Otherwise the columns are mapped positionally: the first column is the GTIN, subsequent columns are filled in the order of your currently selected qualifiers.

CSV

Paste the contents of a CSV file. Double-quoted fields are respected, including escaped quotes ("" inside a quoted field), so values containing commas do not need any special handling. Header-row detection works the same as TSV.

Format detection happens live as you paste. A one-line summary beneath the textarea shows what was detected, the row count, the header row if one exists, and any non-fatal warnings (for example, an unrecognised header column or a missing GTIN column). You can watch the results table at the bottom update in real time as you edit.

Setting a custom resolver domain

The resolver domain is printed into every GS1 Digital Link QR code, so it is the one choice you cannot change after the labels are printed.

id.gs1.org is the canonical GS1 reference resolver. It is useful for testing: paste a Digital Link URL and the reference resolver will tell you whether the brand has registered a real destination for it. But brands do not deploy to id.gs1.org in production. They register their own domain (or subdomain) and run a conformant resolver that redirects each incoming scan to whatever web destination is appropriate: a product page, a batch traceability page, a recall notice or a regional variant.

Three things follow for anyone printing Digital Links on a whole range.

1. Choose a domain and stick with it

Changing your resolver domain after products are in-market means reprinting labels. Pick something short that shoppers will trust, such as trace.brand.com, qr.brand.com, or the main domain of the brand with a /01/ path prefix. Whatever you pick, treat it as permanent.

2. Set up DNS and TLS correctly

Your resolver domain must answer over HTTPS with a valid certificate. Consumers scanning a Digital Link with their phone see a browser warning instead of your page if the certificate is invalid. If you use a CDN or edge service, make sure the Digital Link path (starting with /01/) is routed correctly to the resolver. Test from a real phone on a real cellular connection, not only from an internal network where DNS quirks can mask problems.

3. Implement the resolver behaviour

A GS1-conformant resolver parses the incoming path, identifies the primary key (usually a GTIN), looks up the destination in your back-office system and returns an HTTP redirect. It should also support content negotiation: a scanner requesting JSON via Accept: application/json should receive structured data instead of a redirect. The GS1 Digital Link standard sets out what a conformant resolver must do.

The "Advanced: resolver domain" setting of the bulk tool lets you preview what your URLs will look like under your chosen domain without touching any infrastructure. Put your domain in the field once and every URL in the results table updates immediately. The value is kept in your browser, so it is still there on your next visit.

Migrating a product catalogue

Do these steps in order: each one depends on the data from the step before. A GTIN error found in step 1 costs one cell in the PIM; found after printing, it costs a print run.

Step 1. Audit your existing GTINs

Before you build any Digital Link URLs, run your master GTIN list through the check digit calculator. A typo is far cheaper to fix here than after you have generated 5 000 URLs and printed labels. Take every failed row back to the owner of the PIM data.

Step 2. Decide on a qualifier strategy

Which qualifiers do you want on each product? Batch and expiry are the usual starting point for food and household goods, because they let a retailer find a recalled lot. Pharmaceutical and high-value goods add serial. Fashion and variants-heavy categories add consumer product variant (AI 22). Pick the smallest set you need.

Step 3. Structure your PIM data

Your PIM or ERP needs columns for every qualifier you plan to encode. For batch and expiry this usually already exists; for serial you may need a new system-of-record for serial number allocation. Do this work before generating URLs, not after.

Step 4. Export as CSV or TSV

Pull a report from your PIM with one row per SKU and one column per qualifier. Include a header row with recognisable names and the bulk tool will auto-detect headers and map columns to AI codes for you. Paste the report into the textarea above. If the PIM holds finished GS1-128 strings instead of separate columns, the bulk GS1-128 parser reads them and exports Digital Link URLs.

Step 5. Validate the output

Review the results table. Any errors (red pills) need source-data fixes in the PIM before re-pasting. Fix every error before you download.

Step 6. Download and integrate

Use the "Download CSV" button to export a clean file with one row per URL, ready to load into your label design software or feed back into the PIM. For visual proofing or small test runs, use "PNG ZIP" or "SVG ZIP" to get one image per SKU, named by source line number so you can cross-reference against your paste. The EAN-13 or UPC-A stays on the pack beside the QR code; paste the same GTIN list into the barcode generator for a ZIP or a label sheet of those.

Step 7. Proof before print

Always scan a proof of each label with a real phone on a real cellular connection before committing to production print runs. A URL that passes validation in this tool can still fail in the real world if the resolver domain is not pointing at a working service.

Qualifiers the tool supports

All 12 qualifiers the tool supports, with format rules and example values. Filter by category or search by name to find the right AI for a given data point. Every qualifier shown here is available as a chip in the picker above the bulk input. Add the ones you need before pasting.

Application Identifiers the generator can add

Every qualifier this tool supports, with format rules and example values. Search by code or name, or filter by category.

AINameFormatExample
(22)
Consumer Product Variant
Identifies a variant of a consumer product (limited edition, regional SKU, seasonal pack) that shares a base GTIN with other variants.
Up to 20 alphanumeric charactersLIMITED2026
(10)
Batch or Lot Number
Identifies a batch or lot of items produced under similar conditions. Essential for traceability, recalls, and quality assurance.
Up to 20 alphanumeric charactersABC123
(21)
Serial Number
Uniquely identifies an individual item. Combined with a GTIN it forms a serialised GTIN (SGTIN), enabling item-level tracking.
Up to 20 alphanumeric charactersSN00042
(11)
Production Date
The date the item was produced, in YYMMDD format. Use 00 for the day if only the month is known.
YYMMDD (6 digits)260115
(13)
Packaging Date
The date the item was packaged, in YYMMDD format.
YYMMDD (6 digits)260116
(15)
Best Before Date
The date up to which the item retains its optimal quality. Not the same as expiration: the item is still safe after this date.
YYMMDD (6 digits)261231
(16)
Sell By Date
The date by which the item should be sold by the retailer, in YYMMDD format.
YYMMDD (6 digits)270601
(17)
Expiration Date
The date after which the item should no longer be consumed or used, in YYMMDD format.
YYMMDD (6 digits)270401
(235)
Third Party Controlled Serialised Extension
Serialised extension controlled by a third party, used to extend a GTIN with a serial reference managed outside the brand owner's system.
Up to 28 alphanumeric charactersTPX-9912
(253)
Global Document Type Identifier
Identifies a specific document (tax certificate, shipping notice, permit) with an optional serial component.
13 digits plus up to 17 optional alphanumeric characters9506000134352DOC01
(254)
GLN Extension Component
Extension to a Global Location Number that identifies a sub-location within the parent GLN (dock door, storage bay, loading bay).
Up to 20 alphanumeric charactersBAY-12A
(8006)
Identification of a Trade Item Piece
Identifies an individual piece of a larger trade item. 18 digits: 14 for the GTIN, 2 for the piece number, 2 for the total number of pieces.
18 digits (GTIN-14 + piece number + total pieces)095060001343520102

Showing 12 of 12 qualifiers.

Production checklist

Before you ship Digital Link-labelled product to retail, work through this list. A URL that builds without errors in the tool is the first check, not the last.

Frequently asked questions

What happens to rows with invalid GTINs?

Rows with an invalid GTIN appear in the results table with a red 'Error' status and a message explaining why (for example, 'invalid check digit'). Invalid rows are omitted from both the QR ZIP download and from any Digital Link URL output, but they stay in the CSV export with their status and error message so you can audit and fix them upstream.

Do I need to include a header row in my pasted data?

No, but it helps. Without a header, the first column is taken as the GTIN and the next columns are mapped, in order, to the qualifiers selected in the picker. If the first row looks like a header (fields such as 'GTIN', 'Batch', '(10)' or 'Expiry'), the tool maps the columns by name instead. Use a header when your PIM export puts the columns in a different order from the picker.

Can the tool handle GTINs of mixed lengths?

Yes. The input can be any mix of GTIN-8, GTIN-12 (UPC-A), GTIN-13 (EAN-13) and GTIN-14 values. Every GTIN is validated independently and then padded with leading zeros to the canonical 14-digit form that the GS1 Digital Link specification requires in the URL path.

How does the CSV export structure its columns?

The CSV has six columns: line (1-indexed source line), input_gtin (what you originally provided), barcode_type (GTIN-8/12/13/14 if detected), status (ok or error), url (the built Digital Link URL, empty for errors) and message (error details or an OK summary). Fields that contain commas, quotes or newlines are wrapped in double quotes with inner quotes escaped as '""', so the output opens cleanly in Excel.

Why does the QR ZIP take longer than the CSV?

Two reasons. The QR code and ZIP libraries download on your first click, so the page stays light for visitors who only need the CSV; later clicks reuse them. Then every valid row gets its own 1024×1024 PNG with medium error correction, drawn one at a time, so the time grows with the size of the catalogue. There is no row cap. If the browser slows down on a very large catalogue, split the paste into chunks.

Which resolver domain should I use for testing and for print?

For testing, use id.gs1.org, the reference resolver run by GS1, so the URLs have the standard form while you check your data. For print, use a domain you control, such as trace.brand.com or qr.brand.com, with a conformant resolver that answers every scan with the right redirect. Do not print labels that point at id.gs1.org.

Does the CSV export keep my batch and expiry values?

Only inside the URL. The CSV has the original input_gtin column and the built Digital Link URL, which carries batch and serial in the path and dates after the question mark, but no separate column per qualifier. To build the links again with changed values, paste your original source data from the PIM again rather than the CSV. The tool does not keep the pasted catalogue between visits.

Do I need one QR code per product, per batch or per item?

It depends on what goes into the URL. A link with only the GTIN is the same on every unit, so one QR code per product can be printed with the rest of the pack. Add a batch and each batch needs its own code; add a serial and each unit does. GS1 Belgium & Luxembourg notes that the main print run is not affected when that variable code is printed at the end of the production line. Paste one row per GTIN and batch.

Can I change where the QR codes lead after they are printed?

Yes, but not what they contain. The domain, the GTIN and any batch or serial are fixed once the code is printed. Where a scan lands is decided by the resolver on that domain, so you can send it to a new product page or a recall notice at any time without reprinting, as GS1 Belgium & Luxembourg explains. That only works on a domain you control, which is why it is the one setting to get right before the first print run.

Where should the QR code go next to the EAN-13?

Close to it, if the till is meant to scan it. GS1 UK asks for both codes during the transition and for the whole QR code, quiet zone included, to sit within 50 mm of the centre of the linear barcode, preferably in the lower right quarter of the back of the pack. A second QR code for shoppers can go on the front. The barcode generator makes the EAN-13 or UPC-A for the same GTIN list.

By The eancheck teamPublished Updated

Questions or corrections? Email the eancheck team.