ICP & Account Lead Scoring: Fit Scorer 0-100 for Clay avatar

ICP & Account Lead Scoring: Fit Scorer 0-100 for Clay

Pricing

from $42.50 / 1,000 results

Go to Apify Store
ICP & Account Lead Scoring: Fit Scorer 0-100 for Clay

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

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 days ago

Last modified

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_signals with an Apify token. That is also why it is fast: there is no crawl to wait for.

💡 Why use ICP Fit Scorer?

If you wantRead these fields
One number to sort accounts byicp_score
A band instead of a numbericp_tier, lead_tag
To see which signals earned the scorescore_hiring, score_tech_stack, score_headcount, score_firmographic, score_industry, score_funding, score_social, score_job_board
To find your data gapssignals_matched, signals_missing
To audit the scoring itselfscoring_config_used, config_source, score_explanation
Movement since last timeprevious_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

ExampleWhat it does
Score Fit With a Plain-English ICPOne-sentence ICP, your own LLM key
SaaS Outbound Lead ScoringOne-click preset, no JSON to write
Fintech Fit Scorer With Funding WindowWeights recent funding inside your window
Enterprise Tiering With ThresholdsCustom A to D thresholds
Headcount and Hiring ScoreCustom weights on headcount and GTM hiring

📋 What data can ICP Fit Scorer return?

23 fields per company.

FieldWhat it holds
icp_score0 to 100
icp_tierA, B, C or D
lead_tagpriority, nurture or disqualify
score_hiring, score_tech_stack, score_headcount, score_firmographic, score_industry, score_funding, score_social, score_job_boardPoints contributed by each source
signals_matched, signals_missingWhat fired, and what was absent
scoring_config_used, config_sourceThe exact config applied, and where it came from
previous_score, score_delta, score_directionMovement since your last run
score_explanationOptional narrative, when include_explanation is on
company_domain, company_name, run_date, errorIdentity and bookkeeping

⚠️ signals_missing can misclassify present-but-false fields. When a boolean such as uses_hubspot is explicitly passed as "false", it can appear in signals_missing even 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.

⚠️ false and null mean different things on every row. false is a measurement: the actor looked and the answer was no. null is the absence of one: the actor could not look. When something it needed fails, the row comes back with degraded: true, a plain-language degradation_reason, and every field it could not measure set to null rather than to a confident false or 0. Filter on degraded before you trust a negative.

🛠️ How to score a company against your ICP

  1. Open the Input tab and supply company_domain plus your enrichment fields.
  2. Pick one: a scoring_config, a template preset, or an icp_description with an llm_api_key.
  3. Optionally set tier_thresholds and funded_within_days.
  4. Click Start.
  5. Sort by icp_score, or filter on lead_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.

PlanPer companyPer 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_output to suppress low scorers from the dataset.

⌨️ Input

Everything is on the Input tab. The options worth explaining:

FieldTypeDefaultWhat it does
company_domain, company_namestringnoneIdentity for the row.
scoring_configobjectnoneExact weights per signal. Must sum to 100.
templatestringnoneOne of six presets instead of writing a config.
icp_description + llm_api_keystringnonePlain-English mode. llm_provider defaults to openai.
tier_thresholdsobject80 / 60 / 40A, B and C cutoffs.
funded_within_daysinteger540The funding recency window.
fetch_signals + apify_tokenbooleanfalseLet the actor pull signals itself instead of you supplying them.
include_explanationbooleanfalseReturn score_explanation.
min_score_to_outputintegernoneSuppress rows below this score.
previous_scoreintegernoneUnlocks delta tracking.
dataset_id, csv_urlstringnoneBatch input sources.
webhook_urlstringnonePost 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 template preset. You can export scoring_config_used from the output and tune it from there rather than writing one from scratch.
  • Store each run's icp_score and pass it back as previous_score. Movement is a better trigger than a static score.
  • Read signals_missing before 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_stage before 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.

🧑‍💼 GTM Hiring Signal Scraper🧱 Tech Stack Detector
📡 B2B Buying Signals Aggregator🔑 Job Board Keyword Scanner
🔗 Domain to LinkedIn URL Resolver📋 Job Posting Monitor
📬 Domain Deliverability Checker🏢 Company Firmographic Enricher
🌐 Company Social Presence Mapper🪪 Company Identity Resolver
💰 Funding and Press Signal Scanner🔄 Company Change-Event Feed
👤 People Finder and Email Verifier🚀 Prospect Engine
🤖 AI Tooling Detector📮 Outbound Stack Detector
📝 Publishing Frequency Tracker✉️ Work Email Waterfall Finder
Sequencer Lead Push🏅 Workplace Program Detector
👥 Team Page People Extractor🧭 Company Discovery List Builder

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.