QRtistry

QRtistry integrates with Zapier, Make, and n8n via scan webhooks and supports custom domains.

Agency features

Integrations

Pipe scan events into your stack, brand your short links, and automate with the REST API.

Scan webhooks

Every scan fires a scan.created event to your registered URLs. Works with any tool that accepts HTTP POST.

POST https://hooks.zapier.com/hooks/catch/…
X-QRtistry-Event: scan.created
X-QRtistry-Signature: <hmac-sha256>
Content-Type: application/json

{ "event": "scan.created", "scanCount": 42, "code": { … }, "scan": { … } }
Full webhook payload reference →

Chrome extension

Generate styled QR codes from any tab, right-click links for instant export, and check scan counts from the toolbar — static codes stay free with no account.

QRtistry Companion for Chrome →

Zapier

No-code automation
  1. In the QRtistry dashboard, add a Scan webhook pointing to Zapier's Catch Hook URL.
  2. In Zapier, create a Zap with Webhooks by Zapier → Catch Hook as the trigger.
  3. Add actions: Google Sheets row, Slack message, CRM update, etc.
  4. Verify the HMAC signature in a Code step (optional but recommended).
// Zapier Code step — verify signature
const crypto = require('crypto');
const secret = 'whsec_YOUR_SECRET';
const signature = crypto
  .createHmac('sha256', secret)
  .update(JSON.stringify(inputData))
  .digest('hex');
// Compare to bundle.headers['X-QRtistry-Signature']

Make (Integromat)

Visual scenario builder
  1. Create a Custom webhook module as your scenario trigger.
  2. Copy the webhook URL into QRtistry → Dashboard → Scan webhooks.
  3. Parse the JSON body: event, code.title, scan.device, scanCount.
  4. Branch on scan.device === 'mobile' for mobile-specific flows.
Mapped fields from scan.created payload:
• code.title → {{1.code.title}}
• scan.device → {{1.scan.device}}
• scanCount → {{1.scanCount}}
• shortUrl → {{1.code.shortUrl}}

n8n

Self-hosted workflows
  1. Add a Webhook node (POST) and copy the Production URL.
  2. Register that URL in QRtistry scan webhooks.
  3. Use a Function node to verify X-QRtistry-Signature.
  4. Route to Postgres, Discord, email, or any of 400+ nodes.
// n8n Function node
const crypto = require('crypto');
const secret = $env.QRCODER_WEBHOOK_SECRET;
const body = JSON.stringify($json);
const expected = crypto.createHmac('sha256', secret).update(body).digest('hex');
if ($headers['x-QRtistry-signature'] !== expected) {
  throw new Error('Invalid signature');
}
return $json;

Custom domains

Replace default short URLs with your own branded subdomain. After verification, all codes show https://go.yourbrand.com/r/… instead of https://qrtistry.com/r/….

DNS setup

Option A — TXT verify (then CNAME for traffic):

_QRtistry-verify.go.yourbrand.com  TXT  QRtistry-verify-…
go.yourbrand.com                   CNAME app.qrtistry.com

Option B — CNAME only (verify via CNAME match):

go.yourbrand.com  CNAME  app.qrtistry.com

How it works

Once your subdomain is verified, QRtistry issues TLS automatically and serves all your /r/* short links from your branded domain — no extra setup on your side.

Configure in dashboard →

UTM passthrough

Append tracking params from the scan URL to the destination automatically. Great for attributing print campaigns:

QR encodes: https://qrtistry.com/r/abc123?utm_source=poster&utm_campaign=summer
Redirects to: https://menu.example.com?utm_source=poster&utm_campaign=summer

Toggle per code in Dashboard → Analytics → UTM passthrough.