Markio → Help center → Barcodes & SKUs

Barcodes & SKUs

This screen is about the codes themselves rather than the labels they end up on. It reads top to bottom as one job in four sections: it issues new codes to variants that have none, it imports codes you already have, it lists the codes your staff scanned that found nothing, and it registers an older code a product should also answer to. Export all codes (CSV) sits in the page header, next to the title.

Generating and importing codes is free on every plan, with no limit on how many. The scan journal and adding an extra code are paid.


Numbering rules

A rule says what a generated code looks like. Create at least one before issuing anything — the bulk fixer in the Catalog audit needs one too.

The rules live inside the issue section below, behind the folded Numbering rules line: they are set once and then only picked from a list. Press Create a rule (or Add another rule) — the form opens as a dialog — and fill in:

  • Rule name — how you refer to it later.
  • Pattern — the shape of the code. As you type, the form shows exactly what it produces from a sample product, so you can check the pattern before saving.
  • Next number — where the counter stands.
  • Zero-pad to — how many digits the bare counter is padded to (0–12).
  • Rule note (optional) — a note for yourself: the location or supplier this rule is for. It does not create a separate pool. Each rule has its own counter. Separate counters can overlap, so use distinct patterns when needed.
  • Stop at (optional) — a ceiling. For a GS1 prefix, this is how many numbers it holds.

Pattern tokens

TokenWhat it inserts
{seq} / {seq:5}The counter, optionally zero-padded to N digits.
{vendor} / {vendor:3}Vendor, optionally cut to N characters.
{productType}Product type.
{title}Product title.
{option1} {option2} {option3}The variant's options — size, colour.
{sku}The variant's existing SKU.
{date} / {date:YYYYMMDD}The date the code is issued.
{random:4}Random digits, 1 to 12 of them.

Text tokens are folded to what the target symbology can actually encode, so a title with an accent or an ampersand in it does not produce a code that will not print. A width after a colon cuts a text token to that many characters, and zero-pads a numeric one.

Example: {vendor:3}-{option1}-{seq:5} on a grey medium T-shirt from Acme produces ACM-M-00042.

The counter is handed out inside a transaction, so two people pressing Issue at the same moment get different ranges rather than the same numbers. That is the exact damage the audit exists to clean up, and it is not left to luck.


Issue codes to variants that have none

The section says how many variants in your shop have no barcode. If that is zero, there is nothing to do here.

  1. Pick a Numbering rule.
  2. Pick Issue as: - Code 128 — an internal barcode using supported letters and numbers. No GS1 prefix is needed. Check it with your store’s scanner. - Code 39 — an internal code for older scanners. - EAN-13 from your own GS1 prefix — only selectable once you have saved a prefix below.
  3. Press Preview what would be written. Up to 500 variants are covered in one pass, oldest first, and a table shows a sample of what each would get. Anything the pattern cannot encode is flagged and will be skipped.
  4. Press Write these codes to Shopify.

Nothing is written until that second button. A bulk write onto a live catalog is never one click.

Only variants with an empty barcode are ever touched. Run it again to continue past 500; because the order is stable, a re-run picks up where the last one stopped.


Your GS1 company prefix

Save your own company prefix under Settings → Barcodes & SKUs. Markio accepts 6–12 digits and can use the prefix to generate EAN-13 values with check digits. Confirm your allocation and numbering rules with GS1.

Markio does not sell or register GTINs. For codes used only within your store, Code 128 may be sufficient. For marketplaces or retail partners, check their GTIN requirements before generating codes.

Issue a code automatically to new products

In Settings → Barcodes & SKUs, under Issue automatically, choose what happens when a product arrives — from the admin, an import, or another app:

  • Off — the default. New products and variants are left as they arrive.
  • A barcode, when the variant has none
  • A SKU, when the variant has none
  • Both, each when the variant has none

It uses the first numbering rule, so create one first.

Two things it deliberately does not do:

  • It is off unless you turn it on. It writes into your live catalog, and a code nobody asked for on a product you just created is worse than no code.
  • By default, it fills empty fields. The separate placeholder setting below also allows replacement of values such as 0 and N/A.

A new variant added to a product you already have counts as new, because that is the same event to whoever is holding the label printer.

The three settings underneath

Each one widens what gets written back to Shopify, so each one is its own switch and each starts off.

Also fill in a code when a product is edited. Without it, a variant only ever gets a code on the day it first appears — which is no use if you installed Markio after your catalog was already in Shopify. With it, saving any change to a product tops up whatever is still empty on it. Existing values stay unchanged unless you also enable placeholder replacement.

Treat 0 and N/A as an empty field and replace them. A spreadsheet import leaves 0, 000000, -, N/A, none, null or TBD where a code should be. This setting treats those values as placeholders and replaces them. Enable it only if your store uses them that way. It is the only setting here that overwrites something you can see, which is why it is separate. Anything that could plausibly be your own internal code — 1, X, TEST, 01 — is left alone even when it looks odd.

Only products with this tag. One tag, matched whatever the capitals. Choose whether to issue only for products with that tag, or for every product except those. Blank means every product. This is not the tag filter on the print screen: that one picks what goes on paper, this one picks what gets written back to Shopify.

Every automatic write is in the activity journal with the rules that let it through, so "why did this barcode change?" has an answer.


Import codes you already have

Paste a CSV with a sku column and a barcode column (code or gtin also work as the header for the second one). Press Check the file, read the report, then Import N codes.

