Dice Jobs Scraper - US Tech Jobs with Parsed Salary
Pricing
from $2.00 / 1,000 job returneds
Dice Jobs Scraper - US Tech Jobs with Parsed Salary
Scrapes Dice tech job listings into a clean schema with exactly parsed salary, normalised regions, employment type and ghost-job risk scoring on every row.
Pricing
from $2.00 / 1,000 job returneds
Rating
0.0
(0)
Developer
Dave Fergins
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Dice Jobs Scraper
Scrapes Dice tech job listings into a clean schema with exactly parsed salary, normalised regions, employment type and ghost-job risk scoring on every row.
Why this board is different from the others here
Dice states salary properly, and almost nobody else does. Most job boards publish a free-text blob and leave you to guess whether "$60 - $70" is per hour or per year. Dice publishes the currency and the period explicitly — USD 119,000.00 - 146,000.00 per year, USD 27.52 per hour — which makes these the best-specified salaries of any source in this family.
This Actor parses them to the cent. That is not a detail: on an hourly contract rate, rounding 27.52 to 28 overstates a year's pay by roughly a thousand dollars, and filtering on a wrong number is worse than filtering on none. Where Dice renders a rate without stating a period, the numbers are deliberately left unparsed rather than guessed at, and you still get the original text in salaryRaw.
Access is by the paths Dice allows. Dice's robots.txt disallows keyword search (/jobs?q*) and explicitly allows /jobs and /job-detail. This Actor reads only the allowed paths, identifies itself honestly in its User-Agent, and does not spoof a browser or defeat a bot check. That is a deliberate constraint, and it is why there is no keyword parameter that filters at the source — filtering happens on the rows after they arrive.
Measured on live data 2026-08-15: 327 listings at the default page budget, with 100% company, posted-date and description coverage and 96% of rows resolving to a hiring region. Roughly half carry a published salary.
Dice is a US tech board and most roles are on-site or hybrid. Remote is reported from the board's own isRemote flag and workplace types, and a listing counts as remote only when Dice says so — never merely because it failed to say otherwise.
What each row contains
| Identity | stable id across runs, posting URL, direct applyUrl where published |
| The role | title, company, plain-text description, tags, employment type, seniority |
| Where | remote flag, the board's own location text, and normalised regions (worldwide / usa / canada / latam / uk / europe / apac / africa / middle_east) |
| Pay | min, max, currency and period as numbers, annualised on request |
| When | posted date, expiry where published, age in days |
| Trust | freshness 0-1, ghostRisk low/medium/high, and ghostReason explaining the verdict in plain words |
The trust fields
Job boards are full of postings still published but no longer open — filled roles left up for pipeline, evergreen "talent pool" adverts, and listings nothing ever expires. Every row here carries a risk band and the reasons behind it:
{"title": "Senior Backend Engineer","company": "Acme","freshness": 0.71,"ageDays": 10.4,"ghostRisk": "low","ghostReason": ["recent, and nothing contradicts it"]}
Signals come from what the board actually publishes: age, its own expiry date where there is one, missing application links, and evergreen phrasing. Nothing is inferred by a model. Freshness decays on a 21-day half-life, and a posting with no date scores 0.5 rather than 1.0 — absence of evidence is not evidence of freshness.
Example input
{"query": ["golang", "backend"],"regions": ["usa"],"seniority": ["senior", "lead"],"maxAgeDays": 21,"maxGhostRisk": "low","maxItems": 200}
Everything is optional — run it empty and you get the whole board, best-first.
- Search terms are OR-ed.
["go", "rust"]returns jobs mentioning either. - Worldwide jobs match every region filter, because a job open to everyone is open to you.
minSalaryis annualised first, so hourly and monthly rates compare correctly.maxItemsis your cost ceiling — you are billed per job returned.
Output
One dataset item per job, ordered best-first: lowest ghost-job risk, then freshest. Export as JSON, CSV or Excel, or read it from the API like any Apify dataset.
How it fetches
Dice publishes no open API, so this Actor reads its server-rendered listing pages — but only the paths robots.txt allows (/jobs, /job-detail), never the ones it disallows (/jobs?q*, /jobsearch/). Requests are paced, budgeted and sent with an honest user agent. No browser spoofing, no bot-check evasion, no personal data. Job adverts only.
Want more than one board?
Remote Jobs Aggregator runs this same pipeline across six boards at once — Remote OK, Remotive, Himalayas, Arbeitnow, We Work Remotely and Jobicy — folding duplicates and recording which boards carry each job.
Measured while building it: those six boards barely overlap. Only 1 of 1,513 company+title pairs appeared on more than one. The aggregator is not about removing duplication — there is almost none — it is about getting six boards' worth of distinct jobs from one call.