Hiring.Cafe Jobs Scraper exports public job listings from Hiring.Cafe into clean datasets for recruiting, labor-market research, lead generation, and job-board monitoring. Give it a Hiring.Cafe URL or simple filters and get job titles, companies, locations, apply links, salary signals, requirements, workplace type, ATS source, and stable IDs.
Value proposition
Hiring.Cafe Jobs Scraper turns public Hiring.Cafe job pages into structured exports that are easy to filter, deduplicate, and load into recruiting or analytics workflows.
What does this actor do
- Scrapes public Hiring.Cafe search pages and individual job pages.
- Returns one dataset row per job with flat export-friendly fields and nested company details.
- Supports keyword, location, country, remote/hybrid, detail-page, and max-item controls.
- Searches across bounded pages, stops at your limit, and deduplicates jobs across pages and input URLs.
- Saves a
RUN_SUMMARYand resumableRUN_CHECKPOINTso interrupted larger runs remain diagnosable and restart safely.
Use cases
- Recruiting teams: build target lists by role, country, workplace type, or company.
- Job boards: monitor public openings and normalize apply URLs.
- Market analysts: study hiring trends, categories, seniority, salary availability, and ATS sources.
- Sales teams: find companies actively hiring for a technology, function, or region.
Who is it for
This Actor is for recruiting teams, job boards, labor-market analysts, sales teams, and automation builders who need structured Hiring.Cafe job data without manual copying.
Input example
{
"startUrls": [{ "url": "https://hiring.cafe/" }],
"query": "software engineer",
"location": "Germany",
"country": "DE",
"remoteOnly": false,
"fetchDetails": true,
"maxItems": 20,
"maxPages": 20,
"runBudgetSeconds": 240
}
Output example
{
"id": "avature___dbgroup___630756",
"title": "Nachwuchskräftegesamtkoordinator:in in Teilzeit",
"companyName": "Deutsche Bahn",
"location": "Königsborn, Saxony-Anhalt, Germany",
"workplaceType": "Hybrid",
"commitment": ["Part Time"],
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"applyUrl": "https://jobs.deutschebahngroup.careers/...",
"jobUrl": "https://hiring.cafe/job/...",
"source": "avature",
"requirementsSummary": "University degree or comparable training...",
"technicalTools": ["Microsoft Outlook", "Microsoft Teams"],
"postedAt": "2026-07-13T18:16:37.552Z",
"detailFetchStatus": "ok_direct",
"warnings": [],
"scrapedAt": "2026-07-20T20:00:00.000Z"
}
Input settings
| Field | Type | Description |
|---|---|---|
startUrls |
array | Hiring.Cafe homepage, search URLs, or specific /job/... URLs. |
query |
string | Keeps jobs whose title, company, category, or requirements include this text. |
location |
string | Keeps jobs whose formatted location or location arrays include this text. |
country |
string | Optional ISO country code filter such as DE or US. |
remoteOnly |
boolean | Uses Hiring.Cafe's Remote filter and keeps jobs marked Remote; Hybrid jobs are excluded. |
fetchDetails |
boolean | Fetches the public full description when available while preserving the base row if enrichment fails. |
maxItems |
integer | Maximum number of jobs to export. |
maxPages |
integer | Bounded search-page cap for narrow local filters and larger exports. |
runBudgetSeconds |
integer | Active-work budget before checkpointing and cleanup; 60-270 seconds. |
resumeFromCheckpoint |
boolean | Resumes the same input idempotently after migration or timeout pressure. |
proxyConfiguration |
object | Direct-first access with bounded Apify Unblocker fallback by default and for Apify Proxy configurations. Explicit opt-out or custom proxy URLs disable automatic Unblocker fallback. Proxy usage is metered. |
Input recipes
- Keyword and country search: use the homepage URL, set
query,country, andmaxItems. - Remote/hybrid jobs: set
remoteOnlyto true and optionally add aquerysuch asdata engineer. - Specific postings: paste Hiring.Cafe
/job/...URLs intostartUrlsand set a smallmaxItems. - Recurring monitoring: schedule the same input and dedupe downstream on
objectIdorid.
Reliability and access behavior
- The Actor uses HiringCafe's structured public search responses. Where supported, it retrieves complete public employer descriptions directly before falling back to HiringCafe's full-description service. Partial summaries are not substituted for full descriptions. Employer descriptions can include their public company introduction alongside complete responsibilities and qualifications; already-contained sections are not repeated. Supported USAJobs pages retain entire summary, duties, and requirements sections, including public additional information and benefits that can be absent from HiringCafe's response.
- Search discovery is paginated with page and item caps, repeated-page detection, stable-ID deduplication, and progressive saves.
- HTTP 403, 429, challenge, timeout, and server-error responses use bounded retries against one shared run deadline.
- Legacy
hiring.cafeURLs are normalized to the current publichiringcafe.comhost, preserving search parameters. - Direct access is attempted first. Challenges immediately advance to the next configured route rather than repeating the same blocked request. Omitted proxy settings use Apify Unblocker as fallback; Apify Proxy configurations also fall back to Unblocker if blocked. Explicit
useApifyProxy: falseor custom proxy URLs disable this automatic fallback. Proxy usage is metered. - Full descriptions are fetched in small batches of up to four eligible jobs. Rows are still saved in discovery order; filters, deduplication, and
maxItemsapply before description requests.ok_direct_sourceidentifies a complete description retrieved from a supported public employer page. Supported SaaSHR postings preserve all description, requirement and summary HTML, including list items. Their descriptions also include public location, pay, employment and role information before the body, and matched text custom fields such as eligibility questions after it. Verified calendar-date custom fields retain their public date in an English display format; unsupported date shapes use the fallback. Contacts are excluded; unknown layouts or custom types retain the fallback. ADP postings first use HiringCafe's anonymous read-only detail tool with the public job identifier; returned title and identifier must match, and the entire full-description text is preserved, including visible list bullets. Unsupported/error responses retain the existing fallback. The supported Colorado Eightfold tenant uses its public job-detail API with exact identity and public-status checks; custom or ambiguous layouts retain the fallback. Supported Paradox pages use a lazy, serial anonymous browser with public-host restrictions and deadline-aware cleanup; no browser is launched when details are disabled. Unsupported or incomplete pages retain the existing full-description fallback. - One failed target or optional description does not discard valid jobs from other targets.
Tips and limits
- Start with
maxItems20-100 while tuning filters. - Very narrow filters can return zero jobs; broaden the query or location if needed.
- Optional salary, degree, benefit, and language fields are returned as
nullor empty arrays when not listed. locationandcountryare strict output filters. IncreasemaxPageswhen a narrow location requires searching more source pages.- The actor only exports public Hiring.Cafe job data. It does not collect private saved jobs, candidate profiles, accounts, or application state.
Legality
This Actor extracts publicly available job listing information from Hiring.Cafe pages. You are responsible for ensuring your use of the data complies with applicable laws, Hiring.Cafe terms, and privacy obligations in your jurisdiction.
API usage
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/hiring-cafe-jobs-scraper').call({
query: 'software engineer',
country: 'DE',
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/hiring-cafe-jobs-scraper').call(run_input={
'query': 'software engineer',
'country': 'DE',
'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~hiring-cafe-jobs-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"software engineer","country":"DE","maxItems":20}'
MCP / agent usage
Claude CLI:
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/hiring-cafe-jobs-scraper"
JSON config:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/hiring-cafe-jobs-scraper"
}
}
}
Example prompts:
- "Export 20 public Hiring.Cafe software engineer jobs in Germany."
- "Find remote data engineer jobs on Hiring.Cafe and include apply URLs."
- "Scrape this Hiring.Cafe job URL and summarize the company and requirements fields."
Support
If a Hiring.Cafe page stops returning expected public jobs, open an Apify issue and include:
- your input JSON,
- expected output,
- actual output,
- run ID,
- reproducible public URL (a Hiring.Cafe URL anyone can open).
Verified RPM Living descriptions retain embedded public video references as links alongside the complete role text. The Actor does not load the embedded video.
For verified Oracle employer postings, descriptions retain the complete public role and company sections, summary, pay and eligibility fields, and skills. Dates in additional information retain their ISO date values. Public media references are links; contacts and internal fields are excluded. An independent same-site public listing check must confirm the exact posting before its detail response is used.
For supported TalentReef public postings, descriptions retain the entire role body and public position information. Compensation appears only when the employer publishes it. Internal postings and unknown layouts use the existing fallback. Supported GovernmentJobs layouts retain all role sections, benefits, supplemental questions when present, and additional application eligibility or disclaimers.
Supported Valleywise postings use links declared by the employer’s public careers index. Their descriptions retain all public position metadata and complete role and eligibility content. Missing public links or unfamiliar layouts use the existing fallback. Public video references in supported iCIMS layouts remain inert links. Supported Newport short job links are checked against the page’s same-host, same-ID canonical posting before retaining all displayed description sections.
Supported McAlister’s Deli public postings use the anonymous browser route and retain the complete public description, including its location header. Unavailable public documents use the existing full-description fallback; terminal errors release the serial browser promptly for the next posting.
Supported ManTech and St. Luke’s Avature postings retain complete role and benefits fields in their public order, alongside displayed job metadata such as clearance requirements and shift. Presentation headings can differ from the original service; unfamiliar layouts use the existing full-description fallback.
Supported HeyGen Greenhouse postings use the anonymous public Job Board API and preserve complete description HTML. The observed education setting controls the application form separately from the complete job description. Unfamiliar education, pay, disclaimer or metadata fields use the existing full-description fallback.
Supported H‑E‑B, CSC ServiceWorks and Promega iCIMS postings retain complete descriptions plus ordered public job fields, including pay, availability, employment type and posting end date where displayed. A verified H‑E‑B video remains an inert link; unfamiliar fields or layouts retain the full-description fallback.