# Career Site Jobs Scraper & API: 12 ATS — $1 per 1,000 (`dododata/career-site-jobs-scraper`) Actor

Jobs from company career pages on Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Teamtailor and 5 more — one clean JSON shape, 26 fields, pay ranges.

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

## Pricing

from $0.70 / 1,000 jobs

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/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

## Career Site Jobs Scraper & API: 12 ATS — $1 per 1,000

Get every open job from company career pages hosted on **Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Personio, Breezy, Pinpoint, Rippling, Teamtailor and Workday** as one clean JSON shape — **26 fields per job, 304 jobs from three companies in 18 seconds**, with pay ranges as numbers, remote/hybrid flag, department, team and full description.

Paste career-page URLs. The Actor reads the job feed each of these systems publishes for embedding career pages, so jobs come straight from the employer: no aggregator, no duplicates, no expired listings.

### What you get

Ten real rows from the run of 2026-09-17 (descriptions shortened here to 160 characters; the dataset carries them in full):

```json
[
  {
    "id": "greenhouse:duolingo:8653419002",
    "ats": "greenhouse",
    "company": "duolingo",
    "company_name": "Duolingo",
    "title": "Ad Sales Lead, Central",
    "department": "Business Development",
    "team": null,
    "location": "Remote - Illinois",
    "locations": [
      "Remote - Illinois",
      "Remote"
    ],
    "country": null,
    "workplace_type": "remote",
    "remote": true,
    "employment_type": null,
    "experience_level": null,
    "salary_min": 140000,
    "salary_max": 210000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "Salary Range:",
    "posted_at": "2026-07-28T13:47:45.000Z",
    "updated_at": "2026-08-21T17:02:33.000Z",
    "requisition_id": "R-01182",
    "description": "Our mission at Duolingo is to develop the best education in the world and make it universally available. It’s a big mission, and that’s where you come in!\nAt…",
    "apply_url": "https://careers.duolingo.com/jobs/8653419002?gh_jid=8653419002",
    "url": "https://careers.duolingo.com/jobs/8653419002?gh_jid=8653419002",
    "scraped_at": "2026-09-17T18:57:16.103Z"
  },
  {
    "id": "greenhouse:duolingo:8705196002",
    "ats": "greenhouse",
    "company": "duolingo",
    "company_name": "Duolingo",
    "title": "Ad Sales Lead - West",
    "department": "Business",
    "team": null,
    "location": "Remote - California",
    "locations": [
      "Remote - California",
      "Remote"
    ],
    "country": null,
    "workplace_type": "remote",
    "remote": true,
    "employment_type": null,
    "experience_level": null,
    "salary_min": 152000,
    "salary_max": 228000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "Salary Range:",
    "posted_at": "2026-08-13T13:22:34.000Z",
    "updated_at": "2026-09-03T16:23:10.000Z",
    "requisition_id": "R-01199",
    "description": "Our mission at Duolingo is to develop the best education in the world and make it universally available. It’s a big mission, and that’s where you come in!\nAt…",
    "apply_url": "https://careers.duolingo.com/jobs/8705196002?gh_jid=8705196002",
    "url": "https://careers.duolingo.com/jobs/8705196002?gh_jid=8705196002",
    "scraped_at": "2026-09-17T18:57:16.112Z"
  },
  {
    "id": "greenhouse:duolingo:8806187002",
    "ats": "greenhouse",
    "company": "duolingo",
    "company_name": "Duolingo",
    "title": "Associate Product Manager, Intern",
    "department": "University",
    "team": null,
    "location": "Pittsburgh, PA",
    "locations": [
      "Pittsburgh, PA",
      "Pittsburgh, Pennsylvania, United States"
    ],
    "country": null,
    "workplace_type": null,
    "remote": null,
    "employment_type": null,
    "experience_level": null,
    "salary_min": 54,
    "salary_max": 56,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "Hourly Range for this internship is:",
    "posted_at": "2026-09-15T16:00:00.000Z",
    "updated_at": "2026-09-15T17:20:27.000Z",
    "requisition_id": "1267",
    "description": "Our mission at Duolingo is to develop the best education in the world and make it universally available. It’s a big mission, and that’s where you come in!\nAt…",
    "apply_url": "https://careers.duolingo.com/jobs/8806187002?gh_jid=8806187002",
    "url": "https://careers.duolingo.com/jobs/8806187002?gh_jid=8806187002",
    "scraped_at": "2026-09-17T18:57:16.115Z"
  },
  {
    "id": "lever:spotify:2193db3f-77c5-43b8-b030-8f92c9882bf1",
    "ats": "lever",
    "company": "spotify",
    "company_name": null,
    "title": "Android Engineer - Experience",
    "department": "Engineering",
    "team": "Experience",
    "location": "London",
    "locations": [
      "London",
      "Stockholm"
    ],
    "country": "GB",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "Permanent",
    "experience_level": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "salary_text": null,
    "posted_at": "2026-06-23T11:29:45.805Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "We design Spotify’s consumer experience—end to end, moment to moment, across every screen, platform, and partner integration. Our mission is to make listenin…",
    "apply_url": "https://jobs.lever.co/spotify/2193db3f-77c5-43b8-b030-8f92c9882bf1/apply",
    "url": "https://jobs.lever.co/spotify/2193db3f-77c5-43b8-b030-8f92c9882bf1",
    "scraped_at": "2026-09-17T18:57:25.877Z"
  },
  {
    "id": "lever:spotify:d87833d0-fb78-4794-b45d-3fe5c8274bc8",
    "ats": "lever",
    "company": "spotify",
    "company_name": null,
    "title": "Artist & Label Partnerships Contractor, Vietnam",
    "department": "Content",
    "team": "Music Business",
    "location": "Ho Chi Minh",
    "locations": [
      "Ho Chi Minh"
    ],
    "country": "VN",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "Short Term",
    "experience_level": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "salary_text": null,
    "posted_at": "2026-08-27T03:43:07.805Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "Spotify is looking for a short-term contractor for the Artist & Label Partnerships team in Vietnam.\nThe Artist & Label Partnerships team are the face of Spot…",
    "apply_url": "https://jobs.lever.co/spotify/d87833d0-fb78-4794-b45d-3fe5c8274bc8/apply",
    "url": "https://jobs.lever.co/spotify/d87833d0-fb78-4794-b45d-3fe5c8274bc8",
    "scraped_at": "2026-09-17T18:57:25.878Z"
  },
  {
    "id": "lever:spotify:ddb5dfa9-c5ef-4199-bd19-c179af568cc8",
    "ats": "lever",
    "company": "spotify",
    "company_name": null,
    "title": "Artist & Label Partnerships Manager, Maghreb",
    "department": "Content",
    "team": "Music Business",
    "location": "Dubai",
    "locations": [
      "Dubai"
    ],
    "country": "AE",
    "workplace_type": "onsite",
    "remote": false,
    "employment_type": "Permanent",
    "experience_level": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "salary_text": null,
    "posted_at": "2026-08-12T17:18:58.306Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "What You'll Do\n• Be a primary Spotify partner for artists, labels, and other music partners across Morocco, Algeria, and Tunisia, building relationships that…",
    "apply_url": "https://jobs.lever.co/spotify/ddb5dfa9-c5ef-4199-bd19-c179af568cc8/apply",
    "url": "https://jobs.lever.co/spotify/ddb5dfa9-c5ef-4199-bd19-c179af568cc8",
    "scraped_at": "2026-09-17T18:57:25.879Z"
  },
  {
    "id": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245",
    "ats": "ashby",
    "company": "ramp",
    "company_name": null,
    "title": "Security Engineer, Cloud",
    "department": "Engineering",
    "team": "Backend",
    "location": "New York, NY (HQ)",
    "locations": [
      "New York, NY (HQ)",
      "Remote (Canada)",
      "Remote (US)",
      "Miami, FL"
    ],
    "country": "USA",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 211400,
    "salary_max": 290600,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "$211.4K – $290.6K • Offers Equity",
    "posted_at": "2026-04-07T17:12:35.753Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ABOUT RAMP\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automate how o…",
    "apply_url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
    "url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
    "scraped_at": "2026-09-17T18:57:16.331Z"
  },
  {
    "id": "ashby:ramp:f564dcf9-9390-4a3f-896f-8047a5086040",
    "ats": "ashby",
    "company": "ramp",
    "company_name": null,
    "title": "Mobile Engineer, Android",
    "department": "Engineering",
    "team": "Mobile",
    "location": "New York, NY (HQ)",
    "locations": [
      "New York, NY (HQ)",
      "Remote (Canada)",
      "San Francisco, CA",
      "Remote (US)"
    ],
    "country": "USA",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 189000,
    "salary_max": 330000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "$189K – $330K • Offers Equity",
    "posted_at": "2025-07-31T21:58:34.674Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ABOUT RAMP\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automate how o…",
    "apply_url": "https://jobs.ashbyhq.com/ramp/f564dcf9-9390-4a3f-896f-8047a5086040/application",
    "url": "https://jobs.ashbyhq.com/ramp/f564dcf9-9390-4a3f-896f-8047a5086040",
    "scraped_at": "2026-09-17T18:57:16.331Z"
  },
  {
    "id": "ashby:ramp:4e64ab86-4e30-403b-b1b9-41dc052570ce",
    "ats": "ashby",
    "company": "ramp",
    "company_name": null,
    "title": "Software Engineer, Frontend",
    "department": "Engineering",
    "team": "Frontend",
    "location": "New York, NY (HQ)",
    "locations": [
      "New York, NY (HQ)",
      "Remote (Canada)",
      "San Francisco, CA",
      "Remote (US)",
      "Miami, FL"
    ],
    "country": "USA",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 143200,
    "salary_max": 284000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "$143.2K – $284K • Offers Equity",
    "posted_at": "2023-03-09T17:44:00.817Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ABOUT RAMP\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automate how o…",
    "apply_url": "https://jobs.ashbyhq.com/ramp/4e64ab86-4e30-403b-b1b9-41dc052570ce/application",
    "url": "https://jobs.ashbyhq.com/ramp/4e64ab86-4e30-403b-b1b9-41dc052570ce",
    "scraped_at": "2026-09-17T18:57:16.332Z"
  },
  {
    "id": "ashby:ramp:4745807e-82f4-4b1a-857c-dc8dadc73076",
    "ats": "ashby",
    "company": "ramp",
    "company_name": null,
    "title": "Credit Risk Associate",
    "department": "Risk",
    "team": "Risk",
    "location": "New York, NY (HQ)",
    "locations": [
      "New York, NY (HQ)"
    ],
    "country": "USA",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 108000,
    "salary_max": 200000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "$108K – $200K • Offers Equity",
    "posted_at": "2026-08-12T20:22:32.685Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ABOUT RAMP\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automate how o…",
    "apply_url": "https://jobs.ashbyhq.com/ramp/4745807e-82f4-4b1a-857c-dc8dadc73076/application",
    "url": "https://jobs.ashbyhq.com/ramp/4745807e-82f4-4b1a-857c-dc8dadc73076",
    "scraped_at": "2026-09-17T18:57:16.332Z"
  }
]
```

