HubSpot Marketing Software study materials
HubSpot Marketing Software study resources

Northwind Analytics: One Launch, Four Campaigns

HubSpot Marketing Software · Put your knowledge to work in context.

All case studies

Northwind Analytics: One Launch, Four Campaigns

Northwind Analytics launches a new product tier, Atlas, on 14 September. The launch includes 6 blog posts, 3 nurture emails, a landing page with a demo form, a co-hosted webinar, 2 paid LinkedIn ad sets, and a press release. Four people each built their own campaign object - 'Atlas Blog', 'Atlas Email', 'Atlas Webinar', 'Atlas Paid' - and UTMs were typed by hand: some use utm_source=linkedin, others utm_source=LinkedIn or li; the blog posts carry no UTMs at all; two emails went out under the existing 'Newsletter' campaign by mistake. Three weeks after launch the CMO asks for one number: how much pipeline did Atlas generate? The team reports $240,000 from 'Atlas Email', $95,000 from 'Atlas Paid', and admits the webinar's 610 registrants cannot be traced to any campaign asset. There is no naming convention, and 2 of the 6 blog posts have no campaign association.

1. Should the Atlas launch be one campaign object or four? Argue the choice and describe how the team would still report by channel.

Read the worked answer

One campaign. A campaign is the container for an initiative, not for a channel. Splitting by channel fragments the influenced-contact set across four objects, so the same deal can appear under 'Atlas Email' and 'Atlas Paid', the CMO's single number becomes an addition of overlapping subsets, and every future question ('did the webinar help the emails?') requires cross-object stitching that the tool will not do for you.

How to keep channel reporting. Attach every asset to the one campaign - blog posts, landing pages, emails, the webinar registration form and landing page, the ad sets, the press release. Channel breakdown then comes from asset type and from UTM source/medium inside the campaign's reporting, not from separate campaign objects. That gives you both views from one dataset.

Exceptions to carve out. The two emails sent under 'Newsletter' should move out of the launch campaign and back to the always-on newsletter campaign; otherwise an evergreen programme permanently pollutes launch results. Similarly, the press release earns little by being an asset unless it drives trackable traffic. A useful rule: one campaign per initiative with a start and an end; ongoing programmes get their own always-on campaigns.

Naming. 'Atlas Launch – FY25 Q3' as the pattern, with the campaign name matching the utm_campaign value so reporting joins cleanly.

2. Design the UTM taxonomy and explain what the current inconsistency has already cost. What can and cannot be fixed retroactively?

Read the worked answer

What it has cost. Source reporting is case-sensitive and string-based, so linkedin, LinkedIn and li are three different sources. Every channel rollup is now three partial rows, blended cost per session for paid is wrong or blank, and the LinkedIn team cannot be credited or debited accurately. The blog posts with no UTMs lose their channel identity entirely - organic traffic is the only thing that can be inferred, which is not the same as knowing the post drove the session.

Taxonomy. Lowercase everything. utm_source = the platform (linkedin, google, newsletter). utm_medium = the type (paid-social, email, organic-social, referral). utm_campaign = the initiative slug matching the campaign name (atlas-launch-fy25-q3). utm_content = the variant or ad set. utm_term only for paid search keywords. Keep a controlled vocabulary in a shared sheet, and build links with a URL builder rather than typing them into copy decks.

Retroactive limits. Session-level source data from past visits cannot be rewritten - those sessions are already recorded with the strings they arrived with. So: fix forward with a template and remove manual entry, then, for past data, consolidate in reporting with a documented mapping (treat li and LinkedIn as linkedin) and label the chart as adjusted. For the untagged blog posts, campaign association can be restored by attaching the posts as campaign assets, since campaign membership derives from asset interaction rather than from the URL.

3. The CMO wants one defensible pipeline number for Atlas, including the 610 webinar registrants. Describe how you would produce it and what caveats you would attach.

Read the worked answer

Step 1 - restore membership. Attach the webinar registration landing page and form as campaign assets; campaign membership is derived from asset interactions, so historical registrations are captured without manual list work. Attach the two orphaned blog posts the same way. This alone changes the denominator.

Step 2 - pick the unit. Count unique deals, not asset-deal pairs. Build the report off deals associated with contacts in the campaign, and state the model explicitly. Two defensible options: first touch (credits acquisition, flatters content) or linear/U-shaped (splits credit, fairer to the webinar). What is not defensible is adding the four channel numbers, which double-counts every deal touched by email and ads.

Step 3 - separate 'influenced' from 'created'. Influenced pipeline = any deal with at least one associated contact in the campaign. Created pipeline = deals where the campaign was the first touch. Report both; the CMO's number is usually 'created' with 'influenced' as context.

Caveats to print on the slide: attribution model and its bias; the date basis (deal close date versus contact creation date); the two blog posts attached post hoc; and the fact that the current total cannot be compared to Q2 because Q2 used a different model. Consistency over quarters beats sophistication within one.