Systems Lab

Agent skill

tam-data-cost-estimate

Triggers when a user wants to know what it will cost in data to map or source a market before building it, with phrasings like "what will this TAM cost", "price the list build", "data cost for 3,000 accounts", "estimate enrichment spend for this market", or "put a data budget in the proposal".

activeSelf-containedActs undeclared763 words

Filed under Positioning and messaging.

From jurjen-gtm-engineer/gtmskills · 55 skill entries · 0 · pushed 2026-10-04

What it does when it runs

Triggers when a user wants to know what it will cost in data to map or source a market before building it, with phrasings like "what will this TAM cost", "price the list build", "data cost for 3,000 accounts", "estimate enrichment spend for this market", or "put a data budget in the proposal". Owns the row math (accounts, qualifying titles per account, priced fields, refresh) and the three numbers for a proposal, one-off build data, monthly run data and tool subscriptions, each as a range. Not for enriching records you already own in a CRM (crm-enrichment-cost-estimate), not for sizing the market itself, and not for sending volume or mailbox cost.

Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
writes files

Ask about tam-data-cost-estimate

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/jurjen-gtm-engineer/gtmskills.git /tmp/gtmskills
git -C /tmp/gtmskills sparse-checkout set "skills/tam-data-cost-estimate"
mkdir -p ~/.claude/skills/tam-data-cost-estimate
cp -R "/tmp/gtmskills/skills/tam-data-cost-estimate/." ~/.claude/skills/tam-data-cost-estimate/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from jurjen-gtm-engineer/gtmskills/blob/77dc0b3112dbf6cf906dfc3d526b6f7031bf964c/skills/tam-data-cost-estimate/SKILL.md, which is licensed MIT (repository). 763 words, 10 headings.

TAM Data Cost Estimate

Trigger

Apply this skill when a market is about to be sourced from scratch and someone needs the data cost first. Before you map a market, price it.

Scope

This skill prices data. It covers company rows, contact rows, the fields on each that carry a unit cost, and the monthly run. It does not price people's time, the sending tools' usage, or records the client already owns.

Inputs

Ask for these, and write down the ones you had to assume:

  • Accounts in scope, split by tier when tiers exist.
  • Qualifying titles per account, per tier. Count the titles that qualify. Do not use a flat "5 per account".
  • The field list per object (company or contact), with a low and a high unit cost from the provider's own price list, and expected coverage.
  • Refreshes per year per field, and new accounts per month.
  • Tool subscriptions the client holds, per month.

Roles

The user owns the scope and the provider prices. The agent does the row math with the script and never invents a unit cost. A price that was not checked against a live price list is marked as an assumption.

Procedure

  1. Fill a scope file in the shape of examples/scope.json.
  2. Run python3 scripts/estimate.py --scope scope.json --out estimate.md.
  3. Read the flags. A field priced above its band, or a field over the gate (250 by default) with no cheaper alternative named, needs an answer before the estimate goes out.
  4. Run the five checks below against the scope and change the scope when one applies. Then run the script again.
  5. Hand over the three numbers with the scope they assume.

The row math the script uses:

Company rows   = accounts in scope
Contact rows   = accounts x qualifying titles per account
Field cost     = rows x coverage x unit cost
Monthly rows   = new accounts per month + rows x refreshes per year / 12

Contact rows are where estimates blow up. Twelve qualifying titles instead of five more than doubles contact sourcing and verification. Weight by tier before you price: the full buying group on Tier 1, the decision maker only on Tier 3.

Price bands (sanity check only, your provider's price list wins):

BandPer rowExamples
free0Your own CRM and history, public registries, a plain website fetch
cheap_deterministic0.005 to 0.03Standard company enrichment, lookalike sourcing, domain resolution
llm_research0.003 to 0.05A small model reading a scraped page
contact_email0.03 to 0.15Waterfall email finding, verification
premium0.15 to 0.60Mobile numbers, multi-provider waterfalls, deep research agents

Five checks that move the number:

  • Registry before aggregator. Check whether a public registry covers the market before you price a paid source.
  • Broad at the source, sharp after. Source wide, qualify with cheap filters, and spend on expensive fields only for what survives.
  • Enrich before you score. Scoring on partial data produces a tier you have to redo, and you pay twice.
  • Verify only what gets contacted. Verification across the whole list is the classic silent overspend.
  • Two or three providers, then qualify. Good checks on average data beat one expensive provider with none.

Outputs

estimate.md with the scope, every priced field, and three numbers:

LineWhat it covers
One-off build dataThe full mapping and enrichment run, once
Monthly run dataNew accounts plus the refreshing fields, per month
Tool subscriptionsContracted by the client directly

Quote a range at scoping and one number once the field list is locked.

Exceptions

No unit cost from a real price list: stop and ask, or mark the field as an assumption in the output. Usage priced in credits instead of money: convert with the plan's price per credit first, or use crm-enrichment-cost-estimate for Clay credits and actions.

QC

  • Every priced field has a low and a high unit cost with a named source.
  • Contact rows come from titles per account per tier, not from a flat multiplier.
  • Every flag in the output has an answer.
  • The scope is printed under the numbers, so a change in scope visibly changes the number.

References

scripts/estimate.py (no dependencies), examples/scope.json (a fictional scope that runs as is). Related: crm-enrichment-cost-estimate, free-first-domain-resolver, win-loss-rewind.

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what tam-data-cost-estimate does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.