In that run 224 of 304 jobs (74%) carried a published pay range, parsed into `salary_min`, `salary_max`, `salary_currency` and `salary_period`.

### What people use it for

- **Track who is hiring, and for what** — e.g. "every new engineering role at my 200 target accounts since yesterday" as a sales or recruiting signal. Set **Posted within (days)** to 1 and schedule it daily.
- **Feed a job board, a newsletter or an AI agent with first-party jobs** — e.g. "remote data roles with a published salary, from these 500 startups", without scraping aggregators.
- **Benchmark pay** — e.g. "published pay ranges for product managers across companies using Ashby and Greenhouse", already numeric.

### Why not build it yourself

Building this yourself: twelve different sources, twelve shapes, escaped HTML, pay ranges in three formats, pagination on one of them — about 12 hours, then upkeep each time a vendor changes a field. This Actor: **$1.00 per 1,000 jobs**, and when a feed changes we fix it within 48 hours. Every Apify account includes $5 of free usage a month, so your first 5,000 jobs cost nothing.

**Founding price:** $1.00 per 1,000 jobs for the first 100 users. It then rises to $1.50. Users who joined at the founding price keep it.

### Proof

| | |
|---|---|
| Success rate (staging runs on Apify, 17–18 Sept 2026) | 100% — 5 runs, 15 requests, 0 failed attempts |
| Last verified against the live feeds | 2026-09-18 |
| Typical run | 300 jobs from 3 companies in 5 to 20 seconds |
| Issues answered within | 6 hours |
| Feed changes fixed within | 48 hours |

