ICP & Account Lead Scoring: Fit Scorer 0-100 for Clay
Pricing
from $42.50 / 1,000 results
ICP & Account Lead Scoring: Fit Scorer 0-100 for Clay
Scores pre-enriched companies against your Ideal Customer Profile using weighted signals. Returns a 0 to 100 fit score, A to D tier, and per-signal breakdown. Deterministic and LLM modes. Built for Clay enrichment and batch processing. MCP-ready for Claude Desktop and AI agents.
Pricing
from $42.50 / 1,000 results
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
7 days ago
Last modified
Categories
Share
🎯 What can ICP Fit Scorer do?
Give it pre-enriched company data and your ICP definition, and it returns an
icp_score from 0 to 100, an icp_tier from A to D, and a per-signal breakdown showing
exactly which signals earned the points.
Define your ICP as a JSON config with exact weights, or describe it in plain English and let the actor build the config for you.
| 📦 What you get | ⚙️ Features and integrations |
|---|---|
💯 icp_score 0 to 100 and an A to D tier🏷️ lead_tag: priority, nurture or disqualify🔍 Per-source score breakdown, 8 categories 🧾 23 flat fields, snake_case, one row per company | 📝 Plain-English mode builds the config for you 🧩 Six presets, or your own weights 📈 Score delta against your previous run ⬇️ Export to JSON, CSV, Excel, HTML or XML |
Bought by teams who want account tiering that is auditable rather than a black box, and who already have enrichment columns to score.
🚫 This actor does no scraping and fetches nothing by default. It scores data you already have. Run the enrichment actors first, or set
fetch_signalswith an Apify token. That is also why it is fast: there is no crawl to wait for.
💡 Why use ICP Fit Scorer?
| If you want | Read these fields |
|---|---|
| One number to sort accounts by | icp_score |
| A band instead of a number | icp_tier, lead_tag |
| To see which signals earned the score | score_hiring, score_tech_stack, score_headcount, score_firmographic, score_industry, score_funding, score_social, score_job_board |
| To find your data gaps | signals_matched, signals_missing |
| To audit the scoring itself | scoring_config_used, config_source, score_explanation |
| Movement since last time | previous_score, score_delta, score_direction |
🧮 Two ways to set up scoring
JSON config mode. Define exact weights per signal in a scoring_config object. Deterministic,
auditable, no API key needed. Best when you have already defined your ICP criteria.
Plain-English mode. Describe your ICP in a sentence or two and supply an OpenAI or Anthropic API
key. The actor generates a valid scoring_config for you. Best when you want scoring without writing
JSON.
If you provide both, the JSON config wins and the LLM call is skipped.
Six presets ship if you want neither: full_signal, saas_outbound, b2b_services, fintech,
smb_local and enterprise. full_signal scores every source out of the box.
📡 Five signal sources, eight score components
Scoring spans hiring, tech stack, firmographics (employee band and revenue), social presence (platforms found and total followers), job board activity (job count and keyword matches), funding (recency plus amount), headcount and industry.
Tiers default to 80 / 60 / 40 for A / B / C and are configurable through tier_thresholds. The
funding recency window defaults to 540 days and is configurable through funded_within_days.
lead_tag falls out of the tier automatically: priority for tier A, nurture for B or C,
disqualify for D. Use it directly in a Clay view filter or a sequencer segment condition without
writing a formula column.
▶️ Ready-to-run examples
| Example | What it does |
|---|---|
| Score Fit With a Plain-English ICP | One-sentence ICP, your own LLM key |
| SaaS Outbound Lead Scoring | One-click preset, no JSON to write |
| Fintech Fit Scorer With Funding Window | Weights recent funding inside your window |
| Enterprise Tiering With Thresholds | Custom A to D thresholds |
| Headcount and Hiring Score | Custom weights on headcount and GTM hiring |
📋 What data can ICP Fit Scorer return?
23 fields per company.
| Field | What it holds |
|---|---|
icp_score | 0 to 100 |
icp_tier | A, B, C or D |
lead_tag | priority, nurture or disqualify |
score_hiring, score_tech_stack, score_headcount, score_firmographic, score_industry, score_funding, score_social, score_job_board | Points contributed by each source |
signals_matched, signals_missing | What fired, and what was absent |
scoring_config_used, config_source | The exact config applied, and where it came from |
previous_score, score_delta, score_direction | Movement since your last run |
score_explanation | Optional narrative, when include_explanation is on |
company_domain, company_name, run_date, error | Identity and bookkeeping |
⚠️
signals_missingcan misclassify present-but-false fields. When a boolean such asuses_hubspotis explicitly passed as"false", it can appear insignals_missingeven though it was provided and evaluated correctly. Scoring is unaffected, the signal correctly scores 0, but do not read that list as a pure data-gap report.
⚠️
falseandnullmean different things on every row.falseis a measurement: the actor looked and the answer was no.nullis the absence of one: the actor could not look. When something it needed fails, the row comes back withdegraded: true, a plain-languagedegradation_reason, and every field it could not measure set tonullrather than to a confidentfalseor0. Filter ondegradedbefore you trust a negative.
🛠️ How to score a company against your ICP
- Open the Input tab and supply
company_domainplus your enrichment fields. - Pick one: a
scoring_config, atemplatepreset, or anicp_descriptionwith anllm_api_key. - Optionally set
tier_thresholdsandfunded_within_days. - Click Start.
- Sort by
icp_score, or filter onlead_tag.
🧪 Using it in Clay
Add an Apify enrichment column and map your enrichment columns to the matching inputs. Every input is accepted as a string, which is what Clay sends.
There is a prebuilt Clay table with 13 input columns, the enrichment column and 17 formula columns,
including ISBLANK wrappers for the score fields:
open the template.
🔗 As the scoring step in a chain
Run GTM Hiring Signal Scraper and
Tech Stack Detector first, feed their
output here, then push what survives with
Sequencer Lead Push gated on
min_icp_score.
📈 Tracking score movement
Pass the prior run's score as previous_score and you get score_delta and score_direction. An
account moving from 55 to 78 is a better trigger than an account that has sat at 78 all year.
💵 How much does it cost to score an account?
You are charged once per company scored.
| Plan | Per company | Per 1,000 companies |
|---|---|---|
| Free | $0.05 | $50.00 |
| Bronze | $0.0475 | $47.50 |
| Silver | $0.045 | $45.00 |
| Gold | $0.0425 | $42.50 |
There is also an Actor start event at $0.00005, charged once per run per GB of memory.
💳 In plain-English mode you also pay your own LLM provider. The actor calls OpenAI or Anthropic with the key you supply and that vendor bills you directly; nothing is marked up. JSON config mode makes no LLM call at all and needs no key. Free Apify plans get 50 successfully scored results per calendar month, resetting on the 1st. Use
min_score_to_outputto suppress low scorers from the dataset.
⌨️ Input
Everything is on the Input tab. The options worth explaining:
| Field | Type | Default | What it does |
|---|---|---|---|
company_domain, company_name | string | none | Identity for the row. |
scoring_config | object | none | Exact weights per signal. Must sum to 100. |
template | string | none | One of six presets instead of writing a config. |
icp_description + llm_api_key | string | none | Plain-English mode. llm_provider defaults to openai. |
tier_thresholds | object | 80 / 60 / 40 | A, B and C cutoffs. |
funded_within_days | integer | 540 | The funding recency window. |
fetch_signals + apify_token | boolean | false | Let the actor pull signals itself instead of you supplying them. |
include_explanation | boolean | false | Return score_explanation. |
min_score_to_output | integer | none | Suppress rows below this score. |
previous_score | integer | none | Unlocks delta tracking. |
dataset_id, csv_url | string | none | Batch input sources. |
webhook_url | string | none | Post results onward. |
The signal fields themselves (gtm_hiring_signal, uses_hubspot, headcount, employee_band,
revenue_estimate, industry, latest_funding_date, total_followers, job_count and the rest)
are all on the Input tab and all optional. Anything absent lands in signals_missing.
📤 Output
One flat row per company, exportable as JSON, CSV, Excel, HTML or XML.
{"company_domain": "example.com","company_name": "Example Inc","icp_score": 78,"icp_tier": "B","lead_tag": "nurture","score_hiring": 20,"score_tech_stack": 18,"score_headcount": 15,"score_firmographic": 10,"score_industry": 10,"score_funding": 5,"score_social": 0,"score_job_board": 0,"signals_matched": ["gtm_hiring_signal", "crm_detected", "headcount_in_range"],"signals_missing": ["total_followers", "job_count"],"config_source": "template:saas_outbound","previous_score": 55,"score_delta": 23,"score_direction": "up","run_date": "2026-06-18T16:20:26.776Z","error": null}
💡 Tips
- Start with a
templatepreset. You can exportscoring_config_usedfrom the output and tune it from there rather than writing one from scratch. - Store each run's
icp_scoreand pass it back asprevious_score. Movement is a better trigger than a static score. - Read
signals_missingbefore you trust a low score. A company can score badly because it is a poor fit or because you did not enrich it. - Use JSON config mode for anything you have to justify to someone. It is deterministic and the exact config is echoed on every row.
- Normalize
funding_stagebefore passing it. See Known limits.
⚠️ Known limits
JSON config mode is fully deterministic. LLM mode is not. The same plain-English description can produce slightly different configs across runs. Use JSON config mode when repeatability matters.
scoring_config weights must sum to 100. The actor errors if they do not. Unrecognized signal
keys are logged as warnings and skipped rather than causing an error.
Pre-enriched input only. The actor does not fetch signals on its own unless you set
fetch_signals with an Apify token.
signals_missing can misclassify present-but-false booleans. Scoring is correct either way; the
list is what is misleading.
funding_stage requires an exact format and is not normalized. "Series B" does not match, only
"series_b" does. The same applies to every stage. Normalize in Clay with a formula column before
passing it.
One error message is wrong. In LLM mode, when neither scoring_config nor icp_description is
supplied, the message reads "Either scoring_config or template is required." It should say
icp_description.
❓ FAQ
Do I need an LLM key?
Only for plain-English mode. JSON config mode and the six presets need no key and make no LLM call.
What if I supply both a config and a description?
The JSON config wins and the LLM call is skipped.
Why did a company score 0 on a signal I know is true?
Check signals_missing and the exact format you passed. funding_stage in particular is not
normalized.
Can I change the A to D cutoffs?
Yes, through tier_thresholds. They default to 80 / 60 / 40.
Does it scrape anything?
No, not unless you turn on fetch_signals. It scores data you supply, which is why it is fast and
deterministic.
🧩 Want other GTM data?
Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store, so our users get the same tooling we build under contract.
Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.
🛠️ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.
🆘 Support
Found a bug or want a signal added to the scoring model? Open an issue on the Issues tab with the config and the row, and we will look at it.
ℹ️ Sourcing and legal. This actor holds no data source of its own. It scores the fields you supply, which come from your own enrichment. In plain-English mode your ICP description and an LLM key are sent to the provider you choose, and that vendor bills you directly. The exact scoring config applied is echoed on every row, so any score is auditable. You are responsible for how you use the output.
Built by Mamba Labs.