Lot, Batch & Expiry Labels for Shopify Receiving

LabelCraft - barcode labels for Shopify that print at exactly the size you set.

EN · FR · DE · ES
The guarantees behind every label
Exact to ±0.1 mm

Every label prints at the size you set - measured, not approximate.

Never a silent failure

Overflow or a missing barcode always raises a visible warning before you print.

Whole-dot barcodes

Modules snap to your printer's dots, so codes stay crisp and scan first time.

Your barcodes, untouched

We never overwrite or reassign a product's existing barcode.

If you sell food, cosmetics, supplements or anything else with a shelf life, the labels you print at receiving need more than a barcode — they need a lot or batch number, often a received-on date, and a best-before or expiry date. Shopify has no native field for any of these, so this guide shows how to store them and print them as human-readable text on your barcode labels with LabelCraft.

Shopify has no native batch, lot or expiry field

Out of the box, a Shopify variant has a price, a SKU and a barcode — but no lot, batch or expiry field, and the receiving flow doesn't capture one. The clean way to add them is a metafield: a custom field you define once (for example custom.lot and custom.expiry) and fill in per product or per variant. That keeps the data structured and reusable instead of buried in a note.

What goes on a lot or expiry label

A receiving label for a perishable or regulated product typically carries some combination of:

How LabelCraft prints lot, batch and expiry

Add a metafield element to a custom template and type its key as namespace.key (for example custom.expiry or custom.lot). At print time LabelCraft pulls the real value from each product — reading the variant's value first, then the product's — and prints it the way a person reads it: a date metafield prints as a date, a measurement keeps its unit, a number prints plainly. It never stamps Shopify's raw internal JSON onto the label.

For dates that aren't a product attribute — a received-on or printed-on date for the whole run — use the date element instead of a metafield. For a single lot number that applies to an entire batch you're labelling in one go, a static text element is the quickest route; for a running per-unit number, the serial element increments automatically across the print.

In keeping with LabelCraft's never-print-blind promise, if a product you're printing has no value for a referenced metafield, you're told before you print — the field is named and the count of products missing it is shown — instead of a blank gap appearing on the roll. So a missing lot or expiry is caught at your desk, not at the shelf.

Step-by-step: add a lot/expiry metafield and print it

  1. In Shopify admin, go to Settings → Custom data → Products (or Variants) and add metafield definitions, e.g. custom.lot (single-line text) and custom.expiry (date).
  2. Fill in the lot and expiry values on the products or variants you're receiving.
  3. In LabelCraft, open Templates → New template and add a metafield element, typing the key (e.g. custom.expiry). Add a second one for the lot if you need both.
  4. Add a date element for the received-on date, and your barcode and product name as usual.
  5. Print from Receive & label or the print flow; review the pre-print warning if any product is missing a value, then generate the PDF at 100% / Actual size.

A note on compliance

LabelCraft prints what you give it: it is a precise label engine, not a traceability or compliance system. You own the lot and expiry values in your Shopify data; LabelCraft renders them exactly (±0.1 mm) and never silently — a missing value or a code too small to scan is flagged before you print. For regulated categories, confirm your label content meets the rules in your market; LabelCraft makes sure what you intend to print is what comes out.

Troubleshooting

The lot or expiry field prints blank

The value must live in a real metafield on the product or variant, and the element key must match it exactly as namespace.key (for example custom.expiry). LabelCraft reads the variant's value first, then falls back to the product. If a product genuinely has no value, that's flagged before printing — fill it in or remove the element; nothing prints blind.

The date prints as raw data instead of a readable date

Type the metafield as a date (or date-and-time) in Shopify's Custom data settings, not as plain text holding JSON. Date, number, measurement, money, rating and boolean metafields are all formatted the way a person reads them; a metafield that points to another object or holds raw JSON can't be shown on a label, so LabelCraft tells you instead of stamping a blob of code.

Text is cut off on a small label

A long lot code or a full expiry line can overrun a small unit label. LabelCraft warns before the PDF downloads; set the element's overflow mode to shrink to auto-scale the font or truncate to shorten it with an ellipsis — nothing is ever silently cut.

Install free — 200 labels per month →

Labelling perishable or regulated stock at receiving? See the receiving barcode labels guide and the GS1 barcode guide, or contact LabelCraft support.

Related guides