Home How it works
How it works
From a product in your admin to a card in someone's hand
Five steps, and you can stop reading after the third if all you want is a code on a card. The last two are about what happens once the item has left you, which is where a register earns its keep.
Step one
Install, and the register is created
Nothing is asked of your theme, and no page has to be built.
What the app makes in your store
A metaobject definition called provenance_item, created in your own Shopify admin the first time you open the app. That is the register. It belongs to your store, not to us, and it stays there whatever happens to this app or this company.
The two things it asks for
Your storefront address, and a short prefix for your identifiers. Both are permanent, because both are printed onto cards. The address is pre-filled from Shopify's primary domain and never saved without you confirming it: a store whose real domain is not live yet reports its .myshopify.com fallback, and that would reach the printer.
Step two
Mint identifiers against a product
Browse to a product, pick a variant, say how many you are making. A run can hold several products at once.
What an identifier looks like
Your prefix, then three groups of four characters: MC-3QGV-R1YR-DG7A. Drawn from an alphabet with no I, L, O or U in it, so nothing can be misread off a card by a person or a scanner.
What it does not encode
Nothing. Not the model, not the colourway, not a sequence number. A structured identifier hands anybody holding two cards your production volume and your per-model counts, which is information you did not mean to print.
Editions, if you have them
Give a line an edition size and each identifier is numbered as it is minted. Numbering continues from what that variant has already been minted rather than restarting per run, and a run that would take an edition past its size is refused outright.
Step three
Print the cards
Two routes out, depending on whether you have a designer.
The print sheet
A standalone HTML file, one card per identifier, with the code printed as text beneath each QR. Open it, print it, cut them out. Grouped by product when a run holds more than one, because cards stop being interchangeable the moment a run is mixed and a card in the wrong box makes a certificate that confidently describes the wrong object.
The print package
A zip of one vector QR file per item plus a merge-ready CSV, for an InDesign data merge against your own card design. The vectors stay crisp at any size, including the small ones a swing tag needs.
Marking a run printed is one-way
It freezes the run: no more edits to the identifiers in it, and no deleting them. That is deliberate. Once cards exist in the world, the register has to keep matching them, and an identifier that can be re-pointed at a different object is what makes a register worthless. Deleting an unprinted run and minting again is the supported way to change your mind.
It is also blocked if any item in the run failed to reach your register, because a card whose code is not in the register is a card that will not resolve.
Step four
Somebody scans it
The card lands on a page inside your own theme, with your header, your footer and your typography.
Where it lands
By default at /apps/provenance on your own storefront, a page the app serves through Shopify's app proxy. There is nothing to create and no block to place: it works from the moment you install. If you would rather cards landed on a page you have designed yourself, the app can create a real page in your store and point at that instead.
What comes back
The item's identity. Model, colourway, photograph, the date it was made, its edition number if it has one, and its status. Never a verdict, and never a green tick. If you want the argument for that, it is on the home page and in the FAQ.
A code that was never issued
Says so, plainly, in the same shape and at the same speed as one that resolves. Timing and response shape are identical on purpose: a fast "no" and a slow "yes" is an oracle somebody can use to work out which codes exist.
Why the code is after a # and not a ?
A URL fragment is never sent to a server. With a query string, every scan would deposit a valid identifier into web server logs, analytics, and the referrer header of every link clicked from that page. Codes printed on cards that travel with resold items are exactly the thing not to leak in bulk.
Step five
The record keeps changing after the item has gone
Which is the difference between a register and a batch of printed codes.
Status
In stock, sold, or lost or stolen. A lost-or-stolen report shows on the lookup and on the certificate, prominently. Clearing one requires a reason, so the reversal is on the record too.
History
Every item has its own page carrying its full event log: minted, mirrored into your register, printed, sold, reported, cleared. Each entry records who did it, whether that was a member of staff or a Shopify event.
Certificates
An A4 document per item, rendered from the register when it is asked for rather than stored, so it cannot describe an item as it was six months ago. Print it to PDF, or send the link.
Afterwards
What happens if you uninstall
Worth knowing before you start rather than after, because it is the part most apps are vague about.
- Your register stays. It is a metaobject definition in your own admin. Uninstalling the app does not delete it, and the records in it remain readable and exportable from Shopify.
- The lookup stops. Both the app-served page and the theme block do their lookup through the app proxy, so both stop answering. Cards already in the world will not resolve until you install again or build something else that reads the register.
- Our copy is deleted. Our database is the system of record while the app is installed; on uninstall, what we hold about your store is removed on the schedule in the Privacy Policy. Yours is the copy that survives, which is the whole point of the arrangement.
Further reading
The longer version of the problems this page solves, written for the problem instead of for the product, including the places where the answer is not this app.
How to give every item its own number on Shopify
Shopify counts variants, not objects. The four ways to number individual items anyway, starting with the one that costs nothing and needs no app at all.
ReadQR codes on packaging: what to put behind them
Most product QR codes land on a home page and get scanned once. Choosing a destination worth the scan, and the URL mistakes that leak data or break in a year.
ReadWant a register for what you make?
Tell us what you make and how many of it. We will tell you honestly whether this helps, including if the answer is that a spreadsheet and a good photograph would do.