Appearance
Analytics
The Analys tab in the web app shows how a delivered campaign performed. It is a product screen, not part of the /api/v1 contract — there is no public API for these numbers yet. This page explains what the tab shows, where each figure comes from, and what it deliberately withholds.
What feeds it
| Signal | Source | Counted as |
|---|---|---|
| QR scans | /api/r/{slug}/{token} redirects with trackingEnabled: true | One response per scanned letter (token); bots excluded |
| Phone calls | The campaign's rented number (the telephony add-on) | One response per unique caller (keyed hash, never the number) |
| Landing-page visits and leads | The tracking snippet on the customer's site | Per letter token when the visit came via the redirect, else per daily visitor hash |
Campaigns without tracking (or PDF campaigns, which cannot carry a tracked QR code) still appear in the list, with their letter count and nothing else.
The headline figures
- Utskick — letters in the campaign, snapshotted when it was published.
- Unika svar — distinct letters scanned (plus unique callers once telephony exists). The honest headline: response rate = unique responders ÷ letters.
- Skanningar — every non-bot scan, including repeats.
- Besök / Leads — what the customer's own landing page reported through the snippet: page visits (and unique visitors) and leads (form sent). Shown in the funnel as a share of letters; the figures stay "—" until the snippet has reported anything.
- Inringda samtal — calls to the campaign's number: total, unique callers, answered, average length. Shown only for campaigns with the add-on.
- Est. öppningsgrad — an estimate, always labelled as one. With no measured signal it is the 72 % baseline for addressed mail; as responses come in, the estimate blends towards
min(1, (responders ÷ 4 %) ÷ letters), with full weight at 30 responders. The assumptions (4 % response among openers, 72 % baseline, current blend weight) are shown next to the figure. - Kostnad per svar — the campaign's paid price (or the current quote when unpaid, flagged estimat) divided by unique responders.
What is withheld, and why
Insight blocks — device split, geography by post town, response-time curve, hour-of-day and weekday patterns, repeat scans — stay locked until at least 10 different letters have been scanned. Below that, the tab says how many have scanned so far and nothing more. Geography additionally folds any post town with fewer than 3 scanning letters into "Övriga". The point is that no combination of blocks lets anyone work out which recipient scanned.
The blocks stay gated whatever the campaign is. A mailing whose customer certified that it goes to companies gets a separate, named report in the web app; it does not unlock these aggregates, and it has no API-key surface.
A/B tests
A campaign can be sent as two letters — variant A and B, differing in content only — to a deterministic 50/50 split of the list (variantBContent on create, or the A/B toggle in the web editor). Analys then shows the variants side by side: letters, unique scanners and response rate, visits and leads (all attributed through the letter token). Calls are not split, since a campaign rents one number. A Leder badge is shown only when a two-proportion test on response rate is significant (p < 0.05) with at least 30 letters per variant and 20 responders in total; until then the card says "för få svar" or "ingen tydlig skillnad" rather than crowning a winner.
Insights
Below the figures the tab explains them: a list of rule-based conclusions ("Nacka svarar 2,5× oftare än snittet", "62 % skannar kl 18–21", "var tredje samtal obesvarat"), each firing only when the numbers justify it, and — when the deployment has a language model configured — a short narrative that rephrases those rules and the headline figures, labelled as an AI summary. The model never sees events, tokens, hashes or towns below the anonymity thresholds; a model outage or an exhausted AI budget degrades to rules only. Narratives are cached for six hours per campaign.
What is stored
Per scan: campaign, letter token, timestamp, device class (mobile/desktop/bot/unknown) and a visitor hash — the client address and user agent hashed with a secret and the current date, which deduplicates one phone scanning twice that day. The raw IP address and user agent are never stored. Per token: the recipient's post code and town (for geography), never the name or street. Scans are deleted after 18 months; tokens are kept so old letters keep resolving.
Who can see it
A customer sees analytics for their own campaigns. Operators see every account's. Anything else is a 404 that does not reveal whether the campaign exists.
Next
- QR codes — how the per-letter redirect works
- Track QR scans — attaching tracking to a campaign