Company Job Postings & Hiring Signals Scraper
Pricing
from $0.80 / 1,000 job scrapes
Company Job Postings & Hiring Signals Scraper
Pull every open role from any company's job board via official ATS APIs — Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio, Breezy. Enriched with seniority, function, salary, remote flag and the tech named in each posting. From $2 / 1,000 companies.
Pricing
from $0.80 / 1,000 job scrapes
Rating
0.0
(0)
Developer
Eimantas V
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
Give it a list of company domains. Get back every open role, enriched with seniority, function, location, salary and the technologies named in each posting.
It reads companies' official applicant-tracking system APIs — Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio and Breezy — not LinkedIn or Indeed. Those endpoints exist so companies can embed their own vacancies on their own sites: they return clean JSON, they are public and unauthenticated, and they are not defended by bot management. That makes this fast, cheap and stable in a way that job-board scraping is not.
Input: gitlab.comOutput: 190 open roles · 31 posted in the last 30 days · 52 remoteTooling in postings: Salesforce, Ruby, Kubernetes, PostgreSQLHiring in United States, United Kingdom, India · velocity 90/100
What you get
Per job posting
| Field | Detail |
|---|---|
| Identity | Stable uid (<ats>:<token>:<jobId>), company name and domain, ATS and board token |
| Role | Title, normalised title (seniority and location noise stripped, so the same role groups across companies), department, team |
| Classification | Seniority (intern → executive) and function (engineering, data, sales, marketing, product, design, security, finance, people, …) |
| Location | Location string, all secondary locations, parsed country and city, isRemote, isHybrid |
| Compensation | Parsed min / max / currency / period, including salaries stated only in the body text |
| Timing | postedAt, updatedAt, daysOpen |
| Tech keywords | Technologies and vendors named in the posting — see below |
| Links | Direct apply URL, description snippet, optional full text |
Per company (optional rollup record)
Open roles by function and seniority, top locations, top tooling, remote count, roles posted in the last 30 days, newest and oldest posting, and a 0–100 hiring velocity score.
Why the tech keywords matter
Every posting is scanned for ~90 technologies and vendors. That turns a job board into a buying-intent feed:
- A company hiring for Snowflake + dbt + Airflow is standing up a data warehouse now.
- A company hiring Salesforce administrators is expanding its CRM.
- A company hiring Kubernetes + Terraform engineers is re-platforming.
Real output from a single run:
gitlab.com Salesforce(18), Ruby(8), Kubernetes(7), PostgreSQL(6), Vue.js(4)ramp.com Python(16), NetSuite(12), Salesforce(10), React(9), AWS(8)figma.com Python, Salesforce, Snowflake, NetSuite, dbt
Keywords that appear in nearly every posting on a large board are dropped as boilerplate — a company naming its own product in all 60 ads is not a signal.
Who this is for
- Outbound sales — "companies that posted a Data Engineer role in the last 30 days" is a far better trigger than firmographics. Filter on
postedWithinDays,jobFunctionandtechKeywords. - Recruiters and staffing — live, structured vacancy data straight from the source, with direct apply links.
- Competitive and market intelligence — track where competitors are investing headcount, by function and country, week over week.
- Investors — headcount growth by function is one of the earliest public signals of a company's direction.
- Data teams — a fixed, documented schema with a stable primary key, so consecutive runs diff cleanly.
Input
{"companies": ["gitlab.com", "figma.com", "linear.app"],"titleKeywords": ["engineer", "data"],"postedWithinDays": 30,"maxJobsPerCompany": 200}
Domains, careers URLs and direct board URLs all work. If you already know the board, skip discovery entirely:
{ "boards": [{ "ats": "greenhouse", "token": "gitlab" }] }
Chains off the Website Tech Stack & Lead Enrichment Scraper. Point sourceDatasetId at its output and the careersPageUrl field is picked up automatically — enrich a lead list, then find who on it is hiring.
Key options
| Option | Default | Notes |
|---|---|---|
titleKeywords / locationKeywords | — | Applied before billing, so you only pay for postings you keep |
postedWithinDays | all | Undated postings are excluded, since they can't be shown to be recent |
remoteOnly | false | |
maxJobsPerCompany | 200 | Large employers can exceed 4,000 roles — this is your billing guard |
includeDescriptions | true | Needed for techKeywords and body-text salaries; ~10× the bandwidth |
includeFullDescriptionText | false | Off keeps the dataset small; a 300-char snippet is always included |
includeCompanySummary | true | Rollup rows are not billed as jobs |
guessBoardToken | true | Tries the domain name on the three biggest ATSs, verified against the live API |
Supported systems
| ATS | Coverage |
|---|---|
| Greenhouse | Full board in one request, meta.total for board size |
| Lever | Full board, descriptions always included |
| Ashby | Full board, compensation included where published |
| SmartRecruiters | Paginated — handles boards of thousands of roles |
| Workable | Full board |
| Recruitee, Personio (XML), Breezy HR | Full board |
A company on an unsupported ATS, or with a bespoke careers page, returns NO_BOARD_FOUND — and is not charged.
Output
One record per posting, recordType: "job":
{"uid": "greenhouse:gitlab:8503792002","companyName": "GitLab", "companyDomain": "gitlab.com","ats": "greenhouse", "atsToken": "gitlab","title": "Senior Backend Engineer, Remote", "normalisedTitle": "Backend Engineer","department": "Engineering","location": "Remote, Italy", "country": "Italy", "isRemote": true,"seniority": "senior", "jobFunction": "engineering","salary": { "min": 211400, "max": 290600, "currency": "USD", "period": "year" },"postedAt": "2026-05-16T00:00:00.000Z", "daysOpen": 86,"techKeywords": ["Ruby", "Ruby on Rails", "Kubernetes", "PostgreSQL"],"applyUrl": "https://job-boards.greenhouse.io/gitlab/jobs/8503792002","recordType": "job"}
Plus one recordType: "company-summary" per company. The dataset ships with three ready-made views — Job postings, Tech & salary signals and Company hiring signals — so you can export just the columns you need.
Set flattenOutput: true for CSV.
Performance and honest limits
Measured on six real companies, descriptions on, 60-role cap:
| Wall clock | 3.2 s for 6 companies (271 jobs) |
| Requests per company | 4.2 |
| CPU per company | ~290 ms |
| Boards resolved | 5 of 6 |
Limits worth knowing:
- Coverage is ATS coverage. Companies on Workday, Taleo, SAP SuccessFactors, Teamtailor or a hand-built careers page are not supported and return
NO_BOARD_FOUND. Expect misses on large enterprises and on companies with no public board. postedAtis whatever the ATS reports. Some providers keep the original creation date across republication, so a role can show a largedaysOpenwhile being actively advertised.- Descriptions drive bandwidth. Greenhouse goes from 343 KB to 4.1 MB on a 561-role board when descriptions are on. Turn them off for a fast titles-only pass.
- Salary is only reported when a currency is attached to the numbers. A bare "120000 - 160000" is left null rather than guessed, because a wrong salary is worse than a missing one.
Pricing
Pay per event. Companies with no discoverable board are never charged, and filters run before billing.
| Event | Price | When |
|---|---|---|
| Actor start | $0.005 | Once per run |
| Company resolved | $0.004 | Per company whose board is found and read, including companies with no open roles |
| Job scraped | $0.0008 | Per posting returned, after your filters |
Worked example: 500 companies averaging 15 kept roles = $2.00 + $6.00 = $8.00, under two cents per company. That is roughly $0.80 per 1,000 job records — well under what job-data APIs charge.
Filters run before billing, so a tight query costs less. The per-company fee still applies, because an entire board is downloaded whether you keep every posting or three of them.
Tips
- Schedule it weekly and diff on
uid. New UIDs are new roles; disappeared UIDs are filled or pulled. That diff is the actual sales trigger. - Filter hard.
titleKeywords: ["data engineer"]pluspostedWithinDays: 14turns 50,000 postings into a short, timely call list — and cuts the bill proportionally. - Segment on
hiringVelocityScore. High score plus a small team means a company scaling fast. - Use
techKeywordsas intent. Cross-reference against what you sell.