Dice Jobs Scraper - Tech Jobs by Keyword, No Login
Pricing
from $0.87 / 1,000 dice jobs
Dice Jobs Scraper - Tech Jobs by Keyword, No Login
Scrape Dice tech jobs in the US by keyword and location, no login. Type Full-time or contract and it becomes the code Dice's filters need. Each job has the title, company, location, remote or hybrid, employment type, first-posted date and apply URL. $0.90 per 1,000 jobs.
Pricing
from $0.87 / 1,000 dice jobs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Scrape Dice tech jobs in the US by keyword and location, with the apply link and no login: one row per job with the title, the company, where it is, whether it is remote or hybrid, the employment type, the date it was first posted and the URL you apply on. You can also hand it job URLs or job ids directly.
Dice's search filters take codes rather than the words printed on the cards. Ask its search
for "Full-time" and you get nothing back. This translates the everyday wording for you, so
Full-time, contract and corp-to-corp all work. One thing to plan around: rows are written when
the searches finish, so a run stopped partway through delivers no jobs.
| Input | Keywords and locations, or Dice job URLs and ids |
| Output | One row per job: title, company, location, workplace, employment type, first-posted date, apply URL |
| Ceiling | 1,000 jobs per run |
| Account needed | None, and no Dice login |
| Price | $0.90 per 1,000 jobs on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,500 |
🔍 What Dice Jobs Scraper does
Every query is run against every location, so three keywords and two cities is six searches. Each one pages through Dice's results up to the page limit you set, and stops early when a page brings nothing new.
Filters go into the Dice search, so the narrowing happens on their side rather than by throwing rows
away afterwards. Workplace type, employment type, Easy Apply and the today, 3d and 7d windows
all work that way. Dice stopped applying its 30-day window, so 30d is checked here against each
job's own posting date, and older jobs are left out and not charged.
employerTypes goes to Dice too: pick Direct Hire to skip agencies, or Recruiter for agency
roles only.
Every results page also lists a few similar jobs beside the results. They ignore your search and its filters, so they are always left out.
By default you get what the search card carries, which is fast. Switch on Fetch full details and each job's own page is opened for the complete description. That takes a request per job, so it is noticeably slower on a big run. With details on, the filters are checked a second time against the job page, because Dice cards sometimes label a job one way and the page another, and a job that turns out not to match is dropped rather than delivered.
📋 What data you get from each Dice job
| What you get | Field |
|---|---|
| Dice's id for the posting and the job page | jobId, url |
| Title and company | title, company |
| Where it is, and remote, hybrid or on site | location, workplaceType |
| Dice's employment label | employmentType |
| When the job was first posted, as a date | postedDate |
| The card's own age phrase | postedAt |
| The full job text, with full details on | description |
| The search that found it | searchQuery, searchLocation |
| Row markers | ok, _sample, _diagnostic, source |
▶️ How to scrape Dice jobs
- Open Dice Jobs Scraper and click Try for free.
- Put your keywords into Search queries and your cities into Locations. Use
Remoteas a location for remote roles. - Set Maximum jobs. Start around 50 to see the row shape.
- Narrow it with Posted date, Workplace and Employment types if you want, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Switch on Fetch full details when you need the description text. Leave it off when you only need titles, companies and apply links. Run it with nothing filled in and you get one free sample row instead of an error.
💰 How much does it cost to scrape Dice jobs?
$0.90 per 1,000 jobs on the Free plan. Paid plans pay a little less: $0.89 on Starter, $0.88 on Scale and $0.87 on Business. On the free plan, the $5 Apify gives you each month covers about 5,500 jobs.
You pay per job row delivered. The sample row, diagnostic rows, jobs already seen in the same run, jobs dropped by your filters and the similar jobs beside the results are all free, and turning on full details does not change the price. If you set a maximum cost for the run, it stops when that is reached.
📥 What you give it
{"searchQueries": ["python developer", "data engineer"],"locations": ["New York, NY", "Remote"],"employmentTypes": ["Full-time"],"postedDate": "7d","maxItems": 300,"includeDetails": true}
| Field | Default | What it is |
|---|---|---|
searchQueries | box starts at python developer | Keywords or job titles. |
locations | box starts at New York, NY | Cities, states, countries or Remote. Every query runs against every location. |
jobUrls | empty | Dice job-detail URLs, fetched directly instead of searched for. |
jobIds | empty | Dice job ids, same idea. |
postedDate | any | any, today, 3d, 7d or 30d, counted from when the job was first posted. Searches only, not job URLs or ids. |
workplaceType | any | any, remote, hybrid or onsite. |
employmentTypes | all types | FULLTIME, PARTTIME, CONTRACTS, THIRD_PARTY. Ordinary wording is translated. |
employerTypes | all | Direct Hire, Recruiter or Other: who posted the job, as Dice records it. Needs a search query. |
easyApply | off | Keep only jobs marked for easy application. |
includeDetails | off | Open each job page for its full description. |
maxItems | 100 | Unique jobs to return, up to 1,000. |
maxPagesPerSearch | 5 | Pages per query and location pair, up to 25. |
maxProxyRetries | 2 | How many more tries a page gets when it fails, up to 5. |
requestTimeoutSecs | 20 | Limit on each request, 5 to 60 seconds. |
countryCode | empty | Optional two-letter country code for the connection that retries go through. |
proxyConfiguration | none | Optional. Servers of your own are used exactly as given. |
📤 What you get back
A real row from a run on 2 October 2026:
{"ok": true,"_sample": false,"_diagnostic": false,"source": "dice","jobId": "7015377a-0d8c-4367-86c2-c8de29fa55b8","title": "Senior Python Developer","company": "Randstad Digital","location": "Jersey City, New Jersey","workplaceType": null,"employmentType": "Contract","postedAt": "Today","postedDate": "2026-09-28T21:04:03Z","description": null,"url": "https://www.dice.com/job-detail/7015377a-0d8c-4367-86c2-c8de29fa55b8","searchQuery": "python developer","searchLocation": "New York, NY"}
| Field | How to read it |
|---|---|
jobId | Dice's id for the posting. Use it to dedupe across runs. |
postedDate | When the job was first posted, as Dice records it: an ISO 8601 date and time in UTC. The 30d window checks this same date. Jobs you give by URL or id take it from the job's own page. null when Dice gives no posting date. |
postedAt | Dice's own wording, such as Today or 6d ago, counted from when Dice last updated the posting, so it can say Today on a job first posted weeks ago. The row above says Today on a job posted four days earlier. Search rows only. |
description | null on the row above because full details were off. With them on it holds the job page text, up to 50,000 characters. |
workplaceType | remote, hybrid, on-site or null. Read from the card unless full details are on. |
employmentType | Dice's display label, such as Contract or Full-time. With full details on it comes from the job page, which is the more reliable of the two. |
searchQuery, searchLocation | Exactly what you typed for the search that found this job, so you can join rows back to your own list. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A job | _sample: false and _diagnostic: false | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Filter on _sample and _diagnostic, not on ok. The sample row carries ok: true as well.
To sort or filter by age, use postedDate, not postedAt.
| Code | What it means |
|---|---|
BAD_INPUT | Every URL or id you gave was unusable, and there was no search query to fall back on. Or employerTypes held a value Dice does not use, or was set without a search query. |
NO_RESULTS | The first page of that search was empty, or with 30d none of its jobs was posted in the last 30 days. The row names the query and location, so the other searches in the run carry on. |
NOT_SERVED | This job was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
RATE_LIMITED | Too many requests too quickly. |
SERVER_ERROR | Dice answered with a server error. Usually passes. |
TIMEOUT | A request ran past requestTimeoutSecs. |
PARSE_ERROR | The page came back in a shape the parser did not recognise. Worth reporting. |
NETWORK | Dice was unreachable. Re-run it. |
PROXY_GROUP_IGNORED | The input asked for something this actor does not offer, so it was ignored and the run carried on. |
One failed search never stops the others, and a diagnostic row never fails the run.
💡 What people use it for
- Watching a role and a city on a schedule, with
postedDateontodayso each run is only new postings. - Pulling contract and corp-to-corp roles separately from permanent ones.
- Building a list of companies hiring for a skill, then working the list rather than the jobs.
- Feeding descriptions into a model that has to match candidates to postings, with full details on.
- Checking what a competitor is hiring for, by searching their name as a keyword.
🚧 What it does not do
- US tech roles. That is what Dice is. It is not a general job board.
- No salary field. Dice does not publish one consistently, so there is nothing reliable to give you.
- No guessed dates. If Dice gives no posting date for a job,
postedDateisnull. - Reposts are not merged. A job relisted under a new id looks like a new job, because to Dice it is one.
- Workplace type from a card is inferred from the card's wording, so a title with "Remote" in it can be read as a remote job. Turn on full details when that distinction matters.
- The 30-day window is ours, not Dice's. Each job's
postedDatedecides, whatever its card says. - 1,000 jobs per run.
- Nothing is delivered until the searches finish. A run stopped partway through writes no job rows.
- No applying, no contact details, no recruiter emails.
- It is not an official Dice tool. Dami's Studio is independent and is not affiliated with or endorsed by Dice, or by any other company named on this page.
🧭 Which job scraper do you need?
| If you want | Use |
|---|---|
| US tech jobs from Dice, with the apply link | This one |
| US and Canada tech jobs, with skills, seniority and the exact posted time | Built In Jobs Scraper |
| US jobs with the employer's pay kept apart from estimates | ZipRecruiter Scraper |
| Public LinkedIn jobs by keyword and location | LinkedIn Jobs Scraper |
| Startup jobs with salary and equity | Wellfound Jobs Scraper |
| Every open job at companies you name, read from their own hiring system | Career Site Jobs Scraper |
❓ Questions people ask
Do I need a Dice account?
No. It reads the public search and the public job pages.
Can I filter on contract or corp-to-corp roles?
Yes. Type the label you know into employmentTypes, such as contract or corp-to-corp, and it is
converted into the code Dice's search expects before the request goes out.
Why is description empty?
Full details were off, and card previews frequently carry no usable text. Switch on Fetch full details: it adds a page fetch per job and makes a large run much slower, though it does not change what you pay.
Can I get just one job?
Yes. Paste its URL into Direct job URLs, or its id into Direct job IDs.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/dice-jobs-scraper. Either way the run
happens on your Apify account at the same price.
Is scraping Dice legal?
These are public postings on public pages. Job ads can contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the query and location you used. The
errorCode on the diagnostic row usually names the problem on its own.