Hiring.Cafe Jobs Scraper
Pricing
from $0.06 / 1,000 job exporteds
Hiring.Cafe Jobs Scraper
Export public Hiring.Cafe job listings, companies, apply links, salaries, workplace fields, and requirements.
Pricing
from $0.06 / 1,000 job exporteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
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.
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 | Optional fallback for detected blocking or rate limiting. Direct requests are always attempted first. |
Output fields
| Field | Description |
|---|---|
id, objectId, requisitionId | Stable identifiers for deduplication. |
title, rawTitle, category, seniority | Job title and classification fields. |
companyName, company | Company name and public company enrichment. |
applyUrl, jobUrl, source, sourceAndBoardToken | Apply link, Hiring.Cafe link, and ATS/source fields. |
location, coordinates, workplaceType, commitment | Location and work arrangement fields. |
salaryMin, salaryMax, salaryPeriod, salaryCurrency | Compensation values and currency when listed. |
requirementsSummary, technicalTools, degreeRequirements, languageRequirements, benefitFlags | Requirement and benefit signals. |
postedAt, isExpired, detailDescription, detailFetchStatus | Timing, status, and full-description information. |
warnings, scrapedAt | Per-row enrichment warnings and collection timestamp. |
RUN_SUMMARY in the default key-value store records parsed and saved counts, duplicates, filters, retries, route fallback, target failures, deadline status, and warnings. RUN_CHECKPOINT is present only while pending work remains.
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.
Pricing
This actor uses pay-per-event pricing: a small start fee plus one job-exported event per output row.
| Event | Free | Starter / Bronze | Scale / Silver | Business / Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| Job exported | $0.000115 | $0.000100 | $0.000078 | $0.000060 | $0.000040 | $0.000028 |
The start event is charged once after input validation. The item event is charged only when a job row is saved. A row with a failed optional full-description fetch is still a paid job row because the base job record was successfully delivered; the warning explains the missing enrichment. At the Starter / Bronze tier, 1,000 exported jobs cost about $0.10 plus the run start fee.
Reliability and access behavior
- The Actor uses HiringCafe's structured public search responses and public full-description service instead of rendering every page in a browser.
- 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.
- Direct access is attempted first. If you provide
proxyConfiguration, the Actor can use it as a fallback after direct access is blocked; it does not silently enable residential traffic. - 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.
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 ApifyClientclient = 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().itemsprint(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."
Related actors
FAQ
Does this require a Hiring.Cafe login? No. It uses public job pages only.
Does it require a proxy? Usually no. Direct structured requests are tried first. Configure a proxy only if your route receives repeated block or rate-limit responses.
Why are salary fields empty for some jobs? Hiring.Cafe and source employers do not always list compensation.
Can I monitor new jobs? Yes. Schedule recurring runs and dedupe on id or objectId in your database.
What happens when a larger run approaches its time limit? The Actor stops admitting new work, saves pending page and stable-ID state to RUN_CHECKPOINT, and reserves time for persistence and cleanup. Resurrection with the same input resumes without duplicating already saved jobs.
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).