Importing through Markio rather than pasting into Shopify buys you two things:

  • Cleaning. Common formatting problems, including invisible spaces and Unicode dashes, are cleaned during import. Check the preview; do not rely on an import to recover missing digits. A row whose code is empty once the invisible characters are removed is refused and named.
  • Collision refusal. A code that already belongs to a different variant is refused rather than written, and the report names both sides. Creating a duplicate on purpose is the one thing this screen will not help you do.

The report lists unmatched SKUs and rejected rows with reasons. An import can replace existing barcodes on matching variants. Use unique SKUs and export a backup first: code imports do not have the audit’s Undo this batch action.

Up to 500 usable rows are included per pass. Remove processed rows from the file before importing the rest; submitting the same file repeats the first batch.


Codes that were scanned and found nothing

(The list is on the Pro plan, $9.99 a month. Scanning itself is free, on every plan.)

The Scanned codes that need attention section shows Markio scans from the last 30 days, including POS, scanner and typed input. It lists codes that still have no match or multiple matches:

  • Nothing — no product in your catalog answers to that code. Somebody is scanning a box Markio cannot identify.
  • 2 products (or more) — the code sits on more than one variant, so a scan may identify the wrong item. That is a duplicate, and the Catalog audit is where it gets fixed.

Each row says how many times the code was scanned, when it was last scanned, and where from — at the till, a handheld scanner, a phone camera, or typed in. The list is sorted by how often the code was hit, so the top row is the box your staff keeps picking up.

A code drops off this list as soon as it resolves again — you added it as an extra code, or corrected the barcode, or the product finally synced. Nothing has to be ticked off by hand.

Nothing → Add it to a product puts the code into Code to add in the section below. Find the product it belongs to, then press Add this code.

On the Free plan you are told how many scans failed, but not which codes they were: the count is free, the journal is what Pro buys. Scan rows are deleted after 90 days.


A product that answers to an older code

(Adding one is on the Pro plan, $9.99 a month.)

Stock arrives with the supplier's number already on the boxes, and re-labelling it all takes months. Register that number here and a scan finds the product either way, while both codes are on the shelf. The code you print does not change, and nothing is written to Shopify.

  1. In Find the product by any code it already has, scan or type any code the product answers to — its printed barcode, its SKU, or an extra code you added earlier.
  2. Press Find the product.
  3. The panel shows the product, what it prints, its SKU, and every extra code already on it.
  4. Type the supplier's number into Code to add and press Add this code.

What these codes do and do not reach

A Shopify variant has exactly one barcode field, so an extra code lives in Markio only.

Markio finds it: the POS tile's scan, the scan box on the Print screen, receiving-CSV matching, and the audit's duplicate check all look through these codes.

Other Shopify tools do not receive these extra codes. Adding an alias in Markio does not update Shopify’s barcode field or register it with Shopify’s standard scanner. Test scans inside Markio.

The rules around them

  • A code that already belongs to a different product is refused. That is the point of the feature, not a limitation of it.
  • If the code you search with resolves to more than one variant, Markio refuses to pick one — fix that duplicate in the Catalog audit first. Hanging an extra code off the wrong half of a duplicate makes the ambiguity permanent.
  • The audit flags a printed barcode that is registered as somebody else's extra code, and stays quiet about a product's own.
  • Codes you have already added keep scanning on every plan, and you can remove one at any time, free. If you stop paying you are not locked in with codes that work and cannot be taken out.

Export all codes

Export all codes (CSV), in the page header beside the title, downloads every active product with its SKU and barcode — for the things you cannot stick a label on but still have to scan. Free on every plan.

To narrow it down, or to include drafts, use the filters on Print labels and export from there instead. Both exports use the same columns as the importer above, so a file can be edited and fed straight back in. Up to 50,000 rows, CSV only.


Troubleshooting

The leading zero disappeared from my codes

Spreadsheets can treat barcode columns as numbers and remove leading zeros. Import these columns as text to preserve the complete code.

Run Catalog audit and check Possible missing leading zero. Compare the suggested correction with your original source before applying it. A suggested repair cannot prove which number was originally assigned.

"Nothing in your catalog answers to X"

The code is not in Shopify's barcode field, not a SKU, and not registered as an extra code. If it is a supplier's number, that is exactly what the extra-codes section is for.

"X answers to more than one variant. Fix that duplicate in the audit first"

Two products carry the same code. Open the Catalog audit, filter to Same barcode on different variants, and resolve the group. Then come back.

"This rule has run out of numbers"

The numbering rule hit its Stop at ceiling. Edit the rule and raise it, or issue from a different rule.

"Your GS1 prefix has no numbers left"

The prefix has issued every EAN-13 it can hold. A shorter prefix holds more; more capacity is bought from GS1.

"EAN-13 needs a GS1 company prefix that you own"

Save your own GS1 prefix in Settings to generate EAN-13 codes. For internal store use, choose Code 128 if your scanner supports it.

Some codes came back "rejected by Shopify"

Shopify refused the write on those variants. Read the reported error, then run a new preview. A product may have changed or been deleted since the previous preview.

I turned on automatic issuing and my old empty variants still have no code

By default it only touches variants Markio has just seen for the first time. Turn on Also fill in a code when a product is edited and they get filled the next time each product is saved — or use Issue codes to variants that have none above to do the whole catalog at once, now.

I need to overwrite a code that is already there

Neither the bulk issue nor automatic issuing will do it — both only fill empty fields. The one exception is Treat 0 and N/A as an empty field, and it only reaches a short list of strings that are not codes. Otherwise: clear the field in Shopify first, or use the Catalog audit's bulk fix, which replaces a code when the code itself is the problem.


← All Markio help topics