market-sizing
Skill346 starsChanged 38 days agoMITView on GitHub
Market sizing skill for Claude Code and Codex: calculate TAM/SAM for any ICP against Explorium's 150M+ company dataset using real-time firmographic and technographic filters. Iteratively refines filters with the user until the account universe matches intent, then returns the count and filter set for downstream prospecting skills. Use for territory design, capacity planning, investor-ready market sizing, and ICP sharpening. Triggers on 'size the market', 'TAM for', 'how many companies match', 'is my ICP too broad', 'market sizing'. Works in Claude Code, Codex, and Hermes-Agent.
31 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- solanabr/startup-builder-skilltheir own version, first seen Nov 1, 2026
- writer/skillstheir own version, first seen Nov 1, 2026
- Insightful-Pipe/marketing-strategy-skillstheir own version, first seen Nov 1, 2026
- vijaysuperpositionist/skillstheir own version, first seen Nov 1, 2026
- Big-LAORE/Biblioth-que-de-skillstheir own version, first seen Nov 1, 2026
- daviszhen/agent-skillstheir own version, first seen Oct 25, 2026
Used with
Projects with it also use prioritize-features, brainstorm-okrs and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
skytiger6724Skillprioritize-features
Prioritize a backlog of feature ideas based on impact, effort, risk, and strategic alignment with top 5 recommendations. Use when prioritizing a feature backlog, making scope decisions, or ranking product ideas.
Also in 4 projects that use this
skytiger6724Skillbrainstorm-okrs
Brainstorm team-level OKRs aligned with company objectives — qualitative objectives with measurable key results. Use when setting quarterly OKRs, aligning team goals with company strategy, drafting objectives, or learning how to write effective OKRs.
Also in 4 projects that use this
miovragSkillstrategy-red-team
Red-team a PRD, roadmap, or strategy by attacking its load-bearing assumptions before reality does. Steelmans then attacks each claim, ranks failure modes by impact × likelihood × cheapness-to-test, and returns the cheapest test and kill criteria for each. Use when stress-testing a plan, pressure-testing a strategy, challenging assumptions, or preparing a doc for executive review.
Also in 3 projects that use this
launchapp-devSkillinterview-script
Create a structured user interview script with warm-up, core exploration, and wrap-up sections. Use when preparing for user research interviews to ensure consistent, insightful conversations.
Also in 4 projects that use this
About-IntelligenceSkillbeachhead-segment
Identify the first beachhead market segment for a product launch.
Also in 4 projects that use this
nandanosqlSkillcustomer-journey-map
Map the complete customer experience across all touchpoints using the NNGroup framework. Identifies pain points, emotions, and opportunities at every stage of the user journey.
Also in 5 projects that use this
- +5 more from skytiger6724
Other versions31 projects use a version of this.
Word for word · 0
None found.
Edited · 1
Wrote their own version · 30
- openai/plugins★ 7.8ksame name
- OneWave-AI/claude-skills★ 378same name
- hamzafarooq/claude-code-starter★ 145same name
- AlphaMao1/AlphaMao_Skills★ 130same name
- z1993/AlphaMao_Skills★ 130same name
- Mehdibargach/claude-code-pm-skills★ 97same name
- atypica-ai/marketing-skills★ 44same name
- raphaelxiao/mck_skills★ 32same name
- writer/skills★ 9same name
- microsoft/aibast-agents-library★ 8same name
20 more not listed
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 repository21 other files it gives its agents.
- abm-campaignSkill
- account-contact-shortlistSkill
- account-fit-rankSkill
- account-researchSkill
- browser-extension-builderSkill
- clean-dataSkill
- cold-email-lemlistSkill
- competitor-researchSkill
- contact-researchSkill
- decision-makers-mapSkill
- enrich-companySkill
- enrich-contactSkill
- hubspot-enrichment-scoringSkill
- lead-gen-tool-builderSkill
- list-builderSkill
- lookalike-accountsSkill
- meeting-prepSkill
- personalize-emailSkill
- score-leadsSkill
- talent-mappingSkill
- talent-sourcingSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 8 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 27 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Use case (optional): territory design, investor sizing, ICP sharpening (default).
- Distinctive: line 60
If none of the triggers fire, return stats-only and note "stats-only" in the self-check.
- Distinctive: line 62
When pulling: ~25 unsorted rows for ICP sanity (do top names look right, or include conglomerate / BPO / staffing noise?), directional …
- Distinctive: line 84
No native sort on entity fetch.
- Distinctive: line 85
No metro taxonomy; geography resolves to country, region, or city autocomplete.
- Distinctive: line 86
No similar-companies tool inside this skill.
- Distinctive: line 87
No sub-department job-function filter.
- Distinctive: line 88
No Inc / Fortune ranking filters.
“Common” is measured: kept by at least 6 in 10 of the 27 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
Market Sizing
Iteratively refine a company-level ICP filter set and return a count plus a structured filter artifact ready for downstream prospecting work.
Input
- ICP description (recommended): natural language, or "my ICP" / "our ICP" / nothing (ask).
- Use case (optional): territory design, investor sizing, ICP sharpening (default).
- SAM hypothesis inputs (optional): addressable fraction (0 to 1) and ARPA in USD.
Workflow
- Parse the ICP into filter dimensions. Tag each user-specified or unspecified. Persona criteria ("CTOs", "VP Sales") are recorded but NOT applied to the company count.
- Disambiguate ambiguous regions BEFORE counting. "EU" can mean European Union members or the broader European region: ask one clarifying question. Same for "Americas" vs "North America" vs "US and Canada".
Resolve every free-text field via autocomplete, then classify the result into ONE of three branches before sizing.
(a) Clean canonical match. An unambiguous value is returned for the user's phrasing (e.g. "Software Development" for SaaS; "Salesforce CRM" for a Salesforce filter). Commit and proceed.
(b) Brittle or parent-only match. The exact term does not exist in the taxonomy but a parent or sibling does (e.g. "fintech" maps only to a "Financial Services" parent; "Snowflake" only cleans up as "Snowflake Data Cloud" on a variant phrasing). STOP before sizing and surface the candidates to the user with a one-line disambiguation: "No exact match for
<term>; nearest entries are<list>. Approximate with<parent>, seed a known company for a lookalike follow-up, or proceed with a tech-stack or intent proxy?" Do NOT silently substitute the parent.(c) No match after 2-3 variant phrasings (bare term, full product name, vendor-plus-suffix like "Stripe Payments"). Surface "no matching value" and offer the same three options as (b).
For flagship vendors (Snowflake, Databricks, Stripe): try the suffix-qualified variant FIRST ("Snowflake Data Cloud", "Stripe Payments") because the bare token often returns a noise hit.
Taxonomy mutex. LinkedIn industry and NAICS are mutually exclusive on a single query. Query LinkedIn FIRST; commit on a clean (branch a) match; fall through to NAICS only on no-match. Dual-querying both taxonomies in the same pass is acceptable ONLY when LinkedIn lands in the brittle branch (b) AND the user has approved looking at both candidates.
- Tech-stack taxonomy-gap framing. When step 3 lands in branch (c) for a flagship vendor, document this as a coverage gap, NOT a sparsity-narrow result. The skill cannot size around a tech filter with no taxonomy entry; the sparsity probe in step 6 measures something different and should not be conflated.
- Size the audience. Get the total count for the resolved filter set. Country-scoped TAM caveat: the sizing endpoint does NOT strictly enforce country filters at the headline-count level. For any country-scoped TAM, sum the per-location breakdown across requested ISO-2 codes. Never use the global headline count when the user asked for a specific geography.
- Data-sparsity probe (mandatory when tech-stack or intent filters are applied). Size twice: with the filter (count_filtered) and without it (count_unfiltered). If count_filtered / count_unfiltered is below 0.1, treat as coverage-sparse and use count_unfiltered as the operative TAM. Surface "Explorium coverage of [field] is sparse for this segment." Show both numbers.
- Classify the sizing band against the operative TAM.
| Operative TAM | Band | Read |
| > 50,000 | Too broad | Probably not operational. |
| 5,000 to 50,000 | Healthy enterprise/mid-market | Suggest tier segmentation. |
| 1,000 to 5,000 | Sweet spot | Focused primary-tier list. |
| 250 to 1,000 | Tight/niche | Flag capacity feasibility. |
| < 250 | Too narrow | Coverage risk; suggest widening. |
Decide on sample accounts. Default: skip. Pull is paid; stats are free.
Pull a ~25-row sample ONLY when ONE of these triggers fires:
(a) User asked for account names, a quality sanity check, or a downstream list.
(b) Sparsity probe needs noise validation. Ratio in step 6 sits near the 0.10 threshold and you cannot tell from the counts alone whether the filter is sparse-but-real or sparse-and-noisy.
(c) Brittle match accepted in step 3. A parent-approximation or variant-qualified match was committed; entity-quality confirmation would tell you whether the substitution captured what the user meant.
If none of the triggers fire, return stats-only and note "stats-only" in the self-check. Skip the pull even when TAM <= 50,000. The 50,000 ceiling is a maximum, not a trigger.
When pulling: ~25 unsorted rows for ICP sanity (do top names look right, or include conglomerate / BPO / staffing noise?), directional geography and sub-industry shape, noise-rate estimation. The sample is unsorted: directional, not ranked. Do not compute employee or revenue percentages from it.
- Noise-adjusted TAM (mandatory when sample noise is at least 20 percent). Compute
adjusted = round(operative_TAM x (1 - noise_rate), 2 sig figs). Re-classify the band against the adjusted number. Cite specific noisy rows. 20-60 percent noise signals revisiting the filter set, not shipping the count. - SAM hypothesis (only if both inputs supplied). SAM count = operative TAM x addressable fraction. SAM revenue = SAM count x ARPA. Label clearly: hypothesis, not forecast.
- Self-check: headline rounded to at most 2 sig figs; step 3 branch dispositions (clean / brittle-surfaced / no-match) recorded for every free-text field; taxonomy mutex respected (only one of {LinkedIn, NAICS} queried unless user approved dual after a brittle hit); sparsity probe and noise adjustment run when applicable; sample pull triggered for a documented reason from step 8 OR correctly skipped as "stats-only"; unspecified dimensions flagged; persona criteria marked "not applied to company TAM"; region disambiguation resolved; refinement options name a specific dimension and an estimated post-refinement count.
- Present refinement options and loop. Too broad: 2-3 narrowing options with estimated impact. Too narrow: 2-3 widening options. Healthy band: tier segmentation or finalize. Always offer a "save filters" exit so downstream skills can consume the artifact. Re-run from step 3 when filters change and surface the diff. Terminate on finalize.
Output Format
- TL;DR: use case restated; headline
~[count] companies; band label. If the sparsity probe fired, show raw filtered, unfiltered, and operative TAM. If noise-adjusted, show raw, noise rate, adjusted, and the band classified against the adjusted number. 1-2 sentences on operational viability, dominant skew, most consequential refinement. If step 3 surfaced a brittle match, restate the chosen disposition (e.g. "fintech approximated by Financial Services parent, user-confirmed"). - Filters Applied: dimension, value, source (user-specified, unspecified, approximation), and step-3 branch tag for any free-text field (clean / brittle-approximated / proxy). Persona criteria flagged "NOT applied to company TAM."
- Sample Accounts (only when one of the step-8 triggers fired): up to 25 unsorted rows, with a one-line note citing WHICH trigger justified the pull. Sanity check; name the narrowing filter that removes any noise.
- Sizing Band & Refinement: band label, 1-2 sentences on operational implication, 2-3 refinement options each naming a dimension change and an estimated post-refinement count. Or finalize.
- SAM Hypothesis (only if both inputs supplied): TAM count, addressable fraction, SAM count, ARPA, SAM revenue. Hypothesis, not forecast.
- Final Filter Set (on finalize): structured artifact with resolved values for every applied dimension plus operative TAM, band, pass count, and use case.
Limitations
- Size and revenue are bucket filters; exact cutoffs cannot be expressed. Revenue buckets appear to be a deterministic employee-to-revenue heuristic, not real revenue data. 90%+ concentration in one bucket is expected; do not slice revenue after locking size.
- No native sort on entity fetch; samples are directional, not ranked.
- No metro taxonomy; geography resolves to country, region, or city autocomplete.
- No similar-companies tool inside this skill; seed-account workflows belong elsewhere.
- No sub-department job-function filter; persona is recorded only, never applied to the company count.
- No Inc / Fortune ranking filters; public-vs-private is the only company-type boolean.
- Industry taxonomy (LinkedIn vs NAICS) and country code vs region-country code are each mutually exclusive on a single query. Dual-querying is allowed under the brittle-branch exception in step 3, but the FINAL filter set must commit to one taxonomy per dimension.
- Flagship vendor names (Snowflake, Databricks, Stripe) sometimes require a suffix-qualified phrasing to autocomplete cleanly; bare-token queries can return noise. Step 3's branch (b) handling exists specifically to surface this brittleness rather than silently substitute.
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.

