Dice.com Job Scraper
Pricing
from $1.70 / 1,000 job scrapeds
Dice.com Job Scraper
Dice.com job dataset from keywords, URLs, and filters, including optional job details, company profiles, and company job listings.
Pricing
from $1.70 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Farhan Ali
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Dice.com Job Scraper creates a structured dataset of job listings collected from Dice.com. Each dataset item represents one Dice job and can include identifiers, title, summary, salary, dates, company fields, employment and workplace type, location, and optional job-detail, company-profile, and company-jobs objects. Query the source with keywords, Dice URLs, or a company brand ID, plus location and filter fields. Control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.
Dataset at a glance
| Property | Value |
|---|---|
| Source | dice.com (technology job listings) |
| Record unit | One Dice job, with optional nested job details, company profile, and company jobs |
| Input methods | Keyword search (searchQuery, searchQueries), Dice URLs (startUrls), or company brand ID (clientBrandId) |
| Main identifiers | guid, detailsPageUrl |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, HTML (Apify dataset exports) |
| Update model | Fresh records per Actor run |
| Pricing | $2.00 per 1,000 jobs; +$2.50 per 1,000 job details; +$2.00 per 1,000 company details; +$2.00 per 1,000 company jobs |
Coverage and available records
The Actor collects public Dice.com job listings from these entry points. They can be combined in one run.
- Search-based: Set
searchQuery(prefillpython) and optional extra keywords insearchQueries. Each query is a separate search. Applylocation,radius(default30),radiusUnit(miorkm, defaultmi),employmentTypes,workplaceTypes,postedDate,employerTypes,easyApply, andisRemote. - URL-based: Pass Dice jobs search URLs or company job-listing URLs in
startUrls. Filters encoded in the URL are used for that search. - Company-based: Set
clientBrandIdto collect jobs for one Dice company brand, or pass a Dice company jobs URL instartUrls.
Record types and limits:
- Listing records are always collected: identifiers, title, summary, salary, dates, company name and URLs, employment type, employer type, workplace flags, location, and score.
- Job details are conditional: a
jobDetailsobject is returned only whenincludeJobDetailsis enabled. - Company details are conditional: a
companyDetailsobject is returned only whenincludeCompanyDetailsis enabled. The profile is collected once per uniquecompanyProfileIdand attached to each job from that company. - Company jobs are conditional: a
companyJobsarray is returned only whenincludeCompanyJobsis enabled, capped bymaxCompanyJobs(0means unlimited, the default). Those extra jobs are attached onto the listing row; they are not separate dataset items. - Result cap:
maxItemslimits search-result jobs written to the dataset (0means unlimited; default10).
Known exclusions: content Dice only shows behind login is not collected; each run captures listing state at run time (no historical snapshots); enrichment objects are omitted when their toggle is off or the source does not return them.
Data dictionary
Field names below match dataset record JSON properties exactly. Fields marked conditional appear only when the corresponding input toggle is enabled. guid is the recommended deduplication key; detailsPageUrl is a reasonable secondary key. Dates are ISO 8601 timestamps as returned by Dice (for example 2026-08-20T20:06:16Z). salary is a formatted string, not a numeric range.
Listing fields
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
id | string | Yes | Dice listing identifier | Source listing value |
guid | string | Yes | Dice job GUID; best stable deduplication key | d7c60634-b836-4f3d-acb7-4b6ddf6a6f7b |
title | string | Yes | Job title | Senior Python Software Engineer |
summary | string | Yes | Search-result summary snippet | Job Number: R0247450 Python Software Engineer, Senior... |
salary | string | Yes | Salary text as shown on Dice | USD 112,800.00 - 257,000.00 per year |
postedDate | string | Yes | Posted timestamp (ISO 8601) | 2026-08-20T20:06:16Z |
modifiedDate | string | Yes | Last-modified timestamp (ISO 8601) | Source listing value |
detailsPageUrl | string | Yes | Job detail URL; secondary deduplication key | https://www.dice.com/job-detail/d7c60634-b836-4f3d-acb7-4b6ddf6a6f7b |
companyPageUrl | string | Yes | Dice company page URL | https://www.dice.com/company/booz |
companyLogoUrl | string | Yes | Company logo image URL | Source listing value |
companyName | string | Yes | Hiring company name | Booz Allen Hamilton |
employmentType | string | Yes | Employment type as shown on Dice | Full-time |
employerType | string | Yes | Employer type as shown on Dice | Source listing value |
clientBrandId | string | Yes | Dice company brand identifier | Source listing value |
companyProfileId | string | Yes | Dice company profile identifier | Source listing value |
recruiterId | string | Yes | Recruiter identifier when present | Source listing value |
easyApply | boolean | Yes | Whether Dice Easy Apply is available | false |
isRemote | boolean | Yes | Whether the listing is marked remote | true |
workFromHomeAvailability | string | Yes | Work-from-home availability text | Source listing value |
workplaceTypes | string[] | Yes | Workplace labels (Remote, Hybrid, On-Site) | ["Remote"] |
location | string | Yes | Display location from jobLocation.displayName | Source listing value |
jobLocation | object | Yes | Location object as returned by Dice | See location |
score | number | Yes | Search relevance score as returned by Dice | Source listing value |
Job details (conditional — includeJobDetails)
| Field | Type | Nullable | Description |
|---|---|---|---|
jobDetails | object | Yes | Detail object attached to the job row |
jobDetails.jobDescriptionHtml | string | Yes | Full job description (HTML) |
jobDetails.jobDescriptionText | string | Yes | Full job description (plain text) |
jobDetails.diceId | string | Yes | Dice identifier from the detail page |
jobDetails.diceCompanyId | string | Yes | Dice company identifier from the detail page |
jobDetails.positionId | string | Yes | Position identifier from the detail page |
jobDetails.skills | string | Yes | Skills text when present |
jobDetails.experienceLevel | string | Yes | Experience level when present |
jobDetails.postedLabel | string | Yes | Posted-age label when present |
jobDetails.applyUrl | string | Yes | Apply URL when present |
jobDetails.externalApplyUrl | string | Yes | External apply URL when present |
Company details (conditional — includeCompanyDetails)
companyDetails is the Dice company profile object, attached once the profile is collected for that companyProfileId. Observed groups include company_info (name, website, founded, employees, locations, social links), general_information (overview), technologies, company_technologies, benefits, and awards_and_accomplishments. Nested keys follow the source profile; fields Dice does not return are omitted or null.
Company jobs (conditional — includeCompanyJobs)
companyJobs is an array of listing-shaped job objects for the same clientBrandId. Each item uses the listing fields above. These jobs are nested on the parent dataset item and are not extra dataset rows. maxCompanyJobs caps the array (0 = unlimited).
Example dataset record
Representative listing-only record from a python search with remote, full-time filters. Conditional objects are omitted because enrichment was off.
{"guid": "d7c60634-b836-4f3d-acb7-4b6ddf6a6f7b","title": "Senior Python Software Engineer","companyName": "Booz Allen Hamilton","salary": "USD 112,800.00 - 257,000.00 per year","employmentType": "Full-time","workplaceTypes": ["Remote"],"isRemote": true,"easyApply": false,"postedDate": "2026-08-20T20:06:16Z","detailsPageUrl": "https://www.dice.com/job-detail/d7c60634-b836-4f3d-acb7-4b6ddf6a6f7b","companyPageUrl": "https://www.dice.com/company/booz","summary": "Job Number: R0247450 Python Software Engineer, Senior..."}
The record above was produced with this input:
{"searchQuery": "python","workplaceTypes": ["Remote"],"employmentTypes": ["FULLTIME"],"maxItems": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
jobDetails, companyDetails, and companyJobs appear on the same row when includeJobDetails, includeCompanyDetails, and includeCompanyJobs are enabled.
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
searchQuery | string | No* | — | Free text (prefill python) | Primary keyword search |
searchQueries | string[] | No* | [] | Job titles, skills, or keywords | Additional keyword searches; each runs separately |
startUrls | array (requestListSources) | No* | [] | Dice jobs search or company job-listing URLs | URL-based entry point; filters in the URL are used |
location | string | No | "" | Free text (e.g. New York, Remote) | Geographic filter for search mode |
radius | integer | No | 30 | 1 or greater | Search radius around location |
radiusUnit | string | No | mi | mi, km | Unit for radius |
employmentTypes | string[] | No | [] | FULLTIME, PARTTIME, CONTRACTS, THIRD_PARTY | Employment-type filter (OR) |
workplaceTypes | string[] | No | [] | Remote, Hybrid, On-Site | Workplace-type filter |
postedDate | string | No | "" | "" (any time), ONE (today), THREE, SEVEN | Posted-recency filter |
employerTypes | string[] | No | [] | Direct Hire, Recruiter, Other | Employer-type filter |
easyApply | boolean | No | false | true / false | When true, return only Easy Apply jobs |
isRemote | boolean | No | false | true / false | When true, return only remote jobs |
clientBrandId | string | No* | "" | Dice company brand ID | Collect jobs for one company brand |
includeJobDetails | boolean | No | false | true / false | Attach jobDetails (charged as job-details) |
includeCompanyDetails | boolean | No | false | true / false | Attach companyDetails (charged as company-details, once per unique company) |
includeCompanyJobs | boolean | No | false | true / false | Attach companyJobs (charged as jobs-by-company per nested job) |
maxCompanyJobs | integer | No | 0 | 0 or any positive integer | Cap nested company jobs; 0 = unlimited |
detailConcurrency | integer | No | 5 | 1–20 | Parallel enrichment requests when detail toggles are on |
maxItems | integer | No | 10 | 0 or any positive integer | Maximum search-result jobs; 0 = unlimited |
proxyConfiguration | object | No | Apify proxy, RESIDENTIAL group | Apify proxy groups or custom proxies | Residential proxies are recommended |
* Provide at least one of searchQuery, searchQueries, startUrls, or clientBrandId (or equivalent filter-only input).
Minimal request:
{ "searchQuery": "python" }
Advanced request (filters plus enrichment):
{"searchQuery": "python","workplaceTypes": ["Remote"],"employmentTypes": ["FULLTIME"],"includeJobDetails": true,"includeCompanyDetails": true,"includeCompanyJobs": true,"maxCompanyJobs": 10,"maxItems": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Retrieve the data through the API
The Actor runs on the Apify platform, so there is no server to host and no crawling infrastructure to maintain.
- Start the Actor with a JSON input (console or API).
- Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
- Retrieve items from the run's default dataset.
- Paginate or export the dataset.
Python example:
from apify_client import ApifyClientclient = ApifyClient("YOUR-APIFY-TOKEN")run_input = {"searchQuery": "python","workplaceTypes": ["Remote"],"employmentTypes": ["FULLTIME"],"includeJobDetails": True,"maxItems": 10,}run = client.actor("datascrapers/dice-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["guid"], item["title"], item["companyName"])
Apify generates ready-to-run Python, JavaScript, and cURL examples on the Actor's API tab. Do not put a real API token in shared code or URLs.
Data quality and record handling
- Conditional fields:
jobDetails,companyDetails, andcompanyJobsare present only when their input toggle is enabled and the source returns data. Listing-only runs return a leaner record. - Source values: salary, dates, workplace labels, and location text are taken from Dice as published. Unreadable fields are returned as null rather than fabricated.
- Attached enrichments: company profile and company jobs nest on the job row. A company with 40 open jobs still produces one dataset item per search-result job.
- Deduplication: each run appends fresh records. Search configurations are de-duplicated within a run; job rows are not de-duplicated across runs. Use
guidas the stable key, ordetailsPageUrlas a secondary key, and filter repeated runs against previously stored values. - Enrichment fallback: listing data is returned even when a detail or company request fails; that failed enrichment is not charged.
- Normalization:
workplaceTypesis a string array;easyApplyandisRemoteare booleans;scoreis a number;locationis the display name fromjobLocation.
Export and pipeline examples
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL / Supabase | Dataset API poll or webhook consumer | Store Dice listings alongside talent tables |
| Google Sheets | Apify Google Sheets integration | Share role shortlists with recruiting teams |
| CRM / ATS pipeline | Webhook on run completion | Push new listings into applicant tracking |
| S3 / cloud storage | Scheduled export via Apify scheduler + integration | Archival of labor-market snapshots |
Pricing and cost examples
The Actor uses pay-per-event pricing. A run also incurs an Actor-start charge of $0.00005.
| Event | Trigger | Rate |
|---|---|---|
| Actor start | Once per run | $0.00005 |
| dataset-item | Every search-result job pushed to the dataset | $0.002 / job ($2.00 per 1,000 jobs) |
| job-details | includeJobDetails enabled and detail data returned | $0.0025 / job ($2.50 per 1,000 jobs) |
| company-details | includeCompanyDetails enabled, once per unique company | $0.002 / company ($2.00 per 1,000 companies) |
| jobs-by-company | includeCompanyJobs enabled, per nested company job | $0.002 / job ($2.00 per 1,000 company jobs) |
Example costs at the published event rates (Actor start is $0.00005 per run):
| Records | Configuration | Estimated base cost |
|---|---|---|
| 1,000 jobs | Listing only | $2.00 |
| 10,000 jobs | Listing only | $20.00 |
| 1,000 jobs | Listing + job details | $4.50 |
| 1,000 jobs + 200 unique companies | Listing + company details | $2.40 |
| 1,000 jobs + 500 nested company jobs | Listing + company jobs | $3.00 |
| 1,000 jobs + details + 200 companies + 500 company jobs | All enrichments | $5.90 |
Paid Apify plans may apply lower tiered event rates. Compute units consumed by the run are billed by your Apify plan. Estimates depend on the verified pricing model, unique-company count, nested company-job volume, and the options selected for the run.
Limitations and responsible data use
- The Actor collects publicly accessible data from Dice.com pages only.
- Field availability depends on what Dice renders at run time; some values can be null or missing, and site changes can alter fields.
- Company details and company jobs attach onto job rows; they are not standalone dataset items.
- The Actor does not provide historical snapshots unless you store them yourself.
- Residential proxies are recommended; coverage may degrade without them.
- You are responsible for compliance with Dice's terms of service, applicable privacy law, and any contractual obligations before using the data.
Dataset questions
What does one dataset item represent?
One Dice job listing. jobDetails, companyDetails, and companyJobs attach onto that same row when enabled. A job whose company has many open roles still produces a single dataset item.
Which field should I use as a unique identifier?
guid is the Dice job GUID and is the recommended deduplication key. detailsPageUrl is a reasonable secondary key.
Are fields nullable or conditional?
Yes. jobDetails exists only when includeJobDetails is enabled; companyDetails exists only when includeCompanyDetails is enabled; companyJobs exists only when includeCompanyJobs is enabled. Within listing records, fields Dice does not publish for a job are returned as null.
How do I collect jobs for one company?
Set clientBrandId to the Dice brand ID, or pass a Dice company jobs URL in startUrls. Enable includeCompanyJobs to nest that company's listings on each result, and use maxCompanyJobs to cap the array.
Can I retrieve the records as CSV or JSON?
Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API.
Does the Actor return historical data?
No. Each run captures the state of the listings at run time. To track posting or salary changes, schedule repeated runs and store the outputs yourself.
What counts as a billable result?
Four pay-per-event charges apply after a $0.00005 Actor-start charge: a dataset-item charge for every search-result job ($2.00 per 1,000), a job-details charge for each enriched job ($2.50 per 1,000), a company-details charge once per unique company ($2.00 per 1,000), and a jobs-by-company charge per nested company job ($2.00 per 1,000). A listing-only run incurs Actor start plus dataset-item charges.
Related datasets from Data Scrapers
- Naukri Job Scraper — India job listings that can be compared with Dice rows by title, company, and skills.
- Glassdoor Jobs Scraper — Job listings with employer ratings that can be joined to Dice jobs by company name and title.
- ZipRecruiter Job Scraper — US job listings for cross-board labor-market comparison against Dice technology roles.
- StepStone Jobs Scraper — European job listings useful for multi-region hiring-volume analysis.
- LinkedIn Company Scraper — Company profiles that can be joined with Dice jobs by company name.
Data Scrapers support
Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.