HiringCafe Jobs Scraper avatar

HiringCafe Jobs Scraper

Pricing

from $0.60 / 1,000 jobs

Go to Apify Store
HiringCafe Jobs Scraper

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

Brian Gastaldelli

Maintained by Community

Actor 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, Stripe or google.com in companyNames and 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, UK or Remote in location (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

  1. Fill in Search queries (searchQueries) or HiringCafe search URLs (startUrls).
  2. Set Max jobs per search or URL (maxItemsPerSource, default 100) and Max jobs in total (maxItems, default 0).
  3. Click Start. The example input takes about 2.5-3.5 seconds.
  4. Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.
  5. To follow it over time, save the input as a task and schedule it. There is no "new jobs only" switch yet: keep the id of the jobs you already have and skip them when you merge the new dataset.

Input

FieldDescription
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"
}
FieldWhat it is
idHiringCafe job id (ATS + board + job id)
titleJob title as published
companyHiring company
locationWorkplace location, e.g. Austin, Texas, United States
workplaceTypeRemote, Hybrid or Onsite
countriesWorkplace countries (ISO codes)
statesWorkplace states or regions
citiesWorkplace cities (filled on about 88% of the jobs in our tests)
otherLocationsOther locations where the same job is posted (filled on about 2% of the jobs in our tests)
commitmentFull Time, Part Time, Contract, Internship, Temporary...
seniorityLevelNo Prior Experience Required, Entry Level, Mid Level or Senior Level
roleTypeIndividual Contributor or People Manager
jobCategoryJob category, e.g. Software Development
salaryCurrencyCurrency of the listed pay, e.g. USD (filled on about 63% of the jobs in our tests)
salaryPeriodPeriod of the listed pay: hourly, daily, weekly, bi-weekly, monthly or yearly (filled on about 63% of the jobs in our tests)
salaryMinLowest listed pay in its own period (filled on about 63% of the jobs in our tests)
salaryMaxHighest listed pay in its own period (filled on about 63% of the jobs in our tests)
yearlySalaryMinLowest pay converted to a year by HiringCafe (filled on about 63% of the jobs in our tests)
yearlySalaryMaxHighest pay converted to a year by HiringCafe (filled on about 63% of the jobs in our tests)
isSalaryTransparentTrue when the employer published the pay range
postedAtPublication date estimated by HiringCafe
requirementsSummaryOne-sentence summary of the requirements (written by HiringCafe's AI)
minYearsExperienceMinimum years of experience in the role or industry, when the job says it
technicalToolsTechnologies and tools named in the job (filled on about 72% of the jobs in our tests)
certificationsLicenses or certifications asked (filled on about 14% of the jobs in our tests)
bachelorsDegreeRequired or Preferred, when the job says it (filled on about 77% of the jobs in our tests)
mastersDegreeRequired or Preferred, when the job says it (filled on about 41% of the jobs in our tests)
languagesLanguages required
roleActivitiesMain activities of the role
visaSponsorshipTrue when the job offers visa sponsorship
securityClearanceClearance asked (e.g. Secret, Top Secret), when any (filled on about 3% of the jobs in our tests)
urlJob page on hiring.cafe
applyUrlOriginal job page on the employer's ATS
sourceAtsATS the job comes from, e.g. workday, grnhse, lever, icims2
companyWebsiteCompany website
companyIndustriesCompany industries
companyEmployeesCompany employee count
companyFoundedYear the company was founded
companyHqCountryCountry of the company headquarters
companyTypePrivate, Public, Government, Non-profit...
parentCompanyParent company, when any (filled on about 65% of the jobs in our tests)
companyTaglineOne-line description of the company
countryCountry code of the site that was read (ISO 3166-1 alpha-2)
sourceThe search query or link this row comes from, as given in the input
sourceTypeKind of source: search (a search query) or url (a link from the input)
positionPosition of the result in its source (1 = first result shown by the site)
scrapedAtWhen 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:

statusMeaning
no_resultsThe site has nothing for this search or link
invalid_inputNot a valid link for this site, or nothing to search
errorThe 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 location set to each city, with minSalary to 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 planPrice per job1,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 ApifyClient
client = 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.

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

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.