mcpField
T
tam-scoring

tam-scoring

github.com/cold-iqMarketing & growth347 installsUpdated 2w ago
Repository

About tam-scoring

tam-scoring is a skill for assigning companies numeric scores from observable signals and sorting them into priority tiers. It describes scoring criteria, cleanup steps, and ColdIQ endpoints that supply fresh data for scored fields.

Key features

  1. 01Score companies from observable signals
  2. 02Group scores into priority tiers
  3. 03Use ColdIQ endpoints for company data
  4. 04Clean and deduplicate company records
  5. 05Define and run custom scoring models

Use cases

  1. 01Prioritize companies in a target market
  2. 02Filter disqualified records before enrichment
  3. 03Create tiered company exports for review

MCP support

It identifies ColdIQ endpoints that provide company, firmographic, technology, and funding data used in scoring; it does not state an MCP interface.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/cold-iq/coldiq-marketplace-skills --skill tam-scoring

After installing, type/tam-scoringin Claude Code to confirm it loaded.

Details

From the project README

TAM Scoring

Assign every company a numeric score from observable signals, then bucket into tiers. ColdIQ models run 80–100 points across 4–6 signal groups. The math is local; this skill notes which ColdIQ endpoint provides each scored data point so the model runs on fresh data.

ColdIQ Marketplace Endpoints (data sources for scored fields)

Scored data pointMethodPathCreditsEndpoint IDNotes
Firmographics (size, revenue, industry, funding)POST/v1/limadata/enrich/company1limadata.enrich.companyOne call for most groups
Large-scale company listPOST/v1/ai-ark/companiesper resultai_ark.companies.searchBuild the list to score
Tech-stack signalPOST/v1/builtwith/domainflatbuiltwith.domainComplexity/specialization group
Funding / PE backingGET/v1/signalbase/funding-signalsunknownsignalbase.funding_signalsOwnership/bonus groups

Score from enriched data — don't pay to enrich rows you'll DQ. Filter obvious DQs first, then: → POST /v1/limadata/enrich/company · 1 cr · limadata.enrich.company

Standard tier thresholds

TierScoreAction
Tier 165+Top priority, send first, best personalization
Tier 250–64Strong fit, second wave
Tier 335–49Marginal, volume plays only
DQ<35Do not send

Common signal groups

  1. Scale (10–25): 10k+ → 25, 5k–9,999 → 20, 2k–4,999 → 15, 500–1,999 → 10, 50–499 → 5, <50 → 0.
  2. Revenue (15–20): $50M–$500M → 20 (sweet spot), $25–50M → 15, $500M–1B → 10, $10–25M → 8, $1B+ → 5.
  3. Industry (10–15): core → 15, adjacent → 10, stretch → 5, unknown → 5, excluded → −100 (auto-DQ).
  4. Complexity / specialization (15–30): the client-specific signal (multi-location count, market count, competitor/complementary tech, digital maturity).
  5. Ownership / PE (10–20): PE-backed → 20, PE subsidiary → 15, VC/growth → 10, unknown → 5, founder/non-profit → 0.
  6. Bonus (5–10): franchise HQ, cash-flow keywords, rapid growth, recent funding, relevant hiring.

Data cleanup before scoring

BOGUS_NAMES = {"local my business", "google ai plugin", "auto-entrepreneur"}
def is_bogus(name):
    l = name.strip().lower()
    return l in BOGUS_NAMES or any(s in l for s in ["follow us", "test account"])
# Remove slug franchises (keller-williams-realty-dpr), flag extreme values, dedup by name (keep top score).

Python scorer pattern

def score_company(row):
    total, breakdown = 0, []
    for label, fn, field in [("Scale", score_scale, "# Employees"),
                             ("Revenue", score_revenue, "Annual Revenue"),
                             ("Industry", score_industry, "Industry"),
                             ("Custom", score_custom, None)]:
        pts, reason = fn(row if field is None else parse_number(row.get(field, 0)))
        total += pts; breakdown.append(f"{label}: {pts} ({reason})")
    if any("EXCLUDED" in b for b in breakdown): return -1, "DQ", breakdown
    tier = "Tier 1" if total>=65 else "Tier 2" if total>=50 else "Tier 3" if total>=35 else "DQ"
    return total, tier, breakdown
# load → clean(is_bogus) → score → dedup by name(keep highest) → sort desc → export CSV with Score/Tier/Breakdown

How to build a new model

  1. Pick 4–6 signal groups summing to 80–100. 2. Set thresholds. 3. Write scoring rules per signal.
  2. Clean data. 5. Run on the enriched export. 6. Generate per-tier CSVs. 7. Send a sample to the client for approval. 8. Re-run when new enrichment data arrives. Dedup first (list-dedup) so you never score a company twice.

Comments

Markdown supported