# ICP Fit Scorer (`mambalabs/icp-fit-scorer`) Actor

Score companies against your ICP using weighted signals and pre-built templates. Returns icp\_score 0-100, icp\_tier A-D, per-signal breakdown, and plain-English explanation. Flat Clay-ready output.

- **URL**: https://apify.com/mambalabs/icp-fit-scorer.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 0 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## ICP Fit Scorer

**Version: 1.1**

Scores companies against your ICP using weighted signals. Returns icp_score 0-100, icp_tier A-D, and a per-signal breakdown. Works with plain-English ICP descriptions or a custom JSON config.

---

### 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. You control exactly how much each signal is worth. Best for teams that have already defined their ICP criteria.

**Plain-English mode.** Describe your ICP in a sentence or two and provide an OpenAI or Anthropic API key. The actor calls GPT-4o-mini or Claude Haiku to generate a valid `scoring_config` automatically. Best for non-technical users who want to score leads without writing JSON.

If you provide both, the JSON config wins and the LLM call is skipped.

---

### How it works

Pass in pre-enriched company data (hiring signals, tech stack, headcount, funding, industry) along with a scoring config or ICP description. The actor evaluates each signal as true or false, applies the configured weights, and returns a score from 0 to 100 with a tier label.

No live scraping. No waiting for website crawls. Input data comes from Clay enrichment columns or from Actors 1 and 2 in the Mamba Labs suite. Scoring is fast and deterministic in JSON config mode.

---

### The Actor 1 + 2 + 6 workflow

Actor 6 input fields map directly to Actor 1 and Actor 2 output column names. This is intentional. Run them in sequence in Clay and pass outputs directly into Actor 6 with no column remapping.

**Step 1: Run Actor 1** ([GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper)) on your company list. It returns:
- `gtm_hiring_signal` (boolean) -- map to Actor 6 input `gtm_hiring_signal`
- `gtm_role_count` (integer) -- map to Actor 6 input `gtm_role_count`
- `signal_strength` (string: high/medium/low) -- map to Actor 6 input `signal_strength`

**Step 2: Run Actor 2** ([GTM Tech Stack Signal Scraper](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper)) on the same company list. It returns:
- `uses_hubspot` (boolean) -- map to Actor 6 input `uses_hubspot`
- `uses_salesforce` (boolean) -- map to Actor 6 input `uses_salesforce`
- `uses_clay` (boolean) -- map to Actor 6 input `uses_clay`
- `crm_detected` (string) -- map to Actor 6 input `crm_detected`
- `seq_tool_detected` (string) -- map to Actor 6 input `seq_tool_detected`

**Step 3: Add Clay native enrichment** columns for `headcount`, `funding_stage`, and `industry`. These are standard Clay enrichment fields, not actor outputs.

**Step 4: Run Actor 6** (this actor). Pass all the above as input fields using Clay's column token system. Set your `scoring_config` weights to reflect how much each signal matters for your ICP.

**Step 5: Filter** your Clay table on `icp_tier = A` or `lead_tag = priority` to get your send-ready list.

No other ICP scorer on the Apify Store is designed to receive these specific field names as input. This workflow is the fastest path from company list to scored outbound queue.

---

### scoring_config format

The `scoring_config` object has three parts:

- `weights`: maps signal names to integer point values. Must sum to exactly 100.
- `headcount_range`: an object with `min` and `max` for the headcount_in_range signal.
- `target_industries`: an array of industry strings for the industry_match signal.

Full example:

