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
- 01Score companies from observable signals
- 02Group scores into priority tiers
- 03Use ColdIQ endpoints for company data
- 04Clean and deduplicate company records
- 05Define and run custom scoring models
Use cases
- 01Prioritize companies in a target market
- 02Filter disqualified records before enrichment
- 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-scoringAfter installing, type/tam-scoringin Claude Code to confirm it loaded.
Details
From the project READMETAM 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 point | Method | Path | Credits | Endpoint ID | Notes |
|---|---|---|---|---|---|
| Firmographics (size, revenue, industry, funding) | POST | /v1/limadata/enrich/company | 1 | limadata.enrich.company | One call for most groups |
| Large-scale company list | POST | /v1/ai-ark/companies | per result | ai_ark.companies.search | Build the list to score |
| Tech-stack signal | POST | /v1/builtwith/domain | flat | builtwith.domain | Complexity/specialization group |
| Funding / PE backing | GET | /v1/signalbase/funding-signals | unknown | signalbase.funding_signals | Ownership/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
| Tier | Score | Action |
|---|---|---|
| Tier 1 | 65+ | Top priority, send first, best personalization |
| Tier 2 | 50–64 | Strong fit, second wave |
| Tier 3 | 35–49 | Marginal, volume plays only |
| DQ | <35 | Do not send |
Common signal groups
- Scale (10–25): 10k+ → 25, 5k–9,999 → 20, 2k–4,999 → 15, 500–1,999 → 10, 50–499 → 5, <50 → 0.
- Revenue (15–20): $50M–$500M → 20 (sweet spot), $25–50M → 15, $500M–1B → 10, $10–25M → 8, $1B+ → 5.
- Industry (10–15): core → 15, adjacent → 10, stretch → 5, unknown → 5, excluded → −100 (auto-DQ).
- Complexity / specialization (15–30): the client-specific signal (multi-location count, market count, competitor/complementary tech, digital maturity).
- Ownership / PE (10–20): PE-backed → 20, PE subsidiary → 15, VC/growth → 10, unknown → 5, founder/non-profit → 0.
- 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
- Pick 4–6 signal groups summing to 80–100. 2. Set thresholds. 3. Write scoring rules per signal.
- 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.