Skip to content
yousnap.me
Practical guide · updated October 7, 2026

Know which printed placement got the scan.

Use a different shortlink for each placement, attach consistent campaign data, and receive that context through a webhook. Here is a small campaign setup you can test before printing.

1. Decide what you want to compare

Start with a question such as: does the counter card or the event poster bring more visits to the offer page? Keep the destination and offer consistent when you want to compare placement. If everything changes at once, the scan counts become harder to interpret.

Create a simple naming scheme. For example, use campaign=autumn-demo and placements counter-card, event-poster, and package-insert. Use labels that a colleague can understand a month later.

2. Create a separate link per placement

Sign up at yousnap.me and copy your API key from the dashboard. From your backend, call POST https://usnp.me/shorten with the destination, placement data, and your receiver URL. Repeat for each placement, changing the placement field.

{
  "redirect_url": "https://example.com/autumn-offer",
  "data": {
    "campaign": "autumn-demo",
    "placement": "counter-card",
    "creative": "version-a"
  },
  "webhooks": ["https://your-app.example/hooks/scan"]
}

This is the JSON request body, not a complete request. The QR webhook setup page includes the authenticated cURL command. Replace the example URLs with your real destination and receiver.

3. Generate and label the QR images

Use GET /SHORT_ID/qr?format=svg for each returned short identifier. Keep the image filename associated with its placement, such as counter-card.svg. Test the actual printed size, contrast, and quiet space around the image on the devices your audience uses.

Before printing a batch, scan every version and confirm the correct destination and placement fields. A beautifully printed code pointing to the wrong campaign is still the wrong code.

4. Receive and verify the webhook

Your receiver gets an event containing the link, a hit identifier, a timestamp, and the custom data. Verify X-Webhook-Signature against the raw body and your webhook secret, then record the campaign and placement fields. Handle repeated delivery by deduplicating the hit identifier.

A lightweight first report can group events by campaign, placement, and day. Use the delivery-status endpoint to troubleshoot missing notifications, and monitor your monthly webhook allowance. The API reference documents the payload and signature format.

5. Interpret scans honestly

A scan or click indicates that a link was opened. Repeated visits, shared links, and automated checks can affect counts. It does not prove a unique person, attendance, purchase, or consent to follow-up marketing.

If you need purchase attribution, preserve campaign context through your own landing-page flow and join it to a real purchase event in your application. For a simple placement experiment, report visits as visits and keep the distinction clear.

Do I need UTM parameters too?

They solve a related problem. UTM parameters on the destination help an analytics tool classify the resulting page visit. The custom JSON webhook gives your application the campaign context directly. You can use both, but avoid putting secrets or unnecessary personal data into either.

Start with three placements

Three links fit within the Free plan’s five tracked-link allowance. Confirm a complete scan-to-webhook loop before adding more placements. Compare scan response after a useful observation period, then test the next creative or location.

Review plan limits, use the shortlink API, or compare Bitly and yousnap.me for your workflow.

Try one link. See the data arrive.

Free includes 100 links and 1,000 webhook deliveries per month. No card required.

Start building