For agents: the plain-markdown version of this recipe is at /recipes/map-buying-committee.md.

Map the buying committee at an account

A step-by-step recipe for an AI agent using the BaseBara connector. Follow it when the user wants to know who matters at one company: the economic buyer, the champion candidates, the evaluators, and where the gaps are.

Tools used: find_contacts, get_contacts, list_searches, list_contact_events.

Use when

  • The user says "who should I talk to at Acme", "map the account", "who are the decision-makers", or is preparing for a renewal, an ABM push, or a deal that depends on more than one person.
  • The user has one company in mind. For many companies, call build_contact_list.

Inputs to collect

  • The account: company name or domain. Confirm with find_contacts resolution before relying on it.
  • The intent: net-new mapping, renewal prep, expansion of a single-threaded deal, or champion tracking. Each shifts the weighting. Renewal leans on current users and the economic buyer. Expansion leans on the roles not yet engaged.
  • The committee shape: 3 to 5 persona slots. If the user has not defined them, ask once: "What roles usually make up a buying committee for what you sell? For example Champion: VP Marketing, Evaluator: RevOps, Economic buyer: CRO." Hold these as the schema. Do not invent personas.
  • Who they already know: anyone at the account the user or their team has talked to. BaseBara does not have the user's CRM, so this comes from the user.

Steps

1. Sweep by persona slot

One find_contacts call per slot, scoped to the company with company_name or company_domain. Translate each slot into filters:

Slot Filters
Economic buyer authority_levels=["C-Team","VP"] plus job_function for the owning department
Influencer / evaluator authority_levels=["VP","Director"] plus title_contains for the function
Champion candidate authority_levels=["Manager","Staff"] plus title_contains for the practitioner role
End user title_contains for the day-to-day role, limit 5

Set limit to about 10 per slot. Do not pull the whole company. Companies that resolve but return zero contacts for a slot are a normal result: note "role likely not filled" and move on.

2. Validate the exec layer

For any C-Team or VP match, check the title actually matches the slot. A "VP of Engineering" is not the economic buyer for a marketing purchase. Drop mismatches rather than listing them.

3. Read the relationship signals BaseBara does have

Each contact row carries three fields that stand in for relationship history:

  • last_event (the Activity column): a teammate or the user already revealed, contacted, met, or claimed this person. That is a warm path. Name the teammate, what they did, and the date in the map, and call list_contact_events with the contact_id when the user wants the history. This is the single most useful column, because it stops the user cold-contacting someone a colleague is already working.
  • recent_job_change and tenure_months: new-to-role people (under about 6 months) have a 90-day agenda and no loyalty to current vendors. Flag them.
  • schools and skills: shared background with the user is a mentionable warm angle. Only use it if the user told you theirs.

Anyone the user named as already engaged gets marked "current, with history" from the user's own account, not from BaseBara.

4. Infer the reporting structure

Build a simple two-level tree from titles. VP Marketing reports to the CMO if one exists, otherwise the CEO. Marketing Ops reports to VP Marketing or RevOps. AEs report to VP Sales or CRO. Do not over-engineer it. Mark it as inferred.

5. Pick the entry point

The first person to touch is rarely the most senior. Rank by:

  1. Warm path exists (a teammate shows in last_event, or the user knows them).
  2. Influence over the evaluation: the VP-level functional owner who scopes vendor decisions.
  3. Champion potential: the practitioner who would use the product daily.
  4. Economic authority: the person who signs. Surface them at proposal time, not first.

6. Reveal only the slice that matters

Call get_contacts for the 1 to 3 people the user will actually contact. Never reveal the full bench. The user must be signed in for reveals.

7. Hand off

End with a one-paragraph recommendation in plain verbs: who to contact first and why, which slots to fill with more searching, and which second thread to open within two weeks. Offer reach_out for the first message.

Output shape

<Company> — Buying committee map

GAPS FIRST
  Economic buyer: no C-Team or VP match in <function>. Likely held by the CEO.

ECONOMIC BUYER
  <Name>, <Title> — 4 yrs tenure — contacted by Kev (Sep 12) — warm path

INFLUENCERS
  <Name>, <Title> — new to role (3 mo) — no team contact yet

CHAMPION CANDIDATES
  <Name>, <Title> — ...

REPORTING (inferred)
  CRO ← VP Sales ← AEs

RECOMMENDED ENTRY
  Start with <Name> because <reason>. Open a second thread to <Name> within two weeks.

Gaps go at the top, not the bottom. A reader should see what is missing before what was found.

Rules

  • Use the user's persona slots as the schema. Never invent personas.
  • Cap the map at 5 slots. More is research procrastination.
  • Mark every person as one of: current with history (from the user), warm via teammate (from last_event), new-to-role, or net-new no history. These have different next moves.
  • Never reveal everyone found. Reveal the people the user is about to contact.
  • A slot with zero matches is a finding, not an error. Say the role is probably not filled and adapt the entry recommendation.
  • Nothing is logged in this recipe. Events start when the user contacts someone, in reach_out.