Dice Jobs Scraper avatar

Dice Jobs Scraper

Pricing

from $0.35 / 1,000 results

Go to Apify Store
Dice Jobs Scraper

Dice Jobs Scraper

Scrape Dice search results and return job titles, companies, locations, employment types, posting dates, salary, summaries and application links. You can optionally fetch each job page for skill tags, the full description and its closing date, or skip details for a lighter collection.

Pricing

from $0.35 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Returns: one row per Dice job with title, companyName, location, employmentType, salary, postedDate, skills. Input: {"searchQueries": ["python developer"], "location": "New York, NY", "includeDetails": false, "maxItems": 20} Best for: tech recruiting lead lists, salary and rate research, job alert feeds for contract and full-time roles.

{
"id": "8beb49a9-d16e-4c66-bd56-6c4d97c62df0",
"title": "Senior Python Developer",
"companyName": "CBTS",
"location": "New York, New York, USA",
"employmentType": "Full-time",
"postedDate": "2026-10-14T00:01:06Z",
"workplaceTypes": [
"On-Site"
],
"applyUrl": "https://www.dice.com/job-detail/8beb49a9-d16e-4c66-bd56-6c4d97c62df0"
}

What does Dice Jobs Scraper do?

Dice Jobs Scraper collects public Dice.com tech job listings by keyword, search URL or job ID. It paginates search results and saves titles, companies, locations, employment types, posting dates, workplace labels, published salaries, summaries and application links.

Set includeDetails: true to add skills, full descriptions and closing dates from each job page. The opening input and daily prefill use false for speed; search-result skills, description, validThrough and postalCode then stay null. Direct job targets always fetch details.

Use the Dice scraper and its Apify API for recruiting lists, job alerts and salary research. It reads public pages without logging in.

What data can you get?

Each job is one record in the dataset. Fields that Dice does not provide for a given job are returned as null, so every record has the same shape.

FieldTypeDescription
idstringStable Dice job identifier (a GUID). Unique within a run.
sourceUrlstringThe Dice page the record came from: the search results page or the job page.
titlestringJob title.
clientBrandIdstringEmployer brand ID as published in search results; null for direct job targets.
companyNamestringHiring company or staffing agency name.
locationstringJob location as Dice shows it, for example "Jersey City, New Jersey, USA".
employmentTypestringFull-time, Part-time, Contract, Third Party, or a combination such as "Third Party, Contract".
postedDatestringISO 8601 time when the job was first posted.
modifiedDatestringISO 8601 time of the last update to the listing (search results only).
validThroughstringISO 8601 closing date of the posting (needs job details).
workplaceTypesarrayWorkplace types: On-Site, Remote or Hybrid.
isRemotebooleanTrue when Dice marks the job as remote.
employerTypestringDirect Hire, Recruiter or Other.
salarystringPay range or rate as listed by the employer, for example "USD 55 - 65". Null when it is not disclosed or only a placeholder such as "Depends on Experience".
salaryMinnumberLower bound of the listed pay as a number; null when no salary is listed.
salaryMaxnumberUpper bound of the listed pay as a number.
salaryPeriodstringPay period of the salary figures: hour, month or year. Inferred from the amount when the text does not say.
salaryCurrencystringCurrency code of the listed pay, for example USD. With details enabled, uses the job page’s structured salary currency when the search salary omits it.
citystringCity of the job location.
statestringState or region code of the job location, for example NJ.
countrystringCountry of the job location.
postalCodestringPostal code from the job page (needs job details).
daysSincePostedintegerWhole days between the posted date and the run.
summarystringShort description snippet from the search results.
skillsarraySkill tags shown on the job page (needs job details).
descriptionstringFull job description converted to plain text (needs job details).
easyApplybooleanTrue when the job accepts Dice Easy Apply.
applyUrlstringThe Dice job page where the application is made.
companyLogoUrlstringURL of the company logo image.
companyProfileUrlstringURL of the Dice company profile page.

Salary is only filled in for a minority of listings, because many employers do not publish pay. Salary text is lightly normalised: repeated currency symbols are collapsed, and a space is placed between the currency code and the amount. When the search result has no salary but the job page publishes structured pay data, that value is used instead.

