Developers
Generating and managing QR codes in Zapier with OpenQR
By Sam Moreton · updated 29 June 2026
Zapier connects OpenQR to thousands of apps so you can run QR codes as steps in any automation — when a form is submitted, a row is added, an order ships, on a schedule. The OpenQR Zapier app is a full management surface: a New Dynamic QR Code trigger, five action steps (Create QR Code, Create Dynamic QR Code, Update Dynamic QR Code, Delete Dynamic QR Code, Create Folder) and two searches (Find Dynamic QR Code, Get Scan Analytics). That means you can create a re-pointable oqr.to code, re-point it on a schedule, look it up by label, and pull scan numbers into a report — all without leaving Zapier. This guide connects the account, tours every step, and walks two real Zaps end to end.
9 min read · Updated 29 June 2026
This is the no-code path through Zapier. If you want the underlying mechanics, every step calls the OpenQR REST API — see getting started with the API and dynamic codes and scan analytics. For where Zapier sits among the automation options, see QR codes in LLM apps and workflows.
Add OpenQR to Zapier
The OpenQR Zapier app is invite-only while it's new, so you add it via a public invite link rather than searching the directory. Add OpenQR to Zapier → Accept the invite, then it shows up as an app when you add a step in any Zap.
Connect your OpenQR account
Authentication is a single API key. Create a free one at openqr.uk/api — sign in with a magic link, then mint a key (it starts with oqr_).
- 1
Add a step
In a Zap, add a trigger or action step and search OpenQR, then pick the event you need — e.g. Create Dynamic QR Code or New Dynamic QR Code.
- 2
Connect the account
When prompted, paste your
oqr_…key. Zapier sends it asAuthorization: Bearer oqr_…on every request. - 3
Let it test
The connection test hits
GET /v1/dynamic?limit=1, so a successful connect confirms the key works.
The key controls the whole account
An OpenQR key can read and edit every dynamic code on your account, so treat it like a password — Zapier stores it in the encrypted connection, never put it in a Zap field. Keys are shown once and SHA-256-hashed at rest; rotate by minting a new one and reconnecting the account.
The full step list
The OpenQR app exposes one trigger, five action steps and two searches. Together they cover the whole dynamic-code lifecycle — create, find, re-point, track, organise and delete — natively in Zapier.
| Step | Type | Calls | Use it for |
|---|---|---|---|
| New Dynamic QR Code | Trigger | GET /v1/dynamic (polling) | Start a Zap when a new dynamic code is created on your account |
| Create QR Code | Action | POST /v1/qr | A static code (PNG/SVG file) for a permanent, known link |
| Create Dynamic QR Code | Action | POST /v1/dynamic | A re-pointable oqr.to code + a printable PNG |
| Update Dynamic QR Code | Action | PATCH /v1/dynamic/{id} | Re-point or edit a code — destination, label, slug, tags, folder, theme |
| Delete Dynamic QR Code | Action | DELETE /v1/dynamic/{id} | Permanently retire a code (its short link stops redirecting) |
| Create Folder | Action | POST /v1/folders | Make a folder, then file codes into it via Update |
| Find Dynamic QR Code | Search | GET /v1/dynamic | Look up a code by label or slug to get its id for a later step |
| Get Scan Analytics | Search | GET /v1/dynamic/{id}/scans | Read scan totals, last-7, top country/device + daily/breakdown series |
Create QR Code (static)
Encodes whatever you give it straight into the image. Fields: Text or URL (required, ≤2000 chars), Format (png default or svg), Size (64–2048, default 512), Quiet-zone margin (0–16), and Foreground/Background hex colours. The endpoint returns the raw image, so the action stashes it as a Zapier file you can attach to an email, upload to Drive, or print — plus the raw svg markup when you choose SVG.
Static codes can't be edited or tracked
A static code bakes the link into the pattern — there's no redirect in the middle, so it can never be re-pointed or counted. That's the right choice when the link is permanent. When you need editability or scan data, use the dynamic action instead. See static vs dynamic for the trade-off.
Create Dynamic QR Code (editable)
Creates an oqr.to short link that redirects through OpenQR. Fields: Destination URL (required, a public http(s) URL), an optional Label, and an optional Theme (a saved style's id or name). The action surfaces id, slug, short_url and destination, plus a printable PNG (qr_png) that already encodes the short_url — so the code you print stays re-pointable.
Custom slugs, tags and folders are an edit, not a create
The create-dynamic action doesn't set a custom slug, tags or a folder — the POST /v1/dynamic endpoint doesn't accept them at creation. Set them in a following Update Dynamic QR Code step (it takes slug, tags and folder), or in the dashboard. Lock in a memorable slug before you print, since changing it later breaks the old link.
Update Dynamic QR Code (re-point / edit)
The headline action: edit a live code without reprinting it. Pass the Code ID (from Create or Find) and any of New destination URL (the re-point — a public http(s) URL), Label, Slug, Tags (a list, up to 10), Folder ID, or Theme (a saved style's id or name). Leave a field blank to keep its current value; send an empty Label or Folder ID to clear it. It calls PATCH /v1/dynamic/{id} and returns the updated id, slug, short_url, destination and label. The printed code is untouched — only where it redirects changes.
Changing the slug breaks the printed code
Re-pointing (changing the destination) keeps the same short_url, so anything already printed keeps working — that's the whole point of a dynamic code. Changing the slug, by contrast, mints a new short_url and the old printed link 404s. Re-point freely; only change a slug before anything is printed.
Delete Dynamic QR Code
Permanently removes a code via DELETE /v1/dynamic/{id}. Pass the Code ID; its oqr.to short link stops redirecting immediately, so anything already printed will no longer work. The step returns the id and deleted: true so a later step can log it. This can't be undone — use it for cleaning up test or expired-campaign codes.
Create Folder
Creates a folder to organise dynamic codes via POST /v1/folders. Give it a Folder name and it returns the folder id and name. Feed that id into a later Update Dynamic QR Code step's Folder ID to file codes into it — handy for grouping a campaign's codes as a Zap mints them.
Find Dynamic QR Code (search)
Looks up an existing code so you can act on it without having stored the id yourself. Filter by Label contains and/or Slug contains (case-insensitive substrings), or leave both blank for the most recent codes; Max codes to scan (1–500, default 200) bounds the lookup. It returns each match's id, slug, short_url, destination, label, status and created_at — Zapier uses the first match by default. This is the bridge into Update, Delete or Get Scan Analytics when the only thing your trigger knows is a label or slug.
Get Scan Analytics (search)
Reads scan analytics for one code via GET /v1/dynamic/{id}/scans. Pass the Code ID and an optional Window (days) (1–365, default 30). It returns flat scalars most Zaps branch on — total_scans (lifetime), last_7_days, top_country, top_device, window_total — plus line-item arrays for the daily series (daily) and the country/device/referrer breakdowns. Branch on a number, or template the arrays into a Slack/email digest.
Worked Zap: form submission → dynamic code → email
A common pattern: someone submits a form to register an asset (a product, a property, an exhibit), and you want to email them a QR that links to its page — but you want to keep the option to re-point it later. Three steps:
- 1
Trigger
Any trigger that yields a destination — a Typeform/Google Forms submission, a new Airtable or Sheets row, a new Shopify order. Map a field to the page URL you want the code to point at.
- 2
OpenQR → Create Dynamic QR Code
Set
Destination URLfrom the trigger field and aLabellike the submitter's name or the asset id. The step outputsshort_url,idand theqr_pngfile. - 3
Send and store
Add a Gmail/Outlook step that attaches
qr_png. In parallel, writeidandshort_urlback to a Sheets/Airtable record — thatidis your handle for re-pointing or reading scans later.
Always persist the id
Store the returned id against your own record at creation time. It's the only handle for re-pointing the code or reading its analytics afterwards. Keep just the image and you can never edit or measure that code again.
Worked Zap: schedule → re-point a campaign code
Re-pointing is native now, so a classic campaign flip is a two-step Zap: on a date, swap where a printed code sends people — no reprint, no webhook plumbing. Say a poster code should point at the spring menu until 1 June, then the summer menu.
- 1
Trigger — Schedule by Zapier
Fire the Zap on the switch-over date (or read the date from a Sheets/Airtable campaign row). Anything that yields a target URL and a way to identify the code works.
- 2
OpenQR → Find Dynamic QR Code (if you don't have the id)
If you only know the code by name, add a Find step filtered on
Label containsorSlug containsto resolve itsid. If you stored theidat creation, skip this and map it straight through. - 3
OpenQR → Update Dynamic QR Code
Set
Code IDfrom the previous step andNew destination URLto the summer-menu page. The printed poster is unchanged; every scan from now on lands on the new page.
Worked Zap: scan analytics → Slack/email digest
Pull a code's numbers into a report on a cadence — a Monday-morning scan digest, or an alert when a code goes quiet.
- 1
Trigger — Schedule by Zapier
Run weekly (e.g. Monday 9am). Or trigger off any event where you want a fresh read.
- 2
OpenQR → Get Scan Analytics
Set
Code ID(stored at creation, or via a Find step) and aWindow (days)of 7. The step returnstotal_scans,last_7_days,top_country,top_deviceand the daily/breakdown arrays. - 3
Report or branch
Send a Slack/Gmail step templating
last_7_days,top_countryandtop_device. Or add a Filter — e.g. only continue whenlast_7_daysis below a threshold — to alert on a stalled campaign.
What's not in the Zapier app
The Zapier surface is deliberately the common-path 90%, not the whole REST API. A few things live elsewhere:
- Bulk minting — Zapier creates one code per step run. For hundreds at once, call
POST /v1/dynamic/bulk(up to 200 per request) directly; see the bulk generation guide. - Creating themes — Create and Update apply a saved theme by id or name, but you build the themes themselves in the dashboard, not from a Zap.
- Raw per-scan event export — Get Scan Analytics returns aggregates and breakdowns, not individual scan rows. For raw events, use the REST endpoint directly.
For any of those, drop to the REST API — see dynamic codes and scan analytics, with the OpenAPI spec at https://openqr.uk/openapi.json — or the n8n community node if you want a richer no-code surface.
Mind the creation rate limit
Dynamic-code creation is capped at 20 per hour per account; over that the API returns 429 and the Create Dynamic QR Code step errors. For high-volume flows — a Zap that fires on every order — either add a delay/throttle, or move bulk minting to POST /v1/dynamic/bulk (up to 200 per request) outside Zapier. The bulk generation guide covers that path.