We tell you EXACTLY how we report on Marketing Campaign Attribution for our typical B2B client and our process for pulling the data together using HubSpot. Painfully BTW. We hope HubSpot reads this article and throws us a bone.
Author's Note: Our machinations could be simplified with third-party analytics and reporting tools. But we are not here to sell you software and HubSpot integrations. We want to demonstrate how Joe/Jane Marketer gets the job done with blood, sweat, and grit every day.
Posts in This Series
Our previous post, “HubSpot Marketing Campaigns: The Good, The Bad, And The Ridiculous,” showed you the flaws with HubSpot’s campaign reporting and marketing revenue attribution. Now, we will demonstrate the gymnastics we go through to attribute marketing revenue decisively and finitely for campaign reporting.
Upfront work to make your revenue attribution easier
Here are the things we typically put in place to make marketing campaign attribution metrics easier. Any HubSpot expert could point out a dozen ways of doing what we will show you. But we have landed on this to coordinate amongst our team and keep it consistent.
1. Campaign Naming Convention
Have one. And make it easy to sort as you will be sorting raw data in Excel or Google Sheets. Let's say Excel for simplicity.
Our naming convention is (loosely):
We start with YYYY-MM for data sorting purposes. And you can give your campaign a color dot to make the reporting cute.
2. “Tags” Property for Lists Uploads
Create a HubSpot multi-select property called “TAGS.” And in it, store your campaign Names for any lists you upload associated explicitly with a lead generation effort. E.g. a tradeshow badge scan list, a 3rd party webinar attendee list, or perhaps a list you received from a partner for form fills on their website to download your ebook. Anything that you will need direct marketing attribution results.
HubSpotters will argue that the List Name is buried in “Original source drill-down-1” but trust us, it is much easier and more controlled to have a drop-down than to remember what you called a list once upon a time.
3. Use workflows to categorize all list properties correctly
We use a HubSpot workflow to deal with all necessary properties after we upload a basic list. Something like this:
- Lifecycle Stage MQL
- Lead Status New
- Append a contact property TAGS 2022-09-DAS-Sep
- SDR SDR_Owner
- Blog Property Weekly
- Marketing Contact Status
And so on. We never try to load these various fields during import, as it’s not good. For reasons too numerous to detail.
4. Add Uploaded Lists To Campaigns
As you upload these lists into HubSpot, go into Marketing | Campaigns and add the lists to the appropriate campaign. As documented in our previous blog, this will only notate these contacts as “Influenced” contacts and revenue, but maybe someday this will change for HubSpot Marketing Pro subscribers. Also, it does provide reasonable documentation of what lists are part of a campaign. But other than that, it does almost nothing for you.
5. Set up a list to capture first-touch campaign contacts
This is where we go off the rails a little. It is all tomato, to-mah-to at this point. For our clients, we report on initiatives for a specific year, by campaign. We warn you, this next piece we use to pull the contacts created by the campaign is insane.
You may be wondering, "WITAF is this strange expression?" This is the underlying code that names the campaign inside the HubSpot database CRM, because HubSpot has not built the mechanism to allow you to select by campaign Name itself. We are only interested in tracking specific campaigns we executed this year and that this client has paid for with third-party partners, and we call the list “New Contacts Paid Partner Promos - 2023.”
Where do you find this code bit to select these contacts?
You return to your Marketing | Campaign report and click on the campaign. It is buried in the campaign URL. It looks like this “5a828064-ca23-4e25-ab15-eaf23e7caae2”. Outstanding.
You can view it on reports, but sadly, you cannot scrape it off the report. So you click on each campaign from Marketing | Campaigns, one by sad little one. See the report snippet below.
The above are all the items we need to do proper campaign reporting for a specific group of campaigns.
End Game - The Campaign Report
For clients with multiple campaigns running, with uploaded lists in the mix across multiple campaigns, we must create a manual campaign report that looks like the one below.
This client has decided they are most interested in New Contacts Created and the Number of Deals associated with these new contacts by campaign. The key message is that using HubSpot Marketing Pro, you can't produce a count of Deals associated with First Touch Marketing Contacts (or Last Touch, for that matter) by campaign.
How do we produce manual marketing campaign reporting?
Let us explain how we get this data by adding a couple of descriptor columns.
If the above seems nonsensical, we apologize. But we do that for clients running campaigns that combine third-party uploaded data and HubSpot pass-through data garnered via a landing page, form, or pop-up. And, for ANY client, the only way to infer Deal Creation associated with First Touch or Last Touch Marketing Contacts is via manual reporting.
Here is some sample dashboard reports we use to piece it together.
When we have first touch converting campaigns via landing pages, pop-ups, and forms, we can run a simple report looking for contact counts by the campaign from the list we created in the above step.
Data From First Touch Converting Contacts Via HubSpot Forms
And our Deals report also selects new deals created by contacts in the list we created using the HubSpot secret campaign codes in the above step.
Data from list uploads
This is harder because the contacts created from list uploads are not inferred as first-touch marketing contacts attributed to a campaign natively in HubSpot. We have to write a couple of reports for EVERY SINGLE LIST and then gather the data manually.
Sure, a show-off could get it all combined in one report. But as we deconstruct the data into a manual spreadsheet, it is easiest for us to represent each list with its own report blocks.
- Number of New Contacts
- Number/$$$/Stage of New Deals from the New Contacts
We throw sessions in for good measure because marketers are always curious about traffic. This comes straight off the HubSpot campaign reporting, which, TBH, would give you first-touch contacts too. But it doesn't allow sorting unless you download it into an EXCEL, which we always do.
In the campaign report above you can also see First Touch and Last Touch contacts. The list upload data will have neither. Both fields will be blank even if you have attached the List to the campaign. It is like your list load never happened as far as the campaign goes. For clients attending large shows or participating in partner events like webinars where they get lead lists, HubSpot Campaign Reporting becomes 100% useless.
Reminder | End Goal - The Report
As a reminder, this report is what we are trying to create. And we have to pull all the sources above to make it, to give the Client a comprehensive view of their campaigns' performance.
Overall Marketing Revenue Attribution
Our final post in this series is
Part 3 - How to Create Marketing Revenue Attribution Reports Using HubSpot
It seems like it would be a lot like campaign attribution, but we go at it from a more macro level ... in general ... what Marketing Qualified Leads resulted in Deals, which resulted in Closed/won Revenue.
If you just stumbled here, this post has all the campaign background.
Posts in This Series