tam-and-sourcing
Skill1 starsChanged 3 months agoMITView on GitHub
Use when the user says "how big is our TAM", "source my market", "build the universe", "pull a list of companies", "market sizing", "where do we find these accounts", "we need more accounts in the funnel". Sizes the addressable universe, then pulls it in cost-controlled pages with dedup against what already exists. Writes workspace/data/universe.csv.
In this repository25 other files it gives its agents.
- agent-guardrailsSkill
- agent-observabilitySkill
- agent-rolloutSkill
- agent-scopingSkill
- ai-governanceSkill
- artifact-evalSkill
- attribution-architectureSkill
- context-portfolioSkill
- credit-and-cost-controlSkill
- data-hygieneSkill
- data-model-and-syncSkill
- enrichment-waterfallSkill
- eval-calibrationSkill
- eval-loopSkill
- eval-spec-authoringSkill
- gtm-systems-auditSkill
- icp-scoring-engineSkill
- lifecycle-and-routingSkill
- martech-stack-auditSkill
- ops-and-scale-osSkill
- reporting-architectureSkill
- signal-pipelineSkill
- skill-authoringSkill
- warehouse-and-pipesSkill
- writing-qualitySkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 8 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
If a filter cannot be expressed as a field, it is a qualification criterion for later, not a sourcing filter.
- Distinctive: line 45
Run a count-only query first.
- Distinctive: line 60
Before pulling, compute the overlap:
- Distinctive: line 73
Never a single unbounded pull.
- Distinctive: line 81
Pull identifiers only at this stage: Do not enrich during sourcing.
- Very specific: line 87
Use whatever is available for free at this stage: employee count, industry match strength, geography, existing relationship, known …
- Distinctive: line 91
Every row carries where it came from and when.
- Distinctive: line 98
Size before pulling: Always. Counting is free
- Distinctive: line 100
Reconcile against CRM and suppression first: Never pay for what you own
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
TAM and Sourcing
Turn a market definition into a deduplicated, sized, prioritized universe. Sizing first, pulling second, and never the reverse.
When to use
- Standing up a program and nobody knows how many accounts exist
- A segment expansion decision needs a denominator
- The current list is too small to hit a pipeline number and you need to know whether more exist
- Territory planning
Inputs
- Reads:
workspace/data/object-model.md,workspace/data/suppression.csv(both required) - Needs from user: the segment definition in firmographic terms, geography, the exclusions, and the current account list
Do not run this without the object model. Sourcing into an undefined model produces a universe you cannot dedup.
Workflow
1. Write the segment definition as filters
Vague segment definitions produce unusable universes. Convert prose into filters.
"Mid-market SaaS in North America" is not a definition. This is:
Industry: <specific codes or categories, listed>
Employee count: <range>
Revenue: <range, or a proxy>
Geography: <countries, or regions>
Business model: <B2B, subscription, etc.>
Technology: <required stack signals, if any>
Excluded: <competitors, resellers, staffing, agencies, franchises>If a filter cannot be expressed as a field, it is a qualification criterion for later, not a sourcing filter. Note it and move on.
2. Probe the size before pulling anything
Run a count-only query first. Sizing costs nothing and pulling costs money.
Then react to the number:
| Universe size | Reading | Action |
| Under 200 | Very tight, possibly too tight | Confirm the filters are not accidentally excluding. Consider widening one dimension |
| 200 to 2,000 | The workable band for account-based work | Proceed. Full enrichment is affordable here |
| 2,000 to 20,000 | Too large to treat individually | Add a prioritization dimension before pulling. Pull the top tier only |
| Over 20,000 | The segment is not a segment | Go back to step 1. Something is wrong with the definition |
A universe larger than your team can work is a definition problem, not a capacity problem. Adding a filter is cheaper than enriching 20,000 records you will never touch.
3. Reconcile against what you already have
Before pulling, compute the overlap:
Universe size n
Already in CRM n (matched on normalized key)
On the suppression list n
Net new to source n ← the only number that should be pulledTeams routinely pay to source records they already own. The reconciliation is one join and it is always worth doing.
4. Pull in pages, with a ceiling
Never a single unbounded pull.
Page size: 500 rows
Ceiling: <stated before starting>
Fields at pull: identifiers and firmographics onlyPull identifiers only at this stage. Do not enrich during sourcing. Sourcing establishes existence, enrichment fills detail, and they have completely different cost profiles. Mixing them means paying enrichment prices on records that will be disqualified thirty seconds later.
5. Prioritize before handing off
The universe is not a work list. Add a coarse priority so enrichment runs on the top of the list first.
Use whatever is available for free at this stage: employee count, industry match strength, geography, existing relationship, known technology fit. A three-band split is enough. Precision comes later in icp-scoring-engine.
6. Record the provenance
Every row carries where it came from and when. Without provenance you cannot tell a stale 2024 pull from a fresh one, and you will re-source records you already have.
Output
- Writes:
workspace/data/universe.csvwith provenance columns - Prints: the filter definition, the probe count, the reconciliation table, rows actually pulled, spend, and the priority band distribution
Rules & quality bar
- Size before pulling. Always. Counting is free
- Identifiers only at sourcing. Enrichment is a separate, gated step
- Reconcile against CRM and suppression first. Never pay for what you own
- Every pull is capped. State the ceiling before starting
- Provenance columns on every row: source, query, date
- A universe over 20,000 means the definition is wrong. Say so rather than pulling it
Related skills
- Requires:
data-model-and-sync - Hands off to:
data-hygiene, thenenrichment-waterfall, thenicp-scoring-engine - See also:
docs/cost-model.md
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.

