# Hiring Intent Lead Finder (`signalflow_studio/hiring-intent-lead-finder`) Actor

Find evidence-backed B2B account signals from uploaded job rows, or from up to 100 company career pages when enabled, with scoring, source URLs, and concise BYOK AI-assisted outreach angles.

- **URL**: https://apify.com/signalflow\_studio/hiring-intent-lead-finder.md
- **Developed by:** [SignalFlow Studio](https://apify.com/signalflow_studio) (community)
- **Categories:** Lead generation, Jobs, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 qualified accounts

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

## Hiring Intent Lead Finder

Turn public hiring activity into evidence-backed B2B outbound account signals.

This Actor screens uploaded job rows and public company career pages, then outputs qualified companies whose job posts suggest an active buying need. Each result includes matched evidence, a signal score, inferred need, why-now context, recommended persona, and a concise outreach angle.

### Who it is for

- CRM, RevOps, Salesforce, and HubSpot implementation agencies.
- Data, BI, analytics, AI, and cloud consulting teams.
- Cybersecurity, compliance, SOC, GRC, and SIEM service providers.
- Outbound agencies producing weekly account lists for clients.

### What it does

- Accepts uploaded job rows and/or a list of companies with public career URLs.
- Matches hiring activity against an intent playbook.
- Deduplicates company-level signals.
- Scores accounts by keyword match, recency, role volume, seniority, tool specificity, and source quality.
- Adds concise evidence-based insights for qualified accounts, with optional BYOK AI assistance.
- Returns only qualified account rows in the default dataset.

### What it does not do

- It does not scrape login-gated LinkedIn pages.
- It does not require cookies.
- It does not guarantee personal contact data or verified emails.
- It does not invent facts without evidence URLs.
- It is not a generic job scraper; the output unit is a qualified account.

### Quick start

Use the default CRM / RevOps playbook with uploaded job rows:

```json
{
  "playbook": "crm_revops",
  "jobKeywords": ["RevOps Manager", "Revenue Operations", "HubSpot"],
  "fetchCareerPages": false,
  "enableAiInsights": false,
  "minSignalScore": 60,
  "maxResults": 3,
  "jobRows": [
    {
      "companyName": "Instrumentl",
      "domain": "instrumentl.com",
      "jobTitle": "RevOps Manager",
      "description": "Instrumentl is hiring a RevOps Manager to own the technical infrastructure that powers the marketing engine. The role maintains the marketing data model in HubSpot, connects product usage, event platforms, enrichment providers, ad platforms, product analytics, and data warehouse workflows, and builds lead scoring, segmentation, reporting, and AI tooling across GTM systems.",
      "postedAt": "2026-05-20",
      "url": "https://jobs.lever.co/Instrumentl/a2c6c454-00a1-4ab0-9c02-cddfffec17b5",
      "source": "lever_public_job"
    }
  ]
}
````

### Inputs

| Field | Description |
|---|---|
| `playbook` | `crm_revops`, `data_stack`, `cybersecurity`, or `custom`. |
| `jobKeywords` | Extra job title, skill, or tool keywords to match. |
| `companyList` | Companies to screen. Add `domain` and optional `careersUrl` for best results. |
| `jobRows` | Uploaded job rows from another scraper or dataset. |
| `postedWithinDays` | Preferred recency window for jobs with dates. |
| `minSignalScore` | Minimum score required for dataset output. |
| `maxCompanies` | Default 100, hard cap 1000. |
| `maxJobRows` | Default 300, hard cap 5000. |
| `maxResults` | Default 100, hard cap 500. |
| `fetchCareerPages` | Fetch public career pages from `companyList`. |
| `enableAiInsights` | Generate concise insight fields. Uses BYOK when `aiProviderApiKey` is supplied; otherwise falls back to deterministic evidence-based text. |
| `aiProvider` | `deepseek`, `openrouter`, or `openai` for BYOK insight generation. |
| `aiProviderApiKey` | Optional secret BYOK key for AI-assisted insight generation. |
| `aiModel` | Optional model override for the selected AI provider. |

### Output

The default dataset contains one row per qualified account:

```json
{
  "companyName": "Instrumentl",
  "domain": "instrumentl.com",
  "playbook": "crm_revops",
  "signalScore": 78,
  "signalTier": "medium",
  "inferredNeed": "Likely scaling CRM, sales operations, or revenue operations workflows",
  "whyNow": "The company shows 1 matching hiring signal, including RevOps Manager.",
  "recommendedPersona": "VP Sales, RevOps Lead, COO, Head of Sales Operations",
  "outreachAngle": "Lead with CRM implementation cleanup, reporting automation, pipeline process design, and RevOps capacity support.",
  "matchedKeywords": ["hubspot", "revops", "revops manager"],
  "openRolesCount": 1,
  "evidence": [
    {
      "source": "lever_public_job",
      "jobTitle": "RevOps Manager",
      "postedAt": "2026-05-20",
      "url": "https://jobs.lever.co/Instrumentl/a2c6c454-00a1-4ab0-9c02-cddfffec17b5"
    }
  ],
  "status": "qualified"
}
```

The key-value store also includes:

- `OUTPUT`: complete JSON output with summary and results.
- `REPORT`: a Markdown report for human review.

### Default run size and caps

Default public run:

- analyzes up to 300 uploaded job rows,
- emits up to 100 qualified accounts,
- does not fetch career pages unless `fetchCareerPages` is enabled.

When career-page fetching is enabled, the Actor can screen up to 100 companies by default and try up to 3 career URLs per company.

Hard caps:

- `maxCompanies`: 1000
- `maxJobRows`: 5000
- `maxResults`: 500
- `maxCareerUrlsPerCompany`: 8

Lower these limits to reduce runtime and platform usage.

### Pricing and cost model

This Actor is designed for pay-per-event pricing:

- `apify-actor-start`: a small automatic start fee that covers no-result runs.
- `company_screened`: charged when a company is checked from `companyList`.
- `qualified_account`: charged when a qualified account is produced.
- `ai_insight`: charged when an AI-assisted insight is generated for a qualified account.

The Actor charges only after work has produced a screened company, qualified account, or insight. Uploaded `jobRows` are cheaper because they avoid live career-page fetching.

If the run owner's maximum charge limit is reached, the Actor stops gracefully and returns partial results.

AI provider costs are BYOK by default. If `aiProviderApiKey` is empty, the Actor does not call an external AI provider and uses deterministic insight text. Owner-managed AI keys are disabled unless the Actor owner explicitly sets `ALLOW_MANAGED_AI=true` in the Actor environment.

Initial public PPE prices:

- `apify-actor-start`: USD 0.0005 per run.
- `company_screened`: USD 0.0015 per screened company.
- `qualified_account`: USD 0.01 per qualified account.
- `ai_insight`: USD 0.001 per AI-assisted insight.

### Compliance and acceptable use

Use this Actor only with public data you are allowed to process. Respect source website terms, privacy laws, and outreach rules in your jurisdiction. Do not use the output for spam, harassment, discriminatory targeting, or unlawful profiling.

### Known limits

- Public career pages vary widely; some sites hide listings behind JavaScript, APIs, or anti-bot controls.
- Generic career pages may produce page-level evidence rather than individual job URLs.
- AI insight text summarizes visible evidence and should be reviewed before use.
- Contact enrichment and email verification are intentionally out of scope.

### Local development

```bash
npm install
npm run sample
npm run validate:sample
npm run smoke
npm run validate:smoke
npm run real-smoke
npm run validate:real-smoke
```

### Apify deployment

```bash
npx apify-cli@1.6.1 push
npx apify-cli@1.6.1 call signalflow_studio/hiring-intent-lead-finder --input-file fixtures/cloud-smoke-input.json --memory 1024 --timeout 180 --json
```

# Actor input Schema

## `playbook` (type: `string`):

The buying-need pattern to detect from public hiring activity.

## `jobKeywords` (type: `array`):

Custom job title, skill, and tool keywords. These supplement the selected playbook.

## `locations` (type: `array`):

Optional location keywords. Leave empty to match all locations.

## `companyList` (type: `array`):

Companies to screen. Add a domain and optional careers URL for best results.

## `jobRows` (type: `array`):

Optional job rows from another scraper or dataset. Each row can include companyName, domain, jobTitle, description, location, postedAt, url, and source.

## `postedWithinDays` (type: `integer`):

Prefer jobs posted within this many days. Rows without postedAt are still considered but get lower recency confidence.

## `minSignalScore` (type: `integer`):

Only accounts at or above this score are emitted to the main dataset.

## `maxCompanies` (type: `integer`):

Maximum companies to screen from companyList. Default 100; hard-capped at 1000.

## `maxJobRows` (type: `integer`):

Maximum uploaded job rows to analyze. Default 300; hard-capped at 5000.

## `maxResults` (type: `integer`):

Maximum qualified accounts to output.

## `excludeStaffingAgencies` (type: `boolean`):

Penalize likely recruiters, staffing firms, and job boards so the output focuses on buying accounts.

## `enableAiInsights` (type: `boolean`):

Generate concise inferred need, why-now, recommended persona, and outreach angle for qualified accounts. Add your own AI provider key below. If no key is provided, the Actor falls back to deterministic evidence-based text.

## `aiProvider` (type: `string`):

AI provider used when an API key is supplied.

## `aiProviderApiKey` (type: `string`):

Optional BYOK key for AI-assisted insight generation. Leave empty to use deterministic insights without external AI calls.

## `aiModel` (type: `string`):

Optional model override. Defaults: deepseek-chat, openai/gpt-4.1-mini on OpenRouter, or gpt-4.1-mini on OpenAI.

## `maxAiInsights` (type: `integer`):

Maximum qualified accounts that receive AI-assisted insights.

## `fetchCareerPages` (type: `boolean`):

Fetch public career pages from companyList. Disable this if you only want to analyze uploaded jobRows.

## `maxCareerUrlsPerCompany` (type: `integer`):

Maximum public career URLs to try for each company. Lower values reduce runtime and platform usage.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout for public career pages.

## `debug` (type: `boolean`):

Include more progress details in logs and OUTPUT.

## Actor input object example

```json
{
  "playbook": "crm_revops",
  "jobKeywords": [
    "Salesforce Administrator",
    "RevOps Manager",
    "HubSpot Specialist"
  ],
  "jobRows": [
    {
      "companyName": "Instrumentl",
      "domain": "instrumentl.com",
      "jobTitle": "RevOps Manager",
      "description": "Instrumentl is hiring a RevOps Manager to own the technical infrastructure that powers the marketing engine. The role maintains the marketing data model in HubSpot, connects product usage, event platforms, enrichment providers, ad platforms, product analytics, and data warehouse workflows, and builds lead scoring, segmentation, reporting, and AI tooling across GTM systems.",
      "postedAt": "2026-05-20",
      "url": "https://jobs.lever.co/Instrumentl/a2c6c454-00a1-4ab0-9c02-cddfffec17b5",
      "source": "lever_public_job"
    }
  ],
  "postedWithinDays": 30,
  "minSignalScore": 70,
  "maxCompanies": 100,
  "maxJobRows": 300,
  "maxResults": 100,
  "excludeStaffingAgencies": true,
  "enableAiInsights": true,
  "aiProvider": "deepseek",
  "maxAiInsights": 100,
  "fetchCareerPages": false,
  "maxCareerUrlsPerCompany": 3,
  "requestTimeoutSecs": 20,
  "debug": false
}
```

# Actor output Schema

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

Structured JSON dataset with one item per qualified account.

## `jsonOutput` (type: `string`):

Full structured output stored in the default key-value store.

## `markdownReport` (type: `string`):

Human-readable Markdown report stored in the default key-value store.

# 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 = {
    "jobKeywords": [
        "Salesforce Administrator",
        "RevOps Manager",
        "HubSpot Specialist"
    ],
    "jobRows": [
        {
            "companyName": "Instrumentl",
            "domain": "instrumentl.com",
            "jobTitle": "RevOps Manager",
            "description": "Instrumentl is hiring a RevOps Manager to own the technical infrastructure that powers the marketing engine. The role maintains the marketing data model in HubSpot, connects product usage, event platforms, enrichment providers, ad platforms, product analytics, and data warehouse workflows, and builds lead scoring, segmentation, reporting, and AI tooling across GTM systems.",
            "postedAt": "2026-05-20",
            "url": "https://jobs.lever.co/Instrumentl/a2c6c454-00a1-4ab0-9c02-cddfffec17b5",
            "source": "lever_public_job"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalflow_studio/hiring-intent-lead-finder").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 = {
    "jobKeywords": [
        "Salesforce Administrator",
        "RevOps Manager",
        "HubSpot Specialist",
    ],
    "jobRows": [{
            "companyName": "Instrumentl",
            "domain": "instrumentl.com",
            "jobTitle": "RevOps Manager",
            "description": "Instrumentl is hiring a RevOps Manager to own the technical infrastructure that powers the marketing engine. The role maintains the marketing data model in HubSpot, connects product usage, event platforms, enrichment providers, ad platforms, product analytics, and data warehouse workflows, and builds lead scoring, segmentation, reporting, and AI tooling across GTM systems.",
            "postedAt": "2026-05-20",
            "url": "https://jobs.lever.co/Instrumentl/a2c6c454-00a1-4ab0-9c02-cddfffec17b5",
            "source": "lever_public_job",
        }],
}

# Run the Actor and wait for it to finish
run = client.actor("signalflow_studio/hiring-intent-lead-finder").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 '{
  "jobKeywords": [
    "Salesforce Administrator",
    "RevOps Manager",
    "HubSpot Specialist"
  ],
  "jobRows": [
    {
      "companyName": "Instrumentl",
      "domain": "instrumentl.com",
      "jobTitle": "RevOps Manager",
      "description": "Instrumentl is hiring a RevOps Manager to own the technical infrastructure that powers the marketing engine. The role maintains the marketing data model in HubSpot, connects product usage, event platforms, enrichment providers, ad platforms, product analytics, and data warehouse workflows, and builds lead scoring, segmentation, reporting, and AI tooling across GTM systems.",
      "postedAt": "2026-05-20",
      "url": "https://jobs.lever.co/Instrumentl/a2c6c454-00a1-4ab0-9c02-cddfffec17b5",
      "source": "lever_public_job"
    }
  ]
}' |
apify call signalflow_studio/hiring-intent-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=signalflow_studio/hiring-intent-lead-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hiring Intent Lead Finder",
        "description": "Find evidence-backed B2B account signals from uploaded job rows, or from up to 100 company career pages when enabled, with scoring, source URLs, and concise BYOK AI-assisted outreach angles.",
        "version": "0.1",
        "x-build-id": "puer9sLDZeg0BQliX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/signalflow_studio~hiring-intent-lead-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-signalflow_studio-hiring-intent-lead-finder",
                "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/signalflow_studio~hiring-intent-lead-finder/runs": {
            "post": {
                "operationId": "runs-sync-signalflow_studio-hiring-intent-lead-finder",
                "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/signalflow_studio~hiring-intent-lead-finder/run-sync": {
            "post": {
                "operationId": "run-sync-signalflow_studio-hiring-intent-lead-finder",
                "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": [
                    "playbook"
                ],
                "properties": {
                    "playbook": {
                        "title": "Intent playbook",
                        "enum": [
                            "crm_revops",
                            "data_stack",
                            "cybersecurity",
                            "custom"
                        ],
                        "type": "string",
                        "description": "The buying-need pattern to detect from public hiring activity.",
                        "default": "crm_revops"
                    },
                    "jobKeywords": {
                        "title": "Job keywords",
                        "type": "array",
                        "description": "Custom job title, skill, and tool keywords. These supplement the selected playbook.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Optional location keywords. Leave empty to match all locations.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyList": {
                        "title": "Companies to screen",
                        "type": "array",
                        "description": "Companies to screen. Add a domain and optional careers URL for best results."
                    },
                    "jobRows": {
                        "title": "Uploaded job rows",
                        "type": "array",
                        "description": "Optional job rows from another scraper or dataset. Each row can include companyName, domain, jobTitle, description, location, postedAt, url, and source."
                    },
                    "postedWithinDays": {
                        "title": "Posted within days",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Prefer jobs posted within this many days. Rows without postedAt are still considered but get lower recency confidence.",
                        "default": 30
                    },
                    "minSignalScore": {
                        "title": "Minimum signal score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only accounts at or above this score are emitted to the main dataset.",
                        "default": 70
                    },
                    "maxCompanies": {
                        "title": "Max companies",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum companies to screen from companyList. Default 100; hard-capped at 1000.",
                        "default": 100
                    },
                    "maxJobRows": {
                        "title": "Max job rows",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum uploaded job rows to analyze. Default 300; hard-capped at 5000.",
                        "default": 300
                    },
                    "maxResults": {
                        "title": "Max qualified accounts",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum qualified accounts to output.",
                        "default": 100
                    },
                    "excludeStaffingAgencies": {
                        "title": "Exclude staffing agencies",
                        "type": "boolean",
                        "description": "Penalize likely recruiters, staffing firms, and job boards so the output focuses on buying accounts.",
                        "default": true
                    },
                    "enableAiInsights": {
                        "title": "Generate AI-assisted insights",
                        "type": "boolean",
                        "description": "Generate concise inferred need, why-now, recommended persona, and outreach angle for qualified accounts. Add your own AI provider key below. If no key is provided, the Actor falls back to deterministic evidence-based text.",
                        "default": true
                    },
                    "aiProvider": {
                        "title": "AI provider",
                        "enum": [
                            "deepseek",
                            "openrouter",
                            "openai"
                        ],
                        "type": "string",
                        "description": "AI provider used when an API key is supplied.",
                        "default": "deepseek"
                    },
                    "aiProviderApiKey": {
                        "title": "AI provider API key",
                        "type": "string",
                        "description": "Optional BYOK key for AI-assisted insight generation. Leave empty to use deterministic insights without external AI calls."
                    },
                    "aiModel": {
                        "title": "AI model",
                        "type": "string",
                        "description": "Optional model override. Defaults: deepseek-chat, openai/gpt-4.1-mini on OpenRouter, or gpt-4.1-mini on OpenAI."
                    },
                    "maxAiInsights": {
                        "title": "Max AI insights",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum qualified accounts that receive AI-assisted insights.",
                        "default": 100
                    },
                    "fetchCareerPages": {
                        "title": "Fetch public career pages",
                        "type": "boolean",
                        "description": "Fetch public career pages from companyList. Disable this if you only want to analyze uploaded jobRows.",
                        "default": false
                    },
                    "maxCareerUrlsPerCompany": {
                        "title": "Max career URLs per company",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Maximum public career URLs to try for each company. Lower values reduce runtime and platform usage.",
                        "default": 3
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout seconds",
                        "minimum": 5,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Per-request timeout for public career pages.",
                        "default": 20
                    },
                    "debug": {
                        "title": "Debug logs",
                        "type": "boolean",
                        "description": "Include more progress details in logs and OUTPUT.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
