# Hiring.Cafe Jobs Scraper - Search 2.8M ATS Jobs (`parseforge/hiring-cafe-scraper`) Actor

Search Hiring.Cafe by keyword, location, remote, seniority, salary and date. Get title, company, salary, skills, description and apply link for each job. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/hiring-cafe-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (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 $0.85 / 1,000 hiring.cafe 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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## ☕ Hiring.Cafe Jobs Scraper

> 🚀 **Export Hiring.Cafe's 2.8 million company-site jobs in seconds.** 89 fields per job: title, company, location with coordinates, salary range, skills, seniority, remote or hybrid, full description and the apply link, straight to CSV, JSON, Excel or XML.

The Hiring.Cafe Jobs Scraper reads [Hiring.Cafe](https://hiring.cafe), an aggregator that collects jobs straight from employers' own applicant tracking systems (Greenhouse, Lever, Workday, Ashby, iCIMS, SmartRecruiters and about 45 more) and enriches each one with an AI reading of the posting. Search by keyword and place, or paste any Hiring.Cafe search from your browser, and the Actor returns one clean row per job.

Every row follows the ParseForge **jobs-1** schema, the same field names as our Career Site, Indeed, Glassdoor and SEEK job actors, so results from several sources line up in one table. A `uid` field is the dedupe key across those actors. In a test run of 1,000 jobs, 1,000 were unique, they came from 51 different applicant tracking systems in 52 countries, 41% stated a salary and 95% carried map coordinates.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Recruiters and sourcers | Watch new openings by title, seniority and place |
| Job boards and career sites | Fill a board with fresh, direct-from-employer postings |
| Salary and market analysts | Track pay ranges, skills and demand by role and city |
| Sales and lead generation teams | Find companies that are hiring, with size, funding and website |

### 📋 What the Hiring.Cafe Jobs Scraper does

- 🔎 **Searches by keyword** (one search per line) and by place: city with a radius, state, country, continent or ZIP code.
- 🎚️ **Filters like the website**: remote, hybrid or on-site; full time, contract, internship; seniority; people manager or individual contributor; salary range and currency; years of experience; date window; security clearance.
- 🏢 **Filters the employer**: include or exclude companies and industries, company type, headquarters country, company profile keywords.
- 🔗 **Reads Hiring.Cafe links**: paste a search page with its filters and get exactly that search.
- 📝 **Returns the full description** as HTML and as plain text, plus the tools and technologies the posting names.
- 🧠 **Adds Hiring.Cafe's AI reading**: normalized title, years of experience, requirements summary, visa sponsorship, languages, travel, shifts and benefits.
- 🏭 **Adds the employer profile**: industry, size, founding year, funding, stock ticker and website domain.
- 🧬 **Chains with our other job actors**: `atsBoardUrl` is a valid input for the Career Site Jobs Scraper.

> 💡 **Why it matters:** the same opening is listed on several sites with different dates and salaries. Hiring.Cafe reads the employer's own system, so the row points at the source of truth and carries the apply link the candidate would use.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
|---|---|
| 🧬 schemaVersion / 🆔 uid | Always `jobs-1`, and a unique id across the jobs actors (`ats:company:jobId`) |
| 🔑 jobId / hiringCafeId | The applicant tracking system's own job id, and Hiring.Cafe's |
| 📌 title / 🏢 company / 🌍 companyDomain | Job title, employer, and the bare domain of its website |
| 🔗 jobUrl / 📨 applyUrl | Posting on Hiring.Cafe, and where to apply on the employer's system |
| ⚙️ ats / 🔗 atsBoardUrl | The applicant tracking system, and the employer's board on it when known |
| 📍 location / 🏙 city / 🗺 region / 🏳️ country / countryCode | Where the job is |
| 🧭 latitude / longitude | Map position of the first location |
| 🏠 isRemote / 🛋 workArrangement / workplaceType | Remote, hybrid or on-site |
| ⏱ employmentType / employmentTypes | Full-time, part-time, contract, internship and so on |
| 📈 seniorityLevel / 🎓 educationLevel / ⌛ yearsExperienceMin | Level and requirements |
| 📅 datePosted | Estimated publish date, ISO 8601 |
| 💰 hasSalary / salaryText / salaryMin / salaryMax / salaryCurrency / salaryInterval | The salary the posting states |
| 📊 salaryYearlyMin / salaryYearlyMax | The same range converted to a year |
| 📝 descriptionText / descriptionHtml / descriptionSnippet | Full description, plain, HTML and the first 300 characters |
| 🛠 skills / skillCount | Tools and technologies named in the posting |
| 🎯 coreJobTitle / 👤 roleType / 🧰 roleActivities / 📋 requirementsSummary | Hiring.Cafe's reading of the role |
| 🛂 visaSponsorship / 🗣 languageRequirements / 🛡 securityClearance | Eligibility details |
| 🎁 benefits / ✈️ airTravel / 🚚 landTravel / ⏰ overtimeRequired | Perks and working conditions |
| 🏭 companyIndustry / 👥 companyEmployeeCount / 🏛 companyFoundedYear | Employer profile |
| 💵 companyFundingType / companyFundingAmount / 🏦 companyInvestors / 📈 companyStockSymbol | Funding and listing |
| 🔁 alternateApplyUrls / additionalLocations | The same job posted elsewhere, and its other locations |

Fields the source does not have read `Not Disclosed`, so every column is always present. The sample records below come from a real run; long text is shortened here.

```json
[
  {
    "schemaVersion": "jobs-1",
    "uid": "greenhouse:cityoffortworth:8004457003",
    "jobId": "8004457003",
    "title": "Graduate Engineer | Engineer-in-Training | Professional Engineer",
    "company": "The City of Fort Worth",
    "companyId": "cityoffortworth",
    "companyUrl": "https://boards.greenhouse.io/cityoffortworth",
    "companyWebsite": "https://fortworthtexas.gov",
    "companyDomain": "fortworthtexas.gov",
    "jobUrl": "https://hiringcafe.com/viewjob/grnhse___cityoffortworth___8004457003",
    "applyUrl": "https://boards.greenhouse.io/cityoffortworth/jobs/8004457003?gh_jid=8004457003",
    "status": "active",
    "source": "hiringcafe",
    "sourceType": "aggregator",
    "ats": "greenhouse",
    "atsBoardUrl": "https://boards.greenhouse.io/cityoffortworth",
    "location": "Fort Worth, Texas, United States",
    "city": "Fort Worth",
    "region": "Texas",
    "country": "United States",
    "countryCode": "US",
    "latitude": 32.7555,
    "longitude": -97.3308,
    "additionalLocations": [],
    "multipleLocations": "No",
    "isRemote": "No",
    "workArrangement": "Hybrid",
    "workplaceType": "Hybrid",
    "employmentType": "Full-time",
    "employmentTypes": [
      "Full Time"
    ],
    "department": "Engineering",
    "seniorityLevel": "No Prior Experience Required",
    "educationLevel": "Bachelor's",
    "datePosted": "2026-09-24T17:20:30.000Z",
    "hasSalary": "Yes",
    "salaryText": "USD 59,984 - 101,824 per year",
    "salaryMin": 59984,
    "salaryMax": 101824,
    "salaryCurrency": "USD",
    "salaryInterval": "year",
    "salarySource": "board-structured",
    "salaryYearlyMin": 59984,
    "salaryYearlyMax": 101824,
    "descriptionText": "Pay Range: Graduate Engineer: $59,984 – $77,979 | Engineer-in-Training: $65,563 – $85,232 | Professional Engineer: $78,326 – $ 101,824 annua...",
    "descriptionHtml": "<p><strong>Pay Range: </strong>Graduate Engineer: $59,984 – $77,979 | Engineer-in-Training: $65,563 – $85,232 | Professional Engineer: $78,3...",
    "descriptionSnippet": "Pay Range: Graduate Engineer: $59,984 – $77,979 | Engineer-in-Training: $65,563 – $85,232 | Professional Engineer: $78,326 – $ 101,824 annua...",
    "descriptionLength": 6454,
    "skills": [
      "AutoCAD",
      "Accela",
      "GIS"
    ],
    "skillCount": 3,
    "coreJobTitle": "Engineer",
    "roleType": "Individual Contributor",
    "roleActivities": [
      "reviewing infrastructure plans",
      "preparing cost estimates",
      "coordinating project lifecycle"
    ],
    "requirementsSummary": "Bachelor's degree in civil engineering or related engineering discipline; valid driver's license; for EIT: Texas EIT registration; for PE: 4 years civil engineering experience and Texas PE registration; some evening/weekend work required.",
    "yearsExperienceMin": "Not Disclosed",
    "managementYearsMin": "Not Disclosed",
    "languageRequirements": [
      "English"
    ],
    "licensesOrCertifications": [
      "engineer-in-training",
      "professional engineer"
    ],
    "securityClearance": "None",
    "visaSponsorship": "No",
    "driverLicenseRequired": "Yes",
    "airTravel": "None",
    "landTravel": "None",
    "overtimeRequired": "No",
    "weekendWorkRequired": "Yes",
    "holidayWorkRequired": "No",
    "onCall": "None",
    "physicalEnvironment": "Office",
    "physicalLaborIntensity": "Low",
    "isStaffingAgencyPosting": "No",
    "benefits": [
      "retirementPlan",
      "generousPaidTimeOff",
      "fairChanceHiring"
    ],
    "companyIndustry": "Government Agencies and Departments",
    "companyIndustries": [
      "Federal Government",
      "State & Local Government",
      "Water & Wastewater Utilities",
      "Public Transit"
    ],
    "companyActivities": [
      "municipal code enforcement",
      "public safety and police services",
      "fire protection and emergency services",
      "public library operations",
      "municipal utility water services",
      "airport and aviation facility management",
      "park and recreation facility maintenance",
      "public event and arena management"
    ],
    "companyTagline": "Municipal government serving Fort Worth residents through public safety, utilities, infrastructure, libraries, parks and other city services.",
    "companyEmployeeCount": 8075,
    "companyFoundedYear": 1873,
    "companyHeadquarters": "US",
    "companyType": "Government",
    "companyFundingType": "Not Disclosed",
    "companyFundingAmount": "Not Disclosed",
    "companyFundingYear": "Not Disclosed",
    "companyInvestors": [],
    "companyStockSymbol": "Not Disclosed",
    "companyParent": "Not Disclosed",
    "hiringCafeId": "grnhse___cityoffortworth___8004457003",
    "hiringCafeRequisitionKey": "1q5sc8tmzelcggmg",
    "alternateApplyUrls": [],
    "scrapedAt": "2026-09-29T14:01:40.825Z",
    "error": null
  },
  {
    "schemaVersion": "jobs-1",
    "uid": "icims:mammoet:7446",
    "jobId": "7446",
    "title": "Engineer",
    "company": "Mammoet",
    "companyId": "mammoet",
    "companyUrl": "Not Disclosed",
    "companyWebsite": "https://mammoet.com",
    "companyDomain": "mammoet.com",
    "jobUrl": "https://hiringcafe.com/viewjob/icims2___mammoet___7446",
    "applyUrl": "https://jobs.mammoet.com/jobs/7446",
    "status": "active",
    "source": "hiringcafe",
    "sourceType": "aggregator",
    "ats": "icims",
    "atsBoardUrl": "Not Disclosed",
    "location": "Stockton on Tees, /, United Kingdom",
    "city": "Stockton on Tees",
    "region": "/",
    "country": "United Kingdom",
    "countryCode": "GB",
    "latitude": 54.5223373,
    "longitude": -1.2867718,
    "additionalLocations": [],
    "multipleLocations": "No",
    "isRemote": "No",
    "workArrangement": "On-site",
    "workplaceType": "Onsite",
    "employmentType": "Full-time",
    "employmentTypes": [
      "Full Time",
      "Temporary"
    ],
    "department": "Engineering",
    "seniorityLevel": "Mid Level",
    "educationLevel": "Master's",
    "datePosted": "2026-07-07T08:52:36.000Z",
    "hasSalary": "Yes",
    "salaryText": "GBP 34,811 - 50,259 per year",
    "salaryMin": 34811,
    "salaryMax": 50259,
    "salaryCurrency": "GBP",
    "salaryInterval": "year",
    "salarySource": "board-structured",
    "salaryYearlyMin": 34811,
    "salaryYearlyMax": 50259,
    "descriptionText": "SUMMARY OF THE ROLE Engineer for heavylift and transport projects Salary £34,811 - £50,259, depending on experience with fantastic benefits ...",
    "descriptionHtml": "SUMMARY OF THE ROLE Engineer for heavylift and transport projects Salary £34,811 - £50,259, depending on experience with fantastic benefits ...",
    "descriptionSnippet": "SUMMARY OF THE ROLE Engineer for heavylift and transport projects Salary £34,811 - £50,259, depending on experience with fantastic benefits ...",
    "descriptionLength": 2856,
    "skills": [
      "CAD",
      "Microsoft Office"
    ],
    "skillCount": 2,
    "coreJobTitle": "Engineer",
    "roleType": "Individual Contributor",
    "roleActivities": [
      "developing solutions",
      "validating equipment",
      "documenting methods"
    ],
    "requirementsSummary": "Bachelor's or master's in Mechanical/Civil engineering, demonstrable experience in similar role, CAD and Microsoft Office skills, fluent English, full UK driving licence; Appointed Person desirable.",
    "yearsExperienceMin": "Not Disclosed",
    "managementYearsMin": "Not Disclosed",
    "languageRequirements": [
      "English"
    ],
    "licensesOrCertifications": [
      "appointed person"
    ],
    "securityClearance": "None",
    "visaSponsorship": "No",
    "driverLicenseRequired": "Yes",
    "airTravel": "None",
    "landTravel": "Moderate",
    "overtimeRequired": "Yes",
    "weekendWorkRequired": "No",
    "holidayWorkRequired": "No",
    "onCall": "None",
    "physicalEnvironment": "Industrial",
    "physicalLaborIntensity": "Medium",
    "isStaffingAgencyPosting": "No",
    "benefits": [
      "retirementPlan",
      "generousParentalLeave",
      "tuitionReimbursement"
    ],
    "companyIndustry": "Transportation and Logistics",
    "companyIndustries": [
      "Industrial Services",
      "Logistics & Transportation"
    ],
    "companyActivities": [
      "Heavy lifting services",
      "Heavy transport logistics",
      "Industrial project engineering",
      "Plant turnaround management",
      "Crane equipment rental"
    ],
    "companyTagline": "Provides heavy lifting and transport solutions for industrial projects.",
    "companyEmployeeCount": 6500,
    "companyFoundedYear": 1807,
    "companyHeadquarters": "NL",
    "companyType": "Private",
    "companyFundingType": "Not Disclosed",
    "companyFundingAmount": "Not Disclosed",
    "companyFundingYear": "Not Disclosed",
    "companyInvestors": [],
    "companyStockSymbol": "Not Disclosed",
    "companyParent": "SHV Holdings N.V.",
    "hiringCafeId": "icims2___mammoet___7446",
    "hiringCafeRequisitionKey": "u1med540s5fvzi5k",
    "alternateApplyUrls": [],
    "scrapedAt": "2026-09-29T14:01:36.888Z",
    "error": null
  },
  {
    "schemaVersion": "jobs-1",
    "uid": "adp:142473b8-c29d-406a-8a8b-4923251dd305:595806",
    "jobId": "595806",
    "title": "Backend Developer",
    "company": "Kintera",
    "companyId": "142473b8-c29d-406a-8a8b-4923251dd305",
    "companyUrl": "Not Disclosed",
    "companyWebsite": "https://kintera.ca",
    "companyDomain": "kintera.ca",
    "jobUrl": "https://hiringcafe.com/viewjob/adp___142473b8-c29d-406a-8a8b-4923251dd305___595806",
    "applyUrl": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=142473b8-c29d-406a-8a8b-4923251dd305&ccId=19000101_000001&jobId=595806&lang=en_CA",
    "status": "active",
    "source": "hiringcafe",
    "sourceType": "aggregator",
    "ats": "adp",
    "atsBoardUrl": "Not Disclosed",
    "location": "North Vancouver, British Columbia, Canada",
    "city": "North Vancouver",
    "region": "British Columbia",
    "country": "Canada",
    "countryCode": "CA",
    "latitude": 49.3193,
    "longitude": -123.073,
    "additionalLocations": [],
    "multipleLocations": "No",
    "isRemote": "Yes",
    "workArrangement": "Remote",
    "workplaceType": "Remote",
    "employmentType": "Full-time",
    "employmentTypes": [
      "Full Time"
    ],
    "department": "Software Development",
    "seniorityLevel": "Mid Level",
    "educationLevel": "Not Disclosed",
    "datePosted": "2026-06-30T18:13:00.000Z",
    "hasSalary": "Yes",
    "salaryText": "CAD 44 - 50 per hour",
    "salaryMin": 44,
    "salaryMax": 50,
    "salaryCurrency": "CAD",
    "salaryInterval": "hour",
    "salarySource": "board-structured",
    "salaryYearlyMin": 91520,
    "salaryYearlyMax": 104000,
    "descriptionText": "Kintera, formerly known as DWB/Chartwell, is a multi-disciplinary consulting firm specializing in services and solutions for the resource se...",
    "descriptionHtml": "<div><div><div><div><p data-pasted=\"true\" style=\"box-sizing: border-box; --tw-shadow: 0 0 #0000; --tw-ring-inset: ; --tw-ring-offset-width: ...",
    "descriptionSnippet": "Kintera, formerly known as DWB/Chartwell, is a multi-disciplinary consulting firm specializing in services and solutions for the resource se...",
    "descriptionLength": 3853,
    "skills": [
      "PostgreSQL",
      "Python",
      "Django",
      "HTMX",
      "AWS",
      "HTML",
      "CSS",
      "JavaScript"
    ],
    "skillCount": 8,
    "coreJobTitle": "Backend Developer",
    "roleType": "Individual Contributor",
    "roleActivities": [
      "developing applications",
      "writing code",
      "designing APIs"
    ],
    "requirementsSummary": "3+ years Django backend experience, strong SQL/PostgreSQL skills, Python proficiency, web standards knowledge, self-directed with strong communication; legally authorized to work in Canada.",
    "yearsExperienceMin": 3,
    "managementYearsMin": "Not Disclosed",
    "languageRequirements": [
      "English"
    ],
    "licensesOrCertifications": [],
    "securityClearance": "None",
    "visaSponsorship": "No",
    "driverLicenseRequired": "No",
    "airTravel": "None",
    "landTravel": "None",
    "overtimeRequired": "No",
    "weekendWorkRequired": "No",
    "holidayWorkRequired": "No",
    "onCall": "None",
    "physicalEnvironment": "Office",
    "physicalLaborIntensity": "Low",
    "isStaffingAgencyPosting": "No",
    "benefits": [
      "retirementPlan"
    ],
    "companyIndustry": "Consulting Services",
    "companyIndustries": [
      "Environmental Consulting",
      "Natural Resource Management"
    ],
    "companyActivities": [
      "Environmental assessment",
      "Forestry management",
      "Engineering design",
      "GIS and mapping",
      "Regulatory permitting"
    ],
    "companyTagline": "Multi-disciplinary natural resource consulting firm based in British Columbia.",
    "companyEmployeeCount": 300,
    "companyFoundedYear": 2025,
    "companyHeadquarters": "CA",
    "companyType": "Private",
    "companyFundingType": "Not Disclosed",
    "companyFundingAmount": "Not Disclosed",
    "companyFundingYear": "Not Disclosed",
    "companyInvestors": [],
    "companyStockSymbol": "Not Disclosed",
    "companyParent": "Not Disclosed",
    "hiringCafeId": "adp___142473b8-c29d-406a-8a8b-4923251dd305___595806",
    "hiringCafeRequisitionKey": "pkdagugnduz8adjy",
    "alternateApplyUrls": [],
    "scrapedAt": "2026-09-29T14:03:59.113Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- **Filters run on Hiring.Cafe itself.** The log prints how many jobs match on the site, so your totals agree with what you see in the browser.
- **One row per job, no duplicates.** Rows are deduplicated on the job id across every search in the run, and jobs the site marks as expired are left out.
- **The jobs-1 schema.** Same field names as the other ParseForge job actors, plus a `uid` to dedupe across them and an `atsBoardUrl` you can feed to the Career Site Jobs Scraper.
- **Complete descriptions.** HTML and plain text for each job, fetched per job, with a second pass for any that were rate limited.
- **Real numbers.** Salaries, coordinates, employee counts and years of experience are numbers, ready to sort. A salary is only reported when the posting states one.
- **Honest about failure.** If Hiring.Cafe cannot be read, the run fails with a clear message and nothing is charged. A search nobody matches ends cleanly with no rows.

### 📈 How it compares to alternatives

| | This Actor | Copying from hiring.cafe by hand | Basic job scrapers |
|---|---|---|---|
| Needs a login | No | No | Varies |
| Fields per job | 89 | What you can copy | Often 15 to 30 |
| Full description (HTML and text) | Yes | Yes | Some |
| Employer profile (size, funding, ticker) | Yes | Partly | Rarely |
| Schema shared with other job actors | Yes (jobs-1) | No | No |
| Several keywords and places in one run | Yes | No | Some |
| Reads a pasted Hiring.Cafe search link | Yes | n/a | Some |

Hiring.Cafe serves at most 250 result pages for any one search, which is about 30,000 jobs. The Actor tells you when a search reaches that limit. To go beyond it, split the search by place, by company or by date window. A job that Hiring.Cafe lists in several places is delivered once, with the extra places in `additionalLocations` and the extra apply links in `alternateApplyUrls`.

### 🚀 How to use

1. Create a free Apify account with $5 credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Hiring.Cafe Jobs Scraper and type one or more keywords, or paste a Hiring.Cafe search link.
3. Add a place, and any filters: remote, seniority, salary, date window, companies.
4. Click Start and download CSV, Excel, JSON or XML from the dataset.

Example run settings:

```json
{ "searchQueries": ["data engineer"], "locations": ["Berlin, Germany", "Texas"], "workplaceTypes": ["Remote", "Hybrid"], "minSalary": 80000, "salaryCurrency": "EUR", "postedWithinDays": 14, "maxItems": 500 }
```

### 💼 Business use cases

#### Recruiting and sourcing

Pull every senior data role opened in the last two weeks in three cities, with the apply link and the employer's size, and send the list to your team each Monday.

#### Salary benchmarking

Collect jobs that state a salary for one title across a country and compare ranges by seniority, city and company size, with the range also converted to a yearly figure.

#### Hiring-signal lead lists

Find companies that are hiring for a role you sell into, with their website domain, industry, headcount and funding stage, and hand them to sales.

#### Job board content

Fill a niche board with fresh postings taken from employers' own systems, deduplicated, each with an apply link.

### 🔌 Automating Hiring.Cafe Jobs Scraper

- **Make and Zapier:** start a run on a schedule and push new rows to a sheet, an ATS or a CRM.
- **Slack:** post new openings that match your filters as they appear.
- **Airbyte:** load every run into your warehouse.
- **GitHub Actions:** trigger runs from your pipelines.
- **Google Drive:** export each dataset as a spreadsheet automatically.

### 🌟 Beyond business use cases

- **Research:** study skill demand, remote work and pay transparency across countries.
- **Personal:** watch the roles you want and apply before the crowd.
- **Non-profit:** track hiring in the sectors and regions you serve.
- **Experimentation:** build datasets for job matching, salary prediction or skills extraction models.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant to plan your run:

> I am using the Hiring.Cafe Jobs Scraper on Apify. It searches Hiring.Cafe by keyword and place, or reads a Hiring.Cafe search link, and returns 89 fields per job in the jobs-1 schema, including title, company, location, latitude, longitude, workArrangement, employmentType, seniorityLevel, salaryMin, salaryMax, salaryCurrency, salaryInterval, skills, descriptionText, applyUrl and company profile fields. Help me design a weekly run that collects remote senior data engineering jobs with a stated salary in Germany and the UK.

### ❓ Frequently Asked Questions

#### 🔍 How do I search a city or a country?

Type it in Locations. Use "City, Country" (Berlin, Germany), a state (Texas), a country (United States or US), a continent (Europe) or a ZIP code (94107). The log shows which place each entry was matched to. A bare city name such as Berlin is matched to the largest place with that exact name.

#### 🌍 What if I leave Locations empty?

The search covers the whole world.

#### 📦 How many jobs can one run collect?

Up to about 30,000 per search, because Hiring.Cafe serves 250 result pages of about 120 jobs. Add more searches, places or date windows to go further. Free accounts are limited to 10 items per run.

#### 💰 How does the salary filter work?

Minimum salary keeps jobs whose salary range reaches at least that amount. Maximum salary keeps jobs whose range starts at or below it. Both need the job to state a salary, and both use the interval and currency you choose. The default interval is per year.

#### 📅 How does the date window work?

Posted within counts back from today. Posted from and Posted until take exact dates, and they reach back beyond the website's default window of 3 months.

#### 🔗 Can I paste a Hiring.Cafe link?

Yes. Open a search on hiring.cafe, set your filters, copy the address and paste it under Hiring.Cafe search URLs. The address must contain searchState. Single job pages are not supported.

#### 🧬 What is the uid?

A unique id built as `ats:company:jobId`. For Greenhouse, Lever and Ashby jobs it is identical to the uid the Career Site Jobs Scraper gives the same job, so you can merge results from both without duplicates.

#### 🧾 Where does the salary come from?

From the posting as Hiring.Cafe reads it. A row says `hasSalary: Yes` only when the posting states a salary; otherwise the salary fields read Not Disclosed. Nothing is estimated.

#### ⚠️ Why do a few results not match a filter?

Hiring.Cafe groups a company's jobs and applies a filter to the group, so a small share of rows can sit next to matching ones (in our checks, about 5 to 15% for the employment type filter). Its own website shows the same rows.

#### ⏱️ How fast is it?

1,000 jobs with full descriptions took about 5 minutes in the latest test. With descriptions off it is faster.

#### 🛡️ Do I need a proxy?

Keep the default. Hiring.Cafe sits behind Cloudflare, which blocks datacenter addresses in bursts, so the Actor uses the Apify residential proxy, which is billed to your Apify account by traffic. In our tests 1,000 jobs used about 4 MB of residential traffic.

#### 🔒 Does it log in or solve captchas?

No. It reads only what Hiring.Cafe shows every logged-out visitor.

#### 🤖 What about robots.txt?

Hiring.Cafe's robots.txt asks automated tools not to open search results with a searchState or page parameter, and job pages under /viewjob/. The Actor needs those to filter and to page, like every Hiring.Cafe scraper on the Store. It keeps its request rate modest, does not log in and collects only public listing data. Use the data in line with Hiring.Cafe's terms and the laws that apply to you.

### 🔌 Integrate with any app

Every run's dataset is available through the Apify API in JSON, CSV, Excel and XML, so it drops into whatever you already use: a warehouse, a BI tool, a spreadsheet, a notebook or a webhook into your own service. Apify's client libraries for JavaScript and Python make triggering a run and reading the results a few lines of code.

### 🔗 Recommended Actors

- [Career Site Jobs Scraper](https://apify.com/parseforge/career-site-jobs-scraper) to read a company's own career site or applicant tracking system directly (feed it `atsBoardUrl`).
- [Indeed Jobs Scraper](https://apify.com/parseforge/indeed-scraper) for the biggest job board, in 62 countries.
- [Glassdoor Jobs Scraper](https://apify.com/parseforge/glassdoor-jobs-scraper) for salaries and company ratings.
- [SEEK Australia Jobs Scraper](https://apify.com/parseforge/seek-scraper) for Australia and New Zealand.
- [Levels.fyi Salary Scraper](https://apify.com/parseforge/levels-fyi-scraper) for tech compensation.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more jobs and company Actors.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or sponsored by Hiring.Cafe. Hiring.Cafe is a trademark of its respective owner. The Actor collects only publicly available job data shown to logged-out visitors and does not access any account.

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles or keywords, one search per line (for example data engineer or registered nurse). Leave empty to browse every job that matches the filters below.

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

Optional. Paste a hiring.cafe search page (the address contains ?searchState=...) and the Actor reads exactly that search, filters included. Single job pages are not supported.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxItemsPerSearch` (type: `integer`):

Optional cap for each keyword or URL, so one broad search cannot use the whole Max Items budget. Empty means no per-search cap.

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

Where the job is. Use City, Country (Berlin, Germany), a state (Texas), a country (United States), a continent (Europe) or a ZIP code (94107). A two-letter country code such as US also works. Empty searches the whole world.

## `radiusMiles` (type: `integer`):

For a city or ZIP code: how far around it to look. The website default is 50.

## `exactLocationOnly` (type: `boolean`):

For a city or ZIP code: only jobs in that exact place, ignoring the radius.

## `includeRemoteFromWiderRegions` (type: `boolean`):

Like the website: a search for a state, country or continent also returns remote jobs that accept candidates from anywhere inside a wider region (for example a remote job open to all of North America when you search Texas).

## `workplaceTypes` (type: `array`):

Only these kinds of workplace.

## `commitmentTypes` (type: `array`):

Only these kinds of commitment.

## `seniorityLevels` (type: `array`):

Only these seniority levels.

## `roleTypes` (type: `array`):

Individual contributor or people manager.

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

Only jobs published in the last N days (counted back from today, UTC). Empty uses the website default window of 3 months.

## `postedFrom` (type: `string`):

Only jobs published on or after this date, YYYY-MM-DD. Overrides Posted within. Reaches back beyond 3 months.

## `postedTo` (type: `string`):

Only jobs published on or before this date, YYYY-MM-DD.

## `sortBy` (type: `string`):

Order of the results.

## `jobTitleQuery` (type: `string`):

Match this text in the job title only. Supports AND / OR / NOT.

## `jobDescriptionQuery` (type: `string`):

Match this text in the job description. Supports AND / OR / NOT (kubernetes AND terraform).

## `technologyKeywordsQuery` (type: `string`):

Match the tools and technologies extracted from the posting (python OR go).

## `requirementsKeywordsQuery` (type: `string`):

Match the requirements extracted from the posting (CPA, clearance).

## `minYearsExperience` (type: `integer`):

Only jobs that state a minimum experience of at least this many years. Jobs that state none are left out.

## `maxYearsExperience` (type: `integer`):

Only jobs that state a minimum experience of at most this many years. Jobs that state none are left out.

## `securityClearances` (type: `array`):

Only jobs asking for one of these clearances.

## `minSalary` (type: `integer`):

Only jobs whose salary range reaches at least this amount, in the interval and currency below.

## `maxSalary` (type: `integer`):

Only jobs whose salary range starts at or below this amount, in the interval and currency below.

## `salaryInterval` (type: `string`):

The pay period the two amounts above are in.

## `salaryCurrency` (type: `string`):

Currency code of the amounts, for example USD, EUR or GBP. Empty keeps every currency.

## `onlyTransparentSalaries` (type: `boolean`):

Leave out every job that does not show a salary.

## `companyNames` (type: `array`):

Company names as Hiring.Cafe writes them. Subsidiaries are included.

## `excludedCompanyNames` (type: `array`):

Leave out jobs from these companies.

## `industries` (type: `array`):

Industry names as Hiring.Cafe lists them, for example Healthcare, Software & SaaS, Banking.

## `excludedIndustries` (type: `array`):

Leave out jobs at companies in these industries.

## `companyKeywords` (type: `array`):

Only employers whose name or profile contains one of these words (bank, clinic, robotics).

## `companyHqCountries` (type: `array`):

Two-letter codes of the country where the employer is headquartered (US, DE, GB).

## `organizationTypes` (type: `array`):

Only employers of these types.

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

Fetch the full job description (HTML and plain text) for every job. Turn off for a faster run that returns the structured fields only.

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

Apify proxy settings.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "maxItems": 10,
  "locations": [
    "United States"
  ],
  "radiusMiles": 50,
  "exactLocationOnly": false,
  "includeRemoteFromWiderRegions": true,
  "sortBy": "default",
  "salaryInterval": "Yearly",
  "onlyTransparentSalaries": false,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Every field of each job as a table

## `fullData` (type: `string`):

Complete dataset with all 89 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 = {
    "searchQueries": [
        "software engineer"
    ],
    "maxItems": 10,
    "locations": [
        "United States"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/hiring-cafe-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 = {
    "searchQueries": ["software engineer"],
    "maxItems": 10,
    "locations": ["United States"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/hiring-cafe-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 '{
  "searchQueries": [
    "software engineer"
  ],
  "maxItems": 10,
  "locations": [
    "United States"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/hiring-cafe-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/hiring-cafe-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/34PCryKvnrJSPpK6B/builds/Z7qIncO5hapeiF29x/openapi.json
