Dice.com Job Scraper avatar

Dice.com Job Scraper

Pricing

from $1.70 / 1,000 job scrapeds

Go to Apify Store
Dice.com Job Scraper

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

Farhan Ali

Maintained by Community

Actor 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

PropertyValue
Sourcedice.com (technology job listings)
Record unitOne Dice job, with optional nested job details, company profile, and company jobs
Input methodsKeyword search (searchQuery, searchQueries), Dice URLs (startUrls), or company brand ID (clientBrandId)
Main identifiersguid, detailsPageUrl
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, HTML (Apify dataset exports)
Update modelFresh 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 (prefill python) and optional extra keywords in searchQueries. Each query is a separate search. Apply location, radius (default 30), radiusUnit (mi or km, default mi), employmentTypes, workplaceTypes, postedDate, employerTypes, easyApply, and isRemote.
  • 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 clientBrandId to collect jobs for one Dice company brand, or pass a Dice company jobs URL in startUrls.

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 jobDetails object is returned only when includeJobDetails is enabled.
  • Company details are conditional: a companyDetails object is returned only when includeCompanyDetails is enabled. The profile is collected once per unique companyProfileId and attached to each job from that company.
  • Company jobs are conditional: a companyJobs array is returned only when includeCompanyJobs is enabled, capped by maxCompanyJobs (0 means unlimited, the default). Those extra jobs are attached onto the listing row; they are not separate dataset items.
  • Result cap: maxItems limits search-result jobs written to the dataset (0 means unlimited; default 10).

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

FieldTypeNullableDescriptionExample
idstringYesDice listing identifierSource listing value
guidstringYesDice job GUID; best stable deduplication keyd7c60634-b836-4f3d-acb7-4b6ddf6a6f7b
titlestringYesJob titleSenior Python Software Engineer
summarystringYesSearch-result summary snippetJob Number: R0247450 Python Software Engineer, Senior...
salarystringYesSalary text as shown on DiceUSD 112,800.00 - 257,000.00 per year
postedDatestringYesPosted timestamp (ISO 8601)2026-08-20T20:06:16Z
modifiedDatestringYesLast-modified timestamp (ISO 8601)Source listing value
detailsPageUrlstringYesJob detail URL; secondary deduplication keyhttps://www.dice.com/job-detail/d7c60634-b836-4f3d-acb7-4b6ddf6a6f7b
companyPageUrlstringYesDice company page URLhttps://www.dice.com/company/booz
companyLogoUrlstringYesCompany logo image URLSource listing value
companyNamestringYesHiring company nameBooz Allen Hamilton
employmentTypestringYesEmployment type as shown on DiceFull-time
employerTypestringYesEmployer type as shown on DiceSource listing value
clientBrandIdstringYesDice company brand identifierSource listing value
companyProfileIdstringYesDice company profile identifierSource listing value
recruiterIdstringYesRecruiter identifier when presentSource listing value
easyApplybooleanYesWhether Dice Easy Apply is availablefalse
isRemotebooleanYesWhether the listing is marked remotetrue
workFromHomeAvailabilitystringYesWork-from-home availability textSource listing value
workplaceTypesstring[]YesWorkplace labels (Remote, Hybrid, On-Site)["Remote"]
locationstringYesDisplay location from jobLocation.displayNameSource listing value
jobLocationobjectYesLocation object as returned by DiceSee location
scorenumberYesSearch relevance score as returned by DiceSource listing value

Job details (conditional — includeJobDetails)

FieldTypeNullableDescription
jobDetailsobjectYesDetail object attached to the job row
jobDetails.jobDescriptionHtmlstringYesFull job description (HTML)
jobDetails.jobDescriptionTextstringYesFull job description (plain text)
jobDetails.diceIdstringYesDice identifier from the detail page
jobDetails.diceCompanyIdstringYesDice company identifier from the detail page
jobDetails.positionIdstringYesPosition identifier from the detail page
jobDetails.skillsstringYesSkills text when present
jobDetails.experienceLevelstringYesExperience level when present
jobDetails.postedLabelstringYesPosted-age label when present
jobDetails.applyUrlstringYesApply URL when present
jobDetails.externalApplyUrlstringYesExternal 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

InputTypeRequiredDefaultAccepted valuesDescription
searchQuerystringNo*Free text (prefill python)Primary keyword search
searchQueriesstring[]No*[]Job titles, skills, or keywordsAdditional keyword searches; each runs separately
startUrlsarray (requestListSources)No*[]Dice jobs search or company job-listing URLsURL-based entry point; filters in the URL are used
locationstringNo""Free text (e.g. New York, Remote)Geographic filter for search mode
radiusintegerNo301 or greaterSearch radius around location
radiusUnitstringNomimi, kmUnit for radius
employmentTypesstring[]No[]FULLTIME, PARTTIME, CONTRACTS, THIRD_PARTYEmployment-type filter (OR)
workplaceTypesstring[]No[]Remote, Hybrid, On-SiteWorkplace-type filter
postedDatestringNo"""" (any time), ONE (today), THREE, SEVENPosted-recency filter
employerTypesstring[]No[]Direct Hire, Recruiter, OtherEmployer-type filter
easyApplybooleanNofalsetrue / falseWhen true, return only Easy Apply jobs
isRemotebooleanNofalsetrue / falseWhen true, return only remote jobs
clientBrandIdstringNo*""Dice company brand IDCollect jobs for one company brand
includeJobDetailsbooleanNofalsetrue / falseAttach jobDetails (charged as job-details)
includeCompanyDetailsbooleanNofalsetrue / falseAttach companyDetails (charged as company-details, once per unique company)
includeCompanyJobsbooleanNofalsetrue / falseAttach companyJobs (charged as jobs-by-company per nested job)
maxCompanyJobsintegerNo00 or any positive integerCap nested company jobs; 0 = unlimited
detailConcurrencyintegerNo5120Parallel enrichment requests when detail toggles are on
maxItemsintegerNo100 or any positive integerMaximum search-result jobs; 0 = unlimited
proxyConfigurationobjectNoApify proxy, RESIDENTIAL groupApify proxy groups or custom proxiesResidential 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.

  1. Start the Actor with a JSON input (console or API).
  2. Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
  3. Retrieve items from the run's default dataset.
  4. Paginate or export the dataset.

Python example:

from apify_client import ApifyClient
client = 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, and companyJobs are 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 guid as the stable key, or detailsPageUrl as 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: workplaceTypes is a string array; easyApply and isRemote are booleans; score is a number; location is the display name from jobLocation.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API poll or webhook consumerStore Dice listings alongside talent tables
Google SheetsApify Google Sheets integrationShare role shortlists with recruiting teams
CRM / ATS pipelineWebhook on run completionPush new listings into applicant tracking
S3 / cloud storageScheduled export via Apify scheduler + integrationArchival 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.

EventTriggerRate
Actor startOnce per run$0.00005
dataset-itemEvery search-result job pushed to the dataset$0.002 / job ($2.00 per 1,000 jobs)
job-detailsincludeJobDetails enabled and detail data returned$0.0025 / job ($2.50 per 1,000 jobs)
company-detailsincludeCompanyDetails enabled, once per unique company$0.002 / company ($2.00 per 1,000 companies)
jobs-by-companyincludeCompanyJobs 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):

RecordsConfigurationEstimated base cost
1,000 jobsListing only$2.00
10,000 jobsListing only$20.00
1,000 jobsListing + job details$4.50
1,000 jobs + 200 unique companiesListing + company details$2.40
1,000 jobs + 500 nested company jobsListing + company jobs$3.00
1,000 jobs + details + 200 companies + 500 company jobsAll 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.

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.