← Back to blogMarketing

How to reach your B2B buying committee with contact-level ads

Account-level ads pay to reach everyone at a target account. Here’s how to see which buying committee roles you haven’t reached, build contact-level audiences for them, and track whether the committee is forming.

Alex Virden · 5 min read

Your ABM campaign is “reaching” Acme.

Here’s what that usually means: your ads are showing to people whose IP or company profile says Acme. That includes the head of demand gen you want… but also the facilities team, a summer intern, and a guy in finance who will never think about your product.

And yes, you’re paying for all of them.

Who account-level ads reach at Acme

Most teams already suspect this. In our Reality of ABM survey(opens in a new tab) of 239 ABM marketers, only 8.8% said they’re very confident their ads reach the actual buyer. Another 59% target the right roles but can’t verify the person on the other end. Nearly a quarter said targeting happens mostly at the account level(opens in a new tab), which in practice means paying to reach anyone who happens to work there.

Meanwhile, the engagement report says Acme is “warm.” That could be three buyers. Or it could be your champion clicking three times.

Engagement from one person isn’t coverage

If only your champion knows who you are, they’re doing your selling for you, alone, in rooms you’re not in.

Most teams can’t see who else is in those rooms. When we asked how they identify the buying group(opens in a new tab) inside a target account, 47.7% said they go on the titles and personas they expect to be involved. Another 31.4% piece it together from data and manual research. Only 5% use people showing known engagement.

One respondent described the pattern: the influencers show up, the decision makers don’t.

“We’re not getting the higher level personas to engage, just the influencer vs. the decision maker.”

That changes the question you ask about Acme. Which of the people who decide are engaged, and who haven’t you reached yet?

See the committee, then find the gap

Vector’s Journeys(opens in a new tab) view shows each target account’s buying committee person by person, with every signal on one timeline: who’s active, what they’ve seen, and which roles you haven’t reached. Enrichment adds key personas automatically, so the committee fills in even when your CRM is missing half of it. Each person gets a role tag, like champion, evaluator, or economic buyer, so you’re working from who’s showing up instead of the titles you expect to be involved.

So instead of a heat score on a logo, you see something like this: demand gen is engaged, RevOps has never touched us, and we don’t have a budget owner identified at all.

Heat score vs. the buying committee

That’s a campaign brief. It tells you which role to go after next and what they need to hear first.

Put your budget in front of named people

Once you know who’s missing, Vector builds contact-level audiences(opens in a new tab) from those people and syncs them to LinkedIn, Google, Meta, Reddit, and the other platforms your buyers use. You can build an audience from any signal, score, stage, or persona, and it stays fresh on its own. A contact who starts engaging can move to a different message without anyone rebuilding the list or uploading a CSV. If you’re one of the 36.8% of teams in our survey still building ad audiences by hand(opens in a new tab), your audiences can finally keep up with your buyers.

Different people need different things(opens in a new tab):

  • Your engaged champion needs proof they can bring to their boss.
  • The RevOps lead who’s never heard of you needs to know you’ll plug into their CRM without a six-month project.
  • The budget owner needs a business case they can take to finance.

Same account, three audiences, three messages. None of them shown to the intern.

Tighter audiences also make the spend work harder. We looked at $30.7M in LinkedIn ad spend across roughly 200 Vector advertisers and 19,000+ campaigns. Campaigns using Vector audiences ran about 25% lower CPC and 35% higher CTR than control campaigns. Contact-level audiences cost more per impression(opens in a new tab), but the people who see your ads are more likely to engage. (These are directional findings from customer data, not a controlled experiment.)

Run one play this week

You don’t need to map every account to start. You need five accounts and one missing role.

  1. 1
    Pick five priority accounts. Start with the ones already showing activity.
  2. 2
    List the roles that buy. Keep it to three to five: the person who’ll use it, the ops or technical evaluator, the budget owner, and sometimes an exec sponsor.
  3. 3
    Find the gap. At each account, which role has no engaged contact? If the same role is missing at most of your five, that’s your audience.
  4. 4
    Build one audience for that role. Give it one message that answers their first question.
  5. 5
    Keep engaged contacts in their own audience. They’ve already heard your intro.
Find the gap across five accounts

Review in two weeks. Did the missing role start engaging?

Track coverage across the committee

When we asked what would make the biggest difference in their day-to-day ABM work, one respondent said:

“Identifying which efforts are actually reaching those decision makers”

Clicks tell you someone responded. Coverage tells you whether the committee is forming(opens in a new tab).

Track three things:

  • Roles covered: how many target roles have at least one engaged contact at each account
  • Match by platform: how many people in each audience every ad platform can find
  • New roles engaging: whether a role that was quiet starts showing up

Keep one distinction honest: an audience match means a person can be served the ad. It doesn’t mean they saw it. Engagement is the proof.

Your champion shouldn’t have to sell you to the rest of the committee alone.

See who’s missing from your buying committees(opens in a new tab)

ABM finally works the way you thought it would

Signals, accounts, contacts, activation, and proof, all in one loop

0:00
-0:00