Print labels
Select products, set quantities, choose a template and print. You can also scan products into the list or import received quantities from a CSV.
The screen is laid out top to bottom: Find products, Scan a barcode, the products table, Print from a receiving CSV. The panel down the right side — Print setup — holds the template, the printer, a label preview and the Save-this-job box, and it stays with you as you scroll.
Before you start
You need two things: at least one template (Templates) and somewhere for the labels to go. You do not need a saved printer — leaving the Printer picker on "PDF via print dialog" uses your browser’s print dialog and installed printer driver. Choose the paper size that matches your labels.
The first time you open Markio after install it is still reading your catalog. A blue banner says so. You can build a job while it reads; products appear as they arrive.
Print labels for a shelf, a vendor, a collection
- Narrow the list in Find products. The search box matches product name, SKU or barcode. Everything else is a condition: pick one from Add condition and it appears as a chip above, so what is in force is always the short list on screen rather than the long list of what exists. The conditions are: - Vendor and Product type — these two only ever offer values that actually exist in your shop - Tag — matches one whole Shopify tag, letter for letter - Location - Changed after / Changed before — the date the variant last changed, which is how you get "everything I edited today" - Price changed after — only the variants whose price actually moved on or after that date, which is the shelf tickets that no longer match the till. It is not the same as Changed after: editing a photo or a tag changes a product without changing what it costs. Markio only knows about price changes it has watched happen, so nothing from before you installed it is listed. - Only in stock, Only without a barcode, Only duplicates the audit found, Include drafts and archived - Only what the last bulk fix changed — the variants your most recent bulk fix actually rewrote, which are the ones whose shelf labels are now wrong. See Catalog audit - Pick a collection — opens Shopify's own collection picker
Remove a condition by clicking its chip, or Clear all to start over.
- Tick the products you want. The tick box in the table header selects everything on the current page — the page is 50 rows, so on a longer result you tick page by page, and your selection survives paging.
- Choose How many of each (see below).
- Choose Print in this order if it matters (see below).
- Check the panel on the right: the right template, the right printer, and the preview showing what the label will look like.
- Press Print N labels at the top of the screen. The button carries the real total, so you always see how many are about to come out.
Drafts and archived products are excluded unless you ask for them. A shop with thousands of drafts must not get them in a print job by accident.
Save a set of conditions you use every week
Type a name under Name these conditions to reuse them and press Save. The set appears under Saved, and one click puts every condition back — "this vendor, no barcode, in stock" becomes one click instead of four. Saving again under the same name overwrites it; the ✕ beside a name deletes it.
Saved sets are free on every plan. They keep the question, not the products: saving a job with its products, counts and template is Save this job, which is on Pro.
Collections stop at 250 products
A collection filter includes only the first 250 products returned by Shopify. To find products beyond that limit, remove the collection filter, then search by vendor, tag or product name. Adding filters while keeping the collection selected does not load the remaining products.
Say how many of each
How many of each offers four options:
| Mode | What it does |
|---|---|
| Type a count on each row | Enter a quantity in each row’s Copies field. |
| The same count for everything selected | Apply one quantity to every selected row. |
| One per unit in stock (all locations) | Use the total stock across locations. |
| One per unit in stock at one location | Use stock at the location selected in the filters. |
Rows start at 0 copies. Choose a quantity before printing, or set a default in Settings.
Each row can have up to 1,000 copies and each job up to 20,000 labels. These limits apply on both plans. Split larger runs into separate jobs. Negative stock is treated as zero.
Control the order the labels come off
Labels come off a roll in one strip and get stuck onto goods in the order they were laid out, so the order is a real setting, not a nicety. Print in this order offers:
- The order I picked them — no re-sorting at all
- Product name
- SKU
- Barcode
- Location
- Tag (first one, A-Z) — a product carries a set of tags but a stack of labels has one order, so the sort key is the alphabetically first tag
Sorting is numeric-aware: SKU-2 comes before SKU-10, not after it. Rows with nothing in the sorted field go to the end, so a barcode-less variant never heads a stack sorted by barcode.
Finishing a part-used sheet of Avery
When the template's stock is a sheet rather than a roll, the right-hand panel grows a Start on cell field and a picture of the sheet with the cells this job will fill shaded in.
The field is the cell to START ON, counting from 1. So if three labels have already been peeled off, the first free cell is number 4 — type 4, not 3. (Typing 3 prints over the third cell, which is one of the ones that is gone.) The app's own hint says the same thing: "count the labels already peeled off it and start on the next cell".
The picture updates as you type, and the line under it says either "N of M cells on this sheet" or how many sheets the job will take.
Scan a barcode
The Scan a barcode section answers a question a scanner cannot answer itself: which product does this code actually land on — and is it more than one?
- With a USB or Bluetooth scanner, click into "Scan or type a code" and scan. There is nothing to configure. Markio recognises a scanner by the speed of the keystrokes, not by an Enter suffix, so it works whether or not your scanner is set to send one. The field clears itself and keeps focus, so scan-scan-scan works without touching the mouse.
- By hand, type the code and press Look up.
- With a phone camera, press Photograph a code if the button is there.
A scan has exactly three outcomes, and Markio never folds them into two:
- Matched — the product drops into the table below, already ticked.
- Two or more products share this code — a red banner says so, every product holding it is listed unticked, and nothing is selected for you. A shared code does not identify a single variant. Fix it in Barcodes & SKUs or in the Catalog audit first.
- Nothing in this shop carries that code.
Scanned products sit in the same table as everything else, pinned to the top, so copies, sort order, export and the Print button work on them with no second route through the screen. A scan that landed outside your current filter is still visible rather than silently ticked off-screen.
Scanning matches the printed barcode, the SKU, and any extra code you registered in Barcodes & SKUs — which is what lets a supplier's number on a box still find the product while the shelf is only half re-labelled.
Every scan is recorded, matched or not, and the record is read back in Codes that were scanned and found nothing — so "which of our codes do not resolve" stops being a guess. The scan itself is free on every plan; that list is on Pro.
The camera button is missing
Camera scanning is shown only when your browser provides a barcode decoder. If the button is missing, use a USB or Bluetooth scanner or type the code.
The camera option reads a photo rather than a live video stream. Supported barcode formats depend on the device. If a photo cannot be read, move closer, hold still and try again. You can always type the code instead.
Print labels for a delivery that just arrived
(On the Pro plan.)
Markio creates delivery labels from a CSV. Export received quantities from your purchase-order tool, then import the file here.
Coming from Stocky
If you are moving away from Stocky, Markio can read a saved CSV without a live Stocky connection. The file must include received quantities and SKUs or barcodes:
- a saved Stocky export with those columns can be imported;
- so does an export from the purchase-order app you use now.
Use your purchase-order tool to record the delivery. Markio uses the exported quantities to prepare labels; it does not update received inventory.
- Export what actually arrived from your PO tool.
- Paste it into the Print from a receiving CSV box.
- Press Check the file.
- Read the report, then press Print N received lines.
The file needs a quantity column and either a SKU column or a barcode column. Header names are matched loosely, so most exports work untouched:
| Column | Header names recognised |
|---|---|
| SKU | sku, variant sku, item sku, item, code, product code, item number, part number |
| Barcode | barcode, upc, ean, ean13, gtin, gtin13, isbn, product barcode |
| Quantity | qty, quantity, received, received qty, qty received, quantity received, count, units |
| Unit cost | unit cost, cost, price, cost price, unit price, buy price |
| PO number | po number, po, purchase order, purchase order number, order, order number, ref |
| Supplier | supplier, vendor, supplier name, vendor name, manufacturer |
Case, spaces, underscores and punctuation in header names are ignored. Columns Markio does not recognise are simply left alone.
The parser handles what real spreadsheet exports are actually full of: a UTF-8 byte-order mark from Excel, Windows and old-Mac line endings, quoted fields with commas inside them, and semicolon or tab delimiters (Excel on a European locale writes semicolons and never tells you). Quantities written 1 000 or 1,000 are read as one thousand; costs written 12,50 are read as twelve fifty.
37 received prints 37 labels, not the 50 that were ordered. The PO number, the supplier and the unit cost travel onto the label if your template has fields for them.
If the same SKU appears on two lines — two cartons, two batches — the lines are merged, not rejected, and the report tells you it happened.
Reading the check report
- "N of M rows match your catalog" — anything unmatched is listed by SKU or barcode. Those units would go on the shelf unlabelled, so deal with them before you print: they are usually a new product Shopify has not seen yet, or a supplier SKU that is not your SKU.
- "Barcode X is on N variants … not printed. Key those rows by SKU." — a barcode in the file that matches more than one variant is skipped rather than guessed at. Either fix the duplicate in the Catalog audit, or use a SKU that uniquely identifies each variant.
Export your codes to a spreadsheet
Export codes (CSV) at the top of the screen downloads exactly what you are looking at — the same filters, and only the ticked rows if you ticked any. It covers products, SKUs and barcodes, for the things you cannot stick a label on but still have to scan. Free on every plan.
The columns match Markio's own importer, so an export can be edited and fed straight back in through Barcodes & SKUs → Import codes you already have.
The export takes the whole filtered result, not just the page you are looking at, up to 50,000 rows. It is CSV only — there is no XLSX.
Save a job and print it again
(Saved jobs are on the Pro plan. Reprinting from history is free.)
Type a name into Name this job in the right-hand panel and press Save this job. Saved jobs are listed underneath, and you reprint them from Print history without rebuilding the selection.
Have a sale's shelf tickets waiting on the morning
Each saved job takes a Sale date. Set one and press Schedule: at the start of that day in your shop's own time zone, Markio builds the job again — same products, same counts, same template — using the prices Shopify has by then, and the labels are waiting for you in Print history before you open.
Two things worth knowing:
- Change the prices in Shopify first. Markio does not move prices and does not guess at them; it prints what Shopify says on the morning it builds. If your new prices go live at midnight, the tickets are right. If you change them at ten, the tickets say what they said at midnight.
- The old price comes along for free. Markio remembers what a variant cost before its most recent change, and the Price before the last change field puts it on the ticket beside the new one — no need to fill Shopify's compare-at price just to show a "was".
Clear the date and press Clear to cancel a schedule. A schedule fires once; a sale starts on a day, not on a repeat.
What happens in the print tab
Printing opens a separate Markio tab. Allow pop-ups for the Shopify admin. For direct Zebra printing, this tab connects to Browser Print on your computer and may ask for local network access.
The tab shows the job, label dimensions, preview, print method and controls:
- 100% zoom shows the layout without enlarging it. Screen size depends on your display and browser; use a printed test label to check dimensions.
- Sheet plan shows the positions used on sheet stock.
- Print opens the print dialog or sends the job through Browser Print.
- Download PDF saves the selected part.
- Calibration sheet helps you measure alignment.
- Something printed wrong? provides a diagnostic report for support.
The PDF print dialog normally opens automatically. If it does not, press Print. If direct Zebra printing fails, Markio switches to PDF and explains why. Check the printer before retrying in case it received the first request.
Jobs above 500 labels are split into parts. Select and print each part. Print links expire after 12 hours. Reprint from Print history to get a new link.
Troubleshooting
The print tab never opened
Your browser blocked the pop-up. The Print button opens a new tab, and most browsers block that unless the site is allowed. Allow pop-ups for admin.shopify.com and press Print again. There is no way around this — the tab is not optional, see above.
The labels print at the wrong size, or a barcode is cut off
Set Scale to 100% or Actual size in the print dialog and choose the paper size that matches your labels. Avoid Fit to page.
Print one test label and measure it with a ruler. The on-screen preview shows the layout but cannot confirm physical size. If the size is correct but the print is shifted, follow printer calibration.
Everything printed blank, or only some rows printed
Check the copy counts. The default is zero, so any row you ticked but never gave a count to prints nothing. If the whole job was zeros, Markio refuses it with "Every row is set to zero copies, so there is nothing to print yet" rather than sending an empty sheet.
"That is more than 5,000 rows in one job"
The Print screen accepts at most 5,000 selected rows in one go. Narrow the filter, print, then do the rest. This is separate from the 20,000-label ceiling — one is rows, the other is labels.
"This job is N labels. We print at most 20,000 in one job"
Split the run into jobs of up to 20,000 labels. This per-job limit applies to both plans; you can print the next job immediately.
"You've printed N labels this month on the Free plan"
This is a warning, not a block. The job still prints; very large runs on the Free plan go to the back of the render queue and may take longer.
The product list is empty
If it is empty with no filters set and your shop is not new, the catalog index did not complete. Open Settings → Support, copy the diagnostic report and send it to us.
If it is empty with filters set, the message says "Nothing matches" — clear a filter, or search for the product by name, SKU or barcode.
"Only without a barcode" seems to ignore what I clicked from the home screen
The home screen's Print labels for these button under the "N variants have no barcode" banner does not currently carry the filter across — you land on the Print screen with everything showing. Tick Only without a barcode on the Print screen itself and you will get the same list.
A scan finds nothing, but the code is printed on the product
Three things to check, in order:
- Is the code actually in Shopify's barcode field for that variant, or only printed on the box by your supplier? If it is the supplier's number, add it as an extra code — one of the things Pro is for.
- Does the stored code have invisible damage — a lost leading zero, a non-breaking space, a Cyrillic letter that looks Latin? Run the Catalog audit; it names each of these individually.
- Is your scanner sending extra characters? Markio strips the usual prefix and suffix framing, but a scanner configured to add a made-up prefix will produce a code nothing matches. Compare what lands in the scan box against what is stored on the variant.
A scan says two products share this code
The code matches more than one variant and may identify the wrong item at checkout. Open Catalog audit, filter to Same barcode on different variants, and resolve the group. Free includes the report; Pro adds bulk fixes with preview and undo.
The template picker says "No templates yet"
Create one first — the panel offers a Create a template first button that takes you to Templates.
"That template has no label size attached"
Open the template and press Change label size. Markio will not print a job whose paper size is unknown.
Related
- Templates — what goes on the label
- Printers — channels, calibration, test prints
- Print history — reprint, print more of one line
- Barcodes & SKUs — where the codes come from
- Catalog audit — why a code does not scan