{"slug": "account-research-agent", "title": "Account Research Agent", "summary": "AgentKit released Account Research Agent, an AI agent that compiles account briefs with verified firmographics, tech stack, triggers, and key people for sales calls. The agent includes an AgentAz governance specification enforcing read-only, cited, and non-fabricating behavior, with human handoff on stale or conflicting data.", "body_md": "## Overview\n\nCompiles an account brief: firmographics, tech stack, recent triggers, and key people, ready before a call.\n\nEvery claim is tied to a source; verified facts are separated from inference.\n\nFlags stale, thin, or low-confidence data instead of presenting it as solid.\n\nDefensive: never fabricates firmographics, contacts, or trigger events, and sticks to professional, public information.\n\n## AgentAz™ specification\n\nA lightweight, design-time governance spec for security review. It documents what this agent is authorized to do — and why — and pairs with whatever policy engine you already run. It does not enforce anything at runtime.\n\nMachine-readable contract (`agentaz.json`\n\n), validated against the open AgentAz™ JSON Schema — bundled for offline use and published at a permanent URL:\n\n```\n{\n  \"$schema\": \"./agentaz.schema.json\",\n  \"version\": \"2.0.0\",\n  \"last_reviewed\": \"2026-06-24\",\n  \"agent_id\": \"account-research-agent\",\n  \"trust_level\": \"A1\",\n  \"dna_pattern\": \"Research\",\n  \"worst_case_action\": \"Includes a stale fact in a brief for human review. Cannot send outreach or write to a CRM.\",\n  \"authority_boundary\": \"Gathers and cites account info; never fabricates; send/CRM-write tools absent.\",\n  \"tags\": [\n    \"sales\",\n    \"account-research\",\n    \"read-only\",\n    \"cited\"\n  ],\n  \"tool_boundary\": {\n    \"allowed_tools\": [\n      \"search_sources\",\n      \"gather_firmographics\",\n      \"find_triggers\",\n      \"cite_source\",\n      \"flag_stale\"\n    ],\n    \"execution_tools_absent\": true,\n    \"read_only\": true\n  },\n  \"output_boundary\": {\n    \"format\": \"structured_json\",\n    \"never_emits\": [\n      \"send_outreach\",\n      \"crm_write\"\n    ],\n    \"never_fabricates\": true\n  },\n  \"cost_boundary\": {\n    \"max_usd_per_trace_loop\": 0.3,\n    \"alert_threshold_usd\": 0.2\n  },\n  \"loop_boundary\": {\n    \"max_reasoning_turns\": 10\n  },\n  \"human_handoff\": {\n    \"triggers\": [\n      \"stale_data\",\n      \"conflicting_sources\",\n      \"thin_coverage\"\n    ],\n    \"destination\": \"sales_rep\"\n  },\n  \"audit\": {\n    \"append_only\": true,\n    \"logs\": [\n      \"sources\",\n      \"citations\"\n    ]\n  }\n}\n```\n\nNew to this? Read the [AgentAz specification guide](/agentaz-specifications) — Trust Levels, DNA patterns, and how it complements your runtime.\n\nAgentAz™ is open source under [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) — schema (frozen v1.0.0) and source on [GitHub](https://github.com/agent-kits/agentaz).\n\n## Governance matrix\n\nA scannable summary of this blueprint's governance coverage, derived from its AgentAz™ specification. It documents the boundaries that already ship — not new functionality.\n\n| Agent goal | Bounded by the authority spec above |\n|---|---|\n| Trust Level | A1 — Research |\n| Tool access | Least privilege — execution tools absent (read-only) |\n| Context handling | Grounded in provided inputs; cites or flags rather than guessing |\n| Memory strategy | Task-scoped; no persistent cross-session memory |\n| Human approval | Required on stale data, conflicting sources, thin coverage → sales rep |\n| Audit trail | Append-only log (sources, citations) |\n| Cost & loop bounds | ≤ $0.3 per loop · ≤ 10 reasoning turns |\n| Recovery / escalation | Escalates to sales rep |\n\n## Agent component mapping\n\nA framework-neutral view of how this blueprint maps to standard agent-architecture components (the vocabulary common to ADK-style frameworks). It describes structure for clarity — not an official integration or certified compatibility.\n\n| Agent | Primary reasoner — Research authority (A1) |\n|---|---|\n| Tools | search sources, gather firmographics, find triggers, cite source, flag stale — execution tools absent (read-only) |\n| Memory | Task-scoped working context; no persistent cross-session memory |\n| Guardrails | Worst-case classified (A1); no execution tools; ≤ $0.3/loop · ≤ 10 turns |\n| Evaluator | Confidence and authority-boundary checks; low-confidence or out-of-bounds results are flagged, not actioned |\n| Handoff | Escalates to sales rep on stale data, conflicting sources, thin coverage |\n\n## Failure modes\n\nSpecific ways this blueprint can fail, and how it is designed to detect, contain, and recover from each — the boundaries that make it safe to run, stated plainly.\n\nIncludes a stale or wrong fact in the account brief that a rep acts on.\n\n- Detection\n- Every fact is cited and stale or unverifiable items are flagged.\n- Mitigation\n- It gathers and cites only; it never sends outreach or writes to a CRM.\n- Recovery\n- The rep verifies before acting and discards the bad item.\n\nFabricates a contact or buying signal.\n\n- Detection\n- Uncited facts are withheld rather than asserted.\n- Mitigation\n- It never invents contacts or signals.\n- Recovery\n- The rep confirms against the source.\n\nSurfaces a contact whose details have changed (wrong role or company).\n\n- Detection\n- Source recency is checked and conflicting sources are flagged.\n- Mitigation\n- It flags thin or conflicting data instead of asserting it.\n- Recovery\n- The rep re-verifies the contact.\n\n## Evaluation\n\nFactual accuracy with citations is primary — a stale or fabricated account fact that a rep acts on is the failure.\n\n| Fact accuracy | Share of brief facts that are correct and current versus verified sources. |\n|---|---|\n| Citation rate | Share of facts that cite a source, with uncited facts withheld. |\n| Fabrication rate | Frequency of invented contacts or buying signals — should be near zero. |\n| Recency handling | Share of changed details (role, company) correctly flagged rather than asserted stale. |\n| Latency | Time to compile an account brief. |\n\n**Recommended approach.** Use accounts with verified reference facts; measure accuracy and citation rate and audit for fabrication. Include contacts with changed details to test recency flagging. It never sends outreach or writes to a CRM.\n\n## When to use\n\nUse it when\n\n- Reps spend too long manually researching accounts before outreach or calls.\n- You want consistent, cited account briefs rather than ad-hoc notes.\n- You want triggers and firmographics surfaced with sources you can trust.\n- You want gaps and stale data flagged rather than papered over.\n\nAvoid it when\n\n- You want it to invent plausible-sounding details to fill a brief — it won't.\n- You need personal/private data on individuals beyond public professional info.\n- You have no access to data sources, so claims would be ungrounded.\n- You expect verified contact details it can't actually source.\n\n## System prompt\n\n```\nYou are an Account Research Agent for a sales team. You compile a brief on a target account — firmographics, tech stack, recent triggers, and key people — for a rep preparing outreach. You are judged on a useful, accurate, source-cited brief and on never fabricating facts, contacts, or triggers.\n\n== CORE PRINCIPLES ==\n1. Cite or don't claim. Every factual claim must be tied to a source you actually consulted. If you can't source it, don't state it as fact — mark it unknown or as an inference.\n2. Fact vs. inference. Clearly separate verified facts (with sources) from your inferences/hypotheses. Label inferences as such; never present a guess as a confirmed fact.\n3. Freshness matters. Note how recent each key data point is. Flag stale data (e.g. headcount or funding that may be outdated) rather than presenting it as current.\n\n== HARD RULES (NON-NEGOTIABLE) ==\n- NO FABRICATION: Never invent firmographics, funding, headcount, tech stack, news/triggers, quotes, or — especially — contact details (emails, phone numbers). Missing = \"not found\", never guessed.\n- NO FAKE TRIGGERS: Do not manufacture a \"recent event\" or buying signal that isn't in a source. A made-up trigger is worse than none.\n- PRIVACY: Use only public, professional information. Do not compile personal/private details about individuals beyond their professional role and public statements.\n- DISAMBIGUATE: If multiple entities match the account name, do not blend them — flag the ambiguity and ask which one.\n- VERIFY CONTACTS: Only include contact info that comes from a legitimate source; otherwise state it wasn't found rather than inferring an email pattern as fact.\n\n== METHOD ==\n- Resolve the account (disambiguate if needed). Gather firmographics, tech stack, recent news/triggers, and key people from sources.\n- For each item: record the source and recency, mark fact vs inference, and flag gaps. Compose a concise brief with talking points grounded only in cited facts.\n\n== OUTPUT FORMAT (return ONE JSON object) ==\n{\n  \"account\": \"<resolved name>\",\n  \"disambiguation\": \"<note if multiple matches, or 'clear'>\",\n  \"firmographics\": { \"industry\": \"<v|null>\", \"size\": \"<v|null>\", \"hq\": \"<v|null>\", \"_sources\": [\"...\"], \"_recency\": \"<as-of>\" },\n  \"tech_stack\": [ { \"tech\": \"<name>\", \"source\": \"<source>\", \"confidence\": \"high|medium|low\" } ],\n  \"triggers\": [ { \"event\": \"<recent event>\", \"date\": \"<when>\", \"source\": \"<source>\" } ],\n  \"key_people\": [ { \"name\": \"<name>\", \"role\": \"<title>\", \"source\": \"<source>\", \"contact\": \"<only if sourced, else 'not found'>\" } ],\n  \"inferences\": [\"<clearly-labeled hypotheses, not facts>\"],\n  \"gaps\": [\"<what couldn't be verified>\"],\n  \"talking_points\": [\"<grounded in cited facts only>\"]\n}\nNever output an unsourced fact or a guessed contact. Mark gaps as gaps.\n```\n\n## Simulate run\n\nTry the agent with a sample task. This is a frontend-only preview that shows how the kit would plan and execute — no API calls, nothing leaves your browser.\n\nFrontend preview only — no data leaves your browser. Tip: press `⌘/Ctrl` + `Enter` to run.\n\n## Setup guide\n\nInstall and connect data sources\n\nInstall the agent and connect it to your enrichment/news/CRM sources.\n\n```\npipx install account-research-agent\naccount-research-agent connect --sources clearbit,news-api,crm\naccount-research-agent doctor\n```\n\nConfigure anti-fabrication guardrails\n\nEnforce citing and the no-guessed-contacts rule.\n\n```\ncp .env.example .env\nANTHROPIC_API_KEY=sk-ant-...\nREQUIRE_SOURCE_PER_FACT=true\nGUESS_CONTACTS=false\nFLAG_STALE_AFTER_DAYS=180\n```\n\nSet brief template\n\nDefine the brief structure and what counts as a trigger.\n\n```\n# brief.yml\nsections: [firmographics, tech_stack, triggers, key_people, talking_points]\ntriggers: [funding, leadership_change, product_launch, expansion]\nprivacy: public_professional_only\n```\n\nRun a brief\n\nGenerate a brief and review sources, recency, and gaps.\n\n```\naccount-research-agent run --account 'Acme Robotics' --explain\n# prints cited firmographics, stack, triggers, people, inferences, gaps\n```\n\nWire into the workflow\n\nGenerate briefs on new accounts and attach them to CRM records.\n\n``` php\n# new-account trigger -> generate brief -> attach to CRM (facts cited, gaps flagged)\n```\n\n## Architecture\n\n## Tools required\n\n## Workflow\n\n1. Resolve the account\n\nIdentify the target entity and disambiguate if multiple matches exist.\n\n2. Gather from sources\n\nCollect firmographics, tech stack, triggers, and key people, recording a source for each.\n\n3. Separate fact from inference\n\nLabel verified facts (with sources) versus inferences/hypotheses.\n\n4. Check freshness & contacts\n\nNote recency, flag stale data, and verify contact details rather than inferring them.\n\n5. Drop the unsourced\n\nConvert any unsourced fact, guessed contact, or invented trigger into an explicit gap.\n\n6. Compose the brief\n\nWrite talking points grounded only in cited facts, with inferences and gaps clearly marked.\n\n7. Stay in scope\n\nKeep to public professional information and avoid private personal details.\n\n## Examples\n\nWell-documented company → cited brief\n\nA company with good public data. The agent compiles firmographics, stack, and a recent trigger, each with a source.\n\nInput\n\n```\nAccount: 'Northwind Logistics' — well-covered mid-market company.\n```\n\nOutput\n\n```\n{\n  \"account\": \"Northwind Logistics\",\n  \"disambiguation\": \"clear\",\n  \"firmographics\": { \"industry\": \"Logistics & supply chain\", \"size\": \"~600 employees\", \"hq\": \"Columbus, OH\", \"_sources\": [\"company site\", \"enrichment provider\"], \"_recency\": \"as of 2026-Q1\" },\n  \"tech_stack\": [ { \"tech\": \"Snowflake\", \"source\": \"job posting\", \"confidence\": \"medium\" }, { \"tech\": \"Salesforce\", \"source\": \"case study\", \"confidence\": \"high\" } ],\n  \"triggers\": [ { \"event\": \"Opened a new West-coast distribution center\", \"date\": \"2026-05\", \"source\": \"press release\" } ],\n  \"key_people\": [ { \"name\": \"(VP Operations)\", \"role\": \"VP Operations\", \"source\": \"company leadership page\", \"contact\": \"not found\" } ],\n  \"inferences\": [\"Likely scaling ops given the new DC — may have data-integration needs (hypothesis, not confirmed)\"],\n  \"gaps\": [\"No verified direct contact emails found\", \"Tech stack partial — inferred from postings\"],\n  \"talking_points\": [\"Congratulate on the new West-coast DC (sourced)\", \"Explore ops-scaling data needs (framed as a question, since it's an inference)\"]\n}\n```\n\n**Note:** Every fact carries a source and recency, the new-DC trigger is real and sourced, and the agent still separates a clearly-labeled inference (scaling needs) from fact and flags that no verified contact email was found. Useful and honest.\n\nAmbiguous account name → disambiguate, don't blend\n\nTwo companies share the name. The agent refuses to merge their data and asks which one.\n\nInput\n\n```\nAccount: 'Apex Systems' — matches both an IT staffing firm and an unrelated industrial-controls company.\n```\n\nOutput\n\n```\n{\n  \"account\": \"Apex Systems (ambiguous)\",\n  \"disambiguation\": \"Multiple matches: (1) Apex Systems — IT staffing/services; (2) Apex Systems — industrial control systems. These are different companies.\",\n  \"firmographics\": { \"industry\": null, \"size\": null, \"hq\": null, \"_sources\": [], \"_recency\": \"\" },\n  \"tech_stack\": [],\n  \"triggers\": [],\n  \"key_people\": [],\n  \"inferences\": [],\n  \"gaps\": [\"Cannot research until the correct entity is confirmed — blending the two would produce a false brief\"],\n  \"talking_points\": [\"Confirm which 'Apex Systems' is the target before proceeding\"]\n}\n```\n\n**Note:** Rather than producing a confident brief that silently mixes two different companies (a classic research failure), the agent stops, lays out the two matches, and asks for disambiguation. A blended brief would be worse than none — the rep would walk into a call with wrong facts.\n\nTempted to invent a contact / trigger → refuse, mark as gap\n\nThe rep wants a decision-maker's email and a recent trigger, but neither is in any source. The agent declines to fabricate.\n\nInput\n\n```\nAccount: 'Cedar Health' — request includes 'give me the VP Eng's email and a recent buying trigger'. No email or recent event found in sources.\n```\n\nOutput\n\n```\n{\n  \"account\": \"Cedar Health\",\n  \"disambiguation\": \"clear\",\n  \"firmographics\": { \"industry\": \"Healthcare technology\", \"size\": \"~200 employees\", \"hq\": \"Austin, TX\", \"_sources\": [\"company site\"], \"_recency\": \"as of 2026-Q1\" },\n  \"tech_stack\": [ { \"tech\": \"AWS\", \"source\": \"job posting\", \"confidence\": \"medium\" } ],\n  \"triggers\": [],\n  \"key_people\": [ { \"name\": \"(VP Engineering)\", \"role\": \"VP Engineering\", \"source\": \"LinkedIn (public role)\", \"contact\": \"not found\" } ],\n  \"inferences\": [],\n  \"gaps\": [\"No verified email for the VP Engineering — not guessing an address from a pattern\", \"No recent buying trigger found in sources — none manufactured\"],\n  \"talking_points\": [\"Reach the VP Eng via a verified channel (not a guessed email)\", \"No fresh trigger to cite — lead with a relevant industry insight instead\"]\n}\n```\n\n**Note:** The defining defensive case: directly asked for an email and a 'trigger,' and both are absent from sources. The agent refuses to invent an email from a guessed pattern or manufacture a buying signal — it marks both as explicit gaps and suggests honest alternatives. Fabricated contacts and fake triggers are exactly how research agents quietly destroy rep credibility.\n\n## Implementation notes\n\n- Require a source per fact and convert anything unsourced into an explicit gap; an account brief's value is its trustworthiness, and one fabricated fact poisons the whole thing.\n- Never guess contact details: an inferred email pattern presented as a verified address is both a credibility and a deliverability risk — mark it 'not found' instead.\n- Don't manufacture triggers; a fake buying signal leads to embarrassing, off-base outreach. No trigger is better than a false one.\n- Disambiguate same-name entities explicitly rather than blending them, which silently produces a wrong brief.\n- Separate and label inferences from facts so reps can use hypotheses as conversation openers without stating them as truth.\n- Stay within public, professional information and avoid compiling private personal data about individuals.\n- Spend the strong model on fact/inference judgment and brief framing — a cheaper model can gather and structure source data.\n\n## Variations\n\nBasic\n\nCited account snapshot\n\nCompiles firmographics, tech stack, and recent triggers with sources for a single account, flagging gaps. On demand.\n\nAdvanced\n\nFact-graded brief\n\nAdds fact-vs-inference labeling, recency/staleness flags, contact verification, disambiguation, and grounded talking points.\n\nEnterprise\n\nGTM research at scale\n\nAdds CRM integration, batch account briefs, territory/ICP scoring, trigger monitoring, source governance, and privacy controls.\n\nDownload the Agent Blueprint\n\n[Download Blueprint (.zip)](/downloads/account-research-agent.zip)\n\nExport\n\n[View the source on GitHub](https://github.com/agent-kits/agentaz/tree/main/kits/account-research-agent)\n\nThis blueprint and the AgentAz™ specification live in the central AgentKits registry — open source under Apache-2.0 (code & schema) and CC‑BY‑4.0 (text).\n\n## Frequently asked questions\n\nNo — that's its core constraint. Every factual claim must be tied to a source it consulted; anything it can't source is marked as a gap rather than invented, and inferences are clearly labeled as hypotheses.\n\nOnly when they come from a legitimate source. It will not guess an email from a naming pattern and present it as verified — if it isn't sourced, it says 'not found', protecting both your credibility and deliverability.\n\nIt surfaces only real, sourced events (funding, launches, leadership changes). It won't manufacture a buying signal, because a fake trigger leads to off-base outreach that's worse than no trigger.\n\nIt disambiguates explicitly and asks which entity you mean rather than blending their data, which would produce a confidently wrong brief.\n\nYes. It uses only public, professional information and doesn't compile private personal details about individuals beyond their professional role and public statements.\n\nVerified facts carry sources and recency; inferences are listed separately and labeled as hypotheses, and unverified items are flagged as gaps — so you always know what you can state confidently.", "url": "https://wpnews.pro/news/account-research-agent", "canonical_source": "https://www.agent-kits.com/kit/account-research-agent", "published_at": "2026-06-21 00:00:00+00:00", "updated_at": "2026-06-26 22:03:35.783100+00:00", "lang": "en", "topics": ["ai-agents", "ai-safety", "ai-ethics", "ai-research", "ai-tools"], "entities": ["AgentKit", "Account Research Agent", "AgentAz", "GitHub", "Apache-2.0"], "alternates": {"html": "https://wpnews.pro/news/account-research-agent", "markdown": "https://wpnews.pro/news/account-research-agent.md", "text": "https://wpnews.pro/news/account-research-agent.txt", "jsonld": "https://wpnews.pro/news/account-research-agent.jsonld"}}