
One of the biggest challenges we encountered while setting up our ABM campaigns was…actually measuring our ABM campaign results.
First – you need to decide what metrics you want to try. Then how you’re going to track them – and where – in your CRM? Some external analytics tool?
Then, when you know what you want to track – it turns out setting up ABM dashboards in Hubspot is harder than it seems at the first glance. First of all – because you actually need to group your target companies into ABM campaigns somehow to attribute the deals, pipeline, and revenue to the right campaign (to know which campaigns are working, and which are not – not just how much you made and spent overall) – which means you need to associate the right LinkedIn ad campaigns/campaign groups, and the right companies to a specific ABM campaign object. And since you may want to also target the same companies that didn’t convert from one campaign with another campaign later (like we did with our Pendo 2024 and Pendo 2025 campaigns), as well as companies that e.g. were your customer in the past but churned, or had a deal open in the past – you will also need to set timeframes for when the deal has to be created in order for this pipeline to be attributed to this specific ABM campaign – and not another one.
And if you ever build Hubspot dashboard, you know they are not fun and games 😬. This ultimately led me to build the analytics dashboards in ZenABM – because calculating some of the metrics I wanted to track with Hubspot was just too complicated and wasn’t scalable. But in the post below, I will describe which metrics we’re tracking, how we’ve built our ABM analytics dashboards in Hubspot first, how we are tracking our TOTAL ABM results and the results for each ABM campaign separately, and how you can do the same without all the building in ZenABM.


“Revops hate her” – that would be my yellow press nickname, if I didn’t work in something as boring as B2B SaaS.
Why? I constantly faff around and add new reports to our “Main ABM Analytics Dashboard” on Hubspot, which makes it super long. Again, why? Because there’s no easy way to change timeframes of your reports rather than adjusting the filters – and if you have a lot of ABM campaign, there will be a lot of filters to adjust. (Which is also why I started working on ZenABM…to have these reports ready at hand and to be able to just adjust the timeframes, each time I’m launching a new ABM campaign 😭)
First of all, let’s take a step back – what do you really want to track to understand how your ABM campaigns are performing?
Obviously, you want to track:

Let’s dive a bit deeper into the metrics before I show you how to track them on Hubspot.
I call them “raw” because they come straight from your CRM / LinkedIn Campaign Manager. They help you estimate at a glance how each of your ABM campaigns (and all of them together) is performing vs. the goals you’ve set:
1) Pipeline – the actual pipeline generated from *all* your ABM campaigns in a specific timeframe (month, quarter, this year so far) vs. your pipeline goal (see how to set pipeline goals in this post.)
2) Deals opened – How many deals have you opened from the companies in your ABM campaigns (after the campaigns have started, and only from the companies that saw your ads a specific number of times – we call it the “ABM influenced pipeline” and calculate it only based on deals from companies that had at least 10 ABM ad impressions, and only if the deals opened *after* they hit the required number of impressions.)
3) MQLs (however you define them – e.g. demos, trials etc.) generated from the companies in your ABM campaigns (after the campaigns have started, and again – only from the companies that saw your ads a specific number of times.)
4) ABM Ad Spend – how much you’ve spent on all the ad campaigns associated with your ABM campaigns vs. how much you’ve budgeted for them.
5) ACV – what is the Average Contract Value from the deals you’ve opened from your ABM campaign target lists vs. the target ACV you aimed for (without it, it would be hard for you to estimate your campaign revenue goals and the target audience size! See our ABM budget calculator for more info. )
6) Revenue – this is lagging, as – depending on your sales cycles – deals opened from ABM campaigns running this year may close well into…next year – but you want to keep an eye on it (or do a proper cohort analysis).
7) Number of accounts targeted in your ABM campaigns – which is a sum of all the “identified” accounts per campaign.
These ABM metrics you will need to calculate based on the “raw” metrics above.

