Research a company's buyers and synthesize 4-6 grounded, specific buyer personas. The bundled script does keyless I/O (fetch the company site into a text bundle); you, the agent, do all the segmentation and persona synthesis from that bundle plus your own search/research, then run the diversity coverage check.
When to use
- "Build ICP personas for [company]." / "Who are our buyers really?"
- Upstream of
icp-website-audit(it calls this when personas don't yet exist). - Any messaging/positioning work that needs a grounded model of how buyers evaluate.
How to run
Step 1 — research the company site (deterministic script)
python3 ${SKILL_DIR}/scripts/research_company.py \
--url https://example.com \
--company "Example" \
--max-pages 8 \
--output ${WORKSPACE}/company_bundle.json
Python 3 stdlib only — no install. It fetches the homepage and discovers + fetches
same-domain high-signal pages (pricing, about, customers/case-studies, solutions,
product, "who it's for", industries) into one JSON bundle of {url, title, headings, text}. For JS-heavy / auth-walled pages that come back thin, fall back to a
web-automation (Playwright + Robomotion Proxy) fetch, and use an apify review actor
only as a hostile-site fallback for G2/Capterra/TrustRadius.
Step 2 — signal search (you, the agent)
Run searches with whatever search tool you have: "[company] customers", "case studies", "[company] reviews" (G2/Capterra/TrustRadius), "[company] vs"
(comparisons reveal segments), "[company] jobs". Fold the results into your context.
Step 3 — extract, segment, synthesize (you, the agent)
From the bundle + searches, extract: problem solved, pricing/packaging (→ ACV & buyer type), verticals, target sizes, roles/titles in case studies, GTM motion. Identify 4-6 distinct segments and write a rich synthetic persona for each per the schema below.
Step 4 — diversity check (you, the agent)
Enforce coverage: at least one technical, one business, one skeptical, one
junior/researcher persona; cover multiple company tiers if the company serves them.
If known_icps were supplied, skip discovery and synthesize directly against them.
Outputs
Write all three to ${WORKSPACE} (and attach to the Agent Teams channel as a reusable
asset):
personas.json— array; each persona:id, name, segment, title, company_profile, demographics, situation, pain_points, buying_trigger, decision_criteria (ranked), skepticism_profile, technical_sophistication, language, evaluation_behavior.personas.md— human-readable prose profiles.segments.md— summary table + the diversity coverage check.
Skepticism profile is the highest-value field: every persona needs a clear "what would make them NOT buy" and a default vendor assumption.
Credentials / env
- Required: none. The research script is keyless; persona synthesis is your job as the agent, so no LLM key is needed in the script layer.
- Optional: if
APIFY_API_TOKENis set → Apify review-site (G2/Capterra/TrustRadius) scraping for richer voice-of-customer input; if not → keyless direct fetch / search snippets (default).PINECONE_API_KEY/QDRANT_URL— if set → semantic persona dedup; if not → skip dedup (default). The default keyless serp/fetch path needs no key.
Notes & edge cases
- Specificity beats abstraction ("Sarah, Sr. Demand Gen at a 50-person B2B SaaS who just lost her SDR team", not "Marketing Manager"). Spend real effort in research — don't stop at the homepage; the script already pulls deeper pages for you.
research_company.pycaps each page at 20 KB of text and 2 MB of HTML, fetches up to--max-pagesdeep pages, and backs off on HTTP 429/503.- No paid lead/enrichment API is required — this is research + synthesis only.