Changelog at the bottom of this page — every fix is dated.

### Supported career pages

| System | Example URL | Short form |
|---|---|---|
| Greenhouse | `https://job-boards.greenhouse.io/duolingo` or `https://boards.greenhouse.io/duolingo` | `greenhouse:duolingo` |
| Lever | `https://jobs.lever.co/spotify` (EU: `jobs.eu.lever.co`) | `lever:spotify` |
| Ashby | `https://jobs.ashbyhq.com/ramp` | `ashby:ramp` |
| SmartRecruiters | `https://jobs.smartrecruiters.com/BoschGroup` | `smartrecruiters:BoschGroup` |
| Recruitee | `https://bunq.recruitee.com` | `recruitee:bunq` |
| Workable | `https://apply.workable.com/zego` | `workable:zego` |
| Personio | `https://personio.jobs.personio.de` | `personio:personio.de` |
| Breezy HR | `https://attentive.breezy.hr` | `breezy:attentive` |
| Pinpoint | `https://workwithus.pinpointhq.com` | `pinpoint:workwithus` |
| Rippling | `https://ats.rippling.com/rippling/jobs` | `rippling:rippling` (title, department, location and URL only — the feed carries no description) |
| Workday | `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` | `workday:nvidia.wd5/NVIDIAExternalCareerSite` — a Workday career site lists its 2,000 newest jobs at most; the description comes from each job's public page, so Workday costs one request per job |
| Teamtailor | `https://career.teamtailor.com` | `teamtailor:career.teamtailor.com` — for a career site on the company's own domain use `teamtailor:careers.example.com` |

