Build Guide

Build a Claude Code Account Research Skill

The skill file, the prompts, and the wiring. End to end, in one read.

Build a Claude Code Account Research Skill
Build a Claude Code Account Research Skill

What This Skill Replaces

Without the skill, a GTM Engineer or SDR types a long prompt every time they want account research. "Research Acme Corp. Pull firmographics, recent funding, hiring signals, tech stack, and CRM history. Write a one-page brief with these sections..."

With the skill, the same person types "research Acme Corp" and gets the same output. The skill is the institutional memory of how your team does research. It survives context resets, travels across team members, and produces consistent output every time.

For background on Claude Code skills generally, see Claude Code Skills for GTM Engineers. This guide builds one specific skill end to end.

Step 1: Set Up the Skill Directory

Skills live in ~/.claude/skills/. Create a directory for the new skill:

mkdir -p ~/.claude/skills/research-account && cd ~/.claude/skills/research-account

Create the SKILL.md file in this directory. That's the only required file. You can add other files (templates, examples, reference data) if useful.

Step 2: Write the Frontmatter

The frontmatter at the top of SKILL.md is what Claude Code reads to decide whether to invoke the skill. Be specific about triggers:

---

name: research-account

description: Use when the user says "research [company]", "/research-account [company]", "look up [company]", or "tell me about [company]" as a B2B account. Pulls firmographic data, recent funding, hiring signals, tech stack, and CRM history. Writes a one-page brief to a Notion page and updates the HubSpot company record. Do NOT use for personal contact research (use research-contact for that).

---

The triggers are explicit. Include the slash-command form, the natural-language phrasings your team actually uses, and a "do NOT use for" clause to prevent over-invocation.

Step 3: Write the Context and Inputs Sections

Below the frontmatter, the body opens with two short sections.

Context. One paragraph on what the skill does and why. Helps the agent and future maintainers keep the scope tight.

Inputs. What the skill needs to run. Usually a company name or domain. Optional flags like "depth" (light vs deep research) or "format" (brief vs full).

Example:

"Account research generates a one-page brief on a B2B target account, combining firmographic enrichment, recent news, and CRM context. Use it before a discovery call or for cold prospect prioritization. Inputs: company name (required), domain (optional, inferred if missing), depth (light or deep, default light)."

Step 4: Write the Steps Section

This is where the skill earns its keep. Numbered, explicit steps. The model follows them in order.

1. Parse the company name and domain from the user's input. If no domain, infer from the name using web search.

2. Call the HubSpot MCP server. Look up the company by domain. If found, capture: deal_count, last_activity_date, primary_owner_email, current_lifecycle_stage, and existing_summary (if present).

3. Call the Clay MCP server. Pull firmographics: employee_count, revenue_range, industry, headquarters, founded_year, technologies. If Clay misses, fall back to a web search.

4. Call the news search. Pull articles from the last 90 days. Filter to substantive: funding, leadership changes, product launches, partnerships, layoffs. Discard listicles and SEO churn.

5. Score the account against the ICP rules in CLAUDE.md. Output: score 0-10, tier (A/B/C/D), one-sentence rationale.

6. Write the brief in the format specified in the Output Format section below.