1) Pipeline per $ spent
2) Number of accounts in different stages vs. goal
2) Campaign stage conversion rate metrics
Now let’s see how to measure each of these ABM metrics on individual ABM campaign level, and for all your ABM campaigns overall – in Hubspot.
First of all – you need to make sure that all the companies you’re targeting with your ABM campaigns: a) are on Hubspot b) have a unique identifier e.g. “in ABM Campaign” company property – which will allow you to “assign” them to the right ABM campaign.
You can upload your target company list to a Hubspot list and create a “in ABM Campaign” company property based on the list(s) membership. Or you can target companies with your LinkedIn ABM campaigns using broad targeting on LinkedIn based on industry, company size and job titles/functions – and let a tool like ZenABM deanonymize which companies have engaged with your ads (based on LinkedIn API data), and push them to Hubspot:

Then, create a new dashboard called “Main ABM results tracking dashboard”, and add the following reports to it:
This report shows you the Key Peformance Indicators of your ABM campaigns – total number of companies targeted, total pipeline opened, and average ACV from all open deals in your all campaigns: 
Data sources: deals, companies. Primary data source: Companies.
Configure: chart type: KPI
Values:
Filters:


Ok, what’s next?
This report will help you understand how many deals your sales team has won from ABM so far:

Primary: Companies
Secondary: Deals (keep both connected so you can pull deal-stage & amount fields)
| Setting | What to pick |
|---|---|
| Chart type | KPI (first icon on the KPI row) |
| Group by | Leave blank |
| Compare by | Leave blank |
| Values (drag-in order) |
1. Total Number of Companies → rename the label to “TOTAL NUMBER OF COMPANIES WON” 2. Amount (Deals) → summarise by Sum → rename to “CLOSED WON AMOUNT SO FAR ($ AMOUNT)” 3. ACV ($ Amount) (your ACV field) → summarise by Sum and leave the label “ACV ($ AMOUNT)” |
| Summarised data | Toggle ON (so the three numbers show side-by-side) |
Set the top drop-down to “ANY of the filters below” – this lets you stack a separate AND block for each ABM campaign, all connected with OR logic.
Create one AND block per campaign you want to include. Each block should contain all of the following filters:
| Object | Property & operator | What to choose / enter |
|---|---|---|
| Companies | ABM Campaign Name (Company Level) → is equal to any of | <your campaign name> (e.g. product drive campaign 2024) |
| Companies | ABM Stage → is any of | Customer |
| Deals | Deal type → is any of | New |
| Deals | Amount → is known | – |
| Deals | Create date → is between | Campaign start date AND campaign end date + 180 days (or whatever buffer you prefer) |
| Deals | Deal stage → is any of | Closed Won (Sales)
|
Once you’ve built one block, duplicate it, change only the ABM campaign name (for all the respective ABM campaigns) & date range, repeat for all the respective ABM campaigns you have, and you’re done.
This report will just simply show you how many accounts you have in each of your ABM campaigns:

How to create it?

| Item | Setting |
|---|---|
| Primary data source | Companies (no secondary sources needed) |
| Chart type | Table (the KPI-style table that shows one big number above a columnar table) |
| Value | Count of companies (drag the default measure into Values) |
| Filter logic | Custom filter rules Rule 1 – Companies › ABM Campaign Name (Company Level) is known(This limits the dataset to companies that live in any ABM campaign, a.k.a. your “target accounts.”) |
These reports simply tell you more about the target accounts in your ABM campaigns. They are easy to set up though:

And for filters – just use “ABM campaign name (company level)” is known property:

