Podcast Sponsor Placement Tracking
Build tracked landing pages, vanity URLs, promo codes, and PostHog events for podcast sponsorship attribution
Instructions
Podcast Sponsor Placement Tracking
Set up end-to-end attribution for paid podcast sponsorship placements. Podcast ads are audio — listeners cannot click a link mid-episode. This requires a multi-signal approach: vanity URLs for verbal CTAs, promo codes for checkout attribution, UTM parameters for show-notes clicks, and PostHog events for full-funnel tracking.
Prerequisites
- PostHog project with tracking snippet on your landing page
- Landing page URL for the campaign
- Podcast name and episode air date
- Vanity URL domain (e.g., via Dub.co or Rebrandly) or a path on your site
- Stripe or payment system for promo code setup (if applicable)
Steps
1. Build the UTM-tagged landing page URL
Every podcast sponsorship gets a unique tracked URL for show notes:
{base_url}?utm_source={podcast_slug}&utm_medium=paid-podcast&utm_campaign=podcast-sponsorships-b2b&utm_content={podcast_slug}-{YYYY-MM-DD}-v{variant}
Parameter definitions:
utm_source: Slugified podcast name (e.g.,the-saas-podcast,startup-hustle)utm_medium: Alwayspaid-podcastto distinguish from guest appearances (guest) and organicutm_campaign: Alwayspodcast-sponsorships-b2bfor this playutm_content: Unique placement ID:{podcast_slug}-{episode_date}-v{variant_number}
Example:
https://yourproduct.com/demo?utm_source=startup-hustle&utm_medium=paid-podcast&utm_campaign=podcast-sponsorships-b2b&utm_content=startup-hustle-2026-04-15-v1
2. Create the vanity URL for verbal CTA
Podcast listeners hear URLs spoken aloud. Complex UTM URLs are unusable verbally. Create a short, memorable redirect:
Per-podcast vanity path (preferred):
https://yoursite.com/{podcast-slug} → redirects to the UTM-tagged URL
Using Dub.co:
POST https://api.dub.co/links
Header: Authorization: Bearer {DUB_API_KEY}
Content-Type: application/json
{
"url": "https://yourproduct.com/demo?utm_source=startup-hustle&utm_medium=paid-podcast&utm_campaign=podcast-sponsorships-b2b&utm_content=startup-hustle-2026-04-15-v1",
"key": "startup-hustle",
"domain": "your-short-domain.co"
}
Using Rebrandly:
POST https://api.rebrandly.com/v1/links
Header: apikey: {REBRANDLY_API_KEY}
Content-Type: application/json
{
"destination": "https://yourproduct.com/demo?utm_source=startup-hustle&utm_medium=paid-podcast&utm_campaign=podcast-sponsorships-b2b",
"slashtag": "startup-hustle",
"domain": { "fullName": "your-brand.link" }
}
Requirements:
- Maximum 3 syllables after the domain (speakable)
- Easy to spell when heard (no hyphens, numbers, or ambiguous letters)
- Tested: load the URL and verify the redirect preserves UTM parameters
3. Set up the promo code
Create a promo code matching the podcast name for checkout attribution:
In Stripe:
POST https://api.stripe.com/v1/coupons
Authorization: Bearer {STRIPE_SECRET_KEY}
Content-Type: application/x-www-form-urlencoded
id={PODCASTNAME}&percent_off=10&duration=once&max_redemptions=500&redeem_by={unix_timestamp_30_days_from_air_date}
If you do not sell via Stripe, create the equivalent promo code in your billing system. The code should:
- Match the podcast name in all caps (e.g.,
STARTUPHUSTLE) - Offer a clear incentive (10-20% discount, extended trial, free month)
- Expire 30 days after the episode air date
- Have a redemption cap to control cost
Log the promo code in Attio on the placement deal record.
4. Configure PostHog events
PostHog automatically captures UTM parameters on $pageview events. Verify by loading the tracked URL and checking PostHog live events.
Create custom events for the podcast sponsorship funnel:
// Fire on landing page load when utm_medium = paid-podcast
const params = new URLSearchParams(window.location.search);
if (params.get('utm_medium') === 'paid-podcast') {
posthog.capture('podcast_sponsor_click', {
podcast_name: params.get('utm_source'),
placement_id: params.get('utm_content'),
campaign: params.get('utm_campaign')
});
}
// Fire when visitor completes CTA (signup, demo request, form submit)
posthog.capture('podcast_sponsor_lead', {
podcast_name: params.get('utm_source'),
placement_id: params.get('utm_content'),
lead_type: 'demo_request' // or 'signup', 'trial', 'download'
});
// Fire when promo code is redeemed (server-side or via Stripe webhook)
posthog.capture('podcast_sponsor_promo_redeem', {
promo_code: '{PODCASTNAME}',
podcast_name: '{podcast_slug}',
placement_id: '{placement_id}'
});
5. Build a PostHog funnel for this placement
Create a saved insight:
- Step 1:
$pageviewwhereutm_campaign=podcast-sponsorships-b2bANDutm_source={podcast_slug} - Step 2:
podcast_sponsor_leadwherepodcast_name={podcast_slug} - Conversion window: 14 days (podcast listeners often convert days after hearing the ad)
Save as: "Podcast Sponsor — {Podcast Name} — {Date} — Funnel"
6. Set up direct traffic spike detection
Many podcast listeners type URLs directly or Google your brand after hearing the ad. To capture this:
- Create a PostHog insight:
$pageviewon your homepage or pricing page, daily trend - Set a baseline for the 14 days before the episode airs
- After the episode airs, compare the 48-hour traffic spike vs. baseline
- If direct/organic traffic increases by >20% in the 48 hours after air date, attribute the uplift to the podcast placement
This is an estimate, not exact attribution, but captures the "dark social" effect of audio advertising.
7. Calculate placement ROI after 14 days
Pull from PostHog and promo code data:
- Show-notes clicks:
$pageviewwhereutm_content={placement_id} - Vanity URL clicks: Dub.co or Rebrandly click count for the vanity link
- Leads from UTM:
podcast_sponsor_leadevents wherepodcast_name={podcast_slug} - Promo code redemptions: Stripe coupon redemption count for
{PODCASTNAME} - Direct traffic uplift: Estimated additional visits in 48-hour window post-air
- Total attributed leads: UTM leads + promo redemptions
- CPC:
placement_cost / (show_notes_clicks + vanity_clicks) - CPL:
placement_cost / total_attributed_leads
Store these metrics in Attio on the podcast placement deal record.
Error Handling
- Vanity URL not resolving: Test 24 hours before the script deadline. Check DNS propagation and redirect configuration.
- Promo code not working: Test a redemption before submitting the script to the host. Verify the code is active in your billing system.
- Zero clicks within 72 hours of air date: Ask the host to confirm the episode was published and that the show notes include the link. Some hosts forget to add links to show notes.
- UTM parameters stripped by redirects: Test the full chain: vanity URL → redirect → landing page. Verify PostHog captures UTMs on the final page.
- Longer attribution window for podcasts: Unlike newsletter clicks (immediate), podcast listeners may convert 1-14 days later. Use a 14-day attribution window, not 7.
Alternative Tools
- PostHog: Primary analytics (free up to 1M events/mo)
- Podscribe: Dedicated podcast attribution platform ($250/mo + $1.50 CPM). Pixel-based household-level tracking.
- Chartable (Spotify): Prefix URL analytics for download tracking
- Google Analytics 4: Alternative UTM tracking
- Mixpanel / Amplitude: Alternative event analytics
- Dub.co: Vanity URL management (free tier: 1,000 links/mo)
- Rebrandly: Branded short links ($13/mo starter)
- Bitly: Simple click tracking backup