| name | meeting-prep |
| description | Prepare for an upcoming meeting with a company. Identify the account by ZoomInfo account/company ID (preferred) or by company name, domain, or ticker (which triggers a lookup step). Provide attendee names or emails and rich context on the meeting purpose, stakes, and known dynamics to get a tight, decision-ready brief — headline, relationship posture per attendee, ranked talking points, discovery questions, suggested agenda, and what NOT to do. Optimized for a 30-min slot. |
Meeting Prep
Produce a tight, decision-ready brief for a ~30-minute meeting. Lead with a TL;DR (top 3 to know plus an opener), then back it with company, relationship, attendee, and conversation context.
Input
The user will provide via $ARGUMENTS an account identifier (required), attendees (recommended), plus optional context:
- Account identifier (required) — one of:
- Preferred: a ZoomInfo account/company ID (numeric). Use directly as
companyId; skip the search step.
- Fallback: a company name, domain, or ticker. Resolve to a
companyId via search_companies as a first step (see Workflow step 3).
- Attendees (recommended) — names and/or email addresses. Without attendees, the brief is necessarily generic.
- Meeting context (strongly recommended) — a free-form description of the meeting and what success looks like. Richer is better — flat enums like "discovery / QBR / renewal / demo" produce flat briefs. Capture as much as is true: the meeting purpose, the stakes, what's been discussed before, the deal stage, what you want to walk out with, known tensions or open questions, competitive context, the offering in play, and any working hypotheses you want to test or pitfalls to avoid. Examples:
- "30-min discovery with the CISO and Director of SecOps. They downloaded the report on identity sprawl last month. Goal: get to a technical evaluation. Worried they're already late-stage with Acme — need to test that fast without burning credibility."
- "Renewal QBR. $600K ARR up in 60 days. Champion left two months ago, new VP Eng hasn't engaged. Need to surface value delivered, find the new owner, and avoid a price-only negotiation."
- "Demo for the Director of Data Platform. Came inbound on the streaming use case. They have an in-house ETL setup. Goal: land a paid pilot. Don't lead with the AI features — they'll see it as a distraction."
If the identifier is ambiguous (e.g., a bare string that could be a name or a ticker), prefer the most specific interpretation: all-digits → ID; short all-caps token (≤5 chars) → ticker; a string containing a dot or known TLD → domain; otherwise → name.
Workflow
Parallelize aggressively — most calls only need the companyId and can fan out together. Per-attendee, run contact_research and enrich_contacts in parallel: contact_research returns narrative context but quality varies, so enrich_contacts guarantees a structured fallback (title, email, phone, employment history) when narrative data is redacted or thin.
-
Anchor on purpose. Read the meeting context from $ARGUMENTS.
- If supplied, restate it in 1-2 sentences as the meeting purpose and keep it as the framing lens for every downstream step.
- If missing, ask the user once. If they decline or say "just general prep", default to general meeting prep and state that assumption at the top of the brief.
- From the context, derive: a meeting purpose (1 line), the desired outcome (what walking out successful looks like), priority topics/themes (3-5 — e.g., identity sprawl, ETL pain, renewal value), and any named risks or hypotheses to test (e.g., "test if they're already late-stage with Acme"). These priorities drive the
account_research query, attendee framing, talking-point ranking, and the suggested agenda.
-
Get GTM context — Call get_gtm_context (no params, no credits). Use it to tailor talking points to your offerings and strategic priorities, flag competitor presence, and frame around your ICP. If empty, proceed without.
-
Resolve the company.
- If the user supplied a ZoomInfo account/company ID, use it directly as
companyId — do not call search_companies.
- Otherwise, call
search_companies with the appropriate field (companyWebsite for a domain, companyTicker for a ticker, companyName for a name) and extract companyId from the top match. If no confident match, surface the ambiguity to the user before continuing rather than guessing.
-
Fan out company research in parallel (retrieval, not filtering). Treat each tool call as a context-retrieval step. Pull broadly now; decide what's relevant during synthesis. Steps that only need the companyId can run together — account_research, enrich_companies, enrich_news (last 30 days), enrich_scoops (last 30 days), and enrich_intent.
- Tailor the
account_research query to the meeting purpose. Don't pass a generic "tell me about this account" string. Inject the full meeting context — purpose, desired outcome, priority topics, named hypotheses, attendees if known — and ask for relationship history, deal context, engagement signals, competitive presence, and anything that would change how you walk into the meeting.
- Intent retrieval: call
enrich_intent with the companyId only — do not pre-filter by topic. The goal is to see what topics this company is actually expressing intent on, not to confirm hypotheses. Filtering happens in step 6.
-
Resolve and research attendees in parallel — Run search_contacts for all attendees in one batch (by email, name + companyId, or title + companyId). Then run contact_research and enrich_contacts in parallel for the resolved set (batch up to 10 per enrich_contacts call). If an attendee can't be resolved, note it — don't fabricate.
-
Synthesize the brief. Each retrieval is raw context — now decide what makes the brief, framed by the meeting purpose and priority topics. Apply these principles:
- Intent triage: review every topic returned by
enrich_intent. Keep topics that map to the meeting purpose, priority topics, your GTM offerings, or a non-obvious signal worth flagging (e.g., a competitor's category, an adjacent buying motion). Drop topics that are noise. If nothing meaningful remains, skip the intent section.
- News/scoops triage: keep items that connect to the meeting purpose, the deal stage, attendees, or priority topics. Drop generic press releases unrelated to the agenda.
- Classify relationship posture per attendee from
employmentHistory and contact_research cues: Cold, Warm-but-dormant (significant past engagement at a prior employer or directly, but no current activity — highest leverage), Active, or Hostile. The opener depends on this.
- Talking-point ranking: cap at 3-5, ranked by relevance to the desired outcome. Each must tie to a specific surfaced fact and (where possible) a named attendee.
- Hypothesis check: explicitly address each named hypothesis or risk from step 1 — did the data confirm, contradict, or fail to resolve it? Surface in the TL;DR.
- Source tagging: tag key claims with sources (
[CRM], [contact_research], [enrichment], [news], [scoops], [intent]). When contact_research is redacted/minimal, mark the attendee profile with a confidence note.
- Past-date flag: for any date in
account_research that is in the past relative to today, retain and flag for verification rather than dropping silently — could be active negotiation, a stale CRM sync, or a missed milestone.
-
Write the TL;DR last, after the rest is drafted. Frame it explicitly by the meeting purpose and desired outcome.
Output Format
TL;DR
Meeting purpose / desired outcome: [restate the user's context in one line, or "general meeting prep (no context supplied)" if defaulted].
Top 3 to know walking in (each tied to the desired outcome):
- [Most decision-relevant fact]
- [Second]
- [Third]
Hypothesis check (one line per named hypothesis from the input): confirmed / contradicted / unresolved.
Open with: "[Single recommended opening line — verbatim, calibrated to attendee posture]"
Company Snapshot
| Field | Value |
|---|
| Industry | |
| Employees | |
| Revenue | |
| HQ | |
| Business Model | |
| Website | |
One-paragraph overview from the enrichment description.
Relationship Context
Summarize from account_research with source tags: deal status, last engagement, account health, and key history. If no CRM data, say so explicitly. For any past date (renewal, contract end, expiration, last activity, opp close), retain it and flag inline: "Verify — date is in the past; may indicate active negotiation, stale CRM, or missed milestone."
Attendees
For each attendee:
[Name] — [Title]
| Field | Value |
|---|
| Department | |
| Management Level | |
| Email | |
| Time in Role | |
| Posture | Cold / Warm-but-dormant / Active / Hostile |
Why they matter for THIS meeting: 2 lines max. Connect role/background to the decision in front of them.
Talking points for them: 1-2 specific to this attendee.
If contact_research returned redacted/minimal data, add: "Profile data restricted — verify externally."
Talking Points (3-5)
Ranked by impact, each tagged for its audience.
- [Topic]
[for: <attendee names or "all">]: [Why to raise it + supporting data point with source tag]
- ...
Prioritize items that show homework, connect to your GTM offerings, surface competitive angles, or hit a specific persona.
Discovery Questions (3-5)
Specific, anchored in concrete facts from the brief — not generic.
- [for: <attendee or "group">] — [Question grounded in something surfaced above.]
- ...
Suggested Agenda (~30 min)
- (0-5) Open: [Specific opener — relationship-continuity for warm-dormant, value-frame for cold, status-check for active]
- (5-15) Explore: [Primary discovery thread — top talking point + 2 questions]
- (15-25) Develop: [Second thread — secondary point, demo, or proposal]
- (25-30) Close: [Specific desired next step]
What NOT to Do
1-3 specific failure modes for this meeting. Concrete, not generic.
- Don't [specific anti-pattern] — [why it would backfire here].