A career page on the company's own domain usually links or redirects to one of these — open a job, look at the address bar, and paste that.

### What we deliberately do not collect

- No personal data. Recruiter names, mailboxes and creator fields that some feeds carry are never read; e-mail addresses and phone numbers inside descriptions are replaced with `[email removed]` / `[phone removed]`.
- Public sources only — the feeds these vendors provide so that career pages can be embedded, and for Workday the career site's own public listing and job pages (allowed by its robots.txt). No logins, no candidate data, nothing behind authentication.
- Rate-limited: at most 5 requests a second. Most boards are a single request.
- This Actor declares **limited permissions** — it can only write to its own dataset.

### How to run it

1. Click **Run**. The defaults read three sample boards (Duolingo, Spotify, Ramp — about 300 jobs).
2. Replace them with your own **Career page URLs**, or list companies in short form (`lever:spotify`). Hundreds of companies per run are fine.
3. Narrow with **Title keywords**, **Locations** (`remote`, `berlin`, `united kingdom`) and **Posted within (days)**. Jobs that do not match are never saved and never charged.
4. Set **Max rows** to cap the run — that is also your spend cap.
5. Download as JSON, CSV or Excel, or call it from the API or from an AI agent through the Apify MCP server. The `id` field is stable, so de-duplicating between runs is one line.

A board name that does not exist is reported in the log and skipped; it does not fail the run.

### Related Actors