```json
{
  "scoring_config": {
    "weights": {
      "gtm_hiring_signal": 20,
      "uses_hubspot": 10,
      "uses_salesforce": 10,
      "uses_clay": 5,
      "headcount_in_range": 20,
      "recently_funded": 20,
      "industry_match": 15
    },
    "headcount_range": { "min": 50, "max": 500 },
    "target_industries": ["B2B Software", "SaaS", "Developer Tools"]
  }
}
````

Minimal 2-signal config:

```json
{
  "scoring_config": {
    "weights": {
      "gtm_hiring_signal": 60,
      "headcount_in_range": 40
    },
    "headcount_range": { "min": 100, "max": 1000 }
  }
}
```

Available signal keys: `gtm_hiring_signal`, `uses_hubspot`, `uses_salesforce`, `uses_clay`, `crm_detected`, `seq_tool_detected`, `headcount_in_range`, `recently_funded`, `industry_match`. Pick the ones that matter and distribute 100 points across them.

***

### Input schema

Provide either `scoring_config` or `icp_description`. One of the two is required.

| Field | Type | Required | Description |
|---|---|---|---|
| `company_domain` | string | Yes | Primary domain of the company to score. |
| `scoring_config` | object | No | JSON scoring weights config. Required if icp\_description is not provided. |
| `template` | string | No | Pre-built template: saas\_outbound, b2b\_services, fintech, smb\_local, enterprise. |
| `icp_description` | string | No | Plain-English ICP description. Requires llm\_api\_key. |
| `llm_api_key` | string | No | OpenAI or Anthropic API key. Required for icp\_description mode. Masked in Apify UI. |
| `llm_provider` | string | No | "openai" (default) or "anthropic". Ignored if scoring\_config is provided. |
| `company_name` | string | No | Display name of the company. |
| `gtm_hiring_signal` | boolean | No | Whether the company is hiring GTM roles. |
| `uses_hubspot` | boolean | No | HubSpot detected. |
| `uses_salesforce` | boolean | No | Salesforce detected. |
| `uses_clay` | boolean | No | Clay detected. |
| `crm_detected` | string | No | CRM platform detected. |
| `seq_tool_detected` | string | No | Sequencing tool detected. |
| `headcount` | integer | No | Current employee count. |
| `funding_stage` | string | No | Funding stage (seed, series\_a, series\_b, growth). |
| `industry` | string | No | The company's industry. |
| `previous_score` | integer | No | ICP score from a prior run. Enables delta tracking. |
| `include_explanation` | boolean | No | Add a score\_explanation string to output. Default false. |
| `min_score_to_output` | integer | No | Skip rows below this threshold. |
| `webhook_url` | string | No | POST each result to this URL after scoring. |

***

### Output schema

| Field | Type | Description |
|---|---|---|
| `company_domain` | string | Domain that was scored. |
| `company_name` | string | Company display name. |
| `icp_score` | integer | Final score 0-100. |
| `icp_tier` | string | A (80-100), B (60-79), C (40-59), D (0-39). |
| `lead_tag` | string | priority (A), nurture (B/C), disqualify (D). |
| `score_hiring` | integer | Points from hiring signals. |
| `score_tech_stack` | integer | Points from tech stack signals. |
| `score_headcount` | integer | Points from headcount signal. |
| `score_funding` | integer | Points from funding signal. |
| `score_industry` | integer | Points from industry signal. |
| `signals_matched` | string | Comma-separated signal keys that matched. |
| `signals_missing` | string | Comma-separated signal keys that did not match. |
| `scoring_config_used` | string | JSON string of the config applied. |
| `config_source` | string | "explicit" (JSON config) or "llm\_generated" (from icp\_description). |
| `previous_score` | integer | Echoed from input. Null if not provided. |
| `score_delta` | integer | Current score minus previous score. Null if no previous. |
| `score_direction` | string | "improving" (delta > 0), "declining" (delta < 0), "unchanged" (delta = 0), "no\_previous". |
| `score_explanation` | string | Human-readable breakdown. Present when include\_explanation is true. |
| `run_date` | string | ISO timestamp. |
| `error` | string | Error message if scoring failed. |

***

### Tracking score changes over time

This is the only ICP scorer on the Apify Store that tracks score change per company across runs.

Store `icp_score` from each run in your Clay table. On the next run, pass it as `previous_score`. The output includes `score_delta` (integer, can be negative) and `score_direction` ("improving", "declining", "unchanged", or "no\_previous"). Use `score_direction = improving` as a trigger for outbound timing, or filter on `score_delta > 10` to surface companies that just crossed a scoring threshold.

***

### lead\_tag values

Every output row includes a `lead_tag` field derived automatically from `icp_tier`. Values: "priority" for tier A, "nurture" for tier B or C, "disqualify" for tier D. Use these directly in Clay view filters, Instantly segment conditions, or Smartlead campaign triggers without writing a formula column.

***

### Sample output

**JSON config mode with delta:**

```json
{
  "company_domain": "linear.app",
  "company_name": "Linear",
  "icp_score": 80,
  "icp_tier": "A",
  "lead_tag": "priority",
  "score_hiring": 30,
  "score_tech_stack": 0,
  "score_headcount": 25,
  "score_funding": 25,
  "score_industry": 0,
  "signals_matched": "gtm_hiring_signal, headcount_in_range, recently_funded",
  "signals_missing": "uses_hubspot",
  "scoring_config_used": "{\"weights\":{\"gtm_hiring_signal\":30,\"uses_hubspot\":20,\"headcount_in_range\":25,\"recently_funded\":25},\"headcount_range\":{\"min\":50,\"max\":500}}",
  "config_source": "explicit",
  "previous_score": 65,
  "score_delta": 15,
  "score_direction": "improving",
  "run_date": "2026-04-15T12:00:00.000Z"
}
```

**LLM-generated config mode:**

```json
{
  "company_domain": "ramp.com",
  "company_name": "Ramp",
  "icp_score": 55,
  "icp_tier": "C",
  "lead_tag": "nurture",
  "score_hiring": 20,
  "score_tech_stack": 15,
  "score_headcount": 20,
  "score_funding": 0,
  "score_industry": 0,
  "signals_matched": "gtm_hiring_signal, uses_hubspot, headcount_in_range",
  "signals_missing": "recently_funded, industry_match",
  "scoring_config_used": "{\"weights\":{\"gtm_hiring_signal\":20,\"uses_hubspot\":15,\"headcount_in_range\":20,\"recently_funded\":25,\"industry_match\":20},\"headcount_range\":{\"min\":100,\"max\":1000},\"target_industries\":[\"B2B Software\",\"SaaS\",\"Fintech\"]}",
  "config_source": "llm_generated",
  "previous_score": null,
  "score_delta": null,
  "score_direction": "no_previous",
  "run_date": "2026-04-15T12:00:00.000Z"
}
```

***

### Clay integration

1. Add an Apify enrichment column. Search for `icp-fit-scorer`.
2. Map `company_domain` to your domain column.
3. Map signal fields from Actor 1 and Actor 2 output columns (or Clay native enrichment).
4. Set `scoring_config` as a static JSON value, or use `template` for a pre-built config.
5. Filter your table on `lead_tag = priority` for your send-ready list.

***

### Pricing

$0.05 per company scored. No LLM cost in JSON config mode.

LLM mode uses your own OpenAI (GPT-4o-mini) or Anthropic (Claude Haiku) API key, approximately $0.001-$0.003 per call billed directly to your API provider account. You choose the provider. Your key is masked in the Apify UI and redacted from run logs. It is not stored by Mamba Labs. Set a spend limit on your key if you are running at high volume.

***

### Known limitations

- JSON config mode is fully deterministic. LLM mode may produce slightly different scoring\_config interpretations for the same description across runs.
- scoring\_config weights must sum to 100. The actor returns an error row if they do not.
- Pre-enriched input only: this actor does not fetch signals on its own. Run Actors 1 and 2 first, or use the fetch\_signals option with an Apify token.
- signals\_missing will be populated for any input field that was null or absent. Review this field to identify data gaps before treating scores as final.

***

### Related actors

- [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper) -- provides gtm\_hiring\_signal, gtm\_role\_count, signal\_strength
- [GTM Tech Stack Signal Scraper](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper) -- provides uses\_hubspot, uses\_salesforce, uses\_clay, crm\_detected, seq\_tool\_detected
- [GTM Signals Aggregator](https://apify.com/mambalabs/gtm-signals-aggregator) -- runs Actors 1 and 2 in parallel, returns all signals in one call

***

Built by [Mamba Labs](https://apify.com/mambalabs).

# Actor input Schema

## `company_domain` (type: `string`):

The primary domain of the company to score (e.g. clay.com).

## `company_name` (type: `string`):

Optional display name of the company.

## `scoring_config` (type: `object`):

JSON scoring weights config. Alternative to icp\_description. Required if icp\_description is not provided. Takes precedence over template if both are provided.

## `template` (type: `string`):

Pre-built scoring config. Used when scoring\_config is not provided. Options: saas\_outbound, b2b\_services, fintech, smb\_local, enterprise.

## `dataset_id` (type: `string`):

Apify dataset ID to fetch items from. Each item is processed as a lead to score. Works alongside or instead of inline JSON input.

## `csv_url` (type: `string`):

URL of a CSV file to fetch and parse. Each row becomes a lead to score. Works alongside inline JSON or dataset\_id.

## `fetch_signals` (type: `boolean`):

If true, call mambalabs/gtm-hiring-signal-scraper and mambalabs/gtm-tech-stack-signal-scraper for each domain before scoring. Requires apify\_token.

## `apify_token` (type: `string`):

Apify API token for fetch\_signals and dataset\_id features. Falls back to APIFY\_TOKEN env var.

## `include_explanation` (type: `boolean`):

If true, adds a score\_explanation string to each output row describing what matched, missed, and point values.

## `min_score_to_output` (type: `integer`):

If set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only.

## `webhook_url` (type: `string`):

URL to POST each scored result to as JSON after pushing to dataset. Fire and forget.

## `previous_score` (type: `integer`):

Previous ICP score for this company. If provided, output includes score\_change and score\_trend fields.

## `gtm_hiring_signal` (type: `boolean`):

Whether the company is actively hiring for GTM/sales roles.

## `uses_hubspot` (type: `boolean`):

Whether the company uses HubSpot.

## `uses_salesforce` (type: `boolean`):

Whether the company uses Salesforce.

## `uses_clay` (type: `boolean`):

Whether the company uses Clay.

## `crm_detected` (type: `boolean`):

Whether any CRM was detected. Auto-derived from uses\_hubspot/uses\_salesforce if not set.

## `seq_tool_detected` (type: `boolean`):

Whether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected.

## `tech_stack` (type: `string`):

Comma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set.

## `headcount` (type: `integer`):

Current employee headcount.

## `headcount_min` (type: `integer`):

Minimum headcount for the headcount\_in\_range signal.

## `headcount_max` (type: `integer`):

Maximum headcount for the headcount\_in\_range signal.

## `headcount_in_range` (type: `boolean`):

Override: whether headcount is in your target range.

## `recently_funded` (type: `boolean`):

Override: whether the company was recently funded (within 18 months).

## `last_funding_date` (type: `string`):

ISO date of last funding round. Used to auto-detect recently\_funded if boolean is not set.

## `funding_stage` (type: `string`):

Funding stage (e.g. seed, series\_a, series\_b, growth). Used to infer recently\_funded.

## `industry` (type: `string`):

The company's industry.

## `industry_match` (type: `boolean`):

Override: whether the company's industry matches your target list.

## `target_industries` (type: `string`):

Comma-separated list of target industries for the industry\_match signal.

## `icp_description` (type: `string`):

Describe your target ICP in plain English. Requires llm\_api\_key. Alternative to scoring\_config for non-technical users.

## `llm_api_key` (type: `string`):

Your OpenAI or Anthropic API key. Required when using icp\_description mode. Transmitted to Apify infrastructure for the duration of the run only.

## `llm_provider` (type: `string`):

Which LLM provider to use when generating a scoring config from icp\_description. Accepts openai (GPT-4o-mini) or anthropic (claude-haiku-4-5-20251001). Ignored if scoring\_config is provided directly.

## Actor input object example

```json
{
  "company_domain": "stripe.com",
  "scoring_config": {
    "weights": {
      "gtm_hiring_signal": 15,
      "uses_hubspot": 10,
      "uses_salesforce": 10,
      "uses_clay": 5,
      "crm_detected": 10,
      "seq_tool_detected": 10,
      "headcount_in_range": 15,
      "recently_funded": 15,
      "industry_match": 10
    }
  },
  "template": "saas_outbound",
  "fetch_signals": false,
  "include_explanation": false,
  "llm_provider": "openai"
}
```

# Actor output Schema

## `company_domain` (type: `string`):

Company domain scored

## `company_name` (type: `string`):

Company display name

## `icp_score` (type: `string`):

ICP fit score (0-100)

## `icp_tier` (type: `string`):

Tier: A (80-100), B (60-79), C (40-59), D (0-39)

## `lead_tag` (type: `string`):

Auto-tag: priority (A), nurture (B/C), disqualify (D)

## `score_hiring` (type: `string`):

Points from hiring signals

## `score_tech_stack` (type: `string`):

Points from tech stack signals

## `score_headcount` (type: `string`):

Points from headcount signal

## `score_funding` (type: `string`):

Points from funding signal

## `score_industry` (type: `string`):

Points from industry signal

## `signals_matched` (type: `string`):

Comma-separated list of matched signal keys

## `signals_missing` (type: `string`):

Comma-separated list of missing signal keys

## `scoring_config_used` (type: `string`):

JSON-stringified scoring config used

## `config_source` (type: `string`):

Config source: explicit or llm\_generated

## `previous_score` (type: `string`):

Previous ICP score (from input)

## `score_delta` (type: `string`):

Change from previous score (current minus previous)

## `score_direction` (type: `string`):

improving / declining / unchanged / no\_previous

## `score_explanation` (type: `string`):

Human-readable scoring explanation

## `run_date` (type: `string`):

ISO timestamp of the scoring run

## `error` (type: `string`):

Error message if scoring failed

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "company_domain": "stripe.com",
    "scoring_config": {
        "weights": {
            "gtm_hiring_signal": 15,
            "uses_hubspot": 10,
            "uses_salesforce": 10,
            "uses_clay": 5,
            "crm_detected": 10,
            "seq_tool_detected": 10,
            "headcount_in_range": 15,
            "recently_funded": 15,
            "industry_match": 10
        }
    },
    "template": "saas_outbound"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/icp-fit-scorer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "company_domain": "stripe.com",
    "scoring_config": { "weights": {
            "gtm_hiring_signal": 15,
            "uses_hubspot": 10,
            "uses_salesforce": 10,
            "uses_clay": 5,
            "crm_detected": 10,
            "seq_tool_detected": 10,
            "headcount_in_range": 15,
            "recently_funded": 15,
            "industry_match": 10,
        } },
    "template": "saas_outbound",
}

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/icp-fit-scorer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "company_domain": "stripe.com",
  "scoring_config": {
    "weights": {
      "gtm_hiring_signal": 15,
      "uses_hubspot": 10,
      "uses_salesforce": 10,
      "uses_clay": 5,
      "crm_detected": 10,
      "seq_tool_detected": 10,
      "headcount_in_range": 15,
      "recently_funded": 15,
      "industry_match": 10
    }
  },
  "template": "saas_outbound"
}' |
apify call mambalabs/icp-fit-scorer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=mambalabs/icp-fit-scorer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ICP Fit Scorer",
        "description": "Score companies against your ICP using weighted signals and pre-built templates. Returns icp_score 0-100, icp_tier A-D, per-signal breakdown, and plain-English explanation. Flat Clay-ready output.",
        "version": "1.1",
        "x-build-id": "XgBEdiQsMNHKsMWg1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mambalabs~icp-fit-scorer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mambalabs-icp-fit-scorer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/mambalabs~icp-fit-scorer/runs": {
            "post": {
                "operationId": "runs-sync-mambalabs-icp-fit-scorer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/mambalabs~icp-fit-scorer/run-sync": {
            "post": {
                "operationId": "run-sync-mambalabs-icp-fit-scorer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "company_domain"
                ],
                "properties": {
                    "company_domain": {
                        "title": "Company Domain",
                        "type": "string",
                        "description": "The primary domain of the company to score (e.g. clay.com)."
                    },
                    "company_name": {
                        "title": "Company Name",
                        "type": "string",
                        "description": "Optional display name of the company."
                    },
                    "scoring_config": {
                        "title": "Scoring Config",
                        "type": "object",
                        "description": "JSON scoring weights config. Alternative to icp_description. Required if icp_description is not provided. Takes precedence over template if both are provided."
                    },
                    "template": {
                        "title": "Scoring Template",
                        "enum": [
                            "saas_outbound",
                            "b2b_services",
                            "fintech",
                            "smb_local",
                            "enterprise"
                        ],
                        "type": "string",
                        "description": "Pre-built scoring config. Used when scoring_config is not provided. Options: saas_outbound, b2b_services, fintech, smb_local, enterprise."
                    },
                    "dataset_id": {
                        "title": "Dataset ID",
                        "type": "string",
                        "description": "Apify dataset ID to fetch items from. Each item is processed as a lead to score. Works alongside or instead of inline JSON input."
                    },
                    "csv_url": {
                        "title": "CSV URL",
                        "type": "string",
                        "description": "URL of a CSV file to fetch and parse. Each row becomes a lead to score. Works alongside inline JSON or dataset_id."
                    },
                    "fetch_signals": {
                        "title": "Fetch Signals",
                        "type": "boolean",
                        "description": "If true, call mambalabs/gtm-hiring-signal-scraper and mambalabs/gtm-tech-stack-signal-scraper for each domain before scoring. Requires apify_token.",
                        "default": false
                    },
                    "apify_token": {
                        "title": "Apify Token",
                        "type": "string",
                        "description": "Apify API token for fetch_signals and dataset_id features. Falls back to APIFY_TOKEN env var."
                    },
                    "include_explanation": {
                        "title": "Include Explanation",
                        "type": "boolean",
                        "description": "If true, adds a score_explanation string to each output row describing what matched, missed, and point values.",
                        "default": false
                    },
                    "min_score_to_output": {
                        "title": "Min Score to Output",
                        "type": "integer",
                        "description": "If set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only."
                    },
                    "webhook_url": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "URL to POST each scored result to as JSON after pushing to dataset. Fire and forget."
                    },
                    "previous_score": {
                        "title": "Previous Score",
                        "type": "integer",
                        "description": "Previous ICP score for this company. If provided, output includes score_change and score_trend fields."
                    },
                    "gtm_hiring_signal": {
                        "title": "GTM Hiring Signal",
                        "type": "boolean",
                        "description": "Whether the company is actively hiring for GTM/sales roles."
                    },
                    "uses_hubspot": {
                        "title": "Uses HubSpot",
                        "type": "boolean",
                        "description": "Whether the company uses HubSpot."
                    },
                    "uses_salesforce": {
                        "title": "Uses Salesforce",
                        "type": "boolean",
                        "description": "Whether the company uses Salesforce."
                    },
                    "uses_clay": {
                        "title": "Uses Clay",
                        "type": "boolean",
                        "description": "Whether the company uses Clay."
                    },
                    "crm_detected": {
                        "title": "CRM Detected",
                        "type": "boolean",
                        "description": "Whether any CRM was detected. Auto-derived from uses_hubspot/uses_salesforce if not set."
                    },
                    "seq_tool_detected": {
                        "title": "Sequencing Tool Detected",
                        "type": "boolean",
                        "description": "Whether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected."
                    },
                    "tech_stack": {
                        "title": "Tech Stack",
                        "type": "string",
                        "description": "Comma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set."
                    },
                    "headcount": {
                        "title": "Headcount",
                        "type": "integer",
                        "description": "Current employee headcount."
                    },
                    "headcount_min": {
                        "title": "Headcount Min",
                        "type": "integer",
                        "description": "Minimum headcount for the headcount_in_range signal."
                    },
                    "headcount_max": {
                        "title": "Headcount Max",
                        "type": "integer",
                        "description": "Maximum headcount for the headcount_in_range signal."
                    },
                    "headcount_in_range": {
                        "title": "Headcount In Range",
                        "type": "boolean",
                        "description": "Override: whether headcount is in your target range."
                    },
                    "recently_funded": {
                        "title": "Recently Funded",
                        "type": "boolean",
                        "description": "Override: whether the company was recently funded (within 18 months)."
                    },
                    "last_funding_date": {
                        "title": "Last Funding Date",
                        "type": "string",
                        "description": "ISO date of last funding round. Used to auto-detect recently_funded if boolean is not set."
                    },
                    "funding_stage": {
                        "title": "Funding Stage",
                        "type": "string",
                        "description": "Funding stage (e.g. seed, series_a, series_b, growth). Used to infer recently_funded."
                    },
                    "industry": {
                        "title": "Industry",
                        "type": "string",
                        "description": "The company's industry."
                    },
                    "industry_match": {
                        "title": "Industry Match",
                        "type": "boolean",
                        "description": "Override: whether the company's industry matches your target list."
                    },
                    "target_industries": {
                        "title": "Target Industries",
                        "type": "string",
                        "description": "Comma-separated list of target industries for the industry_match signal."
                    },
                    "icp_description": {
                        "title": "ICP Description",
                        "type": "string",
                        "description": "Describe your target ICP in plain English. Requires llm_api_key. Alternative to scoring_config for non-technical users."
                    },
                    "llm_api_key": {
                        "title": "LLM API Key",
                        "type": "string",
                        "description": "Your OpenAI or Anthropic API key. Required when using icp_description mode. Transmitted to Apify infrastructure for the duration of the run only."
                    },
                    "llm_provider": {
                        "title": "LLM Provider",
                        "enum": [
                            "openai",
                            "anthropic"
                        ],
                        "type": "string",
                        "description": "Which LLM provider to use when generating a scoring config from icp_description. Accepts openai (GPT-4o-mini) or anthropic (claude-haiku-4-5-20251001). Ignored if scoring_config is provided directly.",
                        "default": "openai"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
