Dice Jobs Scraper avatar

Dice Jobs Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Dice Jobs Scraper

Dice Jobs Scraper

[๐Ÿ’ฐ $0.8 / 1K] Extract US tech job listings from Dice.com. Search by keyword, location, employment type, and remote/sponsorship filters to get structured data including titles, companies, salaries, descriptions, and apply links.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

33

Total users

4

Monthly active users

2 days ago

Last modified

Share

Dice Tech Jobs Scraper

Extract US tech job listings from Dice.com at scale โ€” titles, companies, locations, parsed salaries, full descriptions, employer skill tags, remote and hybrid workplace flags, and direct apply links, for any keyword, location, or pasted Dice search URL. Built for recruiters, sourcers, and labor-market analysts who need Dice's tech-hiring feed as a clean spreadsheet, without paging through listings by hand.

Why This Scraper?

  • 28 structured fields on every job โ€” 5 compensation fields, 4 workplace-type fields, employer skill tags, HTML and plain-text descriptions, employer classification, and a direct apply link, all pre-parsed
  • Salary broken out into 4 sortable fields โ€” salaryMin, salaryMax, salaryCurrency and salaryPeriod alongside the raw string, and every extracted figure carries its pay period, so a $95/hour contract never lands in the same column as a $190,000 salary
  • Full job descriptions on every row โ€” the complete posting text from each job's own detail page, in both HTML and plain text, not the two-line search-results snippet
  • The employer's own skill tags โ€” the exact technology tags attached to each posting (Python, Kubernetes, Terraform, PostgreSQL), so you can measure stack-level demand without keyword-matching a wall of description text
  • 8 structured filters, zero URL crafting โ€” keyword, location, radius (1-100 miles), posted-within window, employment type, remote-only, easy-apply, and willing-to-sponsor are all proper input fields
  • Visa-sponsorship filtering that genuinely narrows โ€” switching willingToSponsor on typically cuts a broad keyword search to under a tenth of its listings, turning manual triage into a single run
  • Re-listings never billed twice โ€” Dice re-posts the same role across pages and under fresh IDs; identical copies are filtered out by content, not just by ID, and your result budget keeps going until it holds that many distinct jobs
  • Employer type on every row โ€” Direct Hire, Recruiter, or Other, exactly as Dice classifies it, so agency reposts drop out of a sourcing list with one filter

Use Cases

Recruiting & Sourcing

  • Build candidate pipelines by tracking which companies are hiring for specific tech stacks in your region
  • Identify staffing firms vs direct employers via the employerType field
  • Spot easy-apply roles in seconds for high-volume sourcing campaigns

Lead Generation

  • Surface companies actively hiring engineers โ€” strong intent signal for B2B SaaS, recruiting tools, dev-tool vendors, and benefits providers
  • Switch on the willing-to-sponsor filter to find employers open to international candidates and partner with immigration services
  • Generate prospect lists of companies posting frequently in your category

Market & Compensation Research

  • Track salary trends across cities, roles, and seniorities using parsed salaryMin/salaryMax
  • Analyze remote-vs-hybrid-vs-onsite mix by location or employer
  • Map demand for specific technologies (e.g. Rust, Kubernetes, LLMs) by volume and posted date

Job Aggregation & Niche Boards

  • Power a tech-only or remote-only job board with fresh Dice listings
  • Build niche aggregators (e.g. visa-sponsorship boards, contract-only boards, easy-apply boards) using the filter set
  • Enrich existing job-board records with full descriptions and direct apply links

Academic & Labor-Market Research

  • Build longitudinal datasets of tech-hiring activity by region and skill
  • Study employer behavior around remote work, sponsorship, and contract employment
  • Track posting volume against macro hiring trends

Getting Started

The fastest way to get started โ€” one keyword, sensible defaults:

{
"searchQueries": ["python developer"],
"maxResultsPerQuery": 100
}

Filtered Search โ€” Recent Remote Roles

Narrow down to fresh, remote, easy-apply jobs in a specific market:

{
"searchQueries": ["data engineer", "machine learning engineer"],
"location": "Austin, TX",
"radiusMiles": 50,
"postedWithinDays": "SEVEN",
"employmentType": "FULLTIME",
"remoteOnly": true,
"easyApply": true,
"maxResultsPerQuery": 200
}

Surface only roles whose employers are willing to sponsor a work visa:

{
"searchQueries": ["software engineer", "backend engineer"],
"location": "New York, NY",
"willingToSponsor": true,
"postedWithinDays": "THREE",
"maxResultsPerQuery": 150
}

Direct Dice URL + Keyword Combo

Already have a search tuned on the Dice website? Paste the URL alongside your own keywords for a mixed batch:

{
"searchQueries": ["DevOps engineer"],
"startUrls": [
"https://www.dice.com/jobs?q=site+reliability+engineer&location=Seattle%2C+WA&filters.employmentType=CONTRACTS&filters.easyApply=true"
],
"maxResultsPerQuery": 250
}

Input Reference

