Company Jobs & Salary Scraper avatar

Company Jobs & Salary Scraper

Pricing

from $1.20 / 1,000 job founds

Go to Apify Store
Company Jobs & Salary Scraper

Company Jobs & Salary Scraper

Every open role at any company, straight from the job board it publishes on — Greenhouse, Lever, Ashby or SmartRecruiters. Salary ranges included where they exist, title, department, location, remote flag and posting date. Give it a company name; it finds the board.

Pricing

from $1.20 / 1,000 job founds

Rating

0.0

(0)

Developer

Eimantas V

Eimantas V

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Every open role at any company, read straight from the job board it publishes on — Greenhouse, Lever, Ashby or SmartRecruiters — with the salary range wherever one exists.

openai 734 jobs 85% priced median $234,000 86 posted this week 471 remote
databricks 800 jobs 53% priced median $182,000 38 posted this week 207 remote
palantir 318 jobs 74% priced median $126,000 Lever + SmartRecruiters
ramp 136 jobs 98% priced median $167,300 124 remote
stripe 568 jobs 3% priced median $158,400
Staff Software Engineer, Forward Deployed AI $189,000 – $330,000 Remote
Design Engineer $172,000 – $440,000 New York

2,590 roles from 7 companies in 17 seconds. No API key, no login, no browser. These are the JSON endpoints the platforms publish so job boards can consume them.


Give it a name, not a platform

You do not need to know which system a company uses. Type stripe and all four boards are searched; whichever list the company answers on is the one you get.

Paste the careers URL if that is easier — https://boards.greenhouse.io/stripe reduces to stripe. Write greenhouse:stripe to pin one and skip the search.

A company can be on two at once. Palantir has 308 roles on Lever and 10 on SmartRecruiters. Both are jobs someone could apply for, so both are returned, and platformsFound says where each came from.


Salary, which is the part nobody else gives you

1,430 of 2,590 postings in one run carried a pay figure. Coverage depends entirely on the platform:

PlatformPay coverageHow it is carried
Ashby85–98%A structured field. OpenAI 621/734, Ramp 130/136
Lever~75%Stated in the description text
Greenhouse3–53%Description only, and most boards say nothing

Every figure is normalised: salaryMin, salaryMax, salaryCurrency, salaryPeriod, plus annualisedMin / annualisedMax so an hourly rate and a yearly one sort on one scale. salaryRaw keeps the exact text it was read from, so a surprising number can be checked against its source, and salarySource says whether it came from a field or from prose.


What you get

Per roletitle, department, team, location and every other location it is open in, isRemote, workplaceType, country, employmentType, the full salary block, hasEquity, postedAt, daysSincePosted, jobUrl, applyUrl, jobId, and the description on request.

Per company — which platforms it was found on, jobs returned, pay coverage, median salary and its currency, remote count, postings in the last 7 and 30 days, top departments, top locations, countries, newest posting.

Three ready-made views: Open roles, Pay data, Company summary.


Who this is for

  • Sales and GTM — hiring is a buying signal. Five new AE openings means a team expanding; postedLast7Days and topDepartments are that signal.
  • Recruiters and job boards — a clean feed with stable jobIds to diff on.
  • Compensation benchmarking — real ranges by title, company and location, from the source rather than self-reported.
  • Candidates and career tools — filter by remote, department and a salary floor across every company you care about.

Input

{
"companies": ["stripe", "databricks", "openai", "ramp"],
"keywords": ["engineer"],
"excludeKeywords": ["intern", "manager"],
"remoteOnly": true,
"requireSalary": true,
"minSalary": 180000
}

That run returns 115 roles out of 2,238 — every one remote, priced, and paying over the floor.

OptionDefaultNotes
companiesToken or careers URL. greenhouse:stripe pins a platform
platformsall fourNarrow it if you already know where a company posts
keywords / excludeKeywordsTitle, department, team, and description when included
departmentsSubstring: Engineering catches Engineering - Pipeline
locationsMatches any location a role lists; remote matches the flag
remoteOnlyfalse
postedWithinDaysUndated postings are kept
minSalaryAgainst the top of the range; unpriced roles kept
requireSalaryfalseDrops unpriced roles instead
includeDescriptionfalseMost of the payload. Pay is read either way
maxJobsPerCompany1000

Six things worth knowing

Each was found by running against live boards.

