Skip to main content
Glama
mambalabsdev

mcp-icp-fit-scorer

Score ICP Fit

score_icp_fit
Read-onlyIdempotent

Score a company against your ideal customer profile (ICP) using weighted signals to get a 0-100 fit score, tier, and per-signal breakdown.

Instructions

Score a company against your ideal customer profile (ICP) using weighted signals. Returns a 0 to 100 icp_score, an A to D icp_tier, and a per-signal breakdown as a flat, Clay-ready JSON row. Define your ICP with a prebuilt template, a JSON scoring_config, or a plain-English icp_description (which requires llm_api_key). Read-only; requires an APIFY_TOKEN and consumes Apify credits per call.

Input Schema

NameRequiredDescriptionDefault
industryNoThe company's industry (from the Company Firmographic Enricher, Actor ID YlUtLWjfPpqykmB8g).
templateNoName of a prebuilt scoring config, one of the six the actor ships: full_signal, saas_outbound, b2b_services, fintech, smb_local, enterprise. Alternative to scoring_config or icp_description. Call list_icp_templates to see them.
headcountNoCurrent employee headcount. Accepts a numeric string (e.g. "3000"). Sent as a string for Clay compatibility and coerced to integer at runtime.
job_countNoNumber of open jobs found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via active_hiring_volume when at or above min_job_count (default 3). Accepts a numeric string.
uses_clayNoWhether the company uses Clay. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime.
tech_stackNoComma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set.
has_twitterNoWhether a company X/Twitter profile was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Contributes to social_presence. Accepts a boolean-like string.
hq_locationNoHeadquarters location from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored.
llm_api_keyNoYour OpenAI or Anthropic API key. Required only when using icp_description.
company_nameNoOptional display name of the company.
crm_detectedNoWhether any CRM was detected. Accepts a boolean-like string ("true"/"false") or any non-empty CRM name (e.g. "Salesforce"). Sent as a string for Clay compatibility and coerced to boolean at runtime. Auto-derived from uses_hubspot/uses_salesforce if not set.
founded_yearNoYear the company was founded, from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. Accepts a numeric string (e.g. "2015").
has_linkedinNoWhether a company LinkedIn page was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h) or the Domain to LinkedIn URL Resolver (Actor ID 3HtnSaqPHOg1Qg5gx). Contributes to social_presence. Accepts a boolean-like string.
llm_providerNoLLM provider to use with icp_description: openai or anthropic.
uses_hubspotNoWhether the company uses HubSpot. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime.
employee_bandNoFirmographic employee band from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g), e.g. "201-500". Scores via employee_band_match when it is in target_employee_bands.
fetch_signalsNoIf true, the actor fetches hiring and tech-stack signals for the company automatically before scoring.
funding_stageNoFunding stage (e.g. seed, series_a, series_b, growth). Used to infer recently_funded.
headcount_maxNoMaximum headcount for the headcount_in_range signal.
headcount_minNoMinimum headcount for the headcount_in_range signal.
company_domainYesThe primary domain of the company to score. Example: clay.com
gtm_role_countNoNumber of open GTM/sales roles. Scores via the gtm_role_count_strong signal when at or above min_gtm_roles (default 2). Accepts a numeric string (e.g. "8"). Sent as a string for Clay compatibility and coerced to integer at runtime.
industry_matchNoOverride: whether the company's industry matches your target list.
previous_scoreNoPrevious ICP score for this company. If provided, output includes score_change and score_trend fields.
scoring_configNoJSON object of scoring weights. Alternative to template or icp_description.
icp_descriptionNoPlain-English description of your target ICP. Requires llm_api_key. Alternative to template or scoring_config.
recently_fundedNoOverride: whether the company was recently funded (within funded_within_days, default 540).
tier_thresholdsNoOptional. Minimum score for each tier as { "tier_a": number, "tier_b": number, "tier_c": number }. Scores at or above tier_a are A, tier_b are B, tier_c are C, else D. Defaults to 80 / 60 / 40.
total_followersNoTotal social followers across platforms, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via strong_social_following when at or above min_total_followers (default 1000). Accepts a numeric string.
uses_salesforceNoWhether the company uses Salesforce. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime.
revenue_estimateNoEstimated annual revenue in dollars from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Scores via revenue_in_range. Accepts a numeric string (e.g. "50000000"). Coerced to integer at runtime.
gtm_hiring_signalNoWhether the company is actively hiring for GTM/sales roles. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime.
last_funding_dateNoISO date of last funding round (legacy field; latest_funding_date is preferred). Used to auto-detect recently_funded if the boolean is not set.
seq_tool_detectedNoWhether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected. Accepts a boolean-like string ("true"/"false") or any non-empty tool name (e.g. "Outreach"). Sent as a string for Clay compatibility and coerced to boolean at runtime.
target_industriesNoComma-separated list of target industries for the industry_match signal.
funded_within_daysNoOptional. How recent a funding round must be to count for the recently_funded signal, in days. Defaults to 540 (18 months).
headcount_in_rangeNoOverride: whether headcount is in your target range.
include_explanationNoIf true, adds a score_explanation string to the output describing how the score was derived.
keyword_match_countNoNumber of target-keyword matches found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via keyword_signal_match when at or above min_keyword_matches (default 1). Accepts a numeric string.
latest_funding_dateNoISO date of the latest funding round (from C1 Funding & Press Signal Scanner when it ships). Drives recently_funded against funded_within_days.
min_score_to_outputNoIf set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only.
latest_funding_amountNoDollar amount of the latest funding round (from C1 when it ships). Scores via well_funded when at or above min_funding_amount (default 1000000). Accepts a numeric string (e.g. "50000000").
social_platforms_foundNoNumber of official social platforms found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via social_presence when at or above min_social_platforms (default 2). Accepts a numeric string.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed37 schema fields changedv1.0.6
    • addedInput schema / properties / crm_detected
      Added value: +{
      +  "description": "Whether any CRM was detected. Accepts a boolean-like string (\"true\"/\"false\") or any non-empty CRM name (e.g. \"Salesforce\"). Sent as a string for Clay compatibility and coerced to boolean at runtime. Auto-derived from uses_hubspot/uses_salesforce if not set.",
      +  "type": "string"
      +}
    • addedInput schema / properties / employee_band
      Added value: +{
      +  "description": "Firmographic employee band from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g), e.g. \"201-500\". Scores via employee_band_match when it is in target_employee_bands.",
      +  "type": "string"
      +}
    • addedInput schema / properties / founded_year
      Added value: +{
      +  "description": "Year the company was founded, from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. Accepts a numeric string (e.g. \"2015\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / funded_within_days
      Added value: +{
      +  "description": "Optional. How recent a funding round must be to count for the recently_funded signal, in days. Defaults to 540 (18 months).",
      +  "type": "integer"
      +}
    • addedInput schema / properties / funding_stage
      Added value: +{
      +  "description": "Funding stage (e.g. seed, series_a, series_b, growth). Used to infer recently_funded.",
      +  "type": "string"
      +}
    • addedInput schema / properties / gtm_hiring_signal
      Added value: +{
      +  "description": "Whether the company is actively hiring for GTM/sales roles. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / gtm_role_count
      Added value: +{
      +  "description": "Number of open GTM/sales roles. Scores via the gtm_role_count_strong signal when at or above min_gtm_roles (default 2). Accepts a numeric string (e.g. \"8\"). Sent as a string for Clay compatibility and coerced to integer at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / has_linkedin
      Added value: +{
      +  "description": "Whether a company LinkedIn page was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h) or the Domain to LinkedIn URL Resolver (Actor ID 3HtnSaqPHOg1Qg5gx). Contributes to social_presence. Accepts a boolean-like string.",
      +  "type": "string"
      +}
    • addedInput schema / properties / has_twitter
      Added value: +{
      +  "description": "Whether a company X/Twitter profile was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Contributes to social_presence. Accepts a boolean-like string.",
      +  "type": "string"
      +}
    • addedInput schema / properties / headcount
      Added value: +{
      +  "description": "Current employee headcount. Accepts a numeric string (e.g. \"3000\"). Sent as a string for Clay compatibility and coerced to integer at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / headcount_in_range
      Added value: +{
      +  "description": "Override: whether headcount is in your target range.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / headcount_max
      Added value: +{
      +  "description": "Maximum headcount for the headcount_in_range signal.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / headcount_min
      Added value: +{
      +  "description": "Minimum headcount for the headcount_in_range signal.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / hq_location
      Added value: +{
      +  "description": "Headquarters location from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored.",
      +  "type": "string"
      +}
    • addedInput schema / properties / industry
      Added value: +{
      +  "description": "The company's industry (from the Company Firmographic Enricher, Actor ID YlUtLWjfPpqykmB8g).",
      +  "type": "string"
      +}
    • addedInput schema / properties / industry_match
      Added value: +{
      +  "description": "Override: whether the company's industry matches your target list.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / job_count
      Added value: +{
      +  "description": "Number of open jobs found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via active_hiring_volume when at or above min_job_count (default 3). Accepts a numeric string.",
      +  "type": "string"
      +}
    • addedInput schema / properties / keyword_match_count
      Added value: +{
      +  "description": "Number of target-keyword matches found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via keyword_signal_match when at or above min_keyword_matches (default 1). Accepts a numeric string.",
      +  "type": "string"
      +}
    • addedInput schema / properties / last_funding_date
      Added value: +{
      +  "description": "ISO date of last funding round (legacy field; latest_funding_date is preferred). Used to auto-detect recently_funded if the boolean is not set.",
      +  "type": "string"
      +}
    • addedInput schema / properties / latest_funding_amount
      Added value: +{
      +  "description": "Dollar amount of the latest funding round (from C1 when it ships). Scores via well_funded when at or above min_funding_amount (default 1000000). Accepts a numeric string (e.g. \"50000000\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / latest_funding_date
      Added value: +{
      +  "description": "ISO date of the latest funding round (from C1 Funding & Press Signal Scanner when it ships). Drives recently_funded against funded_within_days.",
      +  "type": "string"
      +}
    • addedInput schema / properties / llm_provider / enum
      Added value: +[
      +  "openai",
      +  "anthropic"
      +]
    • addedInput schema / properties / min_score_to_output
      Added value: +{
      +  "description": "If set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / previous_score
      Added value: +{
      +  "description": "Previous ICP score for this company. If provided, output includes score_change and score_trend fields.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / recently_funded
      Added value: +{
      +  "description": "Override: whether the company was recently funded (within funded_within_days, default 540).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / revenue_estimate
      Added value: +{
      +  "description": "Estimated annual revenue in dollars from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Scores via revenue_in_range. Accepts a numeric string (e.g. \"50000000\"). Coerced to integer at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / seq_tool_detected
      Added value: +{
      +  "description": "Whether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected. Accepts a boolean-like string (\"true\"/\"false\") or any non-empty tool name (e.g. \"Outreach\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / social_platforms_found
      Added value: +{
      +  "description": "Number of official social platforms found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via social_presence when at or above min_social_platforms (default 2). Accepts a numeric string.",
      +  "type": "string"
      +}
    • addedInput schema / properties / target_industries
      Added value: +{
      +  "description": "Comma-separated list of target industries for the industry_match signal.",
      +  "type": "string"
      +}
    • addedInput schema / properties / tech_stack
      Added value: +{
      +  "description": "Comma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set.",
      +  "type": "string"
      +}
    • changedInput schema / properties / template / description
      Previous value: -"Name of a prebuilt scoring config. Alternative to scoring_config or icp_description."New value: +"Name of a prebuilt scoring config, one of the six the actor ships: full_signal, saas_outbound, b2b_services, fintech, smb_local, enterprise. Alternative to scoring_config or icp_description. Call list_icp_templates to see them."
    • addedInput schema / properties / template / enum
      Added value: +[
      +  "full_signal",
      +  "saas_outbound",
      +  "b2b_services",
      +  "fintech",
      +  "smb_local",
      +  "enterprise"
      +]
    • addedInput schema / properties / tier_thresholds
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Optional. Minimum score for each tier as { \"tier_a\": number, \"tier_b\": number, \"tier_c\": number }. Scores at or above tier_a are A, tier_b are B, tier_c are C, else D. Defaults to 80 / 60 / 40.",
      +  "type": "object"
      +}
    • addedInput schema / properties / total_followers
      Added value: +{
      +  "description": "Total social followers across platforms, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via strong_social_following when at or above min_total_followers (default 1000). Accepts a numeric string.",
      +  "type": "string"
      +}
    • addedInput schema / properties / uses_clay
      Added value: +{
      +  "description": "Whether the company uses Clay. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / uses_hubspot
      Added value: +{
      +  "description": "Whether the company uses HubSpot. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.",
      +  "type": "string"
      +}
    • addedInput schema / properties / uses_salesforce
      Added value: +{
      +  "description": "Whether the company uses Salesforce. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.",
      +  "type": "string"
      +}
  2. First observedv1.0.3

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds real context beyond them: it requires an APIFY_TOKEN, consumes Apify credits per call, and makes llm_api_key mandatory only for icp_description. It does not discuss failure modes or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose then outputs then configuration modes then operational cost. Every sentence carries information; no padding. Slightly dense rather than perfectly optimized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 43-parameter tool with no output schema, the description does the essential work: it names the return shape (0-100 score, A-D tier, per-signal flat row) and the three config paths. It omits anything about how weighted signals combine or default thresholds, which it could have sketched, but nothing critical for invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 43 parameters are already documented in the schema, including the 'Alternative to...' relationships between template, scoring_config, and icp_description. The description restates that mutual exclusivity but adds no syntax or coercion detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Score a company against your ideal customer profile') and immediately names the concrete outputs (icp_score, icp_tier, per-signal breakdown). An agent can distinguish this from the sibling list_icp_templates, which only enumerates configs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for the three mutually exclusive ways to define an ICP (prebuilt template, JSON scoring_config, or plain-English icp_description), plus the conditional llm_api_key requirement for the last one. It stops short of explicitly routing the agent to list_icp_templates for discovery, so it is not quite a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools