Dice Jobs Scraper – Pay Per Job, No Browser avatar

Dice Jobs Scraper – Pay Per Job, No Browser

Pricing

from $2.80 / 1,000 jobs

Go to Apify Store
Dice Jobs Scraper – Pay Per Job, No Browser

Dice Jobs Scraper – Pay Per Job, No Browser

Scrapes Dice.com job postings (US tech jobs) over plain HTTP. Input: queries plus optional location, posted date, employment, workplace and employer filters. Output per job: id, title, company, location, salary, dates and, with fetchDetails, description, skills and apply URL. $4 per 1,000 jobs.

Pricing

from $2.80 / 1,000 jobs

Rating

0.0

(0)

Developer

Ivan Alexeev

Ivan Alexeev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Security

Limited permissions

Share

What does Dice Jobs Scraper do?

It collects job postings from the Dice.com job search (dice.com/jobs), the US job board for software, data, cloud, security and other tech roles, for the queries you give it, optionally limited to a location, a posting period, an employment type, a workplace type, an employer type or Easy Apply postings. For each job you get:

  • Title, company, company profile link, logo, location (city, state, country) and whether the job is remote, hybrid or on-site
  • Employment type (Full-time, Contract, Third Party, …), employer type (direct hire or recruiter), the salary text as the employer wrote it, the posting and last-modified dates and the card summary
  • With Fetch job pages on: the full description (plain text and HTML), the skills list, the structured salary range, the apply URL on the employer's site or the apply e-mail, the position id, the employer's Dice id and the posting's expiry date
  • A stable jobId plus the search metadata: query, rank in the search, total results and the location Dice actually searched

It is made for recruiters and staffing agencies watching the US tech market, job boards and aggregators that need fresh Dice postings, salary and skills researchers, and anyone who wants a daily CSV of new jobs for a few search terms.

Why this Dice scraper?

  • No browser. Dice renders its search and job pages on the server, so the scraper reads them with plain HTTP requests. Ten jobs with full details take a few seconds on 256 MB of memory.
  • Datacenter proxy by default. The pages are served to Apify's default datacenter pool, so the platform cost per job is a fraction of a cent. Residential proxy stays available as an option.
  • Pay per job, nothing else. You pay for jobs written to the dataset plus one actor-start event of $0.00005 per run. Failed requests, duplicates and empty searches cost nothing.
  • Honest failures. If every search fails the run fails, so a scheduled job can't quietly return nothing. Pages without the expected markup are saved as DEBUG_*.html in the run's key-value store.

How to use it

InputDescription
queriesJob searches as typed on dice.com, one search per entry, up to 100. Example: ["python", "data engineer"].
locationOptional free text such as "Austin, TX, USA", "New York, NY" or "USA". Empty means all of Dice.
maxItemsPerSearchUnique jobs per query (1–750). Dice serves at most 25 pages of 30 jobs per search.
fetchDetailsOpen every job page for the description, skills, salary range, apply URL and the other detail fields. Default on.
postedDateONE (today), THREE (last 3 days) or SEVEN (last 7 days).
employmentTypeFULLTIME, PARTTIME, CONTRACTS or THIRD_PARTY.
workplaceTypeOn-Site, Hybrid or Remote.
employerTypeDirect Hire, Recruiter or Other.
easyApplyOnly postings that take applications on Dice itself.
maxConcurrency, maxRetriesParallel requests (1–5) and attempts per page (1–3).
proxyConfigurationApify Proxy, datacenter pool by default.
{
"queries": ["python", "data engineer"],
"location": "Austin, TX, USA",
"maxItemsPerSearch": 100,
"fetchDetails": true,
"postedDate": "SEVEN",
"workplaceType": "Remote"
}

Each filter takes a single value per run, as on the site. To cover both Contract and Full-time, run two tasks.

Output fields