| Step | Action |
|---|---|
| Data sources | Primary: Companies • (no Deal or Contact sources required) |
| Filters | 1. Set the logic drop-down to ALL of the filters below 2. Add Companies › ABM Campaign Name (Company Level) is knownThis limits the dataset to companies that sit in any ABM campaign — a.k.a. your entire “target-account” universe. |
| Values panel | Drag Count of companies from Default measures into Values (leave the summarisation as Count). |
| Chart type | Pick the Donut icon (pie-chart row ➜ the hollow ring). |
| Show total | In Chart settings (right-hand tab), toggle Show total so the big “7 064” appears above the chart. |
| Label format | Still in Chart settings: Show % and count (HubSpot will display e.g. 15.09 % (574) next to the slice). |
| Save | Name it “Target Accounts by Country – All ABM Campaigns – All Time” and add it to the Demographic Segmentation section of your ABM dashboard. |
You now have the first donut (Country).
Pro-tip: hit Actions › Clone two more times to make the Industry and City versions in under a minute.
| Change | What to do |
|---|---|
| Group by | In the Configure tab, drag Companies › Country/Region into the Group by box. |
| Sort | Click the column header in the data table below the chart ➜ Sort descending on Count of companies (biggest slice first). |
| Legend clean-up | HubSpot shows the top 10 colours in the legend; that’s fine. |
| Done | (No other tweaks needed.) |
From the Country report, click Clone ➜ open the clone and:
| Change | What to do |
|---|---|
| Group by | Swap Country/Region for Companies › Industry. |
| Name | “Target Accounts by Industry – All ABM Campaigns – All Time” |
| Legend tip | If you have >50 industries, use Chart settings › Legend ➜ Show top 50 to keep it readable. |
Clone either of the previous charts and:
| Change | What to do |
|---|---|
| Group by | Companies › City |
| Name | “Target Accounts by City – All ABM Campaigns – All Time” |
| Slice threshold | In Chart settings, raise Minimum slice % (e.g. 1 %) so only meaningful cities appear and the “Other” slice stays tidy. |
Arrange the three donuts in a 2×2 grid (Country & Industry on top, City beneath if used).
Leave the table-style “Target-Account Composition” report to the right (or above) so viewers can jump between raw counts and percentage mix.
This report shows, side-by-side, how many target accounts sit in every ABM stage per campaign—plus grand totals. Build it once and it will refresh automatically as companies move between stages or campaigns.
| Setting | Value |
|---|---|
| Primary source | Companies |
| Secondary sources | None (everything you need is on the Company record) |
| Panel | What to drag / pick | Notes |
|---|---|---|
| Chart type | Table → choose the pivot-style icon (first row, far right) | That’s the one that opens Rows / Columns / Values drop-zones. |
| Rows | Companies › ABM Stage |
You’ll get one row per funnel stage. |
| Columns | Companies › ABM Campaign Name (Company Level) |
One column per live ABM campaign. |
| Values | Count of companies |
HubSpot’s default measure. |
| Summarised view | In the mini toggle above the grid, leave Summarised data selected so HubSpot adds the TOTAL column automatically. |
Stage order: hover over the ABM Stage chip in Rows › More › Custom order and drag the stages into their logical funnel sequence (Identified → Aware → Interested/Engaged → … → Customer → Disqualified/Lost).
Totals: in Chart settings (sidebar), toggle Show row & column totals if they aren’t on by default.
Column width: widen the first column so long stage names aren’t truncated.
| Logic | Filter | Why |
|---|---|---|
| ALL of the filters below | Companies › ABM Campaign Name (Company Level) is known |
Restricts the dataset to target-account companies only (any campaign). |
(Leave every other field open—this report is meant to show the full funnel snapshot.)
Now, obviously – you want to look at how each of your ABM campaigns in the running is currently performing in terms of the companies moving stages – on weekly basis for assigning the accounts that moved to the “interested” stage to the BDRs, and monthly basis – for your reporting.

| Item | Comment |
|---|---|
| Primary data source | Companies |
| Target-account filter | We’ll keep using ABM Campaign Name (Company Level) is known so the dataset only includes companies that sit in at least one ABM campaign. |
| Stage-change date (if you don’t already have one) |
Create a workflow that stamps a custom property called “ABM Stage Last Updated” every time the ABM Stage property changes. This gives you a single date field to filter on, independent of the 7 “Became X date” fields. |
| Area | Setting | How / why |
|---|---|---|
| Chart type | Pivot table (Rows + Columns + Values icon) | Produces the matrix you saw in the screenshot. |
| Rows | Companies › ABM Stage |
Lists each stage that had movement. |
| Columns | Companies › ABM Campaign Name (Company Level) |
One column per campaign. |
| Values | Count of companies |
Shows how many changed into that stage this week. |
| Chart settings | • Turn Summarised data on (adds the TOTAL column). • Enable row & column totals if they’re not already displayed. • Optional: custom-order the stages so they read top-to-bottom in funnel order. |
|
| Filters | ALL of the filters below 1. ABM Campaign Name (Company Level) is known2. ABM Stage Last Updated is this week |
#2 limits the view strictly to companies whose stage changed sometime between Monday and Sunday (per your portal’s locale). |
| Name | “Companies moving ABM Stages – All ABM Campaigns – This week” | |
| Save | Click Save as new report and add the tile to your “ABM Funnel Progress & Movement” section. |
Open the This week report → Actions › Clone.
Go straight to Filters → change the relative filter to “ABM Stage Last Updated is this month”.
Rename the report to “… – This month” and save.
Clone the This month version.
Edit the relative filter to “is last month”.
Rename to “… – Last month” and save.
These reports let you see how much pipeline you have opened from your ABM campaigns in a specific timeframe (again, because Hubspot reports are hard to change date frame for – you want to have ready time series for these “quick looks”):

These two small KPI widgets tell you, for each period:
How many ABM accounts opened pipeline (i.e., had a new deal created)
Total $ pipeline opened
Total $ ACV represented
Why two separate reports?
HubSpot’s relative‐date filters ( “is this month”, “is this quarter” ) live inside the report itself; you can’t flip a single widget between periods with a dashboard‐level filter.
So we create one report with a “this month” date filter and a second cloned report with a “this quarter” filter.
| Area | Setting | Details / tips |
|---|---|---|
| Data sources | Primary: Companies • Secondary: Deals | Keeps company + revenue metrics together. |
| Chart type | KPI (first icon on the KPI row) | Gives you the three-number layout. |
| Values | 1 ➜ Count of companies → rename “TOTAL NUMBER OF COMPANIES WITH PIPELINE OPENED” 2 ➜ Amount (Deals) summarised by Sum → rename “TOTAL PIPELINE OPENED SO FAR ($ AMOUNT)” 3 ➜ ACV ($ Amount) (Sum) → keep label “ACV ($ AMOUNT)” |
Drag in the same order so the numbers line up left-to-right. |
| Group by / Compare by | Leave blank | KPI tiles don’t need them. |
| Chart settings | Toggle Summarised data so the three numbers show side-by-side. | |
| Filters (ALL of the filters below) | 1. Companies › ABM Campaign Name (Company Level) is known → limits to target-account companies. 2. Deals › Deal type is any of New → only first-time pipeline opens. 3. Deals › Amount is known → avoids $0 placeholders. 4. Deals › Create date is this month → the critical time window. |
|
| Name & save | “Pipeline Report – All ABM Campaigns – this month” → Save as new report and add to the ABM Pipeline Insights section of your dashboard. |
Open the this month report → Actions › Clone.
Go to Filters and change the Create date filter to “is this quarter/month”.
Rename to “Pipeline Report – All ABM Campaigns – this quarter/moth”.
Save and place it directly above/below the month widget for easy comparison.
We also have “Accounts in Pipeline – deeper dive”: showcasing companies in the pipeline, with the deal amount, stages, company size, industry etc. – you can also break them down by specific timeframes and by campaign:


