# Company Jobs Scraper - Workday, Greenhouse, Lever, Ashby (`signalscope-data/ats-jobs-scraper`) Actor

Every open job from companies hiring on 15 supported ATS: Workday, Oracle, SAP SuccessFactors, Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Breezy, Rippling, BambooHR, Teamtailor, Pinpoint. Salaries, filters, new-job alerts. $1.50 / 1,000 jobs.

- **URL**: https://apify.com/signalscope-data/ats-jobs-scraper.md
- **Developed by:** [Bin](https://apify.com/signalscope-data) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Company Jobs Scraper — Workday, Oracle, Greenhouse, Lever, Ashby, Rippling, BambooHR & more (with salaries)

Get **every open job from companies hiring on 15 supported applicant tracking systems** (Workday, Oracle Recruiting Cloud, SAP SuccessFactors, Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Breezy HR, Rippling, BambooHR, Teamtailor, Pinpoint) in one run. Careers pages on other systems (iCIMS, Taleo, Jobvite, custom-built sites) are not supported yet. Just type company names (`stripe`, `notion.so`) or paste careers URLs — the Actor **auto-detects which applicant tracking system (ATS)** the company uses and returns clean, normalized job data.

Turn on **"Only new jobs since last run"** and schedule it daily to get a **hiring-signal / new-job alert feed** — you only pay for jobs you haven't seen before.

### Why use it

- 🏢 **Workday support** — the ATS used by most Fortune 500 companies (NVIDIA, Salesforce, Walmart, Adobe, Netflix…). Type the company name (e.g. `Adobe`, `Capital One`) or paste the `myworkdayjobs.com` / `myworkdaysite.com` careers URL; keyword search runs server-side so even boards with 10,000+ jobs are fast.
- 🗂️ **Department filter** — `departments: ["Engineering"]` uses Workday's own Job Category filter and the department/team field of every other ATS.
- 🏦 **Oracle Recruiting Cloud support** — the Oracle Fusion HCM career sites used by banks and large enterprises (JPMorgan Chase, Oracle…). Paste the careers URL (`…oraclecloud.com/hcmUI/CandidateExperience/en/sites/…`); full boards (7,000+ jobs) load in seconds, keyword search runs server-side, and pay ranges + full descriptions come from the job detail (salary from the description or the site's "Base Pay/Salary" field).
- 🏭 **SAP SuccessFactors support** — paste a SuccessFactors careers URL (`career5.successfactors.eu/career?company=SAP…`) and get every job from the company's official XML job feed: title, work area, location + country, employment type, career level (`seniority`), posting date, full description (pay ranges parsed from it).
- 🔎 **15 ATS platforms in one Actor** — Workday, **Oracle Recruiting Cloud, SAP SuccessFactors**, Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Breezy HR, **Rippling, BambooHR, Teamtailor and Pinpoint**. Thousands of startups and enterprises (Stripe, Notion, Spotify, Ramp, Hugging Face, Bosch…).
- 🧠 **Auto-detection** — no need to know which ATS a company uses.
- 🆕 **New-jobs-only mode** — perfect for scheduled alerts, sales triggers and recruiting pipelines.
- 📊 **Company hiring signals** — `outputLevel: "companies"` returns **one row per company** instead of job rows: total open jobs, **new jobs in the last 7 / 30 / 90 days**, breakdown by **function** (engineering, sales, data & AI…), **seniority** (intern → executive), department, location and employment type, remote share, salary transparency + median pay, the 5 latest jobs — and, on scheduled runs, **new jobs, closed jobs and net headcount-plan change since the last run**. One cheap row per account for CRM / Clay / Sheets.
- 🎯 **Filters** — title keywords, excluded words, locations, remote only, posted within N days.
- ⚡ **Fast and cheap** — uses official public job-board endpoints, no browser, no proxies. Hundreds of companies per minute.
- 🧠 **Job insights on every row** (new) — `jobFunction`, `seniority` (intern / junior / mid-level / senior / staff/principal / manager/lead / director / executive) and `workplaceType` from the title and location; with **Job insights** on, also `skills` (60+ languages, clouds, data and business tools such as Python, AWS, Kubernetes, Salesforce, SQL, Figma), `yearsExperienceMin`, `minimumEducation`, `visaSponsorship` (offered / explicitly not offered) and `securityClearance` read from the description. Rule-based, instant and **free** — no AI credits. Filter by level with `"seniority": ["senior", "staff"]`.
- 💰 **Structured salaries** — `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` from the ATS salary field *or detected in the job description* (US pay-transparency ranges like "$150,000 – $200,000", "224,000 USD - 356,500 USD", "€60.000 – €80.000"). Turn on **Only jobs with salary** to get just the roles that publish pay.
- 🛟 **Reliable on huge boards** — Workday returns at most 2,000 jobs per query, so bigger boards are split by job family automatically (NVIDIA: all 2,700+ jobs, not just 2,000); every request has a timeout and retries; if a run approaches its timeout it stops cleanly and keeps everything scraped so far.

### Use cases

- **Sales prospecting / hiring signals** — a company hiring "Data Engineer" or "Head of Security" is a buying signal. Monitor your target accounts daily.
- **Job seekers & job boards** — build a niche job board (remote, AI, crypto, climate…) from hundreds of company boards.
- **Recruiting agencies** — see who is hiring what, before it hits LinkedIn.
- **Market & competitor research** — track headcount growth by department and location.
- **Account-based sales (hiring signals)** — `outputLevel: "companies"` gives one row per target account with new/closed jobs since last week, ready for your CRM or Clay.

### Input example

```json
{
  "companies": ["stripe", "notion.so", "https://jobs.lever.co/spotify", "https://jobs.ashbyhq.com/ramp"],
  "keywords": ["engineer", "data"],
  "excludeKeywords": ["intern"],
  "locations": ["Remote", "London"],
  "onlyNewJobs": true,
  "includeDescription": false
}
```

Salary research example — only roles that publish a pay range:

```json
{
  "companies": ["stripe", "https://jobs.lever.co/spotify", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],
  "keywords": ["engineer"],
  "onlyWithSalary": true,
  "maxJobsPerCompany": 50
}
```

Accepted company formats:

| Format | Example |
|---|---|
| Name | `stripe`, `Hugging Face` |
| Domain | `notion.so`, `figma.com` |
| Workday URL | `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` |
| Greenhouse URL | `https://boards.greenhouse.io/stripe` / `job-boards.greenhouse.io/...` |
| Lever URL | `https://jobs.lever.co/spotify` |
| Ashby URL | `https://jobs.ashbyhq.com/ramp` |
| Workable URL | `https://apply.workable.com/huggingface` |
| SmartRecruiters URL | `https://jobs.smartrecruiters.com/BoschGroup` |
| Recruitee URL | `https://company.recruitee.com` |
| Personio URL | `https://company.jobs.personio.de` (or `.com`) |
| Breezy HR URL | `https://company.breezy.hr` |
| Rippling URL | `https://ats.rippling.com/rippling/jobs` |
| BambooHR URL | `https://company.bamboohr.com/careers` |
| Teamtailor URL | `https://company.teamtailor.com` |
| Pinpoint URL | `https://company.pinpointhq.com` |
| Oracle Recruiting Cloud URL | `https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs` (or just the pod host, e.g. `eeho.fa.us2.oraclecloud.com`) |
| SAP SuccessFactors URL | `https://career5.successfactors.eu/career?company=SAP` (any careers URL containing `company=`) |

Tip: if a name isn't found, paste the URL of the company's job board (open any job on their careers page and copy the link).

Hiring signals — one row per company, with new/closed jobs since the previous run (schedule it weekly):

```json
{
  "companies": ["stripe", "notion", "rippling", "Adobe"],
  "outputLevel": "companies",
  "stateKey": "target-accounts"
}
```

### Output example

```json
{
  "id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
  "title": "Security Engineer, Cloud",
  "company": "ramp",
  "department": "Engineering / Backend",
  "location": "New York, NY (HQ); Remote (Canada)",
  "remote": false,
  "employmentType": "FullTime",
  "salary": "$190K – $240K",
  "salaryMin": 190000,
  "salaryMax": 240000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "postedAt": "2026-09-12T15:03:11.000Z",
  "url": "https://jobs.ashbyhq.com/ramp/34413f8d-...",
  "ats": "ashby",
  "atsSlug": "ramp",
  "input": "https://jobs.ashbyhq.com/ramp",
  "scrapedAt": "2026-10-04T12:00:00.000Z"
}
```

Export to JSON, CSV, Excel, or send to Google Sheets, Slack, Zapier, Make and webhooks via Apify integrations.

Company row (`outputLevel: "companies"`, real data from Notion's board on 2026-10-07, lists shortened; `sinceLastRun` is illustrative — it appears from the second run with the same Monitor name):

```json
{
  "type": "company",
  "company": "notion",
  "input": "notion",
  "ats": "ashby",
  "atsSlug": "notion",
  "careerSite": null,
  "totalOpenJobs": 133,
  "jobsAnalyzed": 133,
  "filtered": false,
  "datesAvailable": 1,
  "newJobsLast7Days": 10,
  "newJobsLast30Days": 30,
  "newJobsLast90Days": 104,
  "jobsPostedOver30DaysAgo": 103,
  "newestPostingAt": "2026-10-02T19:56:09.176Z",
  "oldestPostingAt": "2025-07-25T22:00:31.199Z",
  "medianJobAgeDays": 60,
  "remoteJobs": 88,
  "remoteShare": 0.662,
  "byFunction": [
    {
      "function": "sales",
      "jobs": 44
    },
    {
      "function": "engineering",
      "jobs": 32
    },
    {
      "function": "customer success & support",
      "jobs": 19
    }
  ],
  "bySeniority": [
    {
      "level": "mid-level",
      "jobs": 76
    },
    {
      "level": "manager/lead",
      "jobs": 25
    },
    {
      "level": "staff/principal",
      "jobs": 16
    }
  ],
  "byDepartment": [
    {
      "department": "Sales / Sales",
      "jobs": 24
    },
    {
      "department": "Sales / Solutions Consultant",
      "jobs": 19
    },
    {
      "department": "Engineering / Engineering",
      "jobs": 16
    }
  ],
  "byLocation": [
    {
      "location": "San Francisco, California; New York, New York",
      "jobs": 34
    },
    {
      "location": "San Francisco, California",
      "jobs": 28
    },
    {
      "location": "Tokyo, Japan ",
      "jobs": 15
    }
  ],
  "byEmploymentType": [
    {
      "employmentType": "FullTime",
      "jobs": 129
    },
    {
      "employmentType": "Intern",
      "jobs": 3
    },
    {
      "employmentType": "Contract",
      "jobs": 1
    }
  ],
  "jobsWithSalary": 88,
  "salaryTransparencyShare": 0.662,
  "salaryCurrency": "USD",
  "medianSalaryMinYearly": 182500,
  "medianSalaryMaxYearly": 229000,
  "latestJobs": [
    {
      "title": "Payroll Analyst",
      "location": "San Francisco, California",
      "postedAt": "2026-10-02T19:56:09.176Z",
      "url": "https://jobs.ashbyhq.com/notion/92de7ece-b7d9-4b2a-b9cb-b978cc690a46"
    }
  ],
  "sinceLastRun": {
    "previousRunAt": "2026-09-29T08:00:00.000Z",
    "jobsBefore": 128,
    "newJobs": 9,
    "closedJobs": 4,
    "netChange": 5,
    "changePct": 3.9,
    "newJobTitles": [
      "Account Executive, Enterprise"
    ],
    "closedJobTitles": [
      "Software Engineer, Mobile"
    ]
  }
}
```

### Pricing

Pay only for results: **$1.50 per 1,000 jobs**. No subscription. In "only new jobs" mode, repeated jobs are never charged again — monitoring 100 companies daily typically costs cents.

Company hiring-signals rows (`outputLevel: "companies"`): **$0.01 per company** — job rows are not charged in that mode.

### Scheduling alerts

1. Set `onlyNewJobs: true` and give the alert a name in **Alert list name**.
2. Create a Schedule (e.g. every morning) in Apify Console.
3. Add an integration (Slack, email, Google Sheets, webhook) to receive new jobs automatically.

### FAQ

**Can I get one row per company instead of every job?** Yes — set `outputLevel` to `companies`. Each row summarises the company's open jobs (after your keyword/location/department filters): totals, new jobs in the last 7/30/90 days (from posting dates; `datesAvailable` shows how many jobs have one), function and seniority mix (rule-based from title + department), top departments/locations, remote share and salary transparency. Run it on a schedule with the same **Monitor name** (`stateKey`) and every row gets `sinceLastRun`: new jobs, closed jobs, net change % and example titles — a hiring-spike or hiring-freeze alert for your target accounts. If a fetch was incomplete (timeout), closed jobs are reported as `null` instead of a false mass closure.

**Is this legal?** The Actor reads only public job postings from the official public job-board APIs that companies publish so their jobs can be displayed and indexed. No login, no personal data.

**A company isn't found?** Some Workday tenants use a different internal name than the brand — paste the full `myworkdayjobs.com` URL in that case. Personio, Breezy HR, Rippling, BambooHR, Teamtailor, Pinpoint, Oracle Recruiting Cloud and SAP SuccessFactors are supported too (Oracle and SuccessFactors: paste the careers URL — their host / company ids can't be guessed from a company name). Other ATSs (iCIMS, Taleo…) are on the roadmap — open an issue with the company name — popular requests get added.

**What are the job insight fields and how accurate are they?** They are rule-based (keyword patterns, no AI), so they are fast, free and predictable. `seniority` comes from the title ("Senior", "Staff", "II/III", "Director", "Intern"...); titles with no level are `mid-level`, refined to `junior` (≤1 year asked) or `senior` (≥7 years) when the description states the experience. `skills` lists only tools and technologies explicitly named in the title or description. `visaSponsorship` is `false` only when the posting says sponsorship is not offered, `true` when it says it is, otherwise `null`. In a test on NVIDIA (Workday), Ramp (Ashby) and Spotify (Lever), senior/staff filtering returned 18 correctly levelled jobs with skills such as Python, C++, CUDA, PyTorch and Figma. With `outputLevel: "companies"` and an ATS whose list includes descriptions (Greenhouse, Lever, Ashby...), each company row also gets `topSkills`, `medianYearsExperience`, visa-sponsorship counts and the education mix — e.g. Ramp: Python 19%, Salesforce 17%, SQL 14% of 160 open jobs.

**How are salaries detected?** If the ATS has a structured salary (Lever, Ashby, Recruitee, Breezy, Rippling, Pinpoint) it is used directly. Otherwise the first pay range in the description is parsed (currency symbol or code required, so years like "2010-2020" are ignored; funding amounts like "$20-30 million" are skipped). `salaryPeriod` is `year`, `month` or `hour` (inferred from the text or the amount). Jobs without a published range get `null`.

**My run stopped with "Stopped early to avoid the run timeout"?** Very large boards with full descriptions can take a while. Everything scraped so far is saved; the SUMMARY record lists skipped companies. Increase the timeout in Run options, add keywords, or set "Max jobs per company".

**Which companies publish salaries?** Most US roles at companies with pay-transparency obligations (California, New York, Colorado, Washington) — e.g. Stripe, NVIDIA, Spotify US roles.

**Do you support Oracle Recruiting Cloud (Oracle Fusion HCM)?**
Yes. Open the company's careers site — the address looks like `https://<pod>.fa.<region>.oraclecloud.com/hcmUI/CandidateExperience/en/sites/<site>/jobs` — and paste it (a job URL works too). Each job has title, job function / family (`department`), primary + secondary locations, `countryCode`, `workplaceType`, exact posting date, and with **Include description** or **Only jobs with salary**: full description, schedule (full / part time), business unit (`legalEntity`), closing date and the pay range. Example (JPMorgan Chase, real run): *Lead Software Engineer*, Jersey City, Technology / Software Engineering, 156,750–215,000 USD / year.

**Do you support SAP SuccessFactors?**
Yes, for career sites whose address contains `successfactors.com` / `successfactors.eu` / `sapsf.com` and `company=<id>` (e.g. `https://career5.successfactors.eu/career?company=SAP`). The Actor reads the company's public XML job feed (made for job-board syndication). Custom-domain career sites protected by a bot challenge are not supported — we never bypass bot protection.

**Do you support Rippling, BambooHR, Teamtailor and Pinpoint?**
Yes. Paste the job board URL (e.g. `https://ats.rippling.com/<company>/jobs`, `https://<company>.bamboohr.com/careers`, `https://<company>.teamtailor.com`, `https://<company>.pinpointhq.com`) or just the company name. Rippling and Pinpoint include structured pay ranges; Pinpoint jobs also have `applyDeadline`, Teamtailor and Pinpoint have `workplaceType` (onsite / hybrid / remote).

### More tools from the same developer

- [Company Jobs Scraper](https://apify.com/signalscope-data/ats-jobs-scraper) — type a company name; auto-detects Workday, Greenhouse, Lever, Ashby, Rippling, BambooHR & more, with salaries.
- [Workday Jobs Scraper](https://apify.com/signalscope-data/workday-jobs-scraper) — search any Workday employer by company name, department filter, legal entity & requisition IDs.
- [Greenhouse Jobs API & Scraper](https://apify.com/signalscope-data/greenhouse-jobs-scraper) — every job from one or many Greenhouse boards, new-jobs-only alerts.
- [Lever Jobs API & Scraper](https://apify.com/signalscope-data/lever-jobs-scraper) — any Lever board (incl. EU), structured salaries.
- [Ashby Jobs API & Scraper](https://apify.com/signalscope-data/ashby-jobs-scraper) — any Ashby board, structured compensation.
- [Workable Jobs API & Scraper](https://apify.com/signalscope-data/workable-jobs-scraper) — any Workable careers page.
- [Hacker News "Who is Hiring" Parser](https://apify.com/signalscope-data/hn-hiring-parser) — monthly HN hiring threads as structured jobs.
- [Public Tenders Monitor](https://apify.com/signalscope-data/public-tenders-monitor) — government procurement notices with keyword alerts.
- [Telegram Channel Scraper & Keyword Monitor](https://apify.com/signalscope-data/telegram-channel-monitor) — posts, views, reactions, keyword alerts.
- [App Store & Google Play Reviews Scraper](https://apify.com/signalscope-data/app-reviews-scraper) — reviews, ratings and new-review monitoring.
- [Shopify Products Scraper & Price Change Monitor](https://apify.com/signalscope-data/shopify-store-monitor) — full catalogs plus price-drop / restock alerts.

# Actor input Schema

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

Company names, domains or careers-page URLs (array, many per run), e.g. "stripe", "notion.so", "https://jobs.lever.co/spotify", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite". ATS detected automatically: Workday, Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Breezy, Rippling, BambooHR, Teamtailor, Pinpoint, plus Oracle Recruiting Cloud and SAP SuccessFactors by URL. If a big company is not found by name, paste its careers URL.

## `allCareerSites` (type: `boolean`):

When a company name resolves to a Workday tenant with several career sites (e.g. Salesforce: main site, Slack, Tableau, MuleSoft, internships), scrape all of them instead of only the main one.

## `outputLevel` (type: `string`):

"companies" = one row per company career site instead of job rows: total open jobs, new jobs in the last 7/30/90 days, breakdown by function, seniority, department, location and employment type, remote share, salary transparency and median pay, latest 5 jobs, plus new/closed jobs and net change since the previous run with the same Monitor name. Keyword/location/department filters still apply.

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

Keep only jobs whose title contains ANY of these words (case-insensitive). Leave empty for all jobs.

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

Drop jobs whose title contains any of these words (e.g. "intern", "senior").

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

Keep only jobs whose department/team contains any of these words (e.g. "Engineering", "Sales"). On Workday this uses the careers site's own Job Category filter (server-side). Jobs without a department are excluded when this is set.

## `seniority` (type: `array`):

Keep only jobs at these levels: intern, junior (entry), mid-level, senior, staff/principal, manager/lead, director, executive. Detected from the job title; with job insights on, untitled levels are refined by the years of experience asked for. Leave empty for all levels.

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

Keep only jobs whose location contains ANY of these strings (e.g. "London", "Germany", "Remote").

## `remoteOnly` (type: `boolean`):

Keep only jobs marked remote (or with "remote" in the location).

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

Keep only jobs published/updated in the last N days. 0 = no limit.

## `onlyWithSalary` (type: `boolean`):

Keep only jobs that publish a pay range (from the ATS salary field or detected in the job description, e.g. "$150,000 - $200,000"). For Workday this fetches each job page, so it is slower.

## `onlyNewJobs` (type: `boolean`):

Remember jobs already returned and output only new ones. Ideal for scheduled daily/weekly alerts — you only pay for new jobs.

## `stateKey` (type: `string`):

Used with 'Only new jobs'. Use a different name for each separate alert/schedule.

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

Add the plain-text job description to each result.

## `includeJobInsights` (type: `boolean`):

Every job already gets jobFunction, seniority and workplaceType from its title and location. Turn this on to also read each job's description (Workday / Oracle need one extra request per job, so runs are slower) and add: skills (60+ tools and technologies such as Python, AWS, Salesforce, SQL), yearsExperienceMin, minimumEducation / educationLevels, visaSponsorship (true = offered, false = explicitly not offered, null = not mentioned) and securityClearance. Rule-based and free - no extra charge. ATSs whose lists include descriptions (Greenhouse, Lever, Ashby...) get these fields even when this is off.

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

0 = unlimited.

## Actor input object example

```json
{
  "companies": [
    "stripe",
    "https://jobs.ashbyhq.com/ramp",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "allCareerSites": false,
  "outputLevel": "jobs",
  "seniority": [],
  "remoteOnly": false,
  "postedWithinDays": 0,
  "onlyWithSalary": false,
  "onlyNewJobs": false,
  "stateKey": "default",
  "includeDescription": false,
  "includeJobInsights": false,
  "maxJobsPerCompany": 0
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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",
        "https://jobs.ashbyhq.com/ramp",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalscope-data/ats-jobs-scraper").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",
        "https://jobs.ashbyhq.com/ramp",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("signalscope-data/ats-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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",
    "https://jobs.ashbyhq.com/ramp",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ]
}' |
apify call signalscope-data/ats-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalscope-data/ats-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ySNtUIIh0EeOBEH4y/builds/EwMGniha7jgqZcsl9/openapi.json