7. If the user requested "deep" mode, also pull hiring signals (job postings on LinkedIn and the company's careers page) and tech stack changes in the last 90 days.

8. Save the brief to a Notion page in the "Account Research" database. Update the HubSpot company record with the ai_research_summary and ai_research_updated_at properties.

Step 5: Write the Output Format Section

Define the exact structure of the brief. Field names, ordering, length per section.

Sample structure:

Header. Company name, domain, employee count, industry, ICP tier and score.

The 30-second version. Three to five sentences. What the company does, why they fit (or don't), what changed recently.

Firmographics. Bullet list: employees, revenue range, founded, HQ, tech stack (top 5).

Recent signals. Bullet list of substantive news from last 90 days. Each item: date, source, one sentence.

CRM context. Open deals, last touch, owner, any open opportunities. If no CRM history, say so.

Recommended angle. One paragraph on the likely entry point given the signals and the ICP fit.

Sources. Footnotes for any web sources cited.

This structure is what makes every brief look the same regardless of who triggered it.

Step 6: Write the Guardrails Section

Explicit denial is more reliable than implicit assumption.

The skill does NOT: write to the CRM beyond the two specified properties. Send any external communication. Update the deal record. Call paid enrichment vendors if the company was researched within the last 30 days (check the existing_summary timestamp).

If the user asks the skill to do any of these, decline politely and suggest the right tool. A vague guardrail set lets the agent improvise. Explicit ones don't.

Step 7: Add an Example Output

Include one full example brief at the bottom of the skill file. The model uses it to calibrate format and tone.

The example should be realistic. Real company name, real signals, the kind of brief your team actually wants to read. A fake or generic example produces fake or generic output.

Step 8: Test on 10 Real Companies

Pick 10 companies your team has researched manually. Trigger the skill on each one. Compare the agent's output to what a human would have written.

Watch for three failure modes. Stale data. The enrichment is from a year ago and looks fresh. Fix by adding a freshness check to the steps. Plausible-but-wrong claims. The agent invented a tech stack the company doesn't use. Fix by requiring explicit citations for substantive claims. Off-format output. The brief drifted from your team's standard. Fix by tightening the Output Format section and updating the example.

Once 10 briefs are consistently right, the skill is ready for team use.

Step 9: Share with the Team

Move the skill to your team's shared skills repo. Each engineer clones it into their local ~/.claude/skills/team-shared/. Symlink to ~/.claude/skills/research-account so the trigger works.

Updates flow through pull requests. Quarterly review keeps the skill from drifting.

For more skill patterns, see Claude Code Skills for GTM Engineers. For the broader sales agent build, see the sales agent guide. For the CRM wiring this skill depends on, see Claude Code MCP HubSpot.

Authoritative References

For the Claude Code skills specification, see Anthropic's skills documentation. For MCP server setup that this skill relies on, see the MCP documentation.

Frequently Asked Questions

What does an account research skill do, exactly?

It's a triggered workflow. The user types something like 'research Acme Corp' or '/research-account Acme Corp' and Claude Code loads the skill, which contains instructions to pull firmographic data from your enrichment vendor, CRM history from HubSpot or Salesforce, recent news from a web search, and a one-page brief in your team's standard format. The skill encapsulates the entire research pattern so every team member gets consistent output without typing a long prompt.

How long is a typical Claude Code account research skill file?

Between 80 and 200 lines of markdown. The frontmatter is 5 to 10 lines. The skill body has 4 to 6 sections: context, inputs, steps, output format, guardrails, and example output. Skills longer than 200 lines usually need to be split into smaller skills, because the model has to load the whole file into context every time it triggers.

Can a Claude Code skill call multiple MCP servers in one run?

Yes. A skill is just instructions for what the agent should do when invoked. If the instructions say 'call the HubSpot MCP for the company record, then call Clay for firmographics, then call a web search for recent news', the agent does each call in sequence (or in parallel if you instruct it to). The MCP servers must be wired separately in your .mcp.json or via claude mcp add. The skill assumes they're available.

Where does the output of a Claude Code research skill go?

Wherever you tell it to in the skill's output section. Common destinations: a Notion page (write via the Notion MCP), a HubSpot custom property (write via the HubSpot MCP), a Slack DM (post via the Slack MCP), or a Markdown file in your project's research/ directory. Most teams write to two places: a structured CRM property for downstream automation and a human-readable Notion page for the SDR to read before the call.

How do I make the research skill use my team's specific ICP rules?

Reference your CLAUDE.md from inside the skill. The CLAUDE.md holds the persistent ICP rules. The skill calls the model with instructions like 'score the account against the ICP rules in CLAUDE.md and include the score in the brief'. This pattern keeps the ICP definition in one place and reuses it across all skills that touch ICP scoring. When the ICP changes, you update CLAUDE.md once and every skill picks it up.

Source: State of GTM Engineering Report 2026 (n=228). Salary data combines survey responses from 228 GTM Engineers across 32 countries with analysis of 3,342 job postings.

Get the Weekly Pulse

Salary shifts, tool intel, and job market data for GTM Engineers. Weekly playbooks for building reusable GTM workflows in Claude Code.