How to set it up?
| Setting | Value |
|---|---|
| Primary source | Deals |
| Add source | Companies (keeps firmographic fields in the same table) |
Make sure the two objects are joined by HubSpot’s default “Company ↔ Primary company on deal” relationship.
| Panel | Action | Result |
|---|---|---|
| Chart type | KPI (yes, KPI!) | The big “Sum (Amount)” number at the top uses this. |
| Values | Drag Amount (Deals) → summarise by Sum | Shows the total $ value of all rows you’ll list below. |
| Toggle view | Keep Unsummarised data selected in the grey pill above the table | Reveals the raw deal rows instead of an aggregated pivot. |
In the Data step, tick these fields (drag to reorder left → right):
Deal name
Create date – Daily
Close date – Daily
Company name
ABM Campaign Name (Company Level)
ABM Stage
Amount (highlight column in Chart settings > Formatting if you want the blue tint)
Number of employees
Employee range
Industry
Industry group
Country/Region
Tip: Use Chart settings → Table options to freeze the first column (Deal name) so horizontal scrolling never hides it.
Set the top logic drop-down to “ANY of the filters below” and create one AND-block per ABM campaign:
| Filter inside each block | Operator | Value/example |
|---|---|---|
| Companies › ABM Campaign Name (Company Level) | is equal to any of | <campaign name> |
| Companies › ABM Stage | is any of | Disqualified/Lost, Selecting, Customer (i.e., every stage at/after SQL so you capture the whole opened-pipeline funnel) |
| Deals › Deal type | is any of | New |
| Deals › Amount | is | known |
| Deals › Create date | is between | Campaign start AND campaign end + 180 days |
Duplicate the AND-block for each campaign, change only the campaign name & date range.
(With the outer logic set to ANY, the blocks are automatically OR’ed together.)
| Need | Action |
|---|---|
| Surface biggest deals first | In the table, click the Amount column header → Sort descending. |
| Filter on the fly | Report viewers can click the ▼ caret on any column header (e.g., Industry) and ad-hoc filter inside the dashboard without editing the report. |
| Export | Leave “Export unsummarised data” enabled (upper-right gear) so finance can download the full CSV whenever they need. |
| Field | Entry |
|---|---|
| Report name | “Accounts in Pipeline – All ABM Campaigns – All Time – Deeper Analysis” |
| Dashboard slot | Position it directly below your KPI widget “Pipeline Report – All ABM Campaigns – All Time” so users can click from totals into individual deals. |
| Save | Save as new report |
This report group does what it says on the tin – it shows the ad spend per month and per campaign:


How to set these up?
| Setting | Value |
|---|---|
| Primary | Ad events (that’s the object HubSpot surfaces for LinkedIn / Google / FB spend data) |
| Secondary | None required |
| Panel | What to drag / pick | What it does |
|---|---|---|
| Chart type | Combined KPI + Table (choose KPI first; the built-in table appears underneath when you add a Group by) | Gives you the big numbers on top and month-by-month table beneath. |
| Values | 1. Sum of Clicks 2. Sum of Amount spent 3. Sum of Engagements |
Drag in this order — HubSpot lays them left-to-right exactly as you drop them. |
| Group by | Report date – Monthly (HubSpot auto-generates this date roll-up) |
Builds the monthly rows you see in the screenshot. |
| Compare by | Leave blank | |
| Chart settings | • Toggle Summarised data so the three KPIs stay on one line. • Under Table options, show Row totals (adds the grand total at the bottom). • Optional: rename column headers to plain English (“Amount Spent”, “Impressions”…). |
Set the logic to ALL of the filters below and add:
| # | Object › Property | Operator | Value |
|---|---|---|---|
| ➊ | All events › Event timestamp | is between | 01 Jan 2025 and 31 Dec 2025 |
| ➋ | Ad accounts › Ad network | is any of | |
| ➌ | Ad campaigns › Ad campaign name | contains any of | <list every ABM campaign name> e.g. ... 2024, ... 2025, session replay 2025,Tip: copy-paste the same comma-separated string you use in LinkedIn naming conventions so future campaigns auto-match. |
Giving just ad performance and spend in total per month, rather than segmented by ABM campaigns (for easier view):

| Setting | Value |
|---|---|
| Primary source | Ad events (HubSpot’s object that stores spend / impressions / clicks / engagements) |
| Secondary sources | None required |
| Panel | Action | Purpose |
|---|---|---|
| Chart type | Choose KPI | Gives you the headline numbers bar. |
| Values (drag in this exact order) | 1. Sum of Amount spent → rename “$ AMOUNT SPENT SO FAR” 2. Sum of Impressions → rename “IMPRESSIONS (TOTAL SO FAR)” 3. Sum of Engagements → rename “ENGAGEMENTS (TOTAL SO FAR)” 4. Sum of Clicks → rename “CLICKS (TOTAL SO FAR)” |
The order you drop the fields = left-to-right order in the KPI bar. |
| Group by | Report date – Monthly |
This single drag adds the monthly table under the KPI bar. |
| Compare by | Leave blank | |
| Chart settings | • Make sure Summarised data is selected (keeps all 4 KPIs on one row). • In Table options, enable Row totals (adds the grand-total line at the bottom). |
Set the logic to ALL of the filters below:
| # | Object › Property | Operator | Value |
|---|---|---|---|
| ➊ | Ad accounts › Ad network | is any of | |
| ➋ | Ad campaigns › Ad campaign name | contains any of | (comma-separated list of every ABM campaign naming pattern) e.g. pd 2024, pendo 2025, session replay, evergreen, mobile campaign … |
| ➌ | (optional) All events › Event timestamp | on or after <first month you bought ads> | Leave no upper bound so the report keeps accumulating “all-time” totals.
|
Why not a relative date filter here? Because this tile is meant to be all-time cumulative. If you ever want YTD or 2024-only, just clone the report and change #➌ accordingly.
The number of target accounts in ABM campaigns for which we were able to fetch intent data from LinkedIn API for (with ZenABM):

