EAN Check.comEAN Check.com

Bulk GS1 Digital Link Generator

Convert a whole product catalogue to GS1 Digital Link URLs from a single paste. Smart Excel/CSV/TSV detection, custom resolver domain, CSV export and a one-click ZIP of QR codes — all client-side.

By The eancheck teamPublished 10 min read

Qualifiers (GS1 Application Identifiers)

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

Dates

Identifiers

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

CSV export is instant. QR ZIP lazy-loads the QR library on first click, then generates a 1024×1024 PNG for each valid row and bundles them into a zip. Everything runs in your browser — nothing is uploaded.

Pasting from Excel, CSV, or your PIM

The textarea at the top of this page accepts three input shapes, auto-detected on every keystroke. There’s no tab-switching, file picker or format selector — the tool inspects what you paste and figures out the rest.

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 haven’t 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 without any configuration. If the first row looks like a header (fields matching things like GTIN, Batch, (10) or Expiry) it’s 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 don’t 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

This is the single most important decision when deploying GS1 Digital Linkin production, and it’s the bulk tool’s unique differentiator.

id.gs1.org is the canonical GS1 reference resolver. It’s 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 dashboard, a recall notice, a regional variant, or a consumer-facing experience.

This means three things for anyone rolling out Digital Link at scale.

1. Choose a domain and stick with it

Changing your resolver domain after products are in-market means reprinting labels. Brands typically choose something short and trustworthy — often trace.brand.com, qr.brand.com, or the brand’s main domain 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 will see a browser warning if the certificate is invalid, which kills conversion instantly. If you’re using 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 just 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. Reference implementations in several languages are available from the GS1 community.

The bulk tool’s “Advanced: resolver domain” disclosure 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 persists across visits so you don’t have to retype it on every session.

Migrating a product catalogue

Rolling out Digital Link across an existing catalogue is a surprisingly linear process if you break it down. The order matters — skipping step 1 is the single most common reason migrations stall halfway through.

Step 1 — Audit your existing GTINs

Before you build any Digital Link URLs, run your master GTIN list through a check digit validator. It’s much cheaper to fix a typo at this stage than after you’ve generated 5000 URLs and printed labels. Any failed row you see here is a data quality signal you can take back to your PIM owner.

Step 2 — Decide on a qualifier strategy

Which qualifiers do you want on each product? Most FMCG brands start with batch and expiry — those two support recall and consumer safety, which are usually the strongest internal business cases. Pharmaceutical and high-value goods add serial. Fashion and variants-heavy categories add consumer product variant (AI 22). Pick the smallest set that serves your goals; you can always add more later.

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 — the bulk tool auto-detects headers and maps columns to AI codes for you. Paste the report into the textarea above.

Step 5 — Validate the output

Review the results table. Any errors (red pills) need source-data fixes in the PIM before re-pasting. Aim for a 0% error rate before downloading.

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 “Download QR ZIP” to get one PNG per SKU, named by source line number so you can cross-reference against your paste.

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 isn’t pointing at a working service.

Qualifier reference

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.

GS1 Application Identifier Reference

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 — for example a limited edition, a regional SKU, or a seasonal package — 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, in YYMMDD format. Not the same as the expiration date — 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, in YYMMDD format.
YYMMDD (6 digits)260601
(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, commonly 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 — for example a tax certificate or shipping notice — with an optional serial component.
13 digits plus up to 17 optional alphanumeric characters9506000134352DOC01
(254)
GLN Extension Component
Extension to a Global Location Number (GLN) that identifies a specific sub-location within the parent GLN, such as a dock door or storage bay.
Up to 20 alphanumeric charactersBAY-12A
(8006)
Identification of a Trade Item Piece
Identifies an individual piece of a larger trade item — e.g. one half of a matched pair. 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. Each item covers a failure mode that has bitten real migrations — “it built successfully in the tool” is a necessary but not sufficient condition for a print-ready label.

Frequently asked questions

How many rows can I paste at once?

There's no hard limit — the parser and URL builder are both linear in the number of rows, and everything runs in your browser. In practice the QR ZIP export is the slowest step, and generating 1000+ PNGs sequentially can take a few seconds. For very large catalogues (10000+) you may want to split the paste into chunks.

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. If no header is detected, the first column is assumed to be the GTIN and subsequent columns are mapped to whichever qualifiers you have selected in the picker, in order. If the first row looks like a header (fields matching things like 'GTIN', 'Batch', '(10)' or 'Expiry'), it's used to map columns automatically — this is the safer option for catalogues with an unusual column order.

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 a moment to start generating?

Two reasons. First, the QR code library and the ZIP library are both lazy-loaded — they download on your first click so the page loads fast for visitors who only need the CSV. Second, each PNG is generated individually at 1024×1024 with medium error correction, which gives print-ready quality but costs a few milliseconds per row. Subsequent clicks reuse the already-loaded libraries.

What's the right resolver domain for testing vs production?

For testing, id.gs1.org is the canonical choice — it's GS1's reference resolver and will render a recognisable URL shape that anyone in the industry understands. For production, you want your own domain: something like trace.brand.com or qr.brand.com that you control and that can answer every scan with a conformant redirect. Never ship labels that point at id.gs1.org.

Can I feed the CSV back into this tool to regenerate links?

The exported CSV includes the original input_gtin column but not any qualifier values (since they came from your paste, not from this tool). To re-run a batch with the same qualifiers, re-paste your original source data — the tool is deliberately stateless between sessions so it can't accidentally leak your product catalogue across devices.

By The eancheck teamPublished 10 min read

Questions or corrections? Email the eancheck team.