How to use Dice Jobs Scraper

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Enter one or more search keywords, for example "python developer".
  3. Optionally enter a location such as "New York, NY". Leave it empty to search across the whole United States, remote roles included.
  4. Set "Max items" to the number of jobs you want. The run stops as soon as that many jobs have been saved.
  5. Choose whether to include job details. Details add skills, the full description and the closing date, but need one extra request per job.
  6. Optionally restrict the search to remote jobs, to jobs posted today, within 3 days or within 7 days, or to one employment type.
  7. Start the run and download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

You can also paste Dice URLs. A search URL such as a Dice jobs page with your own filters is followed page by page. A job page URL returns just that one job, with details.

If the same job appears under several keywords, it is saved only once per run, so there are no duplicate ids in your dataset.

Input

For a focused application feed, set easyApplyOnly: true. The Actor keeps only search records where Dice explicitly publishes easyApply: true; an absent flag does not count as Easy Apply. This checks the search record before opening a detail page, saving that extra request for discarded jobs. It does not submit applications or authenticate to Dice.

Use workplaceTypes: ["Hybrid", "On-Site"] to collect either selected setting. The values match Dice's published workplace labels exactly. An empty array leaves all workplace types eligible. These filters apply to keyword searches and search URLs, and combine with existing filters. Combining remoteOnly: true with only On-Site can return no items because both conditions must hold. Direct job IDs and job-detail URLs refresh known jobs without these search filters.

Use employerTypes: ["Direct Hire"] to focus keyword searches and search URLs on employers that Dice labels Direct Hire. Select Recruiter or Other instead, or combine labels to accept any selected value. The default empty array accepts every employer. A result without a published employer label cannot match a selected label. This filter runs before detail fetching; direct job targets ignore it.

For repeated collection, pass previous output id values in excludeJobIds. Dice job-detail URLs also work in that list. Matching is case insensitive for GUIDs. Exclusions apply to searches and direct targets, before opening job pages, and excluded jobs consume no result budget. Search pagination continues to look for unseen jobs. This is caller-managed monitoring: the Actor does not remember previous datasets automatically, so keep the previous IDs in your own integration and send them on each run. To refresh a known job deliberately, remove it from the exclusion list and supply it through jobIds.

Filtering continues through search pages until the shared maxItems budget is filled or results end. Narrow filters can therefore require more search-page requests. Employer brand IDs help group search results from the same Dice employer without relying on matching company-name text. clientBrandId is copied from Dice, and stays null on direct detail records because that page source does not supply the search identifier.

FieldTypeDescription
searchQueriesarray of stringsJob keywords to search, for example "python developer". Required unless startUrls is given.
locationstringCity and state, for example "New York, NY". Empty means all of the US.
maxItemsintegerMaximum number of jobs across all searches, 1 to 10000, default 50.
includeDetailsbooleanOpen each job page to add skills, the description and the closing date. Default true.
jobIdsarray of stringsOptional Dice job GUIDs or job-detail URLs, fetched directly. Useful to refresh jobs you already know.
startUrlsarrayOptional dice.com search URLs or job-detail URLs.
easyApplyOnlybooleanKeep search results explicitly marked Easy Apply. Default false; direct job targets are unchanged.
workplaceTypesarrayMatch any of Remote, Hybrid, On-Site. Default empty; direct job targets are unchanged.
employerTypesarrayMatch any selected Direct Hire, Recruiter or Other label in search results. Default empty accepts all.
excludeJobIdsarray of stringsSkip known job GUIDs or detail URLs across all targets. Default empty; skipped jobs do not count toward maxItems.
remoteOnlybooleanRequest Remote jobs for keyword searches and search URLs. Default false; direct job targets ignore this filter.
postedWithinstringOne of any, today, 3days, 7days. Default any.
employmentTypestringOne of any, fulltime, parttime, contract, thirdparty. Default any.
proxyConfigurationobjectApify Proxy settings. Datacenter proxy is the default.

Example input:

{
"searchQueries": ["python developer"],
"location": "New York, NY",
"includeDetails": true,
"maxItems": 30
}

Example input for recent remote roles without details:

{
"searchQueries": ["data engineer"],
"remoteOnly": true,
"postedWithin": "7days",
"includeDetails": false,
"maxItems": 40
}

Output

Each item looks like the example below, taken from a real run for "python developer" in New York. Long text is shortened here.