Last but not least, we have some BDR reporting dashboards – for the ABM companies assigned to the respective BDRs:

How to set them up?
Why these exist – They surface, for every BDR:
Which target-accounts just turned “Interested/Engaged” (i.e., are ready for outreach).
Whether the BDR created a follow-up lead – and how many are still open.
How their overall ABM lead pool is progressing (Not-started → Qualified).
Because each view answers a different operational question and some require different relative-date filters, each one is its own report.
| Step | What to do | Notes |
|---|---|---|
| Data sources | Primary: Companies | everything lives on the Company record |
| Chart type | Summarised Pivot Table | pick the grid icon with Rows / Columns / Values |
| Rows | Company BDR (custom owner field) |
|
| Columns | ABM Campaign Name (Company Level) |
|
| Values | Count of companies |
|
| Filters (ALL) |
• ABM Campaign Name (Company Level) is known• ABM Stage is any of Interested/Engaged• ABM Stage Last Updated is this week |
ABM Stage Last Updated is a workflow-stamped date that fires whenever the stage changes. |
| Sort | Descending on Total so the busiest BDRs float to the top. | |
| Name | “ABM Companies moving to Interested stage – For BDRs to work on this week – All ABM Campaigns” | Clone this report, change the relative-date filter to “is last week”, rename accordingly, and you’ve got the backlog tile for missed follow-ups. |
(same idea, but looks at Leads instead of Companies)
| Setting | Value |
|---|---|
| Primary source | Leads (or Contacts, if you map leads there) |
| Rows | Company BDR |
| Columns | Company name |
| Values | # Open Leads ABM (custom roll-up field or Count of leads w/ filter “Lead status ≠ Closed”) |
| Filters (ALL) | • Associated company › ABM Stage = Interested/Engaged• Lead create date is this week |
| Name | “No. of leads created for companies moving to Interested stage – To be worked on this week …”
Clone → switch the date filter to “last week” → rename – that’s the tile in the lower-right quadrant. |
3️⃣ ABM Lead – By BDR – By Stages – All Time (stacked horizontal bar)
| Step | Action |
|---|---|
| Primary source | Leads |
| Chart type | Horizontal stacked bar |
| Y-axis (Rows) | Lead owner (your BDR field) |
| X-axis (Values) | Count of leads |
| Stack by | Lead stage (Not started ▸ In progress ▸ Qualified ▸ Disqualified) |
| Filters (ALL) | Associated company › ABM Campaign Name is known |
| Sort | Descending on total leads so the longest bar sits at the bottom. |
| Name | “ABM Lead – By BDR – By Stages – All ABM Campaigns – All Time” |
HubSpot lets you use exactly one relative-date filter per report.
A dashboard-level filter can’t swap this week for last week without also re-running the underlying workflow that stamps ABM Stage Last Updated.
Therefore each period the BDR team cares about—this week (new queue), last week (follow-up backlog), and all-time (productivity trends)—needs its own cloned report with the date baked into the filter.
I know this post is super-long – and it took us super-long to set up all of these dashboards. But you can get them out of the box with ZenABM (why do you think I’ve built it? not to ever have to look at Hubspot dashboards. 😅)
We can also help you with all the revops. 