Conversion tracking
Record a conversion pixel or API event against a hashed visitor, attribute it last-click, and read conversions and CVR on Analytics.
Reviewed 24 Oct 2026Available from the Business plan
Did the click do the thing?
Clicks tell you traffic arrived. A conversion is a later event that you fire from your own site or server, such as a sign-up, a purchase, or a download. ShortZen attributes it to the last non-bot click for that visitor inside your attribution window.
Attribution needs Audience analytics
Pixel and API
Two doors. The pixel counts conversions from a page: add the snippet below to every page of your site, then call szConversion on the thank-you page. POST /api/v1/conversions, with a key that holds conversions:write, also takes the value and currency: revenue goes through the API only, because a pixel on a public page can be called by anyone.
<script>
(function (w, d) {
var k = 'sz_vid', q = new URLSearchParams(location.search), v = q.get(k);
if (v) {
d.cookie = k + '=' + encodeURIComponent(v) + '; Max-Age=2592000; Path=/; SameSite=Lax; Secure';
q.delete(k);
var rest = q.toString();
history.replaceState(null, '', location.pathname + (rest ? '?' + rest : '') + location.hash);
}
w.szConversion = function (goal, eventId) {
var m = d.cookie.match(/(?:^|; )sz_vid=([^;]*)/), i = new Image();
i.referrerPolicy = 'no-referrer';
i.src = 'https://YOUR_APP_HOST/t?lid=lnk_YOUR_LINK&goal=' + encodeURIComponent(goal)
+ (m ? '&v=' + m[1] : '')
+ (eventId ? '&eid=' + encodeURIComponent(eventId) : '');
};
})(window, document);
</script>
<!-- On the thank-you page -->
<script>szConversion('signup', 'ORDER_OR_SIGNUP_ID');</script>When conversion tracking is on the plan, the redirect adds an opaque sz_vid token to the destination address. The snippet keeps it in a first-party cookie on your own site for 30 days and takes it off the address bar, so a visitor who signs up pages or days later is still recognised. Pass your order or sign-up id as the second argument: a reload of the same page then records once. Without one, each page load counts.
Fire a conversion from the destination page
For: Whoever owns the landing page
Before you start
- A workspace on a plan with conversion tracking (from Business).
- Audience analytics on if you want last-click attribution.
- The destination URL of a ShortZen link.
Steps
Copy the snippet from Settings › Workspace › Tracking or from this article.
Replace YOUR_APP_HOST and lnk_YOUR_LINK with one of your links.
Add it to every page of your site, then call szConversion on the thank-you page.
A 1×1 request goes to /t when the thank-you page loads.
Click the short link, complete the goal, then open Analytics.
Conversions and CVR appear for the period. An empty period says there were no pixel or API events, not "No data".
What you should see
A conversion row attributed to the last click when a visitor hash was present, visible as Conversions and CVR on Analytics.
How to check it worked
- The thank-you page requests /t.
- Analytics shows the conversion straight away: conversions count on insert, not on the hourly rollup.
- Reloading the thank-you page with the same event id does not add a second conversion.
Edge cases
- The visitor has no sz_vid.
- The conversion is stored without an attributed click. It still counts toward Conversions.
- You fire from a server instead of a page.
- POST /api/v1/conversions with conversions:write. Pass visitorId as the sz_vid token the snippet kept in its cookie, and the order id as the idempotency key.
If something goes wrong
- CVR stays empty.
- Confirm the plan includes conversion tracking, the pixel URL is the app host (not the short domain), and the date range includes the event.
- Conversions are credited to the wrong link.
- Turn on Audience analytics, and make sure the snippet is on the page the link lands on as well as the thank-you page, so the visitor's token is kept.
Attribution window
Last non-bot click for that visitor hash, on any of this workspace's links, at or before the conversion, inside 1, 7, or 28 days. The window is set next to the Audience analytics toggle. Unattributed events are kept; they just have no click id.
Check and correct events
View events on the Conversions panel lists every conversion behind the figures, for the dates and filters on screen: when it happened, its goal and value, the link it was credited to, whether a click was found, and whether the pixel or the API sent it. Export CSV downloads the same rows, up to 10,000 at a time. Owners and admins can delete a test or mistaken event; every figure updates at once, webhook endpoints receive conversion.deleted, and the audit log keeps the event so it can be sent again.
Plans
Conversion tracking is available from Business. The pixel and the API both refuse to record on a plan that does not include it. The pixel image still loads so a missing plan does not break the page.
| Limit | Free | Starter | Pro | Business |
|---|---|---|---|---|
| Links / month | 30 | 500 | 2,000 | 10,000 |
| Tracked clicks / month (alert only) | 2,000 | 25,000 | 100,000 | 500,000 |
| Custom domains | 1 | 3 | 10 | 50 |
| Link-in-bio pages | 1 | 3 | 5 | 10 |
| Team seats | 1 | 1 | 3 | 10 |
| Webhook endpoints | None | 1 | 5 | 20 |
| UTM presets | 3 | 10 | 50 | 200 |
| Folders | 10 | 25 | 100 | 500 |
| Tags | 20 | 50 | 200 | 1,000 |
| Saved analytics views | 3 | 10 | 30 | 100 |
| Shared analytics reports | 1 | 3 | 10 | 20 |
| Bulk CSV rows / import | None | 100 | 500 | 2,000 |
| One-time import allowance | None | 2,000 | 10,000 | 50,000 |
| API calls / hour | 300 | 1,200 | 5,000 | 20,000 |
| Analytics history | 30 | 90 | 365 | 730 |
| Smart routing rules / link | None | None | 20 | 50 |
| Links per bio page | 10 | 100 | 100 | 100 |
| Webhook deliveries / month | None | 2,000 | 20,000 | 100,000 |