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- In the QRtistry dashboard, add a Scan webhook pointing to Zapier's Catch Hook URL.
- In Zapier, create a Zap with Webhooks by Zapier → Catch Hook as the trigger.
- Add actions: Google Sheets row, Slack message, CRM update, etc.
- 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- Create a Custom webhook module as your scenario trigger.
- Copy the webhook URL into QRtistry → Dashboard → Scan webhooks.
- Parse the JSON body: event, code.title, scan.device, scanCount.
- 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- Add a Webhook node (POST) and copy the Production URL.
- Register that URL in QRtistry scan webhooks.
- Use a Function node to verify X-QRtistry-Signature.
- 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.
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.