- [France Travail Jobs Scraper](https://apify.com/dododata/francetravail-jobs-scraper) — French public-service job offers with salary as numbers

### Input reference

| Field | Default | Meaning |
|---|---|---|
| `startUrls` | three sample boards | Career-page URLs on any supported system |
| `companies` | none | Short form, `ats:company` |
| `keywords` | none | Keep jobs whose title contains one of these words |
| `locations` | none | Keep jobs whose location, country or workplace type contains one of these |
| `postedWithinDays` | none | Keep jobs published in the last N days |
| `includeDescription` | true | Turn off for lighter rows |
| `maxItems` | 500 | Stop after this many rows |
| `maxConcurrency` | 5 | Parallel requests |
| `useProxy` | true | Use Apify proxy (recommended) |

### Changelog

- 2026-09-18 — v0.1 — first release: Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Personio, Breezy, Pinpoint, Rippling, Teamtailor, Workday. Every source verified live on 2026-09-17/18.

# Actor input Schema

## `startUrls` (type: `array`):

Career pages hosted on Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Personio, Breezy, Pinpoint, Rippling, Teamtailor or Workday — e.g. https://jobs.lever.co/spotify, https://job-boards.greenhouse.io/duolingo, https://jobs.ashbyhq.com/ramp, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. Any page of the board works; the company is read from the URL. Leave empty to try the Actor on three sample boards.

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

Alternative to URLs: one entry per board as ats:company — e.g. greenhouse:stripe, lever:palantir, ashby:openai, smartrecruiters:BoschGroup, recruitee:bunq, workable:zego, personio:personio.de, breezy:attentive, pinpoint:workwithus, rippling:rippling, teamtailor:career.teamtailor.com, workday:nvidia.wd5/NVIDIAExternalCareerSite

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

Keep only jobs whose title contains one of these words (case and accents ignored), e.g. engineer, data, product. Filtered-out jobs are not saved and not charged.

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

Keep only jobs whose location, country or workplace type contains one of these, e.g. london, germany, remote.

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

Keep only jobs first published (or updated, when no publish date exists) in the last N days. Use 1 with a daily schedule to get only new jobs.

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

Turn off for lighter rows when you only need titles, locations and pay.

## `maxItems` (type: `integer`):

Stop after this many jobs across all boards. You pay per row, so this is also your budget cap.

## `maxConcurrency` (type: `integer`):

Parallel requests. 5 is polite and fast enough for most sites.

## `useProxy` (type: `boolean`):

Recommended. Turn off only for testing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://job-boards.greenhouse.io/duolingo"
    },
    {
      "url": "https://jobs.lever.co/spotify"
    },
    {
      "url": "https://jobs.ashbyhq.com/ramp"
    }
  ],
  "companies": [],
  "keywords": [],
  "locations": [],
  "includeDescription": true,
  "maxItems": 500,
  "maxConcurrency": 5,
  "useProxy": true
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://job-boards.greenhouse.io/duolingo"
        },
        {
            "url": "https://jobs.lever.co/spotify"
        },
        {
            "url": "https://jobs.ashbyhq.com/ramp"
        }
    ],
    "companies": [],
    "keywords": [],
    "locations": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("dododata/career-site-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 = {
    "startUrls": [
        { "url": "https://job-boards.greenhouse.io/duolingo" },
        { "url": "https://jobs.lever.co/spotify" },
        { "url": "https://jobs.ashbyhq.com/ramp" },
    ],
    "companies": [],
    "keywords": [],
    "locations": [],
}

# Run the Actor and wait for it to finish
run = client.actor("dododata/career-site-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 '{
  "startUrls": [
    {
      "url": "https://job-boards.greenhouse.io/duolingo"
    },
    {
      "url": "https://jobs.lever.co/spotify"
    },
    {
      "url": "https://jobs.ashbyhq.com/ramp"
    }
  ],
  "companies": [],
  "keywords": [],
  "locations": []
}' |
apify call dododata/career-site-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dododata/career-site-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/Pe6Cf2LpsqnV8m8A3/builds/0SGkXzGP9eErGXJEV/openapi.json
