# B2B Sales Triggers - Hiring Surge, Funding, Press, Exec Changes (`seibs.co/b2b-sales-triggers`) Actor

B2B intent data aggregator. For a list of target companies, computes: hiring surge (LinkedIn delta), funding rounds, press mentions, executive changes, tech stack adoption, recent patent filings, customer mentions. Composite trigger score per company. For SDR teams.

- **URL**: https://apify.com/seibs.co/b2b-sales-triggers.md
- **Developed by:** [Seibs.co](https://apify.com/seibs.co) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 company records

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

## B2B Sales Triggers

Intent-data aggregator for SDR teams. Eight public-web signals per company plus one composite trigger score - no paid databases, no CRM connectors.

### What does B2B Sales Triggers do?

Feed it a list of target companies (mix of names and domains). For each company it runs eight independent intent detectors against public sources (LinkedIn jobs, TechCrunch RSS, Google News, SEC EDGAR 8-Ks, homepage HTML, crt.sh certificate transparency, PatentsView, Google web search) and returns a composite 0-1 trigger score with the raw evidence per signal. `composite_trigger_score >= 0.6` flags a high-intent alert ready for SDR action.

### Features

- Eight independent intent signals (any failing signal never blocks the others).
- Composite trigger score normalized by enabled-signal weight, so disabling a signal does not dilute the result.
- `top_triggers` ranks the firing signals descending by score - the SDR sees the "why" at a glance.
- Server-side `min_trigger_score` floor drops noise before emit.
- Domain normalization to eTLD+1 + LinkedIn slug resolver with manual-override input for hard-to-resolve companies.
- Concurrency-controlled (1-8 companies in parallel) with per-request timeouts.

### Use cases

- SDR / outbound teams prioritizing a daily call list out of a 10K-account TAM.
- RevOps / sales engineering enriching MQLs with intent context before queue assignment.
- Founders running founder-led sales who want a Monday-morning hit list.
- Lifecycle / customer-marketing teams looking for expansion signals on existing accounts.
- Competitive intel teams tracking funded competitors who are now hiring at scale.

### FAQ

**Q: Is this legal?**
A: Yes - every signal source is public-web data: LinkedIn jobs pages, TechCrunch RSS, Google News HTML, SEC EDGAR filings, company homepages, crt.sh certificate transparency logs, PatentsView's free public API, and Google web search. No paid databases, no scraped private endpoints.

**Q: Why might a run fail?**
A: (1) LinkedIn slug resolution failure when the company's slug differs from its display name - fix with `linkedin_company_url_overrides`. (2) Datacenter proxy rate-limiting - keep RESIDENTIAL with US country code. (3) Concurrency too high on a small TAM - drop to 2-4 for cleaner Google News results.

**Q: How fresh is the data?**
A: Live at crawl time. `lookback_days` controls how far back each signal looks (default 90), but the fetch itself is real-time. Funding news typically lands within hours of announcement; 8-K filings show within a day.

**Q: Can I schedule this daily or weekly?**
A: Yes - daily for high-priority watchlists (named accounts you want fresh intent on), weekly for the broader TAM. Use Apify Schedules and feed the output into your SDR queue via webhook.

**Q: How do I push results into a CRM?**
A: The output is account-level intent enrichment - drop it onto leads in HubSpot, Salesforce, Pipedrive, or Apollo via Zapier/Make/n8n. `composite_trigger_score` makes a clean custom field for queue prioritization. Webhook the high-intent alerts straight to a Slack channel.

**Q: How accurate is the trigger score?**
A: It is a heuristic 0-1 composite of 8 independent public-web signals, normalized by the sum of enabled-signal weights. Treat `>= 0.6` as a high-intent threshold (worth a manual look or auto-cadence trigger), `>= 0.8` as drop-everything-and-call. It is not predictive ML - it is a transparent, explainable additive score where `top_triggers` always tells you why a company ranked where it did.

**Q: Will this scrape Bombora / 6sense / ZoomInfo?**
A: No - public web only. We do not touch paid intent providers.

**Q: How does PPE pricing actually work here?**
A: $0.01 per company processed (always), $0.02 per high-intent alert (composite >= 0.6), $0.005 per signal that scored >= 0.5. A typical 1000-account list is roughly $10 base plus alerts on the ~10-20% with meaningful intent.

### Related Actors

- [`sec-edgar-intel`](../sec-edgar-intel/) - deeper 8-K, 10-K, S-1, and insider-trading parsing when SEC filings are your highest-signal source.
- [`reddit-topic-watcher`](../reddit-topic-watcher/) - layer Reddit recommendation-request and alternative-seek leads on top of company-level intent.
- Pair with any of the 15 lead-finder actors (e.g. `home-services-lead-finder`, `houzz-contractor-leads`, `shopify-store-discovery`, `contract-heavy-smb-lead-finder`) - those find the fit; this actor scores the intent. Run lead-finder first, feed the company list into this actor's `companies` input.

### Integrations

- Zapier - push to HubSpot/Salesforce/Pipedrive/Apollo/Klaviyo
- Make.com - workflow automation
- n8n - self-hosted automation
- Apify webhooks - POST to your endpoint
- API + dataset export (JSON/CSV/Excel/XML)
- MCP / AI agents - call from Claude/GPT/LangChain

### Signals

| Signal | What it means | Source |
|---|---|---|
| `hiring_surge` | Open LinkedIn roles classified by department | LinkedIn /company/<slug>/jobs/ |
| `funding` | Recent round, amount, lead investors | TechCrunch + Crunchbase News RSS |
| `press_mentions` | Recent news count + sentiment hint | Google News HTML search |
| `exec_change` | C-suite arrivals + departures | SEC 8-K full-text + Google News fallback |
| `tech_stack_change` | Marketing / sales / analytics SaaS detected on homepage | Homepage HTML + headers |
| `domain_changes` | New subdomains + DNS snapshot | crt.sh certificate transparency + DNS |
| `patent_filings` | Filings in last N days by assignee | PatentsView free API |
| `customer_mentions` | Sites declaring "powered by / built with / using <company>" | Google web HTML search |

### Composite scoring

````

funding             0.22
hiring\_surge        0.18
exec\_change         0.15
press\_mentions      0.10
patent\_filings      0.10
tech\_stack\_change   0.10
customer\_mentions   0.08
domain\_changes      0.07

````

Score is normalized by the sum of weights of enabled signals, then clamped to [0, 1]. `>= 0.6` = high-intent alert.

### Input

See `.actor/INPUT_SCHEMA.json`. Sample:

```json
{
    "companies": ["Stripe", "openai.com", "Anthropic"],
    "enabled_signals": ["hiring_surge", "funding", "press_mentions", "exec_change"],
    "lookback_days": 90,
    "min_trigger_score": "0.3",
    "concurrency": 4,
    "use_apify_proxy": true,
    "apify_proxy_groups": ["RESIDENTIAL"],
    "apify_proxy_country": "US"
}
````

### Output

**Sample output:** [`.actor/sample-output.json`](./.actor/sample-output.json) — copy-paste-ready preview of real-looking records.

First record inline:

```json
{
  "company_name": "Gravity Forms, Inc.",
  "normalized_domain": "gravityforms.example",
  "linkedin_url": "https://www.linkedin.com/company/gravity-forms-example",
  "scraped_at": "2026-05-13T23:01:14Z",
  "available": true,
  "reason": null,
  "triggers": {
    "hiring_surge": {
      "open_role_count": 38,
      "role_distribution": {
        "engineering": 18,
        "sales": 11,
        "marketing": 4,
        "ops": 2,
        "hr": 2,
        "other": 1
      },
      "surge_signal": true,
      "score": 0.92
    },
    "funding": {
      "latest_round_type": "Series C",
      "latest_amount_usd": 65000000,
      "latest_date": "2026-04-22",
      "investors": [
        "Insight Partners",
        "Tiger Global",
        "Bessemer Venture Partners"
      ],
      "source_url": "https://example-news.com/gravity-forms-65m-series-c",
      "score": 0.95
    },
    "press_mentions": {
      "mentions_count": 14,
      "top_articles": [
        {
          "title": "Gravity Forms raises $65M to expand enterprise SaaS",
          "url": "https://example-news.com/gravity-forms-65m",
          "date": "2026-04-22",
          "sentiment_hint": "positive"
        },
        {
          "title": "Forms platform Gravity adds 80 engineers, signals enterprise push",
          "url": "https://example-tech.com/gravity-hiring-surge",
          "date": "2026-05-02",
          "sentiment_hint": "positive"
        }
      ],
      "keywords_matched": [
        "raises",
        "expand",
        "hiring"
      ],
      "score": 0.78
    },
    "exec_change": {
      "departures": [],
      "arrivals": [
        "Maya Lindgren \u2014 Chief Revenue Officer (formerly Stripe)"
      ],
      "source_filing_or_url": "https://www.linkedin.com/in/maya-lindgren-example",
      "score": 0.71
    },
    "tech_stack_change": {
      "added": [
        "segment",
        "snowflake",
        "amplitude"
      ],
      "removed_suspected": [],
      "score": 0.42
    },
    "domain_changes": {
      "new_subdomains": [
        "enterprise.gravityforms.example",
        "trust.gravityforms.example"
      ],
      "record_changes": [
        {
          "type": "MX",
          "value": "aspmx.l.google.com"
        }
      ],
      "score": 0.55
    },
    "patent_filings": {
      "recent_filing_count": 0,
      "cpc_clusters": [],
      "sample_titles": [],
      "score": 0.0
    },
    "customer_mentions": {
      "mention_count": 4,
      "mention_urls": [
        "https://example-press.com/zendesk-now-on-gravity"
      ],
      "score": 0.32
    }
  },
  "composite_trigger_score": 0.81,
  "top_triggers": [
    "funding",
    "hiring_surge",
    "press_mentions",
    "exec_change",
    "domain_changes"
  ]
}
```

One record per company that passes the score floor:

```json
{
    "company_name": "Stripe",
    "normalized_domain": "stripe.com",
    "linkedin_url": "https://www.linkedin.com/company/stripe",
    "scraped_at": "2026-05-14T12:00:00Z",
    "available": true,
    "triggers": {
        "hiring_surge": {"open_role_count": 248, "score": 0.91},
        "funding":      {"latest_round_type": "Series I", "latest_amount_usd": 6500000000, "score": 0.85},
        "press_mentions": {"mentions_count": 42, "score": 0.66}
    },
    "composite_trigger_score": 0.78,
    "top_triggers": ["hiring_surge", "funding", "press_mentions"]
}
```

### Pricing

Pay-per-event:

- `$0.010` per company processed (always charged).
- `$0.020` per high-intent alert (composite >= 0.6).
- `$0.005` per signal that scored >= 0.5.

A typical SDR-prioritized account costs roughly $0.02 - $0.06 to enrich. A list of 1000 accounts costs ~$10 base plus alerts and enrichments on the ~10-20% with meaningful intent.

### FAQ

**Q: Do I need a residential proxy?**
A: For LinkedIn jobs and Google News yes - datacenter IPs get challenged. RESIDENTIAL with US country code is the default.

**Q: Why is `tech_stack_change.removed_suspected` always empty?**
A: Detecting removals requires a prior snapshot we do not store. The current-state stack is detected; you can run the actor weekly and diff stack arrays on your side.

**Q: Will this scrape Bombora / 6sense / ZoomInfo?**
A: No - public web only. We do not scrape paid intent providers.

**Q: A company I expect to score high came back with 0.0. Why?**
A: Most often: LinkedIn slug resolution failed because the company's slug differs from its name. Use `linkedin_company_url_overrides` to pin the slug. Also verify proxy session is not being rate-limited.

### Support

Open an issue on the actor's GitHub or contact via Apify Store. Include the run ID and input config.

### Changelog

See [CHANGELOG.md](./CHANGELOG.md).

# Actor input Schema

## `companies` (type: `array`):

List of company names or root domains to evaluate. Mix freely (e.g. 'Stripe', 'openai.com', 'Anthropic'). Domains are auto-normalized; names are used for LinkedIn / news resolution.

## `enabled_signals` (type: `array`):

Which intent signals to compute per company. Each signal is independent and failure-tolerant. Default: all eight signals.

## `lookback_days` (type: `integer`):

Time window in days used by every signal that has a 'recent' concept (news, funding, patents, exec changes). 7 to 365. Default 90.

## `min_trigger_score` (type: `string`):

Decimal 0-1 floor on composite\_trigger\_score. Records below this score are dropped (not emitted). Set to '0' to emit every company. Default '0.3'.

## `linkedin_company_url_overrides` (type: `array`):

Optional explicit LinkedIn company URLs (one per company, same order as 'companies') so we skip slug resolution. Example: 'https://www.linkedin.com/company/stripe/'. Leave empty to auto-resolve.

## `news_keywords_must_include` (type: `array`):

For the press\_mentions signal: only count news articles whose title or snippet contains AT LEAST ONE of these terms. Leave empty for no inclusion filter.

## `news_keywords_must_exclude` (type: `array`):

For the press\_mentions signal: drop news articles whose title or snippet contains ANY of these terms. Useful to filter out 'lawsuit', 'class action', etc.

## `concurrency` (type: `integer`):

Number of companies processed in parallel. Each company internally fans out to all enabled signals. 1 to 8. Default 4.

## `use_apify_proxy` (type: `boolean`):

Route outbound HTTP through Apify Proxy. Strongly recommended: LinkedIn job-count fetches and Google News scrapes will be blocked from datacenter IPs.

## `apify_proxy_groups` (type: `array`):

Apify proxy groups. RESIDENTIAL is required for LinkedIn / Google News. DATACENTER is acceptable for SEC / USPTO / RSS feeds but the actor uses one shared session, so keep RESIDENTIAL.

## `apify_proxy_country` (type: `string`):

Two-letter country code for the proxy session (e.g. 'US', 'GB'). Default 'US' for consistent Google News / LinkedIn behavior.

## `request_timeout_seconds` (type: `integer`):

Max seconds for any single outbound HTTP request. Signals that exceed this timeout fail gracefully and the record is still emitted with the other signals. Default 20.

## Actor input object example

```json
{
  "companies": [
    "Stripe",
    "openai.com",
    "Anthropic"
  ],
  "enabled_signals": [
    "hiring_surge",
    "funding",
    "press_mentions",
    "exec_change",
    "tech_stack_change",
    "domain_changes",
    "patent_filings",
    "customer_mentions"
  ],
  "lookback_days": 90,
  "min_trigger_score": "0.3",
  "linkedin_company_url_overrides": [],
  "news_keywords_must_include": [],
  "news_keywords_must_exclude": [],
  "concurrency": 4,
  "use_apify_proxy": true,
  "apify_proxy_groups": [
    "RESIDENTIAL"
  ],
  "apify_proxy_country": "US",
  "request_timeout_seconds": 20
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Narrow, token-efficient slice of every record. Consumer: LLM agents (Claude, GPT, LangChain tools), MCP hosts, dashboards. Intel fields: company, normalized domain, composite trigger score, top trigger signal, last seen.

## `datasetItemsDetailed` (type: `string`):

All fields for every record. Consumer: humans browsing the dataset in the Apify UI, RAG ingest pipelines, and full backups. Larger payload — not recommended as a direct LLM tool response.

## `datasetItemsMcp` (type: `string`):

First 50 overview records as a clean JSON array. Wrap on the agent side in an MCP tool-call response envelope, e.g. `{ "ok": true, "data": <this array>, "meta": { "actor": "b2b-sales-triggers", "count": <len>, "view": "overview" } }`. Consumer: MCP servers, Claude Desktop, Cursor, OpenAI Assistants tool calls.

## `datasetItemsCsv` (type: `string`):

Spreadsheet-friendly export of the overview view. Consumer: humans, sales-ops teams, Excel / Google Sheets users.

# 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 = {
    "companies": [
        "Stripe",
        "openai.com",
        "Anthropic"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("seibs.co/b2b-sales-triggers").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 = { "companies": [
        "Stripe",
        "openai.com",
        "Anthropic",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("seibs.co/b2b-sales-triggers").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 '{
  "companies": [
    "Stripe",
    "openai.com",
    "Anthropic"
  ]
}' |
apify call seibs.co/b2b-sales-triggers --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=seibs.co/b2b-sales-triggers",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "B2B Sales Triggers - Hiring Surge, Funding, Press, Exec Changes",
        "description": "B2B intent data aggregator. For a list of target companies, computes: hiring surge (LinkedIn delta), funding rounds, press mentions, executive changes, tech stack adoption, recent patent filings, customer mentions. Composite trigger score per company. For SDR teams.",
        "version": "0.1",
        "x-build-id": "KfuBidpsg9ibv6LEF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/seibs.co~b2b-sales-triggers/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-seibs.co-b2b-sales-triggers",
                "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/seibs.co~b2b-sales-triggers/runs": {
            "post": {
                "operationId": "runs-sync-seibs.co-b2b-sales-triggers",
                "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/seibs.co~b2b-sales-triggers/run-sync": {
            "post": {
                "operationId": "run-sync-seibs.co-b2b-sales-triggers",
                "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": [
                    "companies"
                ],
                "properties": {
                    "companies": {
                        "title": "Target companies",
                        "type": "array",
                        "description": "List of company names or root domains to evaluate. Mix freely (e.g. 'Stripe', 'openai.com', 'Anthropic'). Domains are auto-normalized; names are used for LinkedIn / news resolution.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "enabled_signals": {
                        "title": "Enabled signals",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Which intent signals to compute per company. Each signal is independent and failure-tolerant. Default: all eight signals.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "hiring_surge",
                                "funding",
                                "press_mentions",
                                "exec_change",
                                "tech_stack_change",
                                "domain_changes",
                                "patent_filings",
                                "customer_mentions"
                            ]
                        },
                        "default": [
                            "hiring_surge",
                            "funding",
                            "press_mentions",
                            "exec_change",
                            "tech_stack_change",
                            "domain_changes",
                            "patent_filings",
                            "customer_mentions"
                        ]
                    },
                    "lookback_days": {
                        "title": "Lookback window (days)",
                        "minimum": 7,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Time window in days used by every signal that has a 'recent' concept (news, funding, patents, exec changes). 7 to 365. Default 90.",
                        "default": 90
                    },
                    "min_trigger_score": {
                        "title": "Minimum composite trigger score",
                        "type": "string",
                        "description": "Decimal 0-1 floor on composite_trigger_score. Records below this score are dropped (not emitted). Set to '0' to emit every company. Default '0.3'.",
                        "default": "0.3"
                    },
                    "linkedin_company_url_overrides": {
                        "title": "LinkedIn company URL overrides",
                        "type": "array",
                        "description": "Optional explicit LinkedIn company URLs (one per company, same order as 'companies') so we skip slug resolution. Example: 'https://www.linkedin.com/company/stripe/'. Leave empty to auto-resolve.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "news_keywords_must_include": {
                        "title": "Press: must-include keywords",
                        "type": "array",
                        "description": "For the press_mentions signal: only count news articles whose title or snippet contains AT LEAST ONE of these terms. Leave empty for no inclusion filter.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "news_keywords_must_exclude": {
                        "title": "Press: must-exclude keywords",
                        "type": "array",
                        "description": "For the press_mentions signal: drop news articles whose title or snippet contains ANY of these terms. Useful to filter out 'lawsuit', 'class action', etc.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "concurrency": {
                        "title": "Max concurrent companies",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Number of companies processed in parallel. Each company internally fans out to all enabled signals. 1 to 8. Default 4.",
                        "default": 4
                    },
                    "use_apify_proxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route outbound HTTP through Apify Proxy. Strongly recommended: LinkedIn job-count fetches and Google News scrapes will be blocked from datacenter IPs.",
                        "default": true
                    },
                    "apify_proxy_groups": {
                        "title": "Apify Proxy groups",
                        "type": "array",
                        "description": "Apify proxy groups. RESIDENTIAL is required for LinkedIn / Google News. DATACENTER is acceptable for SEC / USPTO / RSS feeds but the actor uses one shared session, so keep RESIDENTIAL.",
                        "default": [
                            "RESIDENTIAL"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "apify_proxy_country": {
                        "title": "Apify Proxy country",
                        "type": "string",
                        "description": "Two-letter country code for the proxy session (e.g. 'US', 'GB'). Default 'US' for consistent Google News / LinkedIn behavior.",
                        "default": "US"
                    },
                    "request_timeout_seconds": {
                        "title": "Per-request HTTP timeout (seconds)",
                        "minimum": 5,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Max seconds for any single outbound HTTP request. Signals that exceed this timeout fail gracefully and the record is still emitted with the other signals. Default 20.",
                        "default": 20
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