{
"id": "7015377a-0d8c-4367-86c2-c8de29fa55b8",
"sourceUrl": "https://www.dice.com/jobs?q=python+developer&location=New+York%2C+NY&page=1",
"title": "Senior Python Developer",
"companyName": "Randstad Digital",
"location": "Jersey City, New Jersey, USA",
"employmentType": "Contract",
"postedDate": "2026-09-28T21:04:03Z",
"modifiedDate": "2026-10-02T03:03:11Z",
"validThrough": "2026-11-02T04:03:11.000Z",
"workplaceTypes": ["On-Site"],
"isRemote": false,
"employerType": "Recruiter",
"salary": "USD 55 - 65",
"summary": "job summary: Position will be a Senior Python Developer who has experience working in Python, REST...",
"skills": ["Senior Python Developer"],
"description": "job summary:\n\n- Position will be a Senior Python Developer who has experience working in Python, REST...",
"easyApply": false,
"applyUrl": "https://www.dice.com/job-detail/7015377a-0d8c-4367-86c2-c8de29fa55b8",
"companyLogoUrl": "https://d3qscgr6xsioh.cloudfront.net/nwd2B9CDT8Oo4K91VMeJ_transformed.png?format=webp",
"companyProfileUrl": "https://www.dice.com/company-profile/ee3855f3-d056-5325-bc31-ad5f53052a28"
}

The dataset has an Overview view that shows the most useful columns: id, title, company, location, employment type, salary, posted date, workplace types, employer type, skills and apply URL.

How much does it cost?

The Actor is charged per result: each job saved to the dataset counts as one result. There is no charge for jobs that are skipped, for duplicates that are dropped, or for runs that return nothing. See the Pricing tab on the Actor page for the current rate. You can control the total cost of a run by setting "Max items", which the Actor honours exactly. Turning off job details reduces the requests needed.

Use with AI agents (MCP)

You can call this Actor from an AI assistant through the Apify MCP server. Add the Actor to your MCP client configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=axiomworks/dice-jobs-scraper"
}
}
}

Example prompts you can give your assistant:

  • "Find 20 recent remote data engineer jobs on Dice and list company, salary and employment type."
  • "Search Dice for python developer contract roles in New York and show which ones list a salary."
  • "Get the skills and description for this Dice job page and summarise the requirements."

Put the required input first in your prompt: the keyword is the only required argument, and "maxItems" keeps the result small for the model's context.

Integrations and API

Run the Actor from code with the Apify client libraries or plain HTTP.

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("axiomworks/dice-jobs-scraper").call(run_input={
"searchQueries": ["python developer"],
"location": "New York, NY",
"maxItems": 20,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["companyName"], job["location"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('axiomworks/dice-jobs-scraper').call({
searchQueries: ['data engineer'],
remoteOnly: true,
maxItems: 40,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
process.stdout.write(`${items.length} jobs\n`);

cURL:

curl -X POST "https://api.apify.com/v2/acts/axiomworks~dice-jobs-scraper/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["python developer"], "location": "New York, NY", "maxItems": 20}'

The Actor also works with Apify schedules, webhooks, Make, Zapier, Google Sheets and any tool that can read a dataset through the API. A common setup is a daily scheduled run with "postedWithin" set to today, sending new jobs to a spreadsheet or a database.

FAQ

How many jobs can I get per search? Dice returns 30 jobs per page and caps the result set by relevance. Broad keywords can have thousands of matches, and the Actor stops at your "maxItems" value, up to 10000.

Why is salary empty for many jobs? Many employers do not publish pay on Dice. The Actor returns null rather than guessing.

Why are skills missing? Skills are only on the individual job page. Turn on "Include job details" to get them. A few jobs have no skill tags at all.

What happens with a keyword that has no results? The run finishes successfully with zero items and a warning in the log. Nothing is charged.

What happens if Dice blocks a request? Requests that return 403, 429 or a server error are retried with increasing delays on a fresh proxy session. If a job page still fails, that job is saved with search data only and a warning is logged.

How fast is it? Requests are spaced at least 700 milliseconds apart. Detail fetching adds one request per job; retries can extend runtime.

Can I filter by experience level or by salary? Not directly. Filter the dataset after the run on the salary and employmentType fields.

Do the dates come with a time zone? Yes. Dates are ISO 8601 timestamps in UTC.

This Actor reads public Dice job listings without login and collects no private account data. Scraping laws vary by jurisdiction, and site terms may restrict automation. You are responsible for your use of the data and applicable data protection obligations. This Actor is not affiliated with, endorsed by or sponsored by Dice. Obtain legal advice for your specific use case.

Feedback

If a field is missing, the results look wrong, or you need another filter, open an issue from the Issues tab on the Actor page. Reports that include the input you used and the Dice URL in question help us fix problems quickly.