Hiring.Cafe Jobs Scraper
Pricing
from $0.10 / 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.10 / 1,000 job exporteds
Rating
0.0
(0)
Developer
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
6
Monthly active users
15 hours ago
Last modified
Categories
Share
Export public Hiring.Cafe job listings with titles, companies, locations, apply links, salary signals and requirements. Hiring.Cafe Jobs Scraper accepts search filters or public job URLs and saves structured rows for CSV, Excel, JSON and API workflows.
Full descriptions are optional, availability varies by posting, and paid enrichment is limited by the run's cost budget. No Hiring.Cafe login is required.
Quick start
- Open Input, keep Automatic connection mode and start with a small job limit.
- Paste this input for a broad export without restrictive filters:
{"maxItems": 3,"fetchDetails": false,"connectionMode": "automatic"}
- Start the Actor, then open its Dataset to view or export saved jobs. With
fetchDetails: false, rows contain search-level information, not full descriptions. - Enable
fetchDetailswhen you need complete public role text. Add filters after checking a broad sample.
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
What you get
- Job records: stable IDs, titles, company details, locations, workplace type, commitment, posting dates and apply URLs.
- Hiring signals: salary ranges, seniority, requirements, tools, benefits and source/ATS fields when available.
- Optional full descriptions: complete public employer text through supported routes, with a status and warnings if enrichment is unavailable.
- Bounded exports: page and item limits, duplicate removal and saved results across input URLs.
Who is it for?
Recruiters who need public role lists, job-board teams organizing application links and analysts comparing hiring signals can use the same structured export. Use the stable id or objectId to match jobs in your own workflow rather than comparing titles alone.
Input settings
| Field | Meaning |
|---|---|
startUrls | Optional array of { "url": "…" } entries: Hiring.Cafe homepage, search or job URLs. Omit for a search built from the filters. |
query | Text matched against title, company, category or requirements. |
location | Text matched against the job's location fields. |
country | Two-letter ISO country code, for example DE or US. |
remoteOnly | Remote jobs only, excluding Hybrid. Default: false. |
maxItems | Maximum saved jobs, from 1 to 1,000. Default: 20. |
fetchDetails | Request full public descriptions when available. Default: true. |
maxPages | Search-page cap, from 1 to 100. The Input form supplies 20. Set it explicitly in API requests when you need a specific cap. |
runBudgetSeconds | Active-work budget, from 60 to 270 seconds. Default: 240. Cleanup time is separate. |
resumeFromCheckpoint | Resume matching work when the same run is resurrected. Default: true. |
connectionMode | How the scraper connects. See the field help in Input for choices and costs. |
These are editable JSON inputs, not public saved-task links. Results depend on current public listings.
Remote data jobs with descriptions:
{"query": "data engineer","remoteOnly": true,"fetchDetails": true,"maxItems": 20,"maxPages": 20,"connectionMode": "automatic"}
Country-filtered jobs without full descriptions:
{"query": "software engineer","country": "DE","fetchDetails": false,"maxItems": 20,"maxPages": 20,"connectionMode": "automatic"}
To look up specific postings, supply their actual public Hiring.Cafe /job/... URLs in startUrls. Do not use an employer's application URL as a start URL.
Output data
Each saved row represents one job, not one description request or page visit.
| Fields | Contents |
|---|---|
id, objectId, requisitionId | Identifiers for deduplication and downstream matching. |
title, rawTitle, category, seniority | Title and classification where available. |
companyName, company | Company name and public company details. |
applyUrl, jobUrl, source, sourceAndBoardToken | Application destination, Hiring.Cafe URL and source identifiers. |
location, coordinates, workplaceType, commitment | Location and work arrangement. |
salaryMin, salaryMax, salaryPeriod, salaryCurrency | Compensation when published. |
requirementsSummary, technicalTools | Summary requirements and tool signals. |
degreeRequirements, languageRequirements, benefitFlags | Additional requirement and benefit signals. |
postedAt, isExpired | Posting date and available expiry signal. |
detailDescription, detailFetchStatus | Optional full-description text and enrichment status. |
warnings, scrapedAt | Per-row caveats and collection timestamp. |
Illustrative field-shape excerpt only, not an observed job or a guarantee that every field is populated:
{"id": "<source job identifier>","title": "<public job title>","companyName": "<public employer name>","location": "<published location>","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"detailDescription": null,"warnings": []}
Missing optional data stays null or an empty array. No salary or qualification is inferred merely to fill a column. Check detailFetchStatus and warnings before treating a row as a full-description result. ok_direct_source identifies a complete description retrieved from a supported public employer source.
Existing supported employer routes are tried before paid description requests. Paid enrichment uses the effective prices for that run, not a future price change. It reserves listing access, compute and storage costs before admitting additional metered requests. Rows beyond this budget remain useful listing records with detailDescription: null and detailFetchStatus: "skipped_cost_budget"; this is not a claim that the description is unavailable. A higher maxItems does not guarantee more descriptions. Unbounded byte-priced or unknown saved proxy routes may also skip paid descriptions rather than incur an unbudgeted cost; saved connection settings and explicit Direct choices are not silently replaced.
The run's key-value store includes RUN_SUMMARY with saved counts, filters, warnings and any deadline stop. skippedCostBudget counts budget-limited descriptions; stoppedAtCostBudget means further paid search pages were stopped after retaining useful listings. One initial protected listing is allowed before job receipts exist; no overall profitability guarantee is made for failed or empty searches, or for unbounded saved byte-priced proxy configurations. Check it when an export is smaller than expected. A checkpoint can resume matching work in the same resurrected run. It is not a subscription or a guarantee that an interrupted export finished.
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
This Actor uses pay per event. The start event charges once after input validation, including a valid search that finds no matching jobs.
The item event charges per saved job row. An optional description failure does not make the delivered base job free. The row carries a warning. There is no separate Actor event for protected-page access, description requests or runtime. Applicable platform usage costs can still apply.
The fixed start charge makes very small exports proportionally more expensive per job. Bound work with maxItems, maxPages, fetchDetails and runBudgetSeconds. A requested maximum is not a guaranteed result count.
See the live Pricing tab for current rates and plan discounts. The run uses its current effective rates. Prices do not guarantee a full description for every job; cost-limited enrichment still preserves the base listing. There is no extra description fee.
Tips for best results
- Start with a broad sample. Confirm the returned fields before adding restrictive filters.
- Request descriptions only when needed. Turn off
fetchDetailsfor a lighter search-level export. - Increase pages cautiously. Country and location are strict output filters, so the Actor may inspect more jobs than it saves.
- Keep stable identifiers. Use job IDs to compare exports in your own spreadsheet or database.
- Check the application page. A public role description can remain visible after applications close.
Limits and caveats
- Public data only: no private saved jobs, candidate profiles, account data or application state. This is not an official Hiring.Cafe API.
- Availability varies: challenges, rate limits, timeouts and upstream changes can prevent access. Inaccessibility alone does not establish that a job is private or deleted.
- Descriptions are optional: employer coverage is not universal. Unavailable, incomplete or cost-limited descriptions can leave a base job with a warning. Partial summaries are not labeled full descriptions. A 100-job export is not a promise of 100 full descriptions.
- Exports can be incomplete: narrow filters, unavailable targets and the work budget can reduce results. Useful rows from other targets are retained. A successful run does not mean every requested description was retrieved.
- No private application content: applicant forms and private fields are excluded. Public video references remain links, not downloaded videos.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could add job records to a spreadsheet or ask an AI assistant to group returned roles by their listed requirements. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~hiring-cafe-jobs-scraper/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"maxItems":3,"fetchDetails":false,"connectionMode":"automatic"}'
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({maxItems: 3,fetchDetails: false,connectionMode: 'automatic',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/hiring-cafe-jobs-scraper').call(run_input={'maxItems': 3,'fetchDetails': False,'connectionMode': 'automatic',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
MCP and AI agents
You can ask your AI assistant to collect data with Hiring.Cafe Jobs Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Hiring.Cafe Jobs Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/hiring-cafe-jobs-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Hiring.Cafe Jobs Scraper by Fetch Cat, or give it the identifier fetch_cat/hiring-cafe-jobs-scraper.
Your assistant should inspect the available input schema and retrieve the results from the returned run and dataset. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Find up to ten remote data engineering jobs and list their companies and application links.”
- “Get up to twenty software engineering jobs in Germany, then make a spreadsheet from the returned roles.”
- “Retrieve the available full descriptions for these public Hiring.Cafe job links and summarize the listed requirements.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this public, limited-permission scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option with its own eligibility requirements, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Why did my search return fewer jobs than maxItems? The limit is a ceiling. Strict filters, duplicate removal, current availability, page caps and the work budget can reduce the count. Try a broad sample before narrowing filters, and inspect the run summary if no jobs are saved.
Why is a description or salary missing? Employers do not always publish those fields, and optional description access can fail. Inspect the row's status and warnings rather than assuming every saved job contains complete text.
Can I compare repeated exports? Yes. Retain stable job IDs and collection timestamps in your own database. Each new invocation is separate paid work. The Actor does not automatically reconcile historical exports.
Related Actors
- Career Page Job Postings Scraper — public jobs from employer career pages and linked ATS listings.
- LinkedIn Jobs Scraper — public LinkedIn job searches with company details and descriptions when available.
- Google Jobs Scraper — query and location searches with job sources and application links.
- Wellfound Jobs Scraper — startup job listings with company and compensation fields.
- Naukri Jobs Scraper — public Naukri job listings by keyword, location or listing URL.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