ParameterTypeDefaultDescription
searchQueriesstring[]["python developer"]Job titles or keywords to search for, such as "python developer" or "data scientist". Each keyword runs a separate search.
locationstring""Where to search for jobs. Enter a city, state, ZIP code, or "Remote". Example: "Austin, TX". Dice is US-only โ€” locations outside the US fall back to nationwide results.
radiusMilesinteger30How far from the location to search, in miles (1-100). Ignored when location is empty.
startUrlsstring[][]Paste full Dice search result URLs (e.g. https://www.dice.com/jobs?q=...) to scrape them directly. Useful when you already have a search dialed in on the Dice website.

Filters & Limits

ParameterTypeDefaultDescription
maxResultsPerQueryinteger100Maximum number of job listings to collect per search keyword (1-500). 500 is the most this scraper collects from any one search. Use a tighter location or filters to reach more unique jobs.
postedWithinDaysstring"" (Any time)Only show jobs posted within this time period. Options: "Any time", "Last 24 hours" (ONE), "Last 3 days" (THREE), "Last 7 days" (SEVEN).
employmentTypestring"" (Any)Filter by job type. Pick one or leave on "Any" for all types. Options: "Any", "Full-time" (FULLTIME), "Part-time" (PARTTIME), "Contract" (CONTRACTS), "Third-party" (THIRD_PARTY).
remoteOnlybooleanfalseOnly show jobs marked remote / work-from-home.
easyApplybooleanfalseOnly show jobs that support Dice's easy-apply flow.
willingToSponsorbooleanfalseOnly show jobs whose employer is willing to sponsor work visas.

Advanced

ParameterTypeDefaultDescription
fetchDescriptionbooleantrueCollect the full job description from each listing's detail page. Leave on for the most complete data. Turn it off to make runs about 3x faster, but description, descriptionHtml and skills come back empty, and isExpired can no longer tell you whether a posting is still open. Either way, postings Dice has already closed are still returned and still count toward your result total.

Output

Each record is one job posting with the full set of structured fields:

{
"jobId": "5b2d4f7c-9a3e-4d12-b7e8-1f0c2a9b8d54",
"title": "Senior Python Developer",
"company": "Acme Cloud Systems",
"companyUrl": "https://www.dice.com/company-profile/97aa1566-053c-49e9-be3c-1ee6499511b5",
"companyLogoUrl": "https://d3qscgr6xsioh.cloudfront.net/jLZGbw1aTAehDYuxFRDm_transformed.png?format=webp",
"location": "Austin, Texas, USA",
"postedDate": "2026-07-22T00:02:43Z",
"modifiedDate": "2026-08-14T12:07:18Z",
"salary": "$140,000 - $170,000 per year",
"salaryMin": 140000,
"salaryMax": 170000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"employmentType": "Full-time",
"employmentTypes": ["Full-time"],
"isRemote": false,
"workFromHomeAvailability": "No",
"workplaceTypes": ["On-Site"],
"easyApply": true,
"employerType": "Direct Hire",
"summary": "Build and scale data pipelines for a fast-growing fintech...",
"description": "We're looking for a Senior Python Developer to join our platform team...",
"descriptionHtml": "<p>We're looking for a Senior Python Developer...</p>",
"skills": ["Python", "AWS", "Kubernetes", "PostgreSQL"],
"isExpired": false,
"jobUrl": "https://www.dice.com/job-detail/5b2d4f7c-9a3e-4d12-b7e8-1f0c2a9b8d54",
"searchQuery": "python developer",
"searchLocation": "Austin, TX",
"scrapedAt": "2026-08-14T19:59:02Z"
}

A fully remote posting comes back in the same shape with "location": "Remote", "isRemote": true, "workFromHomeAvailability": "Yes" and "workplaceTypes": ["Remote"].

Job & Employer

FieldTypeDescription
jobIdstringDice's internal job identifier (GUID).
titlestringJob title, exactly as the employer wrote it.
companystringEmployer name.
companyUrlstringLink to the employer's own Dice company profile page. Empty on the small share of rows where Dice publishes no profile for that employer.
companyLogoUrlstringEmployer logo image URL.
employerTypestring | nullHow Dice classifies the poster: "Direct Hire", "Recruiter", or "Other".
jobUrlstringPublic Dice detail URL for the job.

Location & Workplace

FieldTypeDescription
locationstringCity, state and country as Dice lists them, e.g. "Austin, Texas, USA". Fully remote postings carry no city on Dice, so these read "Remote".
isRemotebooleantrue if the job is remote-eligible.
workFromHomeAvailabilitystringWork-from-home availability: "Yes" (remote), "Hybrid", or "No" (on-site). Always agrees with isRemote and workplaceTypes.
workplaceTypesstring[]Workplace tags such as "Remote", "On-Site", "Hybrid".

Compensation

FieldTypeDescription
salarystringRaw salary string exactly as shown on Dice, e.g. "$120k", "$60-80/hour", "Depends on Experience".
salaryMinnumber | nullMinimum compensation, when the format is clean enough to read with confidence. Always paired with a salaryPeriod.
salaryMaxnumber | nullMaximum compensation, on the same pay period as salaryMin.
salaryCurrencystring | nullISO 4217 currency code, e.g. "USD".
salaryPeriodstring | null"hour", "day", "week", "month", or "year". Never null when salaryMin has a value, so hourly contract rates always sort apart from annual salaries.

Employment Type & Dates

FieldTypeDescription
employmentTypestringComma-joined employment types as Dice displays them, e.g. "Full-time, Contract".
employmentTypesstring[]The same data pre-split into an array for easier filtering.
easyApplybooleanWhether the job supports Dice's easy-apply flow.
postedDatestringISO 8601 timestamp of when the posting was first listed.
modifiedDatestringISO 8601 timestamp of the last time the posting was updated.

Description & Skills

FieldTypeDescription
summarystringShort summary as shown on the search-results card.
descriptionstringFull job description with HTML stripped, ideal for plain-text indexing or LLM input.
descriptionHtmlstringFull description with the original HTML preserved.
skillsstring[]The skill tags the employer attached to the posting, e.g. ["Python", "Kubernetes", "Terraform"]. Arrives with the description, so leave fetchDescription on. Empty [] when the employer tagged none, or when fetchDescription is off.
isExpiredbooleantrue when the employer has closed the posting. Dice keeps closed jobs in its search results, so a small share of every run is no longer open โ€” between 0% and 1.3% of rows across our test runs. The full description is still collected, so you keep the row for market analysis and can filter it out for applications, and it counts toward your result total like any other row. Shown in the default output table. Only determined when fetchDescription is on; with it off every row reads false.

Run Provenance

FieldTypeDescription
searchQuerystringThe keyword that surfaced this row.
searchLocationstringThe location used for the search.
scrapedAtstringISO 8601 timestamp of when the record was captured.

Tips for Best Results

  • Use specific keywords โ€” "senior react developer" returns far cleaner results than "developer", because Dice ranks broad terms loosely. The keyword also drives how dense the skills column comes back: a specific role phrase like "business development manager" carries employer tags on around 98% of matches, while a broad phrase like "security clearance" thins out the deeper it goes and can land nearer 45%. Tighten the keyword when you need those tags dense, and leave fetchDescription on, since the tags arrive with the description.
  • Split broad searches instead of raising the cap โ€” every single search stops at 500 jobs no matter how many matches exist. Splitting a broad query into narrower ones by city, role or seniority, then running them as one batch, reaches far more unique jobs than one wide query ever will.
  • Batch related titles in one run โ€” put several variants in searchQueries (e.g. ["backend engineer", "platform engineer", "infrastructure engineer"]) and duplicates are removed across queries automatically, so you are never billed twice for the same posting. A run that finishes under your cap means the search genuinely ran out of unique jobs, and the final message says so explicitly.
  • Set postedWithinDays: "ONE" for fresh listings โ€” ideal for daily candidate-sourcing pipelines or new-job alerting.
  • Combine remoteOnly with a metro location โ€” Dice returns remote roles whose employers are headquartered in or hiring for that metro, which is what you want for time-zone or compliance-aware searches.
  • Check the isExpired column before a list goes to candidates โ€” Dice keeps closed postings in its search results, so a small share of every run is a job that no longer accepts applications: 0% to 1.3% of rows across our test runs. Those rows still arrive with the full description, they show up flagged in the default output table, and they count toward your result total like every other row. Keep them for market analysis, drop them for outreach.
  • Group by salaryPeriod before averaging anything โ€” Dice mixes hourly contract rates and annual salaries in one column, and the mix swings hard between searches. salaryPeriod is always filled whenever salaryMin is, so grouping on it is safe. Free-text values like "Depends on Experience" leave the parsed fields null while the raw salary string is always preserved.

Pricing

From $0.80 per 1,000 results โ€” one flat rate per job returned, whatever filters you use. No compute or time-based charges: you pay per result, plus a small fixed start fee each time a run begins. Bronze, Silver, and Gold subscribers pay progressively less, and the table below shows the total cost at each discount tier.

ResultsNo discountBronzeSilverGold
100$0.096$0.091$0.085$0.080
1,000$0.96$0.91$0.85$0.80
10,000$9.60$9.10$8.50$8.00
100,000$96.00$91.00$85.00$80.00

A "result" is one job row in your dataset, including the small share of postings Dice has already closed โ€” those arrive flagged as expired so you can filter them out. Standard Apify platform fees apply on top. No monthly rental, no tiered plans.

Integrations

Export data in JSON, CSV, Excel, or XML. Connect to 1,500+ apps via:

  • Zapier / Make / n8n โ€” Workflow automation
  • Google Sheets โ€” Direct spreadsheet export
  • Slack / Email โ€” Notifications on new results
  • Webhooks โ€” Get notified when a run completes
  • Apify API โ€” Full programmatic access

This actor is designed for legitimate recruiting, market research, lead generation, and labor-market analysis. Only public job listings are collected โ€” no private employer dashboards, applicant data, or personal contact details. Users are responsible for complying with applicable laws and Dice's Terms of Service. Do not redistribute scraped listings as a substitute for Dice's own product, and do not use collected data for spam, harassment, candidate impersonation, or any unlawful purpose.