company-research
Autonomous web research that produces a sales/outreach-ready HTML company brief. Identifies people via website, news, blogs, talks, GitHub, papers, patents, SEC filings, and Crunchbase. Public sources only, every claim cited.
What this skill does
# Company Research
You perform autonomous web research on a named company and produce a sales/outreach-ready HTML brief. You research the data yourself — do not ask the user for facts they would need to look up. Only ask the user for decisions and confirmations.
**Hard rules — do not violate:**
- Public sources only. No login-gated platforms (LinkedIn pages requiring sign-in, paywalled databases, etc.).
- No email guessing. No phone numbers. No private contact data of any kind.
- No inference of facts not stated in a cited source.
- Every non-trivial claim must cite a source via numbered superscript linking to the Sources section.
- If the user asks to add private contact data or scrape gated platforms, refuse and state this policy.
---
## Phase 1 — Setup
### 1. Collect input
Accept:
- A company name (required)
- Optional: company website URL, industry hint, target role focus, region/country
- No input or vague input → enter interview mode (foundation §7)
In interview mode, gather only the **company name**. Everything else is optional.
### 2. Disambiguate
WebSearch the company name. If multiple plausible entities exist (same name across industries, regions, or unrelated organizations), present the top candidates with one-line distinguishers and ask the user to pick. Do not guess.
If only one plausible entity exists, present a one-line confirmation:
```
Researching: [Company Name] — [one-line description from search result] ([domain])
```
Wait for confirmation or correction before proceeding.
### 3. Confirm scope and output path
Present detected scope:
```
**Company**: [name]
**Website**: [URL]
**Industry**: [if known]
**Target role focus**: [if provided, else "all functions"]
**Region**: [if provided, else "global"]
**Output**: /documentation/[company-slug]/company-research/[company-slug].html
```
Ask for confirmation or path override. Create the directory if it does not exist.
---
## Phase 2 — Research pipeline
Execute these 11 steps. Track every URL consulted with access date. For each piece of evidence, capture: source URL, evidence quote (verbatim, short), date of source.
**Step 1 — Canonical website crawl.** WebFetch the homepage, then `/about`, `/team`, `/leadership`, `/people`, `/careers`, `/press`, `/contact`, `/company`, `/our-story`. Extract named people with roles. Note publication dates if visible.
**Step 2 — Company blog / engineering blog.** Locate via homepage links or WebSearch `site:[domain] blog`. WebFetch recent post index. Capture author names + bios where listed. Note post topics and dates for the activity timeline.
**Step 3 — News & press releases.** WebSearch `"[company name]" announcement|raises|launches|appoints|hires` and `"[company name]" CEO|CTO|founder|VP interview` from the last 12 months. WebFetch top results. Capture quoted spokespeople with role attribution and recent product/business events.
**Step 4 — Conference talks & podcasts.** WebSearch `"[company name]" speaker|keynote|talk` and `"[company name]" podcast guest`. WebFetch event pages, YouTube descriptions where accessible. Capture speakers with role attribution.
**Step 5 — GitHub.** WebSearch `site:github.com "[company name]"` and `"@[domain]" site:github.com`. Look for a company org page (`github.com/[company]`) — WebFetch the People tab if public. Capture engineers who publicly list the company in their profile.
**Step 6 — Google Scholar / arXiv.** WebSearch `"[company name]" site:scholar.google.com` and `"[company name]" site:arxiv.org`. Capture paper authors with company affiliation. Note paper titles and dates for the activity timeline.
**Step 7 — Patents.** WebSearch `"[company name]" site:patents.google.com` with the company as assignee. Capture inventors. Note recent patents for the activity timeline.
**Step 8 — SEC filings (US public companies only).** WebSearch `"[company name]" site:sec.gov 10-K` or `DEF 14A`. WebFetch the most recent filing. Extract named executive officers and directors. Skip if the company is private.
**Step 9 — Crunchbase public pages.** WebSearch `"[company name]" site:crunchbase.com`. WebFetch the public page (do not attempt to access gated content). Capture founders and listed key people.
**Step 10 — Trade press & industry awards.** WebSearch `"[company name]" award|honoree|"40 under 40"|"top [industry] leaders"`. Capture honorees with role attribution.
**Step 11 — Recent activity sweep.** WebSearch `"[company name]"` filtered to the last 12 months. Capture funding rounds, acquisitions, product launches, partnerships, executive moves, layoffs. Each event becomes a timeline entry.
**Per step**: if WebSearch returns nothing useful, broaden the query (drop quotes, try synonyms) once. If still empty, record the gap and move on.
**Per WebFetch**: if a page is JS-heavy or empty, note the skip in Assumptions & Limitations. Do not retry endlessly.
---
## Phase 3 — Synthesize
### Deduplicate people
- Match across sources by name + role similarity
- On role conflicts: keep both, flag the conflict in the person card, prefer the most recent source for the displayed title
- One card per person, with all sources listed
### Group by function
- **Leadership**: C-suite, founders, board, VP+ roles
- **GTM**: Sales, marketing, RevOps, customer success, BD, partnerships
- **Engineering**: SWE, infra, platform, security, data, ML
- **Product**: PM, design, research, UX
- **Other**: Everyone else (finance, legal, HR, ops)
If a `target_role_focus` was provided, surface the matching function group first and elaborate it; keep the others compact.
### Confidence assignment per person
- **High**: Named on the company's own website OR ≥2 independent reputable sources corroborate the role
- **Medium**: Named on one reputable third-party source (news, conference page, Crunchbase) with role attribution
- **Low**: Named with weaker signal (GitHub profile alone, single secondary mention)
### Recency tag per person
- Use the date of the source the role came from (e.g., `2025-Q4`, `2024-10`, `2023`)
- If a role conflict exists, note it: `2025-Q1 (VP Eng) / 2024-Q2 (Director Eng)`
### Outreach hooks
Generate 5–10 conversation starters, each grounded in a specific cited piece of activity (recent talk, blog post, hiring pattern, product launch, paper). Each hook names the topic, the person or team it ties to, and the source. Hooks must be:
- Specific (not "they care about scalability")
- Tied to dated activity within the last 12 months when possible
- Useful as an opening sentence in an outreach email
---
## Phase 4 — Render HTML
Produce a **single self-contained HTML file** at the agreed output path. No external CSS, JS, or fonts. Embedded `<style>` only. Must open and render correctly in any modern browser offline.
### Structure
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Company Research — [Company Name]</title>
<style>/* embedded, see Style below */</style>
</head>
<body>
<header>
<h1>[Company Name]</h1>
<p class="subtitle">Sales/outreach research brief — generated [YYYY-MM-DD]</p>
</header>
<section id="snapshot">
<h2>Company snapshot</h2>
<dl>
<dt>HQ</dt><dd>[city, country] <sup><a href="#src-N">[N]</a></sup></dd>
<dt>Industry</dt><dd>... <sup>[N]</sup></dd>
<dt>Founded</dt><dd>... <sup>[N]</sup></dd>
<dt>Size estimate</dt><dd>... <sup>[N]</sup></dd>
<dt>Funding stage</dt><dd>... <sup>[N]</sup></dd>
<dt>Description</dt><dd>... <sup>[N]</sup></dd>
</dl>
</section>
<section id="timeline">
<h2>Recent activity (last 12 months)</h2>
<ol class="timeline">
<li>
<span class="date">YYYY-MM-DD</span>
<span class="event">[event description]</span>
<sup><a href="#src-N">[N]</a></sup>
</li>
<!-- chronological, newest first -->
</ol>
</section>
<section id="roster">
<h2>People</h2>
<section class="function-group">
<h3>Leadership</h3>
<div cRelated in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.