FieldTypeNotes
jobId, diceIdstringDice's UUID of the posting (stable across runs) and the 32-character legacy id
url, title, companyNamestringAlways filled; url is the job page on Dice
companyProfileUrl, logoUrlstring or nullCompany profile on Dice and logo image
location, city, state, countrystring or nullAs shown on the card, e.g. McLean, Virginia, USA; null for remote-only postings
isRemote, workplaceTypesboolean, arrayRemote flag and the workplace types the posting allows: On-Site, Hybrid, Remote (may list several)
employmentType, employerTypestring or nullAs on the site, e.g. Contract, Third Party and Direct Hire, Recruiter or Other
easyApplyboolean or nullTrue when the application runs on Dice; null when the site did not say
salarystring or nullFree text as the employer wrote it, e.g. $63 - $65 per hour or Depends on Experience; null when the card shows none
postedAt, modifiedAtstringISO 8601 timestamps of the posting and its last update
summary, scorestring or null, numberThe card's excerpt and Dice's relevance score
description, descriptionHtmlstring or nullFull description as text (lists as - bullets) and as HTML; job page only
skillsarraySkills the employer tagged; empty without the job page
baseSalaryobject or null{currency, min, max} from the posting's structured data; a single amount gives min == max; null when the employer stated none; job page only
validThroughstring or nullWhen the posting expires; job page only
applyType, applyUrl, applyEmailstring or nullExternal with the employer's apply URL, or Internal (Easy Apply) with an e-mail when the employer gave one; job page only
positionId, employerDiceIdstring or nullThe employer's own reference and its Dice id; job page only
detailErrorstring or nullSet when the job page could not be fetched or parsed, or the job was removed; the card fields are still filled
query, position, totalResultsstring, integer, integerThe query, the job's rank in that search (1 = first) and Dice's result count
searchedLocation, locationPrecisionstring or nullHow Dice geocoded your location text, e.g. Austin, TX, USA with precision City
scrapedAtstringISO 8601 UTC
{
"query": "python",
"position": 1,
"totalResults": 29060,
"searchedLocation": "United States",
"locationPrecision": "Country",
"jobId": "56bfa0f0-8d70-4033-8bde-f962d9919761",
"url": "https://www.dice.com/job-detail/56bfa0f0-8d70-4033-8bde-f962d9919761",
"title": "Full-stack Engineer 4 (Manager, IC - Python, JavaScript/TypeScript)",
"companyName": "Capital One",
"location": "McLean, Virginia, USA",
"isRemote": false,
"workplaceTypes": ["On-Site"],
"employmentType": "Full-time",
"employerType": "Direct Hire",
"salary": "USD 197,300.00 - 225,100.00 per year",
"postedAt": "2026-10-02T21:02:28Z",
"skills": ["Microservices", "Python", "TypeScript"],
"baseSalary": {"currency": "USD", "min": 197300, "max": 197300},
"applyType": "External",
"applyUrl": "https://www.capitalonecareers.com/job/-/-/234/101404679360",
"description": "Do you love building and pioneering in the technology space? …",
"scrapedAt": "2026-10-30T16:20:21Z"
}

How much does it cost to scrape Dice jobs?

You pay per job written to the dataset. Platform usage (compute and the datacenter proxy) is included in that price; without a browser it amounts to a few cents per thousand jobs anyway.

PlanPrice per 1,000 jobs
Free$4.00
Starter (Bronze)$3.60
Scale (Silver)$3.20
Business (Gold) and above$2.80

Each run also charges $0.00005 for the actor start. Example: 1,000 jobs with full details on the free plan cost $4.00 for the jobs plus $0.00005 for the start; the few cents of platform usage for the roughly 1,035 requests are already covered. Set a maximum total charge on the run and the scraper stops once it is used up: it checks the remaining budget before every search page and every job page.

Use the data in Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("murmuring_headlamp/dice-jobs-fast").call(
run_input={"queries": ["data engineer"], "location": "Austin, TX, USA", "maxItemsPerSearch": 100}
)
jobs = client.dataset(run["defaultDatasetId"]).list_items().items

FAQ

Why do I get at most 750 jobs per query? Dice serves 25 pages of 30 jobs and answers any deeper page with page 25 again, so the scraper stops there. To go deeper, split the search: one query per city or state, per posting period (postedDate) or per employment type, and merge on jobId.

My location gave results from the whole country. Dice geocodes the location text on its servers and falls back to a wider area when it does not recognise the text. Check searchedLocation and locationPrecision (City, Country, …) in the output and use the spelling Dice suggests, such as Austin, TX, USA.

Why is salary missing or so varied? It is the free text the employer typed on the card ($63 - $65 per hour, Depends on Experience), and many postings have none. baseSalary from the job page is the structured amount when the employer gave one.

Why is applyUrl empty? It is filled only for applyType: "External", where the application runs on the employer's site. Easy Apply postings (Internal) keep candidates on Dice; the job url is the place to send them, and applyEmail is set when the employer listed one.

The card said "posted 2 days ago" but postedAt is older. The relative date on the search card tracks the last update of the posting, which is modifiedAt. postedAt is the original posting date from the data behind the card.

A job page failed. The item keeps its search card fields and detailError says why, for example a posting removed between the search and the fetch. Such items are still charged, since the job was found.

Is it legal? The scraper reads public job postings, does not log in and collects no candidate data. It is not affiliated with Dice or DHI Group. Respect the site's terms and robots rules, and you are responsible for how you use the results.

This Actor is not affiliated with Dice or DHI Group.