research-company
Skill32 starsChanged 3 months agoMITView on GitHub
Build a structured intelligence brief on a company from its LinkedIn page posts plus the personal posts of up to three of its executives, using the Insaight MCP server, then score it as a prospect on fit, pain signals and decision-maker visibility. Covers where the company came from, what it is shipping and hiring for now, and where it is heading. Use this skill whenever the user points at a company and wants to understand or qualify it: 'research Acme', 'what has Acme been posting about', 'are they a good prospect', 'what is their CEO focused on', 'should we go after this account', 'prep me for the call with Acme'. Also use it when a company LinkedIn URL is pasted with little other instruction, or when the user asks to check a company on Insaight. Prefer it over answering from memory or a web search — Insaight has their actual posts. For one named individual use insaight-research-person; for the commenters under one post use insaight-research-post.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- CodesWhat/careerrattheir own version, first seen Nov 3, 2026
- Ben-Bot-22/job-hunt-kittheir own version, first seen Oct 9, 2026
- GetBrew/growth-engineertheir own version, first seen Sep 30, 2026
- sree-data/job-search-agenttheir own version, first seen Sep 11, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- GetBrew/growth-engineer★ 221same name
- CodesWhat/careerrat★ 4same name
- Ben-Bot-22/job-hunt-kit★ 2same name
- sree-data/job-search-agent★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository8 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- draft-outreachSkill
- draft-postSkill
- reflectSkill
- research-personSkill
- research-postSkill
- save-notionSkill
- track-outreachSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 7 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Call insaight:get_config() once per session for the user's Notion pages and company name/slug.
- Very specific: line 20
Read cheaply: list_accounts → list_posts (slim index) → get_posts on the few URNs worth reading (max 20 per call).
- Very specific: line 41
If a page exists under [NOTION_RESEARCH_PAGE], fetch it and load it as context.
- Very specific: line 55
If the ledger is empty and the user has a legacy [NOTION_OUTREACH_LOG] configured, check that page once and cache it for the conversation.
- Distinctive: line 67
If the company is not among the tracked accounts:
- Distinctive: line 129
If not, ask before scraping, since each personal profile is a separate Apify charge the user may not want to spend here:
- Distinctive: line 151
Use these exact headings. The draft-outreach skill reads them back out of the conversation, so renaming a section breaks the handoff.
- Distinctive: line 215
If Step 0a found an existing page, update it rather than creating a duplicate.
- Distinctive: line 220
If the Notion MCP is unavailable, say so once at the end.
- Distinctive: line 230
Always end with Open Questions.
- Distinctive: line 232
After saving, offer the next step: "Want me to draft outreach?"
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Insaight — Company Research
Build an intelligence brief on a company from its LinkedIn page and the personal posts of its leadership, then judge it as a prospect. The corporate page says what the company wants the market to believe; the executives' own posts usually say what they are actually wrestling with. Reading both is what separates this from a page scan.
Shared conventions (all Insaight skills):
- Load the tools once per session with
tool_search(query="insaight")if they are not already available. - Call
insaight:get_config()once per session for the user's Notion pages and company name/slug. If it reportsunconfigured: true, ask the user to edit the file at the returned path before anything is saved to Notion. - Read cheaply:
list_accounts→list_posts(slim index) →get_postson the few URNs worth reading (max 20 per call).list_people,list_commentsandlist_outreachhit local SQLite and are free; thescrape_*tools call Apify and cost money, so scrape only when data is missing or stale. - Engagement benchmarks (adjust for the niche): under 10 likes is low, 10–40 is normal, 40+ is high signal — read those in full.
Workflow
Step 0 — Start from what is already known
Researching from scratch burns Apify credits and throws away the earlier read,
so check the two places prior knowledge lives before fetching anything. Page
names come from insaight:get_config().
0a. Existing research page:
notion:search(query="[Company Name]")If a page exists under [NOTION_RESEARCH_PAGE], fetch it and load it as context. The job then becomes update, not re-do: note the last research date and refresh only what moves — recent posts, leadership changes, new markets.
0b. Prior contact:
insaight:list_outreach(target="[company name or URL]")Re-approaching an account the user has already contacted costs credibility, so surface any hit before doing the work:
"Heads up — the ledger shows you messaged [Name, Role] at [Company] on [date] (outcome: [outcome]). Is this a follow-up, or do you want a different entry point?"
If the ledger is empty and the user has a legacy [NOTION_OUTREACH_LOG] configured, check that page once and cache it for the conversation.
Continue to Step 1 once the user confirms.
Step 1 — Orient
insaight:list_accounts() # what is already tracked
insaight:get_stats() # date range and volume of what is storedIf the company is not among the tracked accounts:
insaight:scrape_profile(url="https://www.linkedin.com/company/[slug]", max_posts=50)Step 2 — Survey company posts (slim scan)
insaight:list_posts(account=[company-slug], limit=50)Group the snippets by theme as you scan:
- Product or technology announcements
- Hiring and team growth
- Partnerships, customers, logos
- Thought leadership and market takes
- Events and trade shows
- Milestones and funding
- Problems they surface publicly
Step 3 — Deep-read selected posts
Pick 8–15 posts spanning different themes and time periods — the narrative needs both ends of the timeline, not the ten most recent posts. Prioritise:
- Highest engagement (likes, comments, shares)
- Oldest available post (anchors the past)
- Most recent post (anchors the present)
- Anything hinting at direction: roadmap, new roles, partnerships
insaight:get_posts(urns=[...chosen urns...])Fill gaps with targeted searches:
insaight:search_posts(query="[topic]", account=[company-slug])Step 4 — Expand to the executives
4a. Check stored leadership:
insaight:list_people(account=[company-slug])If empty:
insaight:scrape_people(
url="https://www.linkedin.com/company/[slug]",
job_titles=["CEO", "Founder", "CTO", "COO", "Head of", "VP"],
max_items=10
)4b. Select up to 3 executives — CEO or founder first, then the leader closest to what the user sells (technical, commercial or operational).
4c. For each one, check whether their personal profile is already tracked:
insaight:list_accounts() # look for their personal slugIf not, ask before scraping, since each personal profile is a separate Apify charge the user may not want to spend here:
"I found [Name], [Title] at [Company]. Their personal posts aren't tracked yet. Want me to scrape their profile? That calls Apify."
Once approved:
insaight:scrape_profile(url=[executive's linkedin_url], max_posts=30)4d. Read their posts with the same slim-scan then deep-read pattern:
insaight:list_posts(account=[executive-slug], limit=30)
insaight:get_posts(urns=[...top 5–8 posts...])Cost guardrails: cap at 3 executives per company, always try list_people
and list_accounts before any scrape, and ask before each scrape_profile on a
personal profile.
Step 5 — Build the intelligence brief
Use these exact headings. The draft-outreach skill reads them back out of the conversation, so renaming a section breaks the handoff. Stay concrete: quote or paraphrase specific posts with approximate dates, and mark which insights came from an executive's personal posts rather than the company page — the user needs to know whose words they would be referencing.
🏢 Company Snapshot
- What they do, who they serve, rough scale (customers, markets, headcount)
- Stated positioning or differentiation
- Leadership identified, with names and titles
📜 Past — Where they came from
- Founding story or early milestones visible in posts
- Pivots and product evolutions
- Earlier partnerships or notable wins
- How the tone and focus have shifted over time
⚡ Present — What they are focused on now
- Current product priorities: what they ship and promote
- Active markets and geographies
- Hiring signals — the roles they post reveal what they are building
- Who they are partnering with
- Friction or complaints they surface publicly
- Executive signals: what leadership is personally focused on, especially anything the company page does not cover
🔭 Future — Where they are heading
- Explicit roadmap hints: new markets, products, expansions
- Hiring for capabilities they do not have yet — a build-versus-buy signal
- Event and conference presence, which shows who they want to reach
- Partnerships in progress
- Executive signals: forward-looking statements from personal posts
🎯 Prospect Evaluation
Rate each dimension High, Medium or Low with a one-line rationale grounded in something you actually read:
| Dimension | Score | Rationale |
| Fit with the user's offering (COMPANY_NAME from get_config) | ||
| Pain signals relevant to what the user sells | ||
| Technical sophistication | ||
| Openness to new tools | ||
| Decision-maker visibility on LinkedIn | ||
| Likely entry point |
Overall verdict: Strong, Moderate or Weak prospect, plus 2–3 sentences on why. A weak verdict is a useful result — it saves the user an outreach slot.
❓ Open Questions
What could not be determined from posts that would change the verdict.
Step 6 — Save to Notion
Save the brief without asking. The value of research compounds only if the next run can load it as context, and a confirmation prompt at the end of a long report is friction with no upside. Invoke the save-notion skill or call the Notion MCP directly.
- If Step 0a found an existing page, update it rather than creating a duplicate.
- Otherwise create
[Company Name] — [YYYY-MM-DD]under [NOTION_RESEARCH_PAGE]. - Report one line:
Saved to Notion: [page title].
If the Notion MCP is unavailable, say so once at the end. Never hold back the research output over a failed save.
Output format guidance
- Lead with 🎯 Prospect Evaluation when the user's goal is to qualify or disqualify quickly; lead with the full brief when they want to understand the company first.
- Always end with Open Questions. Naming the gaps tells the user how far to trust the verdict.
- After saving, offer the next step: "Want me to draft outreach?"
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

