Piotr VassevPiotr Vassev

How to Scrape Dice Jobs for a Focused Hiring-Market Sample

A search for senior frontend developers can return recruiters, adjacent engineering roles, and jobs whose remote flags disagree. The useful output is a reviewed hiring sample, not a raw count of every match.

The Dice.com Jobs Scraper collects US tech-job results by keyword and state, including salary text, employer type, location, and summaries. I maintain it. This guide builds a 30-job Texas sample and shows how to separate direct employers from recruiter postings.

How to Scrape Dice Jobs for a Focused Hiring-Market Sample

Run a role-and-state search

An Actor is a tool hosted on Apify. Open this Actor with your Apify account, select JSON in Input, and enter:

{
  "search": "Senior Frontend Developer",
  "stateCode": "TX",
  "maxResults": 30
}

Both search and stateCode are required. Use the two-letter US state code, such as TX or CA. The state is a search condition, not proof that every remote listing is open to applicants living there.

maxResults must be at least 1 when supplied; leaving it out removes the limit. Keep it explicit for a trial. Click Start, wait for completion, and inspect the titles and jobLocation values in the dataset. A narrow search can return fewer than thirty jobs, while a broad one can return irrelevant matches.

Pricing as of September 6, 2026: $0.001 per returned job. Thirty jobs cost $0.03 in result fees. The current event configuration has no separate Actor-start charge. Check the pricing page before running larger searches.

Why the remote fields need a second look

An abbreviated historical README record includes:

{
  "title": "Sr. JavaScript/TypeScript Developer - ArcGIS Excalibur",
  "companyName": "Esri",
  "salary": "USD 118,976.00 - 194,688.00 per year",
  "employmentType": "Full-time",
  "employerType": "Direct Hire",
  "workFromHomeAvailability": "FALSE",
  "isRemote": true,
  "workplaceTypes": ["Remote"],
  "jobLocation": null
}

The remote signals conflict. Do not let workFromHomeAvailability overwrite the other fields simply because it looks like a Boolean; it is a string in this sample. Put the record in a “check remote eligibility” group, then open detailsPageUrl to read the actual location restrictions.

The README's other example is a recruiter listing whose title says Hybrid while workplaceTypes says On-Site. These are source-data inconsistencies that a spreadsheet filter cannot settle. Preserve the evidence and resolve it on the posting.

Dice job dataset with employers and workplace fields

Historical Dice results illustrate the employer and workplace fields used for review.

Produce a useful employer comparison

Export CSV with id, title, companyName, employerType, employmentType, salary, jobLocation, isRemote, workFromHomeAvailability, detailsPageUrl, and postedDate. Use JSON if you want to retain workplaceTypes as an array. Add the collection date yourself for the research log.

First deduplicate by id. Then review titles and summary for the role you actually want. A principal .NET engineer is not automatically part of a senior frontend sample because both appeared in the same search. Record exclusions so you can use the same scope next time.

Separate employerType = Recruiter from direct-hire postings before counting companies. A staffing firm advertising several jobs may represent several clients, while several staffing firms may advertise the same underlying vacancy. Report posting counts and identified employers separately; neither proves the number of people a company plans to hire.

For salary comparisons, parse bounds, currency, and pay period into separate columns. The explicit annual USD range in the sample is usable for an annual-salary group. A bare 150k - 180k needs confirmation of the period and currency. Do not combine hourly contracts and annual full-time roles into one average.

Use postedDate to describe when the source says the job was posted, and keep modifiedDate separate where available. A modification is not necessarily a new vacancy.

Resolve missing and misleading fields

The returned summary can be truncated. Treat it as a relevance preview, then use detailsPageUrl for the requirements that decide inclusion. willingToSponsor is a listing flag, so confirm sponsorship terms before relying on it for an application decision.

If a run is empty, check the state code and broaden the job title while retaining the small limit. If only location is missing, inspect the remote fields instead of dropping the row immediately.

After the sample is clean, save a task with the same query and state. Compare new IDs against your earlier export, but review possible reposts with a new ID. For known LinkedIn postings that need structured salary and company fields, follow the LinkedIn job-details guide.

The Node.js example shows how to run this Actor from code and retrieve its dataset.

Earlier video walkthrough

The video shows the earlier interface. Use the input names and pricing in this guide.

Frequently asked questions

Does Dice output always include the full job description?

The documented output contains a summary that can be truncated. Follow detailsPageUrl to verify complete requirements and eligibility.

How should I handle conflicting remote-work fields?

Keep isRemote, workplaceTypes, workFromHomeAvailability, title, and location together. Flag disagreements and check the job page before classifying eligibility.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn