I am trying to build a custom report that will show the following information in one report only. So far, it doesn’t seem possible due to the sources being used.
What I am trying to find, is the cost of a form submission per ad campaign spending. Here is the current scenario…
We have a form that collects contact info, and the Marketing campaigns upon the form submission. These campaigns come from different sources, they could be from marketing emails, META or Google Ads, and so on. My goal is to use the marketing campaigns that are being submitted in the form, and if the campaign name corresponds to an ad campaign, I would like to pull the amount spent and divide it by the number of contacts that have submitted the form with this campaign.
Here is an example:
Campaign A ad spend = $100
Campaign B ad spend = $150
Form submissions with campaign A = 10 contacts
Form submission with campaign B = 5 contacts
Cost per contact Campaign A = $10 ($100 / 10 = $10)
Cost per contact Campaign B = $30 ($150 / 5 = $30)
Current issue =
I can not use these two sources in custom reports as they are both tied to an event. And also, I can not use the native Ads reports as they do not take into consideration the form submission, but rather focus on the ad interaction.
Creating a dataset might be a solution if I exported both the form, and Ads metrics, but this report needs to be reusable and not have to recreate every single time.
What are my options?
Hey @JLetellier,
Thanks for the details/ breakdown of your use case. This sort of cross-object reporting is a nuanced one in HubSpot and, yes, I’m curious if maybe using custom formulas or datasets might be a better option?
A resources that might be worth exploring as we wait for others from the community to chime in
Tagging some folks who may have run into similar reporting challenges:
Hey @karstenkoehler, @Mike_Eastwood, @UlianaV – do you have any suggestions for @JLetellier on their reporting needs?
Thanks in advance!
Sam, Community Manager
Hey @JLetellier
I can not use the native Ads reports as they do not take into consideration the form submission, but rather focus on the ad interaction.
Based on how your Lifecycle stages are set up and used, you can actually get Cost per Lifecycle Stage in the Ads tool (check out this article for more details). Last ad Interaction model should help with reporting on contacts who interacted with the ad AND converted via a form submission in the same session.
Hey @JLetellier ,
@EugeneAtKiwi’s route is the right native path for the contacts it covers - Last Ad Interaction catches people who click the ad and convert in the same session, assuming your lifecycle stages are mapped cleanly.
But to validate your initial frustration: you aren’t crazy, and you didn’t do anything wrong. You’re trying to divide a metric from one event source (ad spend) by a count from another (form submissions), and the custom report builder won’t blend those two natively. It’s a structural wall, not a setup mistake. Worth knowing too: the Ads-tool number and your form-field number will disagree even when both are “working.” The Ads report only sees contacts it can tie to the click, while your form field also catches cross-session, cross-device, and consent-declined conversions, plus campaigns arriving from email. Neither is wrong; they count different populations.
On the datasets route, Stassey mentioned: if you’re on Enterprise, it can get you partway. The catch is that dataset joins run on object associations, and your join key is a form-field value matched against a campaign name. That string-to-string match is the part HubSpot won’t do for you, so expect manual mapping work to keep it alive as campaigns change.
Full disclosure: I hit this cross-source wall often enough that I’m building the tool for it - Tulu, an AI-native analytics layer that sits on top of HubSpot. HubSpot stays your system of record. Tulu connects to it, plus your ad platforms (Meta, Google), Search Console, and web analytics, reconciles everything into one dataset, and then you just ask “what’s my cost per form submission by campaign?” and get the number back.
Not pushing it here: Eugene’s workaround is free and native, try it first.
I just didn’t want to answer your question while hiding the fact that I have a horse in this race.
Either way, your math, as you mapped it out, is right.
HubSpot alone just won’t do that division for you today.