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. 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. 2

    Connect the account

    When prompted, paste your oqr_… key. Zapier sends it as Authorization: Bearer oqr_… on every request.

  3. 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.

StepTypeCallsUse it for
New Dynamic QR CodeTriggerGET /v1/dynamic (polling)Start a Zap when a new dynamic code is created on your account
Create QR CodeActionPOST /v1/qrA static code (PNG/SVG file) for a permanent, known link
Create Dynamic QR CodeActionPOST /v1/dynamicA re-pointable oqr.to code + a printable PNG
Update Dynamic QR CodeActionPATCH /v1/dynamic/{id}Re-point or edit a code — destination, label, slug, tags, folder, theme
Delete Dynamic QR CodeActionDELETE /v1/dynamic/{id}Permanently retire a code (its short link stops redirecting)
Create FolderActionPOST /v1/foldersMake a folder, then file codes into it via Update
Find Dynamic QR CodeSearchGET /v1/dynamicLook up a code by label or slug to get its id for a later step
Get Scan AnalyticsSearchGET /v1/dynamic/{id}/scansRead 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.

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.

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. 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. 2

    OpenQR → Create Dynamic QR Code

    Set Destination URL from the trigger field and a Label like the submitter's name or the asset id. The step outputs short_url, id and the qr_png file.

  3. 3

    Send and store

    Add a Gmail/Outlook step that attaches qr_png. In parallel, write id and short_url back to a Sheets/Airtable record — that id is 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. 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. 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 contains or Slug contains to resolve its id. If you stored the id at creation, skip this and map it straight through.

  3. 3

    OpenQR → Update Dynamic QR Code

    Set Code ID from the previous step and New destination URL to 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. 1

    Trigger — Schedule by Zapier

    Run weekly (e.g. Monday 9am). Or trigger off any event where you want a fresh read.

  2. 2

    OpenQR → Get Scan Analytics

    Set Code ID (stored at creation, or via a Find step) and a Window (days) of 7. The step returns total_scans, last_7_days, top_country, top_device and the daily/breakdown arrays.

  3. 3

    Report or branch

    Send a Slack/Gmail step templating last_7_days, top_country and top_device. Or add a Filter — e.g. only continue when last_7_days is 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.

Get a free API keySign in with a magic link, mint a key, connect it in Zapier, and start creating, re-pointing and tracking QR codes in your Zaps. The API is free; the free tier includes 10 dynamic codes (unlimited on Pro, £4/mo).
Add the OpenQR app as an action in your Zap and choose Create QR Code (static) or Create Dynamic QR Code (editable). Connect a free oqr_ API key from openqr.uk/api, map the text or destination URL, and the step returns the QR image as a Zapier file for later steps to attach or upload. The app also covers updating, finding, deleting and tracking codes.

Related reading