Track campaigns with UTMs
Sky attributes revenue, leads, and bookings back to the campaign that drove them. You add one query param to your links — Sky does the rest.
The short version
When you create a campaign in Sky, it gets a unique tracking_slug — a short URL-safe id like q2-webinar-7c3b9a. You paste that slug into a query param on every outbound link tied to that campaign:
https://your-checkout-link.com/...?sky_campaign=q2-webinar-7c3b9a
From there, every payment, every booking, every form submission that lands through one of those links gets stamped with the slug. Sky reads the stamp off webhooks from Whop / Fanbasis / Cal.com / iClosed and rolls the totals up on the campaign detail page.
What gets attributed automatically
Once you tag your links, the campaign detail page populates with real data from these sources:
- Revenue, refunds, chargebacks — from Whop and Fanbasis payment webhooks. Both forward query-param metadata on checkout, exposed via
metadata.sky_campaign. - Booked calls, shows, no-shows, closed appointments — from the Cal.com / iClosed webhook (if connected) and from EOC reports closers submit.
- Avg deal size, AOV, largest deal, cash collection rate — derived from the attributed transactions.
- ROI / ROAS — computed against the campaign's manually entered
spenttotal (or per-day expense rows if you tag those too).
Metrics whose data source isn't connected (visitors / impressions / open rate / click rate) show — with a hint until that integration ships.
Where to paste your slug
Three places matter, in this order.
1. Payment links (Whop / Fanbasis / Stripe)
When you generate a checkout link in your payment platform, append ?sky_campaign=<slug>:
# Whop https://whop.com/checkout/plan_xxx?sky_campaign=q2-webinar-7c3b9a # Fanbasis https://fanbasis.com/i/your-offer?sky_campaign=q2-webinar-7c3b9a # Stripe https://buy.stripe.com/xxx?sky_campaign=q2-webinar-7c3b9a
2. Opt-in / lead-capture pages
Add ?sky_campaign=<slug> to the URL you advertise. Most form builders (Typeform, ConvertKit, Beehiiv, plain HTML forms) automatically pass query params through to the form submission webhook.
https://your-funnel.com/optin?sky_campaign=q2-webinar-7c3b9a
3. Calendar booking links
Cal.com and Calendly both forward query params into their booking webhooks. Append the slug to the link you give your leads:
https://cal.com/your-team/strategy-call?sky_campaign=q2-webinar-7c3b9a
Sky's calendar webhook reads the param and tags the resulting calls row, so the campaign's booked-calls / show-rate / close-rate metrics reflect that traffic.
Common pitfalls
- Existing UTM params still work. Sky reads
sky_campaignspecifically — yourutm_source/utm_medium/utm_campaignGoogle Analytics tags are untouched. You can keep both. - Don't use the campaign name as the slug. Names change; slugs shouldn't. Sky generates a stable
tracking_slugper campaign — paste that, not the human title. - Spaces and special characters break things. The auto-generated slug is already URL-safe — leave it as is.
- Test with a $1 charge. Easiest way to confirm the wiring: route a $1 test payment through your tagged checkout link, then refresh the campaign detail page. The transaction shows up under the campaign within a minute.
What's next
Auto-detection on landing-page hits (no link tagging required) is on the roadmap — for now, manual tagging is the cleanest signal. If you have a multi-step funnel, tag the entry URL and rely on the platform to forward params through subsequent steps.