# Company Domain → Career Page Job Finder (`coregent/company-domain-career-page-job-finder`) Actor

Turn company domains into live job listings: discover career pages, detect the ATS (Greenhouse, Lever, Ashby, Workday, generic), and extract clean, CSV-ready jobs with hiring signals - no login or cookies.

- **URL**: https://apify.com/coregent/company-domain-career-page-job-finder.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 job-results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Company Domain → Career Page Job Finder

![Company Domain → Career Page Job Finder](https://raw.githubusercontent.com/coregentdevspace/company-domain-career-page-job-finder-assets/main/thumbnail-company-domain-career-page-job-finder.png)

Paste a list of **company domains** and get back their **live job listings**. The actor normalizes each domain, discovers its **career page**, detects the **ATS** (Greenhouse, Lever, Ashby, Workday, or a generic career page), and extracts public jobs into clean, flat, **CSV-ready** rows enriched with lightweight **hiring-signal** fields. Built for **B2B lead-gen, sales teams, recruiters, staffing agencies, and market researchers**.

**No login, no cookies, no residential proxy, no expensive enrichment APIs.** It uses free public ATS APIs and public pages over HTTP, so it stays fast and cost-predictable. You pay one flat event per unique job row that passes your filters.

### ✨ Why this scraper

- **Start from a plain domain list** — you don't need to already know each company's ATS URL. The actor discovers the career path and detects the platform for you.
- **5 sources** — Greenhouse, Lever, and Ashby via their **free public JSON APIs**; Workday public career pages and a conservative generic fallback (best-effort).
- **35 flat fields** — provenance, ATS detection, job identity, location/remote, classification, compensation, description, and hiring signals. No nested objects; drops straight into Sheets/Excel/CRMs.
- **Pay-Per-Event** — one flat `job-result` event per saved unique job. Duplicates, filtered rows, and failed inputs are never charged.
- **Transparent hiring-signal score** — rule-based (no AI), explained below.

---

### 🚀 Quick start — sample inputs

#### Example 1 — company domains

```json
{
    "companyDomains": ["stripe.com", "notion.so", "canva.com"],
    "maxResults": 500,
    "maxJobsPerCompany": 200,
    "atsPlatforms": ["auto"],
    "keywords": ["data", "growth", "sales", "security"],
    "excludeKeywords": ["internship"],
    "locations": ["United States", "Australia", "Remote"],
    "remoteFilter": "any",
    "includeDescription": true,
    "includeCompensation": true,
    "deduplicate": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

#### Example 2 — direct career / ATS board URLs + custom residential proxy via your own provider

```json
{
    "careerPageUrls": [
        "https://boards.greenhouse.io/figma",
        "https://jobs.lever.co/voiceflow",
        "https://jobs.ashbyhq.com/notion"
    ],
    "maxResults": 250,
    "atsPlatforms": ["greenhouse", "lever", "ashby"],
    "includeDescription": true,
    "includeCompensation": true,
    "proxyConfiguration": {
        "useApifyProxy": false,
        "proxyUrls": ["http://user:pass@proxy.iproyal.com:12321"]
    }
}
```

> Provide **at least one** of `companyDomains` or `careerPageUrls`. If you provide both, the actor processes both and deduplicates across the whole run.

> The actor blocks Apify Residential proxy; if you need residential routing, supply your own provider via `proxyConfiguration.proxyUrls` as shown. See **🚦 Proxy policy** below.

***

### 📦 Output

The dataset has one view: **Jobs & hiring signals** — a 35-column flat table.

![Company Domain → Career Page Job Finder — Jobs & hiring signals table view](https://raw.githubusercontent.com/coregentdevspace/company-domain-career-page-job-finder-assets/main/company-domain-career-page-job-finder-output-jobs-n-hiring-signals-table-view.png)

#### Output fields (35)

`input_value`, `input_type`, `company_domain`, `company_name`, `career_page_url`, `ats_platform`, `ats_board_id`, `job_id`, `job_title`, `job_url`, `apply_url`, `location`, `locations_flat`, `country_hint`, `remote_type`, `department`, `job_family_hint`, `seniority_hint`, `employment_type`, `posted_at`, `updated_at`, `compensation_min`, `compensation_max`, `compensation_currency`, `compensation_period`, `description_text`, `description_html`, `requirements_text`, `benefits_text`, `visible_salary_text`, `hiring_signal_score`, `hiring_signal_label`, `reason_tags`, `source_url`, `scraped_at`.

#### Sample record — Jobs & hiring signals

(Real run output; `description_text` / `description_html` truncated here for readability.)

```json
{
    "input_value": "notion.so",
    "input_type": "domain",
    "company_domain": "notion.so",
    "company_name": "Notion",
    "career_page_url": "https://notion.so/careers",
    "ats_platform": "ashby",
    "ats_board_id": "notion",
    "job_id": "e3944777-d4a8-41d2-88ab-32daef949d4e",
    "job_title": "Application Security Engineer, AI Security",
    "job_url": "https://jobs.ashbyhq.com/notion/e3944777-d4a8-41d2-88ab-32daef949d4e",
    "apply_url": "https://jobs.ashbyhq.com/notion/e3944777-d4a8-41d2-88ab-32daef949d4e/application",
    "location": "San Francisco, California",
    "locations_flat": "San Francisco, California",
    "country_hint": "California",
    "remote_type": "remote",
    "department": "Security",
    "job_family_hint": "engineering",
    "seniority_hint": "mid",
    "employment_type": "Full-time",
    "posted_at": "2026-02-20T23:06:58.549Z",
    "updated_at": null,
    "compensation_min": 230000,
    "compensation_max": 280000,
    "compensation_currency": "USD",
    "compensation_period": "year",
    "description_text": "WHO WE ARE Notion is the collaborative AI workspace where teams and agents think together. We're building one place where your knowledge...",
    "description_html": "<h1>Who We Are</h1><p>Notion is the collaborative AI workspace where teams and agents think together...</p>",
    "requirements_text": null,
    "benefits_text": null,
    "visible_salary_text": "$230,000 - $280,000",
    "hiring_signal_score": 75,
    "hiring_signal_label": "high",
    "reason_tags": "remote_role|salary_visible|description_available|engineering_role|security_role|ai_ml_role",
    "source_url": "https://api.ashbyhq.com/posting-api/job-board/notion?includeCompensation=true",
    "scraped_at": "2026-06-04T06:05:47.117Z"
}
```

***

### 🧭 How discovery works

1. **Normalize** each domain to a canonical form (`https://www.Example.com/careers` → `example.com`).
2. **Discover** the career page: scan the homepage for ATS markers and career links (`/careers`, `/jobs`, "join us", …), then probe a couple of common career paths if needed.
3. **Detect & extract** the ATS:
   - **Greenhouse** → `boards-api.greenhouse.io` Job Board API
   - **Lever** → `api.lever.co/v0` Postings API
   - **Ashby** → `api.ashbyhq.com/posting-api` Job Posting API (with compensation when enabled)
   - **Workday** → public CXS jobs endpoint (best-effort, no login)
   - **Generic** → conservative extraction of clearly-identifiable job links from a career page
4. **Normalize** every posting into the same flat 35-field row, filter, deduplicate, score, and save.

***

### 🎯 Hiring-signal score

Transparent rule-based score (0–100) computed from extracted fields — no AI, no external enrichment.

| Signal                                                | Points |
| ----------------------------------------------------- | -----: |
| Base (every valid live job)                           |    +20 |
| Remote or hybrid                                      |    +15 |
| Senior / lead / manager / director / executive        |    +15 |
| Compensation visible                                  |    +10 |
| Department / job family detected                      |    +10 |
| Description present                                   |    +10 |
| Posted/updated within the last 45 days                |    +10 |
| Buying-intent / growth-team title term                |    +10 |

Score is capped at 100.

**Labels**: `very_high` (80–100) · `high` (60–79) · `medium` (40–59) · `low` (0–39).

`reason_tags` is a pipe-separated list explaining the score — e.g. `remote_role`, `hybrid_role`, `senior_role`, `management_role`, `salary_visible`, `recent_posting`, `description_available`, `engineering_role`, `sales_role`, `data_role`, `growth_role`, `security_role`, `ai_ml_role`.

***

### 💰 Pricing

**Pay-Per-Event**. One flat event per saved row (final per-event price is configured on the Apify console):

| Event        | Charged when                                                                                 |
| ------------ | -------------------------------------------------------------------------------------------- |
| `job-result` | Once per unique job row that passed all filters and was successfully written to the dataset. |

So your bill is simply `results_saved × price_per_event`. The actor honors the user-configured per-run spending cap (Apify `eventChargeLimitReached`): it caps how many results it collects up-front to what the limit can pay for, and stops cleanly the moment the cap is reached.

Not charged:

- Duplicates (deduplicated by `ats_platform + job_id`, canonical `job_url`, and domain/title keys).
- Rows filtered out by keyword / location / remote / department / ATS filters.
- Rows missing a title, an identifier, or a company anchor.
- Failed inputs and company-level discovery failures.

#### 🚦 Proxy policy

Use **Apify Datacenter** proxy or **no proxy** for normal runs — both work reliably for public ATS APIs and career pages at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor will fail at startup if `proxyConfiguration.apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth (~/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's **Custom proxy URLs** field — that traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

***

### 📊 Run summary

After each run, a `RUN_SUMMARY` entry is written to the key-value store:

```json
{
    "inputs_total": 3,
    "domains_total": 3,
    "career_page_urls_total": 0,
    "successful_inputs": 3,
    "failed_inputs": 0,
    "unsupported_inputs": 0,
    "career_pages_discovered": 2,
    "ats_pages_discovered": 3,
    "raw_results_found": 640,
    "results_saved": 420,
    "duplicates_removed": 37,
    "filtered_out": 183,
    "charged_events": 420,
    "blocked_requests": 1,
    "retry_count": 4,
    "runtime_seconds": 96,
    "scraped_at": "2026-06-02T00:00:00.000Z"
}
```

`charged_events` equals the number of successfully saved unique rows.

***

### ⚙️ Filters

| Filter                  | Matches against                                       | Effect                                              |
| ----------------------- | ----------------------------------------------------- | --------------------------------------------------- |
| `keywords`              | title, description, department, job family            | Keep only jobs matching ≥1 term.                    |
| `excludeKeywords`       | same fields                                           | Exclude any match. Exclusion wins.                  |
| `locations`             | `location`, `locations_flat`                          | Keep only jobs matching ≥1 location term.           |
| `remoteFilter`          | derived `remote_type`                                 | `any` / `remote` / `hybrid` / `onsite` / `unknown`. |
| `departments`           | `department`, `job_family_hint`                       | Keep only jobs matching ≥1 department term.         |
| `atsPlatforms`          | detected platform                                     | Restrict detection/extraction when not `auto`.      |
| `deduplicate`           | dedup keys                                            | Drop duplicate jobs (recommended ON).               |

Filters are applied **before** any dataset push or event charge.

***

### 🚧 Limitations (V1)

- **Public data only**: no login, cookies, or authenticated ATS APIs. If a company's jobs cannot be reached publicly, the input is marked unsupported and the run continues.
- **Greenhouse / Lever / Ashby** are extracted from robust public JSON APIs. **Workday** and **generic** career pages are best-effort: Workday uses the public CXS endpoint where visible (list fields only — no description), and the generic fallback extracts only **individual** job URLs (index/info/dashboard pages such as `/jobs/benefits` are skipped). It is **not** a deep website crawler.
- **Compensation** is included when the ATS publishes it (e.g. Ashby orgs that display pay, Lever salary ranges) or when a salary range is stated in the job description; there is no currency conversion or cross-country normalization. Greenhouse exposes no structured pay field, so its compensation comes only from the description text when present.
- **`updated_at`** is only provided by **Greenhouse**. The Ashby and Lever public APIs return no update timestamp, so `updated_at` is `null` for those sources (we do not fabricate it from the publish date).
- **No** recruiter/contact extraction, email enrichment, LinkedIn enrichment, or AI scoring.
- `maxResults` caps **saved unique** rows across the whole run; `maxJobsPerCompany` caps per company.

***

### ❓ FAQ

**Do I need an account or cookies?**
No. The actor uses only free public ATS APIs and public career pages.

**Which ATS platforms are supported?**
Greenhouse, Lever, Ashby (public JSON APIs), plus Workday and generic career pages (best-effort). Set `atsPlatforms` to restrict detection, or leave it as `["auto"]`.

**Can I paste an ATS board URL directly?**
Yes — put it in `careerPageUrls` (e.g. `https://jobs.lever.co/acme`). It is detected and extracted without re-discovering the domain.

**Can I export to CSV?**
Yes — every field is flat (no nested objects). Use Apify's CSV / Excel export, or call the dataset API with `format=csv`.

**Will I get blocked?**
The actor uses conservative concurrency, realistic headers, session rotation, and retry/backoff. Default Apify Proxy is sufficient for typical runs.

***

### 🛠️ Technical notes

- **Stack**: Node.js 22 · Apify SDK 3 · Crawlee `CheerioCrawler` · Cheerio. HTTP-first, no browser.
- **Endpoints**: Greenhouse Job Board API, Lever Postings API, Ashby Job Posting API, Workday public CXS, generic page extraction.
- **Concurrency**: `min=1`, `max=5` (conservative; tune after real runs).
- **Memory**: 1 GB min · 2 GB default · 4 GB max.
- **Proxy**: Apify Proxy enabled by default; custom configs accepted; Apify Residential rejected at startup.

# Actor input Schema

## `companyDomains` (type: `array`):

Company domains to discover career pages for, e.g. "stripe.com", "notion.so". Plain domains or website URLs are accepted and normalized. Provide at least one of Company domains or Career page URLs.

## `careerPageUrls` (type: `array`):

Direct career page or ATS board URLs (must start with http:// or https://), e.g. "https://jobs.lever.co/figma" or a company's /careers page. ATS boards are detected and extracted directly.

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

Maximum number of saved unique jobs across the whole run (not per company). Range 1–50000.

## `maxJobsPerCompany` (type: `integer`):

Stop saving jobs for a company once it hits this cap, so one large employer cannot consume the whole run. Range 1–5000.

## `atsPlatforms` (type: `array`):

Which ATS platforms to detect and extract. "auto" tries all supported platforms plus the generic fallback.

## `keywords` (type: `array`):

Keep only jobs whose title, description, department, or job family contains one of these terms (case-insensitive). Leave empty to keep all.

## `excludeKeywords` (type: `array`):

Exclude jobs matching any of these terms (case-insensitive), e.g. "internship". Exclusion always wins over inclusion.

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

Keep only jobs whose location text contains one of these terms, e.g. "United States", "Remote", "Berlin". Leave empty to keep all.

## `remoteFilter` (type: `string`):

Filter by inferred remote type. "any" disables this filter; "unknown" matches only jobs whose remote type could not be inferred.

## `departments` (type: `array`):

Keep only jobs whose department or job family matches one of these terms, e.g. "engineering", "sales". Leave empty to keep all.

## `includeDescription` (type: `boolean`):

Include the plain-text job description when the ATS API/page returns it. Turning this off returns lighter rows.

## `includeHtmlDescription` (type: `boolean`):

Include the raw HTML description when the ATS returns it cheaply (no extra page visits are made just for HTML). Enabled by default.

## `includeCompensation` (type: `boolean`):

Include visible compensation/salary fields when available (e.g. Ashby compensation, Lever salary ranges, or visible salary text).

## `deduplicate` (type: `boolean`):

Remove duplicate jobs across domains, career URLs, and discovered ATS sources so you are not charged for duplicates.

## `proxyConfiguration` (type: `object`):

Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).

## Actor input object example

```json
{
  "companyDomains": [
    "stripe.com",
    "notion.so",
    "canva.com"
  ],
  "careerPageUrls": [],
  "maxResults": 500,
  "maxJobsPerCompany": 200,
  "atsPlatforms": [
    "auto"
  ],
  "keywords": [],
  "excludeKeywords": [],
  "locations": [],
  "remoteFilter": "any",
  "departments": [],
  "includeDescription": true,
  "includeHtmlDescription": true,
  "includeCompensation": true,
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Flat 35-field table view of every job row pushed to the dataset: provenance, ATS detection, job identity, location/remote, classification, compensation, description, and derived hiring-signal fields.

# 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 = {
    "companyDomains": [
        "stripe.com",
        "notion.so",
        "canva.com"
    ],
    "careerPageUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/company-domain-career-page-job-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 = {
    "companyDomains": [
        "stripe.com",
        "notion.so",
        "canva.com",
    ],
    "careerPageUrls": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/company-domain-career-page-job-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 '{
  "companyDomains": [
    "stripe.com",
    "notion.so",
    "canva.com"
  ],
  "careerPageUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/company-domain-career-page-job-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=coregent/company-domain-career-page-job-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Company Domain → Career Page Job Finder",
        "description": "Turn company domains into live job listings: discover career pages, detect the ATS (Greenhouse, Lever, Ashby, Workday, generic), and extract clean, CSV-ready jobs with hiring signals - no login or cookies.",
        "version": "1.0",
        "x-build-id": "3DM5bywM0xf1jH1Bl"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coregent~company-domain-career-page-job-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coregent-company-domain-career-page-job-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/coregent~company-domain-career-page-job-finder/runs": {
            "post": {
                "operationId": "runs-sync-coregent-company-domain-career-page-job-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/coregent~company-domain-career-page-job-finder/run-sync": {
            "post": {
                "operationId": "run-sync-coregent-company-domain-career-page-job-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",
                "properties": {
                    "companyDomains": {
                        "title": "Company domains",
                        "type": "array",
                        "description": "Company domains to discover career pages for, e.g. \"stripe.com\", \"notion.so\". Plain domains or website URLs are accepted and normalized. Provide at least one of Company domains or Career page URLs.",
                        "default": [
                            "stripe.com",
                            "notion.so"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "careerPageUrls": {
                        "title": "Career page URLs",
                        "type": "array",
                        "description": "Direct career page or ATS board URLs (must start with http:// or https://), e.g. \"https://jobs.lever.co/figma\" or a company's /careers page. ATS boards are detected and extracted directly.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of saved unique jobs across the whole run (not per company). Range 1–50000.",
                        "default": 500
                    },
                    "maxJobsPerCompany": {
                        "title": "Max jobs per company",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Stop saving jobs for a company once it hits this cap, so one large employer cannot consume the whole run. Range 1–5000.",
                        "default": 200
                    },
                    "atsPlatforms": {
                        "title": "ATS platforms",
                        "type": "array",
                        "description": "Which ATS platforms to detect and extract. \"auto\" tries all supported platforms plus the generic fallback.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "auto",
                                "greenhouse",
                                "lever",
                                "ashby",
                                "workday",
                                "generic"
                            ],
                            "enumTitles": [
                                "Auto (all)",
                                "Greenhouse",
                                "Lever",
                                "Ashby",
                                "Workday",
                                "Generic career page"
                            ]
                        },
                        "default": [
                            "auto"
                        ]
                    },
                    "keywords": {
                        "title": "Keywords (include)",
                        "type": "array",
                        "description": "Keep only jobs whose title, description, department, or job family contains one of these terms (case-insensitive). Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeKeywords": {
                        "title": "Exclude keywords",
                        "type": "array",
                        "description": "Exclude jobs matching any of these terms (case-insensitive), e.g. \"internship\". Exclusion always wins over inclusion.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations (include)",
                        "type": "array",
                        "description": "Keep only jobs whose location text contains one of these terms, e.g. \"United States\", \"Remote\", \"Berlin\". Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "remoteFilter": {
                        "title": "Remote filter",
                        "enum": [
                            "any",
                            "remote",
                            "hybrid",
                            "onsite",
                            "unknown"
                        ],
                        "type": "string",
                        "description": "Filter by inferred remote type. \"any\" disables this filter; \"unknown\" matches only jobs whose remote type could not be inferred.",
                        "default": "any"
                    },
                    "departments": {
                        "title": "Departments (include)",
                        "type": "array",
                        "description": "Keep only jobs whose department or job family matches one of these terms, e.g. \"engineering\", \"sales\". Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDescription": {
                        "title": "Include job description",
                        "type": "boolean",
                        "description": "Include the plain-text job description when the ATS API/page returns it. Turning this off returns lighter rows.",
                        "default": true
                    },
                    "includeHtmlDescription": {
                        "title": "Include HTML description",
                        "type": "boolean",
                        "description": "Include the raw HTML description when the ATS returns it cheaply (no extra page visits are made just for HTML). Enabled by default.",
                        "default": true
                    },
                    "includeCompensation": {
                        "title": "Include compensation",
                        "type": "boolean",
                        "description": "Include visible compensation/salary fields when available (e.g. Ashby compensation, Lever salary ranges, or visible salary text).",
                        "default": true
                    },
                    "deduplicate": {
                        "title": "Deduplicate jobs",
                        "type": "boolean",
                        "description": "Remove duplicate jobs across domains, career URLs, and discovered ATS sources so you are not charged for duplicates.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
