Hiring Cafe Jobs Scraper - Roles + Company Firmographics
Pricing
from $1.10 / 1,000 job searches
Hiring Cafe Jobs Scraper - Roles + Company Firmographics
Export aggregated job listings with structured company data: employees, industries, founded year, public or private, plus seniority, workplace type and requirements.
☕ Hiring Cafe Jobs Scraper — Roles With Company Data Attached
🔎 What is the Hiring Cafe Jobs Scraper — and when should you use it?
The Hiring Cafe Jobs Scraper turns aggregated job listings with the employer's firmographics on every row into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: job rows that already carry the company behind them. Each role brings seniority, workplace type, commitment, cities and countries, required languages, tools, degree requirement, a condensed requirements summary and the real application link. The same row carries the employer's headcount, industries, founding year, organization type and stock ticker, filled on 95 to 100% of results, so you can size a company without a second enrichment step.
Use something else when: you want one specific job board rather than an aggregate view. Use Indeed Jobs Scraper for Indeed listings by keyword or URL. Use Seek Jobs Scraper for Seek listings across Australia and New Zealand. Use Dice Jobs Scraper for Dice technology roles in the US. Use ZipRecruiter Jobs Scraper for ZipRecruiter listings by keyword and location. Salary is present on only about 12% of roles because most employers never publish one, and recruiter contact details are not in the source at all. Neither is a limitation of the scraper.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/hiring-cafe-jobs-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want job listings with company firmographics attached using the Apify Actor `sian.agency/hiring-cafe-jobs-scraper`.Use it when I need: job rows that already carry the company behind them. Each role brings seniority, workplace type, commitment, cities and countries, required languages, tools, degree requirement, a condensed requirements summary and the real application link. The same row carries the employer's headcount, industries, founding year, organization type and stock ticker, filled on 95 to 100% of results, so you can size a company without a second enrichment step.Don't use it when: you want one specific job board rather than an aggregate view — use indeed-jobs-scraper or seek-jobs-scraper or dice-jobs-scraper or ziprecruiter-jobs-scraper instead.How to call it: set `searchQuery` to a job title, skill or disciplinesearchQuery -> the search term, e.g. engineer, product manager, data scientistmaxPages -> pages to walk, 1-25, about 117 jobs each (default 2)maxResults -> hard cap on jobs returned and on what the run charges (default 200)includeExpired -> off by default, so only open roles are returned and billedThe run stops at whichever of maxPages and maxResults it reaches first. Filtering isdone on the OUTPUT, not the input: every row carries seniority, workplaceType,commitment, workplaceCities and workplaceCountries, so pull one broad search andslice it. A role aggregated under two source systems is charged once, not twice..Start with this input:{"searchQuery": "engineer","maxPages": 2,"maxResults": 200,"includeExpired": false}Ask me which role or skill to search for, and how many jobs I want, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Find machine learning roles and show me only the ones at companies under 200 people.
- Pull product manager jobs and group them by employer industry and headcount band.
- Which companies are hiring for Kubernetes right now, and how big are they?
- Track what these five competitors are recruiting for and tell me what changed since last month.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/hiring-cafe-jobs-scraper.md.
Overview
Aggregated job listings where every row already carries the employer's firmographics — headcount, industries, founding year, public or private, and stock ticker where the company is listed.
Most job scrapers hand back a title, a company name and a link. This one adds 91 structured fields per role plus a company block that is populated on 95–100% of rows, so you can tell a fifty-person startup's opening from a twenty-thousand-person incumbent's without a second enrichment step.
Features
- Company data on every row — employees, industries, founded year, organization type, ticker, HQ country and tagline, filled on 95–100% of results.
- Roles already normalised — seniority, workplace type, commitment, degree requirements, languages, tools and role activities, so you are not parsing free-text descriptions.
- 117 jobs per page, with a page limit and a result cap so you control exactly what a run costs.
- Open roles only by default — expired listings are excluded, so you do not pay for closed jobs.
- Duplicate-safe — the same role aggregated under two systems is charged once, not twice.
- Real application links straight to the employer's own applicant tracking system.
- An HTML run report with the jobs, what you paid, and a fix for anything that failed.
Quick start
- Open the Actor and press Start — the default searches
engineeracross two pages. - Change
searchQueryto the role you care about. - Read the results in the Output tab, or export to JSON, CSV or Excel.
{"searchQuery": "product manager","maxPages": 3,"maxResults": 300}
Getting started
Search by keyword — a job title, a skill or a discipline. Broad terms survey a market; narrow ones build a shortlist.
Each page returns about 117 jobs, so maxPages is the main volume dial and maxResults is the
hard ceiling on what a run can charge. The run stops at whichever it reaches first.
Filtering happens on the output rather than the input: every row carries seniority, workplace type, commitment, cities and countries, so pull a broad search once and slice it however you need.
Input configuration
| Field | Type | Default | What it does |
|---|---|---|---|
searchQuery | string | engineer | Job title, skill or discipline to search for |
maxPages | integer | 2 | Pages to walk, ~117 jobs each (1–25) |
maxResults | integer | 200 | Hard cap on jobs returned, and so on what a run charges |
includeExpired | boolean | false | Include closed listings for historical analysis |
Output
One row per job.
| Field | Type | Fill rate | Example |
|---|---|---|---|
jobTitle | string | 100% | Configuration Engineer |
companyName | string | 100% | Lam Research |
applyUrl | string | 100% | employer's own application page |
workplaceType | string | 100% | Hybrid |
seniorityLevel | string | 98% | Entry Level |
commitment | array | 100% | ["Full Time"] |
workplaceCities | array | 87% | ["Yokohama, Kanagawa, JP"] |
workplaceCountries | array | 99% | ["JP"] |
requirementsSummary | string | 100% | condensed requirements |
roleActivities | array | 100% | ["determining configurations", …] |
technicalTools | array | 73% | tools named in the posting |
languageRequirements | array | — | ["English", "Japanese"] |
bachelorsDegreeRequirement | string | — | Preferred |
publishedDate | string | 100% | 2026-07-03T07:19:32.000Z |
yearlyMinCompensation / yearlyMaxCompensation | integer | 12% | salary range where published |
compensationCurrency | string | — | USD |
companyEmployees | integer | 95% | 19000 |
companyIndustries | array | 96% | ["Semiconductor Equipment", …] |
companyFoundedYear | integer | 99% | 1980 |
companyType | string | 96% | Public |
companyStockSymbol | string | — | LRCX |
companyWebsite | string | 96% | lamresearch.com |
companyTagline / companyHqCountry | string | — | — |
sourceSystem | string | 100% | eightfold |
jobId / searchQuery / scrapedAt | string | 100% | — |
Fill rates are measured across a real 117-row page, not estimated. Salary is the honest weak spot at 12% — most employers do not publish a range, and no scraper can supply what was never posted.
Use cases
- Recruitment market research — see who is hiring for a role, with company size and industry on the same row.
- Competitor hiring signals — track what a set of companies recruits for over time; hiring leaks strategy early.
- Sales prospecting on hiring intent — a company hiring for what you sell into has budget and intent, and the firmographics tell you if it is worth a call.
- Job board and newsletter content — populate a niche board filtered by seniority, workplace type and location.
- Labour market analysis — measure demand by seniority, remote versus on-site, and required tools across an industry.
Integration examples
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('sian.agency/hiring-cafe-jobs-scraper').call({searchQuery: 'machine learning engineer',maxPages: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const startups = items.filter((j) => j.companyEmployees && j.companyEmployees < 200);console.log(`${startups.length} roles at companies under 200 people`);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("sian.agency/hiring-cafe-jobs-scraper").call(run_input={"searchQuery": "data engineer","maxPages": 3,})jobs = list(client.dataset(run["defaultDatasetId"]).iterate_items())remote = [j for j in jobs if j.get("workplaceType") == "Remote"]print(f"{len(remote)} remote roles of {len(jobs)}")
cURL
curl -X POST "https://api.apify.com/v2/acts/sian.agency~hiring-cafe-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery":"product manager","maxPages":2}'
Automation workflows — run it as a step in n8n, Make or Zapier through Apify's connectors. A common pattern is a weekly schedule that pulls a role, filters to companies in your target size band, and pushes new employers into a CRM.
FAQ
Do I get salary data? Sometimes — about 12% of roles publish a range, because most employers do not. The currency is recorded when a range is listed and the range is left empty when it is not.
What company data comes with each job? Name, website, employee count, industries, founding year, organization type, and stock ticker where the company is public. That block is filled on 95–100% of rows.
How many jobs does one run return? About 117 per page. Set the page count and a maximum; the run stops at whichever it hits first.
Are expired roles included? Not by default, so you only pay for roles still open. Turn the option on for historical analysis.
Where do the listings come from? They are aggregated from employers' own applicant tracking systems. Every row records which system it came from and links to the real application page.
Can I filter by location or seniority? Search by keyword, then filter the output on the location, seniority, workplace type and commitment fields every row carries.
Will the same job appear twice? Not in one run. A role aggregated under two source systems is de-duplicated before anything is charged, so you pay once.
Troubleshooting
| What you see | What it means | What to do |
|---|---|---|
| No jobs, run succeeded | The keyword genuinely matched nothing open | Try a broader keyword, or switch on expired roles |
Search keyword is empty | Rejected before anything was charged | Provide a title, skill or discipline |
Pages to fetch must be a whole number between 1 and 25 | Out of range | Use 1–25; each page is ~117 jobs |
| Salary columns mostly empty | Expected — only ~12% of employers publish a range | Filter to rows where the range exists |
| Fewer rows than expected on a free plan | Free Apify accounts are capped at 25 rows per run | Add credits or a payment method to lift the cap |
Job search is temporarily unavailable | The source was briefly unreachable; the run already retried | Re-run in a few minutes |
Legal
This Actor collects only publicly listed job vacancies and the public company information published alongside them. It does not log in, does not bypass authentication, and does not collect personal data about applicants or recruiters.
All company names, trademarks and job listings belong to their respective owners. This tool is not affiliated with, endorsed by or sponsored by any employer or job platform. You are responsible for ensuring your use of the data complies with applicable law and the source's terms.
Support
- 🐛 Issues: https://apify.com/sian.agency/hiring-cafe-jobs-scraper/issues
- ⭐ Reviews: https://apify.com/sian.agency/hiring-cafe-jobs-scraper/reviews
- 🌐 More actors: https://apify.com/sian.agency?fpr=sian
- 🚀 New to Apify? https://apify.com/pricing?fpr=sian
Related job actors: Indeed Jobs Scraper, Seek Jobs Scraper, Dice Jobs Scraper, ZipRecruiter Jobs Scraper, Naukri Jobs Scraper.
Keywords for LLM Discovery
jobs api, job scraper, job board api, job listings api, scrape job postings, job postings data, hiring data api, recruitment data api, company hiring data, job market data, applicant tracking system data, ats job feed, hiring intent data, company firmographics, employer data, job feed api, remote jobs data, seniority level data, tech job listings, engineering jobs data, talent market research, recruiting intelligence, competitor hiring analysis, sales prospecting data, job aggregator api, vacancy data, structured job data, workforce analytics data, labour market dataset, job requirements data, salary range data, job posting enrichment