A company's board can be found without knowing its platform, and the search is cheap. All four are asked at once and a fake name cleanly finds nothing. What it cannot do is find a company on Workday or Taleo, which between them hold most large-enterprise hiring and publish nothing readable. Visa returns 2 roles because that is genuinely all it lists on SmartRecruiters; the rest are on Workday. A summary row with errorCode: NO_BOARD means the token was not found, not that nobody is hiring — those two are never blurred.

Choosing one board per company was wrong twice over. Palantir came back with 10 roles when it has 308, because the router picked whichever platform reported more and the probes were not measuring the same thing — Lever has no count endpoint, so asking for one posting reported a board of 308 as holding one, while SmartRecruiters reports its true total regardless. Rather than fix the comparison, the comparison is gone: every board that answers is read and merged.

Greenhouse hides pay in prose, and asking for jobs without prose used to discard it. The description was only fetched when the caller wanted descriptions in the output, which silently threw away the pay for 1,368 postings in one run. It is now always fetched and only dropped from the output, taking coverage from 9% to 55%.

A job description is full of money that is not salary. Greenhouse gave up $500M — the funding round. Lever gave up contract values in excess of $0.5M. Both are plausible annual figures. Millions are refused outright, because salaries are written $257K and never $0.257M.

Benefits did more damage than funding ever did. "Competitive compensation, 100% employer match on 401k contributions up to 10% (cap at $10,000)" names compensation, sits beside the pay talk, and reads as a $10,000 salary. It mispriced 41 of 80 roles at one company. Benefits vocabulary is now excluded before pay context is even considered.

Greenhouse escapes its descriptions twice. A pay range is three spans with — between them, and the whole thing is entity-encoded again on the way out, so the separator arrives as —. Decode once and the literal text mdash; survives, which is not a dash, so no range ever matches and the single-value fallback takes the bottom of it — 427 of 800 Databricks salaries understated by the full width of their own range. Decoding twice turned 0 ranges into 423.


Output

{
"recordType": "job",
"company": "Databricks",
"platform": "greenhouse",
"title": "Senior Software Engineer - Data Platform",
"department": "Engineering",
"location": "San Francisco, CA",
"allLocations": ["San Francisco, CA", "Seattle, WA"],
"isRemote": false,
"salaryMin": 145700, "salaryMax": 200300,
"salaryCurrency": "USD", "salaryPeriod": "year",
"annualisedMin": 145700, "annualisedMax": 200300,
"hasEquity": true,
"salaryRaw": "$145,700 — $200,300",
"salarySource": "description",
"daysSincePosted": 3,
"jobUrl": "https://boards.greenhouse.io/databricks/jobs/..."
}

Set flattenOutput: true for CSV.


Honest limits

  • Four platforms, not the whole market. Greenhouse, Lever, Ashby and SmartRecruiters publish openly. Workday and Taleo do not, and Teamtailor wants an API key. A company on those returns NO_BOARD.
  • Most Greenhouse boards publish no pay at all. Stripe states a figure on 16 of 568 postings. That is Stripe's choice, not a parsing failure, and salaryCoverage reports it per company so you can see which is which.
  • A salary read from prose is a reading. salarySource tells you which figures came from a field and which from text, and salaryRaw shows the exact string, so anything surprising can be checked in one glance.
  • Annualising assumes 2,080 hours a year, twelve months, fifty-two weeks. It is only ever derived from a period the posting actually stated.
  • Ashby publishes no company name, so those rows carry the token you supplied rather than a display name. Greenhouse, Lever and SmartRecruiters give a real one.
  • postedAt is often missing on SmartRecruiters. Undated postings are kept when filtering on age, because an unknown date is not evidence a role is stale.
  • Companies not found, postings your filters removed, and postings already returned by another entry in your list are never charged.

Pricing

EventPriceWhen
Actor start$0.005Once per run
Company searched$0.006Per company found and read, including its summary
Job found$0.0012Per open role returned
Salary found$0.002Only when a pay figure was established

About $2.30 per 1,000 roles on a board where half publish pay. The 2,590-role run above costs $6.02. A daily watch on twenty companies is a few cents.

LinkedIn and Indeed scrapers charge more, fight anti-bot, and hand you no salary.


Tips

  • Run daily and diff on jobId. New ids are new openings; ids that vanish are roles filled or pulled.
  • Watch postedLast7Days per company. That is the hiring-signal number — a jump means a team is scaling.
  • topDepartments tells you what kind of growth it is. Five open sales roles and no engineers means something very different from the reverse.
  • Sort on annualisedMax to compare pay across hourly, monthly and yearly postings honestly.
  • Leave includeDescription off unless you need the text. It is most of the payload and costs you no pay data.