← back to blog
    Tom StrömSeptember 3, 20268 min read

    How to Track Which Marketing Channel Books Your Sales Calls

    How to Track Which Marketing Channel Books Your Sales Calls

    You're spending money on LinkedIn campaigns, Google Search ads, email sequences, and maybe some retargeting. Your calendar shows 15 sales calls booked this month. Your CFO asks: "Great — which campaigns booked those calls?"

    If you can't answer that with specific data, you're making budget decisions based on gut feel. This guide gives you the exact setup to answer that question with data.


    TL;DR

    • Every ad, email, and social link needs UTM parameters — no exceptions
    • UTMs must survive through your booking tool into your CRM contact record
    • Calendly, Chili Piper, and HubSpot Meetings all support UTM capture with explicit setup
    • The final test: book a call with known UTMs and trace them to the CRM deal record
    • Cogny automates the weekly report so you're not manually joining tables in spreadsheets

    The Data Flow You're Building

    Before touching any tool, understand what you're trying to accomplish:

    LinkedIn Ad (utm_campaign=q3-cto-retargeting)
      → Landing Page (UTMs in URL)
        → Booking Form / Calendly (UTMs captured as hidden fields)
          → CRM Contact (UTM fields populated on contact record)
            → CRM Deal (UTM source copied to deal on conversion)
              → Attribution Report (pipeline grouped by utm_campaign)
    

    Every link in that chain must hold. If UTMs disappear at any step, you lose attribution for every lead that came through that path.

    Step 1: Set Up UTM Parameters on Every Campaign

    A UTM parameter is a tag you append to any URL that links to your site. Google Analytics and your CRM tracking scripts read these tags and store them on the visitor's record.

    The five standard UTM parameters:

    ParameterPurposeExample values
    utm_sourceThe platform or publisherlinkedin, google, klaviyo, newsletter
    utm_mediumThe channel typepaid-social, cpc, email, organic-social
    utm_campaignThe specific campaignq3-2026-cto-awareness, demo-retargeting-v2
    utm_contentAd creative or link variantvideo-ad-b, cta-button-top
    utm_termKeyword (Google Ads)b2b-marketing-attribution

    Example UTM-tagged URL for a LinkedIn ad:

    https://cogny.com/ai-agency?utm_source=linkedin&utm_medium=paid-social&utm_campaign=q3-2026-cmo-retargeting&utm_content=video-attribution-problem
    

    Naming convention rules that prevent reporting headaches:

    1. Use lowercase always (linkedin not LinkedIn)
    2. Use hyphens, not spaces or underscores (paid-social not paid social or paid_social)
    3. Include the quarter and year in campaign names (q3-2026-cto-awareness not just cto-awareness)
    4. Be specific enough that you'll know what the campaign was in six months

    Where to add UTMs:

    • All LinkedIn Sponsored Content and Message Ads
    • All Google Search and Display Ads
    • All email CTAs (every link in every email campaign)
    • LinkedIn organic posts that link to your site (so you can separate organic vs paid traffic)
    • Any partner or affiliate links that send traffic to your booking page

    Step 2: Verify UTMs Survive Through Redirects

    The most common UTM leak point is redirect chains. Many marketing tools add their own redirect layer between the ad click and your landing page.

    Test procedure:

    1. Copy the destination URL from your LinkedIn ad (the URL you entered in the ad setup)
    2. Paste it into a browser and click through
    3. Look at the final URL in your browser's address bar
    4. Confirm your UTM parameters are present in the final URL

    If they're missing, either:

    • Your ad destination URL is a redirect that strips query parameters
    • Your ad platform (LinkedIn, Google) is using a tracking redirect that doesn't forward UTMs

    Fix: Link directly to your landing page with UTMs in the URL, avoiding intermediate redirects where possible.

    Step 3: Configure UTM Capture in Your Booking Tool

    Most booking tools don't capture UTM parameters by default. Here's how to configure the most common ones:

    Calendly

    Calendly supports UTM capture via custom hidden fields.

    Setup steps:

    1. Open Calendly → Your event type → "Invitee Questions"
    2. Add a new question for each UTM parameter:
      • Question label: "utm_source" (this is the field name)
      • Answer type: "One line"
      • Enabled: Yes (but mark it hidden if Calendly allows, or just name it clearly)
    3. In your booking page URL, include the UTM parameters: calendly.com/yourname/demo?utm_source=linkedin&utm_campaign=q3-retargeting
    4. Calendly will pre-fill the hidden fields from the URL parameters

    HubSpot-Calendly integration:

    1. In Calendly: Settings → Integrations → HubSpot
    2. Enable the integration and map Calendly custom fields to HubSpot contact properties
    3. Map utm_source (Calendly) → Original Source Drill-Down 1 or a custom UTM property in HubSpot
    4. Map utm_campaign (Calendly) → your custom Campaign Source contact property

    HubSpot Meetings

    If you use HubSpot Meetings (native), UTM capture is simpler because HubSpot's tracking script on your site captures UTMs automatically for any known contact.

    For net-new contacts booking through HubSpot Meetings:

    1. Ensure the HubSpot tracking script is on the page hosting your meeting scheduler
    2. HubSpot will create the contact and populate Original Source, Original Source Drill-Down 1, and Original Source Drill-Down 2 from the UTMs in the URL

    Important limitation: HubSpot's automatic UTM capture only works if the visitor first lands on a page with the HubSpot tracking script, then navigates to the booking page. If they go directly to a Meetings URL without first touching your tracked site, UTMs won't be captured automatically.

    Chili Piper

    Chili Piper supports UTM pass-through via URL parameters. Configure routing forms to capture UTM fields as hidden form inputs, then map them to CRM fields in the Chili Piper → CRM integration settings.

    Step 4: Map UTM Data to CRM Deal Records

    Even if UTMs are captured on the contact record, they often don't automatically appear on the deal/opportunity record. Deals are where your attribution report will run.

    In HubSpot:

    Create a workflow:

    • Trigger: Deal is created
    • Action: Copy property value from Associated Contact's UTM Campaign Source to the Deal's Campaign Source property

    This ensures that when a contact converts to a deal, the campaign data travels with it.

    In Salesforce:

    The Campaign influence model does this natively if Campaigns are set up. Alternatively, create a Process Builder / Flow:

    • Trigger: Opportunity Created
    • Action: Look up the Primary Contact, copy UTM_Campaign__c field to Opportunity.Campaign_Source__c

    Step 5: Build the Attribution Report

    Once data is flowing, create the report that answers the original question.

    HubSpot Attribution Report:

    1. Go to Reports → Create Report → Attribution Report
    2. Choose "Contact Create" or "Deal Create" as the conversion event
    3. Select attribution model (Last-touch, First-touch, or Linear)
    4. Group by "Original Source Drill-Down 2" (captures UTM campaign) or your custom Campaign property
    5. Metrics: number of deals, deal value

    Salesforce Campaign Influence:

    1. Reports → New Report → Campaign with Influenced Opportunities
    2. Group by Campaign Name
    3. Columns: Total Influenced Revenue, Number of Opportunities, Won Opportunities

    Manual BigQuery / Looker approach:

    If your CRM data is in BigQuery (common if you export HubSpot or Salesforce data to BQ):

    SELECT
      c.utm_campaign as campaign,
      COUNT(DISTINCT d.id) as deals_created,
      SUM(d.amount) as pipeline_value,
      SUM(CASE WHEN d.is_closed_won THEN d.amount ELSE 0 END) as closed_won_value,
      SUM(d.amount) / NULLIF(COUNT(DISTINCT d.id), 0) as avg_deal_size
    FROM deals d
    JOIN contacts c ON d.primary_contact_id = c.id
    WHERE d.created_at >= DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY)
      AND c.utm_campaign IS NOT NULL
    GROUP BY c.utm_campaign
    ORDER BY closed_won_value DESC
    

    Step 6: The Verification Test

    Before trusting your attribution setup, run a full end-to-end test:

    1. Create a test booking URL with known, distinctive UTMs: https://your-booking-page?utm_source=test&utm_medium=test&utm_campaign=attribution-verification-test&utm_content=manual-test-sept-2026
    2. Open that URL in an incognito browser (to simulate a new visitor)
    3. Complete the booking form
    4. Wait 5 minutes for the CRM to sync
    5. Find the new contact/lead in your CRM
    6. Verify: does the contact have utm_campaign = attribution-verification-test?
    7. If a deal was created, verify: does the deal also have the campaign value?

    If step 6 or 7 fails, the chain is broken at some point. Debug by checking: did the booking tool capture the UTM? Did it send it to the CRM? Did the workflow copy it to the deal?

    Automating This With Cogny

    Running this analysis manually — pulling the pipeline report, comparing it to ad spend, calculating cost per booked call by campaign — takes 2-3 hours if you're doing it yourself, or requires a BI analyst.

    Cogny's Growth Ticket system automates it. Once you connect your HubSpot or Salesforce CRM and your LinkedIn/Google Ads accounts, Cogny runs weekly:

    1. Pulls all new deals created in the last 7 days and their UTM campaign source
    2. Cross-references against ad platform spend data for each campaign
    3. Calculates cost per booked call, cost per opportunity, and pipeline generated per campaign
    4. Surfaces anomalies — campaigns that changed significantly week-over-week

    The output is a Growth Ticket that tells you exactly which campaigns are performing and which have degraded, with recommended budget allocation changes. No analyst, no manual joins, no forgetting to run the report this week.


    Part of the B2B Attribution Series

    This is one article in a series on B2B marketing attribution:


    Want to see this setup for your own stack? Book a call with Tom — we typically get B2B teams fully tracked in under two weeks.