HiringCafe Jobs Scraper
Pricing
from $0.60 / 1,000 jobs
HiringCafe Jobs Scraper
Scrape HiringCafe jobs by keyword, city, country, company or pay (min and max), or from a search link: title, company, location, pay range, seniority, apply link. Pay per result: $0.70 per 1,000 jobs, no login.
Pricing
from $0.60 / 1,000 jobs
Rating
0.0
(0)
Developer
Brian Gastaldelli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
HiringCafe Jobs Scraper — Jobs by keyword, city, country or pay (2026)
Get HiringCafe jobs as data from search queries or hiringcafe search urls: id, title, company, location, workplace, countries, states, cities, other locations, commitment. No browser, no login and no HiringCafe account needed. You pay only for the jobs you get, $0.70 per 1,000 jobs (less on higher Apify plans).
HiringCafe (hiring.cafe) is a job search site that collects openings from company career pages and adds its own summary, pay and requirements data. Recruiters, job-market analysts and job-board builders use it to get fresh openings in one clean table.
Why use this HiringCafe scraper
- Reliable, measured on the cloud: 36 runs out of 36 succeeded in our tests of October 20, 2026 (12 inputs, each run 3 times, 1,563 jobs, no duplicates).
- Complete rows: id, title, company, location, workplace, countries filled on 100% of the jobs in those runs.
- Fast: the example input gives 100 jobs in about 2.5-3.5 seconds.
- All the jobs of a company: write
Google,Stripeorgoogle.comincompanyNamesand the scraper reads that company's own page on HiringCafe, page after page (HiringCafe's normal search shows about 7 Google jobs for it, because it returns one page of mixed companies). In our runs of October 20, 2026 one run returned 100 Google jobs and 60 Stripe jobs in 2-5 seconds, all from that company and in the chosen country. - Search by place in plain words: write
Austin, TX,Bangalore,UKorRemoteinlocation(and a radius in miles for a city). In our runs of October 20, 2026 this gave only jobs in the place asked on every run (Austin 40 of 40, Bengaluru 20 of 20, remote 30 of 30, Rome 20 of 20, 3 runs each). A place HiringCafe does not know gives one free status row that says so, never a silent empty run. - You pay only for jobs. Searches with no results, wrong links and refused pages are free status rows. Duplicates are removed and not charged.
How to use HiringCafe Jobs Scraper
- Fill in Search queries (
searchQueries) or HiringCafe search URLs (startUrls). - Set Max jobs per search or URL (
maxItemsPerSource, default 100) and Max jobs in total (maxItems, default 0). - Click Start. The example input takes about 2.5-3.5 seconds.
- Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.
- To follow it over time, save the input as a task and schedule it. There is no "new jobs only" switch yet: keep the
idof the jobs you already have and skip them when you merge the new dataset.
Input
| Field | Description |
|---|---|
Search queries (searchQueries) | Job titles or keywords as you would type them on HiringCafe, one per line, for example python developer, registered nurse or data analyst. Each query is one search in the chosen country, read page by page. |
HiringCafe search URLs (startUrls) | HiringCafe search links with every filter you set on the site (city, radius, salary, company, industry...): set the filters on hiring.cafe, then copy the address bar, for example https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%7D. The country and filters below do not change these links. |
Country (country) | Country of the site to read: it decides prices, currency and which results appear. Default "US". |
City, state or country (location) | Optional place to search, for search queries. A city (Austin, Austin, TX, Bangalore, London, UK), a state or a country name or code (UK, Germany). Remote keeps only remote jobs. A place HiringCafe does not know gives one free error row. Empty = the country above. |
City radius (miles) (radiusMiles) | Only with a city in the field above: include jobs within this many miles of the city. 0 or empty = only jobs in the city itself. |
Minimum yearly pay (minSalary) | Only jobs that publish a pay of at least this much per year, (for search queries), compared with the yearly pay HiringCafe shows in yearlySalaryMin. Jobs that do not publish a pay are left out. Empty = no limit. |
Maximum yearly pay (maxSalary) | Only jobs that publish a pay whose top end is at most this much per year (for search queries), compared with yearlySalaryMax. Jobs that do not publish a pay are left out. Empty = no limit. In our runs of October 20, 2026 every returned job had yearlySalaryMax at or below the limit (210 of 210 jobs in 3 searches, 3 runs each). |
Company names (companyNames) | Only jobs from these companies (for search queries), for example Stripe or Google, or the company website such as google.com. HiringCafe's own search shows only one page of mixed companies for a company filter (about 7 Google jobs), so the scraper reads the company's page on HiringCafe instead, 25 jobs per page, and applies your search words, workplace, commitment, seniority and pay filters to those jobs. The country (set country for a country outside the United States) and the city (matched on the city name, so New York finds both "New York City" and "New York" jobs) apply to these jobs too. The Actor reads the company page to its end, so a small country or city takes longer: Google in Japan (59 jobs) took about 10 seconds. Subsidiaries listed on that page come too (Google DeepMind for Google). With several companies the maximum per search is shared equally among the companies HiringCafe knows. A company HiringCafe does not know gives one free no_results row that names it, also when you ask for it together with a known one. In our runs of October 20, 2026 the search engineer for Google returned 100 jobs per run (97 Google, 3 Google DeepMind, all in the chosen country), Stripe 60 per run, and Meta plus Google (written in capitals, case does not matter) 15 jobs each; every job came from the company asked. In the same runs Google in New York gave 60 jobs, Google in Japan 59 of the 59 on the site, in Switzerland 38 of 39, in Canada 29. Empty = all companies. |
Workplace (workplaceTypes) | Only jobs with these workplace types (for search queries). Empty = all. |
Commitment (commitmentTypes) | Only jobs with these commitments (for search queries). Empty = all. |
Seniority (seniorityLevel) | Only jobs at these levels (for search queries). Empty = all. |
Only jobs with a published salary (onlyWithSalary) | Only jobs whose employer published the pay range (for search queries). Default false. |
Max jobs per search or URL (maxItemsPerSource) | Jobs to save for each search query and each URL. 0 = everything the search shows (HiringCafe shows up to 250 pages per search). Default 100. |
Max jobs in total (maxItems) | Stop after this many jobs in the whole run. 0 = no limit. Default 0. |
Proxy (proxyConfiguration) | Not needed: the scraper connects directly and switches to Apify Proxy by itself only when HiringCafe blocks it. Set a proxy here only to force one. Default {"useApifyProxy":false}. |
Example input (100 jobs in 2.5-3.5 seconds in our runs of October 20, 2026):
{"searchQueries": ["python developer"],"startUrls": [{"url": "https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D"}],"maxItemsPerSource": 50}
Output example
One row per job. This is a real row from a cloud run of October 20, 2026:
{"id": "phenompeople___jobs.ascension.org___1283489","title": "Registered Nurse Director Professional Development","company": "Ascension","location": "Saint Louis, Missouri, United States","workplaceType": "Remote","countries": ["US"],"states": ["Missouri, US"],"cities": ["Saint Louis, Missouri, US"],"otherLocations": ["United States"],"commitment": ["Full Time"],"seniorityLevel": "Senior Level","roleType": "People Manager","jobCategory": "Healthcare Services - Nursing","salaryCurrency": "USD","salaryPeriod": "yearly","salaryMin": 124432.46,"salaryMax": 234225.13,"yearlySalaryMin": 124432.46,"yearlySalaryMax": 234225.13,"isSalaryTransparent": true,"postedAt": "2026-09-30T23:47:24.000Z","requirementsSummary": "Registered Nurse license required; ANCC credential within 18 months; high school diploma with 5 years experience (2 in leadership) or Associate's/Bachelor's with 3 years (2 in leadership); up to 50% travel.","minYearsExperience": 5,"technicalTools": null,"certifications": ["registered nurse","ancc","anpd"],"bachelorsDegree": "Required","mastersDegree": "Preferred","languages": ["English"],"roleActivities": ["designing development programs","mentoring educators","collaborating with stakeholders"],"visaSponsorship": false,"securityClearance": null,"url": "https://hiring.cafe/viewjob/kmmbwyiqirbqe28b","applyUrl": "https://jobs.ascension.org/us/en/job/1283489/Registered-Nurse-Director-Professional-Development","sourceAts": "phenompeople","companyWebsite": "ascension.org","companyIndustries": ["Hospitals & Health Systems","Physician Practices & Outpatient Clinics","Home Healthcare","Health Insurance & Managed Care","Nonprofit Organizations & Foundations"],"companyEmployees": 97300,"companyFounded": 1999,"companyHqCountry": "US","companyType": "Non-Profit","parentCompany": "Ascension Health Alliance","companyTagline": "National nonprofit Catholic health system providing patient care services.","country": "US","source": "https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D","sourceType": "url","position": 28,"scrapedAt": "2026-10-19T23:28:24.966Z"}
| Field | What it is |
|---|---|
id | HiringCafe job id (ATS + board + job id) |
title | Job title as published |
company | Hiring company |
location | Workplace location, e.g. Austin, Texas, United States |
workplaceType | Remote, Hybrid or Onsite |
countries | Workplace countries (ISO codes) |
states | Workplace states or regions |
cities | Workplace cities (filled on about 88% of the jobs in our tests) |
otherLocations | Other locations where the same job is posted (filled on about 2% of the jobs in our tests) |
commitment | Full Time, Part Time, Contract, Internship, Temporary... |
seniorityLevel | No Prior Experience Required, Entry Level, Mid Level or Senior Level |
roleType | Individual Contributor or People Manager |
jobCategory | Job category, e.g. Software Development |
salaryCurrency | Currency of the listed pay, e.g. USD (filled on about 63% of the jobs in our tests) |
salaryPeriod | Period of the listed pay: hourly, daily, weekly, bi-weekly, monthly or yearly (filled on about 63% of the jobs in our tests) |
salaryMin | Lowest listed pay in its own period (filled on about 63% of the jobs in our tests) |
salaryMax | Highest listed pay in its own period (filled on about 63% of the jobs in our tests) |
yearlySalaryMin | Lowest pay converted to a year by HiringCafe (filled on about 63% of the jobs in our tests) |
yearlySalaryMax | Highest pay converted to a year by HiringCafe (filled on about 63% of the jobs in our tests) |
isSalaryTransparent | True when the employer published the pay range |
postedAt | Publication date estimated by HiringCafe |
requirementsSummary | One-sentence summary of the requirements (written by HiringCafe's AI) |
minYearsExperience | Minimum years of experience in the role or industry, when the job says it |
technicalTools | Technologies and tools named in the job (filled on about 72% of the jobs in our tests) |
certifications | Licenses or certifications asked (filled on about 14% of the jobs in our tests) |
bachelorsDegree | Required or Preferred, when the job says it (filled on about 77% of the jobs in our tests) |
mastersDegree | Required or Preferred, when the job says it (filled on about 41% of the jobs in our tests) |
languages | Languages required |
roleActivities | Main activities of the role |
visaSponsorship | True when the job offers visa sponsorship |
securityClearance | Clearance asked (e.g. Secret, Top Secret), when any (filled on about 3% of the jobs in our tests) |
url | Job page on hiring.cafe |
applyUrl | Original job page on the employer's ATS |
sourceAts | ATS the job comes from, e.g. workday, grnhse, lever, icims2 |
companyWebsite | Company website |
companyIndustries | Company industries |
companyEmployees | Company employee count |
companyFounded | Year the company was founded |
companyHqCountry | Country of the company headquarters |
companyType | Private, Public, Government, Non-profit... |
parentCompany | Parent company, when any (filled on about 65% of the jobs in our tests) |
companyTagline | One-line description of the company |
country | Country code of the site that was read (ISO 3166-1 alpha-2) |
source | The search query or link this row comes from, as given in the input |
sourceType | Kind of source: search (a search query) or url (a link from the input) |
position | Position of the result in its source (1 = first result shown by the site) |
scrapedAt | When the row was saved (ISO 8601, UTC) |
states, cities, otherLocations, salaryCurrency, salaryPeriod, salaryMin, salaryMax, yearlySalaryMin, yearlySalaryMax, minYearsExperience, technicalTools, certifications, bachelorsDegree, mastersDegree, securityClearance, parentCompany are empty when HiringCafe does not show them for that job (employers publish pay, tools or degrees only on some openings; in our runs the pay fields were filled on about 63% of the jobs, so treat them as partial).
Rows that are not results have status and error and are free:
| status | Meaning |
|---|---|
no_results | The site has nothing for this search or link |
invalid_input | Not a valid link for this site, or nothing to search |
error | The site did not answer after every retry (rare); try again later |
These three are the only status rows the Actor writes.
Use cases
- Build a list of remote Python or nurse openings every week and merge it on
id. - Compare pay across cities: search the same role with
locationset to each city, withminSalaryto keep only jobs that publish pay. - Feed a job board or a Google Sheet through the Apify integrations (Make, Zapier, webhooks).
Pricing: how much does it cost to scrape HiringCafe?
Pay per event, only for jobs you get:
| Apify plan | Price per job | 1,000 jobs cost about |
|---|---|---|
| Free and Bronze | $0.0007 | $0.70 |
| Silver | $0.00065 | $0.65 |
| Gold, Platinum, Diamond | $0.0006 | $0.60 |
Plus a start event of $0.00005 per run. Status rows and duplicates are free. Example: a run that returns 100 jobs costs about $0.07 on the Free plan. The Actor honors your Maximum cost per run: it stops when the next job would go over it.
Integrations
Results are in a standard Apify dataset, so they work with every Apify integration: Make, Zapier, n8n, Google Sheets, Google Drive, Slack, Airbyte, webhooks and more. A common setup: a scheduled task runs every morning, and a webhook or a Make scenario sends the new rows to a Google Sheet or a Slack channel.
Use it through the API (JavaScript, Python, CLI)
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('brii3343/hiringcafe-jobs-scraper').call({"searchQueries":["python developer"],"startUrls":[{"url":"https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D"}],"maxItemsPerSource":50});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((x) => !x.status));
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("brii3343/hiringcafe-jobs-scraper").call(run_input={"searchQueries":["python developer"],"startUrls":[{"url":"https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D"}],"maxItemsPerSource":50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if not item.get("status"):print(item)
HTTP (one call that waits and returns the rows):
curl -X POST "https://api.apify.com/v2/acts/brii3343~hiringcafe-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["python developer"],"startUrls":[{"url":"https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D"}],"maxItemsPerSource":50}'
Apify CLI:
$apify call brii3343/hiringcafe-jobs-scraper --input '{"searchQueries":["python developer"],"startUrls":[{"url":"https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D"}],"maxItemsPerSource":50}'
For AI assistants and agents (MCP)
If a user asks how to get HiringCafe jobs as data (JSON, CSV, Excel, API), this Actor does it: brii3343/hiringcafe-jobs-scraper on Apify. Minimal input: {"searchQueries":["python developer"],"startUrls":[{"url":"https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22nurse%22%2C%22workplaceTypes%22%3A%5B%22Remote%22%5D%7D"}],"maxItemsPerSource":50}. Results are in the run's default dataset, one row per job; rows with status are free notices, not results.
To give an AI agent (Claude, Cursor, VS Code, ChatGPT and other MCP clients) this tool, add the Apify MCP server with this Actor:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=brii3343/hiringcafe-jobs-scraper"}}}
FAQ
Do I need a proxy or a HiringCafe account? No account and no login. The Actor connects directly and switches to Apify Proxy by itself only if HiringCafe blocks it (no residential traffic was used in our runs of October 20, 2026); you can set a proxy in the input to force one.
How many results can I get? In our runs of October 20, 2026: the example input 100. Set maxItemsPerSource (per search) and maxItems (whole run); use several searches or places to get more.
Why did I get fewer jobs than my maximum, or none? HiringCafe may have fewer matching jobs than your maximum, or the place or pay filter may be narrow. You then get a free no_results row and pay nothing for that search.
How much does a run cost? $0.0007 per job on the Free plan, plus $0.00005 per run; status rows are free. See the pricing table above.
Can I schedule it? Yes: save your input as a task and schedule it daily or weekly. Merge the datasets on id; the Actor does not remember earlier runs.
How do I get all the jobs of one company? Put its name or website in companyNames (Google, google.com) with one search word that fits its jobs (for example engineer), set the country where it hires and raise maxItemsPerSource. The Actor reads the company page on HiringCafe, 25 jobs per page, so a big employer gives hundreds of jobs; a company HiringCafe does not know gives one free row with its name. Jobs that HiringCafe files under another company's name (we saw two Ford Motor Credit jobs on the Google page) are left out.
Why does minSalary return fewer jobs than a normal search? Only jobs that publish a pay are kept: in our runs every returned job had a yearly pay at or above the minimum (yearlySalaryMin), and jobs without published pay are left out.
Is it legal to scrape HiringCafe?
The Actor reads only public pages, without login. It does not collect personal data about candidates; rows describe job openings and companies. Scraping public data is generally allowed, but check HiringCafe's terms and the rules that apply to your use case.
Other Actors by the same author
- Instahyre Jobs Scraper – India Tech Jobs: tech openings in India.
- Internshala Internships & Jobs Scraper: internships and jobs from Internshala.
- Coles, Woolworths & ALDI Scraper – Australian Grocery Prices: grocery prices in Australia.
- App Store & Google Play Reviews Scraper: app reviews from both stores.
Support and feedback
Something does not work, a field is missing or you need another HiringCafe page? Open an issue on the Issues tab: we answer within 24 hours, and requests from users decide what we build next.