Dice Jobs Scraper: US Tech Jobs, Salaries, Remote and Visa
Pricing
from $0.55 / 1,000 jobs
Dice Jobs Scraper: US Tech Jobs, Salaries, Remote and Visa
Scrape Dice.com US tech jobs by keyword and location: title, company, city and state, remote or hybrid, employment type, salary with parsed range, posted date, easy apply, visa sponsorship and link. Optional full description and skills. Only new jobs mode for schedules. No login.
Pricing
from $0.55 / 1,000 jobs
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
11 days ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Why choose this actor?
- Fast and complete. Dice serves 100 jobs per request, and this actor asks for full pages: our final test run returned 400 of 400 jobs from two searches in 7.4 seconds with 4 requests, and a single search returned 2,000 jobs in 32 seconds. You never wait for a browser to load.
- Every filter Dice offers, applied by Dice. Location with a radius in miles, remote, hybrid or on-site, full time, part time, contract or third party (C2C), posted today, in 3 or in 7 days, direct hire or recruiter, easy apply and visa sponsorship. In a test with five filters at once, 0 of 15 rows broke a filter.
- Pay as numbers, and only new jobs on a schedule. Besides the pay text exactly as the employer typed it, every row with an amount gets
salary_min,salary_max, the currency and the period (hour or year). WithonlyNewJobson, a repeat run delivers and charges only jobs it has not delivered before: our second test run found 0 new jobs and charged 0.
Part of The Mine Works Jobs and hiring family: Foundit Monster India Jobs, Hirist Jobs Scraper, India Jobs MCP, Naukri Jobs Scraper, Shine.com Jobs Scraper, Internshala Scraper.
Try it in one minute
Paste this into the input (JSON view) and press Start. It returns 20 software engineer jobs from Dice in about 5 seconds:
{"keywords": ["software engineer"],"maxJobs": 20}
keywords takes job titles, skills or company names, one per line; each keyword is its own search. locations takes US cities, states or ZIP codes as you would type them on Dice (Austin, TX, New York, NY, Seattle), searched within radius miles; leave it empty for the whole United States. An empty keywords list returns every job that matches the filters.
On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit
Copy to your AI assistant
themineworks/dice-jobs-scraper on Apify. Scrapes US tech job listings from Dice.com, one row per job with title, company, city and state, remote/hybrid/on-site, employment type, employer type, salary text plus parsed min, max, currency and period, posted date, easy apply, visa sponsorship and link, with optional full description and skills. Call ApifyClient("TOKEN").actor("themineworks/dice-jobs-scraper").call(run_input={"keywords": ["python developer"], "locations": ["Austin, TX"], "maxJobs": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: none (default keywords ["software engineer"], whole US). Optional: keywords (list; empty list = all jobs), locations (list of US cities, states or ZIP codes), radius (miles, default 30), workplaceTypes (remote, hybrid, onsite), employmentTypes (full_time, part_time, contract, third_party), postedWithin ("today", "3days", "7days"), employerTypes (direct_hire, recruiter, other), easyApplyOnly (bool), visaSponsorshipOnly (bool), sortBy ("relevance" or "newest"), maxJobs (default 100, 20 to 10000 per search), includeDescription (default false), onlyNewJobs (default false). Full spec: GET https://api.apify.com/v2/acts/themineworks~dice-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- 35 fields per job, 5 more with descriptions: title, company with its Dice company id and page, city, state and state code, workplace type, employment type, employer type, easy apply, visa sponsorship, posted, first live and last updated dates, pay text with parsed range, a 500 character summary, the link, and the keyword, location and rank that found it.
- Full description on demand: switch on
includeDescriptionfor the whole description as plain text, the skills list Dice shows, the closing date, the postal code and whether you apply on Dice or on the employer's site. - Every Dice filter: location and radius, remote or hybrid or on-site, four employment types, posted date, employer type, easy apply, visa sponsorship, and best match or newest first.
- From 20 to 10,000 jobs per search, 100 per page. Dice serves the first 10,000 results of any search, so the actor never asks past them. Each keyword in each location is its own search; three run at a time, and pages are fetched three at a time.
- No double charging: a job found by two keywords, or listed twice while the results shift, is delivered and charged once.
- A run summary you can audit: the
OUTPUTrecord lists every search's status, the number of jobs Dice has for it, how Dice read the location, pages read, attempts, repeats skipped and the success rate per request type.
How to use it
Basic: one keyword in the whole US
{"keywords": ["data engineer"],"maxJobs": 100}
Several keywords, newest first
Each keyword is its own search: this input is 2 searches of up to 200 jobs, 400 jobs in all (our final test run, 7.4 seconds):
{"keywords": ["python developer", "devops engineer"],"maxJobs": 200,"sortBy": "newest"}
Several cities with full descriptions
Each keyword is searched in each city, within 30 miles by default. This is our description test: 60 jobs from Chicago and Dallas in 22.8 seconds, 59 with the full description and skills (one job was taken down while the run read it):
{"keywords": ["java developer"],"locations": ["Chicago, IL", "Dallas, TX"],"maxJobs": 30,"includeDescription": true}
Job: daily alerts for remote contract roles
Remote only, contract or C2C, posted in the last 3 days, newest first, and only jobs not delivered before. Save it as a task and add a daily schedule (Console > Schedules); each run returns only the jobs that appeared since the last one, and a run with nothing new charges nothing but the start fee.
{"keywords": ["data engineer", "cloud architect"],"workplaceTypes": ["remote"],"employmentTypes": ["contract", "third_party"],"postedWithin": "3days","sortBy": "newest","maxJobs": 200,"onlyNewJobs": true}
Job: visa sponsorship jobs for international candidates
Only jobs whose employer marked them as willing to sponsor a work visa, posted in the last week:
{"keywords": ["software engineer", "machine learning"],"visaSponsorshipOnly": true,"postedWithin": "7days","maxJobs": 500}
Job: salary benchmarking for one role in several metros
Full time roles from direct employers in three metros, with salary_min, salary_max and salary_period ready to compare. About half of Dice jobs carry an amount (50% in our test run); the rest say "Depends on Experience" or similar.
{"keywords": ["devops engineer"],"locations": ["San Francisco, CA", "Austin, TX", "New York, NY"],"radius": 50,"employmentTypes": ["full_time"],"employerTypes": ["direct_hire"],"maxJobs": 300}
Job: who is hiring through recruiters in one state
Leave keywords empty for every tech job in an area, then count by company to see which staffing firms post the most:
{"keywords": [],"locations": ["Texas"],"employerTypes": ["recruiter"],"postedWithin": "7days","maxJobs": 2000}
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
keywords | array of strings | ["software engineer"] | Job titles, skills or companies, one per line. Each is its own search in every location. An empty list returns all jobs that match the filters. |
locations | array of strings | empty | US cities, states or ZIP codes as typed on Dice, for example Austin, TX, Texas or 78701. Each keyword is searched in each location. Empty means the whole United States. |
radius | integer | 30 | Miles around each location, 1 to 200. Ignored without a location. |
workplaceTypes | array | all | remote, hybrid, onsite. Jobs with any of the chosen types. |
employmentTypes | array | all | full_time, part_time, contract, third_party (C2C or staffing). |
postedWithin | string | any time | today, 3days or 7days. |
employerTypes | array | all | direct_hire, recruiter, other. |
easyApplyOnly | boolean | false | Only jobs you can apply to on Dice with one click. |
visaSponsorshipOnly | boolean | false | Only jobs marked as willing to sponsor a work visa. |
sortBy | string | relevance | relevance (best match) or newest. |
maxJobs | integer | 100 | Most jobs per search (one keyword in one location), 20 to 10,000. Also the most you pay for per search. |
includeDescription | boolean | false | Adds the full description, skills, closing date, postal code and apply type from each job's page. One extra request per job. |
onlyNewJobs | boolean | false | Skips jobs an earlier run of this actor in your account already delivered. For schedules; works best with sortBy: "newest". |
What data do you get?
One row per job. A job found by two keywords or two locations is delivered once.
The job: job_id, dice_id, title, employment_type, employer_type, easy_apply, visa_sponsorship, work_from_home, is_featured, description_short, job_url.
The company: company, company_id, company_profile_id, company_url (its page on Dice), company_logo_url.
Where and how: location, city, state, state_code, country_code, workplace_type (remote, hybrid, onsite, comma separated when the employer chose several), is_remote.
When: posted_at (posted or last reposted), first_active_at (first went live), updated_at.
Pay: salary_text (exactly as the employer typed it), salary_min, salary_max, salary_currency, salary_period (hour or year, or month, week, day when the text says so).
With includeDescription: description (plain text), skills (the list Dice shows on the job page), valid_through (closing date), postal_code, apply_type (internal for apply on Dice, external for the employer's site), and description_error on a row whose page could not be read.
The search: search_keyword, search_location, search_rank, scraped_at.
How full the fields were in our final test runs (400 jobs from two US wide searches; 60 jobs with descriptions from Chicago and Dallas):
| Field | Filled | Why not always |
|---|---|---|
job_id, title, company, company_url, location, employment_type, employer_type, easy_apply, visa_sponsorship, posted_at, description_short, job_url | 100% | |
state, state_code | 99% | A few jobs give only the country. |
workplace_type | 97% | A few employers leave it unset. |
city | 94% | Some jobs give only a state. |
company_profile_id | 88% | Only companies with a Dice profile. |
salary_text | 80% | Some employers leave pay empty. |
salary_min, salary_max, salary_period | 50% | Pay text without an amount, such as "Depends on Experience" or "DOE", gives no numbers. |
description, valid_through, postal_code, apply_type | 98% of 60 | With includeDescription on; one job was taken down mid run. |
skills | 90% of 60 | Only when Dice lists skills for the job. |
Stable fields for automations
These fields were present in every row of our test runs and their names will not change:
| Field | Meaning |
|---|---|
job_id | Dice job id, the one in the job link, stable across runs |
title | Job title |
company | Company name as Dice shows it |
company_id | Dice company id |
location | Location as Dice shows it, for example Austin, Texas, USA |
country_code | US |
is_remote | True when the job can be done remotely |
employment_type | For example Full-time or Contract, Third Party |
employer_type | Direct Hire, Recruiter or Other |
visa_sponsorship | True when the employer will sponsor a visa |
posted_at | When the job was posted or reposted, ISO 8601 UTC |
job_url | Link to the job on Dice |
search_rank | Position of the job in its search |
scraped_at | When the job was read, ISO 8601 UTC |
Output examples
Real rows from our test runs in October 2026, trimmed for length.
A yearly salary read into numbers (search "devops engineer", whole US):
{"job_id": "01f3d0fe-79ae-4782-9fcc-716a49e2d6e0","dice_id": "3e4d82af1740ba7feadeee26859a25d1","title": "Senior DevOps Engineer, Infrastructure","company": "City of New York","company_id": "10119317","company_url": "https://www.dice.com/company/10119317","location": "New York, New York, USA","city": "New York","state": "New York","state_code": "NY","country_code": "US","workplace_type": "onsite","is_remote": false,"employment_type": "Full-time","employer_type": "Direct Hire","easy_apply": false,"visa_sponsorship": false,"work_from_home": false,"posted_at": "2026-10-03T09:56:33Z","first_active_at": "2026-10-03T09:56:33Z","updated_at": "2026-10-05T21:04:31Z","salary_text": "USD 150,000.00 per year","salary_min": 150000,"salary_max": 150000,"salary_currency": "USD","salary_period": "year","description_short": "Company Description Job Description OPEN TO CITY EMPLOYEES ONLY PERMANENT IN THIS TITLE The Office of Technology and Innovation (OTI)...","job_url": "https://www.dice.com/job-detail/01f3d0fe-79ae-4782-9fcc-716a49e2d6e0","search_keyword": "devops engineer","search_rank": 72,"scraped_at": "2026-10-05T21:56:08.607Z"}
A remote hourly role (search "python developer"):
{"job_id": "45eb9d69-9cda-4009-a84e-b4c62a362707","dice_id": "ad4eb941068c7d64194b5d825cd5eb7f","title": "Senior Python Data Scraping Engineer (Freelance)","company": "MindLift","company_id": "90934409","company_profile_id": "21144ab4-6efc-4e75-9ba3-2cc18cee5434","company_url": "https://www.dice.com/company/90934409","location": "Texas, USA","state": "Texas","state_code": "TX","country_code": "US","workplace_type": "remote","is_remote": true,"employment_type": "Part-time","employer_type": "Direct Hire","easy_apply": false,"visa_sponsorship": false,"work_from_home": false,"posted_at": "2026-10-04T21:08:20Z","first_active_at": "2026-10-04T21:08:20Z","updated_at": "2026-10-05T20:50:41Z","salary_text": "USD 45.00 per hour","salary_min": 45,"salary_max": 45,"salary_currency": "USD","salary_period": "hour","description_short": "Mindrift is looking for highly skilled Vibecode specialists to join the Tendem project ( and drive specialized data scraping workflows for real-world...","job_url": "https://www.dice.com/job-detail/45eb9d69-9cda-4009-a84e-b4c62a362707","search_keyword": "python developer","search_rank": 38,"scraped_at": "2026-10-05T21:56:08.594Z"}
With includeDescription on (search "java developer" in Chicago, IL; description and skills trimmed):
{"job_id": "4dee7cfa-a740-4f67-b39d-51a551eb1fbe","dice_id": "239c4ed595e2a662384beeac99c52e35","title": "Lead JAVA AI Software Engineer","company": "Medinext Global LLC","company_id": "91173643","company_profile_id": "c714162a-437f-479d-933d-b3a05786f4c5","company_url": "https://www.dice.com/company/91173643","location": "Chicago, Illinois, USA","city": "Chicago","state": "Illinois","state_code": "IL","country_code": "US","workplace_type": "onsite","is_remote": false,"employment_type": "Contract","employer_type": "Direct Hire","easy_apply": true,"visa_sponsorship": false,"work_from_home": false,"posted_at": "2026-09-24T15:59:20Z","first_active_at": "2026-09-24T15:59:20Z","updated_at": "2026-09-24T15:59:20Z","salary_text": "Depends on Experience","description_short": "Position Title : Lead JAVA AI Software Engineer Job Location: Chicago, IL Work Model: Hybrid Job Duration: 12 Months Required Education/Experience:...","job_url": "https://www.dice.com/job-detail/4dee7cfa-a740-4f67-b39d-51a551eb1fbe","search_keyword": "java developer","search_location": "Chicago, IL","search_rank": 18,"scraped_at": "2026-10-05T21:56:17.125Z","description": "Position Title : Lead JAVA AI Software Engineer Job Location: Chicago, IL Work Model: Hybrid Job Duration: 12 Months Required Education/Experience: Bachelor's and/or Master's Degree in computer science, computer...","skills": ["Amazon Web Services","API","Artificial Intelligence","Autogen","Cloud Computing","Continuous Improvement","Docker","DevOps"],"valid_through": "2026-10-25T15:59:20.000Z","postal_code": "60602","apply_type": "internal"}
Pricing
Pay per event: you pay for the job rows you receive, plus a flat $0.005 per run, whatever memory you choose.
| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
job-scraped | Once per job row stored in your dataset | $0.55 per 1,000 | $0.55 per 1,000 | $0.55 per 1,000 | $0.55 per 1,000 |
run-start | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |
Free plan runs return up to 10 results each; paid plans have no cap.
The price per single job is the price per 1,000 divided by 1,000. A job with the full description costs the same as one without.
Never charged:
- search pages Dice refused, and searches the run could not read;
- searches with no results;
- a job already delivered earlier in the same run (found by another keyword or location, or listed twice while the results shifted);
- with
onlyNewJobs, jobs an earlier run already delivered; - the info row at the end of a run;
- anything past your "Max cost per run": the actor stops delivering when your limit is reached instead of sending rows for free.
FAQ
What do I get on the free plan?
On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result with no cap, at the prices in the table above.
What exactly does this actor read?
The public job search of Dice.com, the US job board for technology roles, through the same search service the Dice website calls for every visitor, and, with includeDescription, each job's public page. Nothing behind a login is read.
How many jobs can I get?
Up to 10,000 per search (one keyword in one location), 100 per page. Dice itself serves only the first 10,000 results of a search, so for more, split the search: add keywords, add locations, or narrow it with the filters. Each split is its own search of up to 10,000.
How long does a run take?
Without descriptions, one request brings up to 100 jobs: 400 jobs from 2 searches took 7.4 seconds in our final test, and 2,000 jobs from one search took 32 seconds. With descriptions each job needs one more request, six at a time: 60 jobs took 22.8 seconds.
How fresh is the data?
Every run reads Dice live. posted_at is when the job was posted or last reposted, first_active_at when it first went live and updated_at when the listing last changed. Use sortBy: "newest" with postedWithin and a schedule for new jobs.
How is the salary read?
salary_text is the pay exactly as the employer typed it. When it holds an amount, the actor fills salary_min and salary_max (the same value for a single rate, only salary_max for "Up to"), salary_currency (USD unless the text names another currency) and salary_period from words such as "per year", "hourly" or "per month". When the text has no period, amounts of 10,000 or more are read as yearly and amounts under 500 as hourly, which is how Dice employers write them. Text without an amount, such as "Depends on Experience", gives only salary_text.
What do "third party" and "employer type" mean?
Third party is Dice's employment type for contracts open to corp to corp (C2C) arrangements or staffing firms. Employer type tells you who posted the job: the hiring company itself (Direct Hire), a recruiter or staffing agency (Recruiter), or other.
How wide is a location?
Dice reads the place you type (a city, a state or a ZIP code) and returns jobs within radius miles of it, 30 by default. The run summary shows how Dice read each location, for example Austin, TX, USA. Each row's city, state and location tell you where the job really is.
Do I need an account, cookies or a proxy?
No account, no cookies and nothing to set up. The actor uses the same public search the Dice website uses, including the access key Dice's own page gives every visitor, over Apify's datacenter proxy. If Dice changes that key, the actor reads the new one from Dice's public page and carries on. In our tests every request was answered on the first try, with no bot check.
What if a job is taken down while the run reads it?
The row is still delivered with everything from the search, and description_error says the job page could not be read. In our description test 59 of 60 pages were read; the one job had been taken down. Jobs that send you to apply on the employer's site have no Dice page; their row says so in description_error.
Can I monitor new jobs over time?
Yes. Turn on onlyNewJobs, set sortBy to newest, save the input as a task and add a schedule. Each run skips the jobs earlier runs delivered and stops once it reaches 20 jobs in a row it has seen before. In our test the first run delivered 120 jobs and the second, minutes later, found 0 new ones and charged 0.
Which formats can I download?
JSON, CSV, Excel, XML, RSS and an HTML table, from the run's dataset in Console or through the API.
Can I use it from Claude, ChatGPT or Cursor (MCP)?
- Connector URL: https://mcp.apify.com/?tools=themineworks/dice-jobs-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http dice-jobs-scraper "https://mcp.apify.com/?tools=themineworks/dice-jobs-scraper"
Is it legal to scrape Dice?
The actor reads only job listings that Dice shows publicly to anyone without signing in, and its rows have no contact fields. Some descriptions name a contact person or an email address the employer wrote into the ad; you are responsible for how you use the data, for Dice's terms, and for data protection law such as GDPR and CCPA. If in doubt, ask a lawyer about your use case.
Integrations
- Google Sheets: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- Make, Zapier and n8n: start the actor and read its dataset with the Apify apps and nodes, for example "new remote contract jobs to Slack".
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.
More from The Mine Works
Jobs and hiring
- Foundit Monster India Jobs
- Hirist Jobs Scraper
- India Jobs MCP
- Naukri Jobs Scraper
- Shine.com Jobs Scraper
- Internshala Scraper
- Indeed Jobs Scraper
- Instahyre Jobs Scraper
- Apna Jobs Scraper
- CutShort Jobs Scraper
- LinkedIn Jobs Scraper
- Recruiting & Jobs MCP
Social media and video
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a search that should return jobs and does not? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For another job site, a new source or a field you need, email dmineworks@gmail.com.
Search Dice by keyword, city and every filter the site offers, and get each US tech job back as a clean row with its pay read into numbers.

