SkyDocs
⌘K
Open app
DocsCampaigns

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.

Don't want to glue links by hand? Use the UTM builder — pick a campaign, paste your destination URL, copy the tagged link.

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 spent total (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_campaign specifically — your utm_source / utm_medium / utm_campaign Google 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_slug per 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.