Dice.com Jobs Scraper 💰$0.90/1k — Emails & Applicant Counts
Pricing
from $0.90 / 1,000 job results
Dice.com Jobs Scraper 💰$0.90/1k — Emails & Applicant Counts
Dice.com jobs scraper at $0.90/1k — 10% under the market leader, with data rivals lack: per-job applicant counts, employer contact emails and payment-stack lead scoring. Search by URL or filters; monitoring mode returns only new jobs. Deep rows — pay rate, skills, sponsorship. JSON/CSV.
Pricing
from $0.90 / 1,000 job results
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
3
Monthly active users
2 hours ago
Last modified
Categories
Share
Dice.com Jobs Scraper
The fastest way to turn Dice.com searches into structured tech-job data. Start from any Dice search URL, a job-detail URL, or a plain keyword with filters — and get one clean JSON/CSV row per job posting, with salary, skills, remote status, visa sponsorship, and the full company profile.
Beyond the job data itself, this actor can do three things no other Dice scraper offers: discover the employer's real website and contact email, qualify each employer as a paying business (payment-stack detection: Stripe, Shopify, PayPal and more), and run a change feed so scheduled reruns emit NEW / UPDATED / EXPIRED / REAPPEARED jobs — optionally POSTed to a webhook.
Why Use This Scraper?
- ✅ Two input modes — paste Dice search/job URLs, or let the actor build the search from keyword + filters
- ✅ Full job-detail rows — salary, skills, employment types, remote/hybrid, sponsorship, apply method
- ✅ Complete company profile per job — logo, description, branding assets, recruiter vs direct employer
- ✅ Opt-in employer contact emails — website discovery + contact-page harvesting per company
- ✅ Opt-in payment-stack qualification — flags employers that take money online (Stripe key detection included)
- ✅ Change-feed monitoring — scheduled reruns emit
NEW/UPDATED/EXPIRED/REAPPEARED, with an optional Slack or generic webhook - ✅ Applicant-count field (
apply.jobApplyCount) captured whenever Dice exposes it - ✅ Parsed compensation —
salaryMin/salaryMax/salaryCurrency/salaryPeriodnext to the rawpayRatestring - ✅
isExpired+ optionalskipRepostsso closed and recycled listings don't pollute a feed - ✅ Pure HTTP with the mobile detail API — no browser, fast runs, JSON or CSV out
Overview
The Dice.com Jobs Scraper is built for recruiters, staffing agencies, lead-gen teams, and job-market analysts who need structured job data from Dice.com — the leading US tech job board run by DHI Group.
The output is job-shaped rows. Whether you start from a search URL, a single job-detail URL, or a keyword, every dataset item is one job posting with the same schema: identifiers, dates, pay, skills, description, apply info, company profile, and location.
One thing to know up front: each job in the search results is fetched again through Dice's job-detail API, so rows contain the full detail payload (complete HTML description, company branding, apply metadata) — not just the thin search-result cards other scrapers return.
Supported Inputs
URL types
| URL type | Pattern | Example |
|---|---|---|
| Job search | dice.com/jobs?q=… | https://www.dice.com/jobs?q=software+engineer&location=United+States&countryCode=US |
| Job detail | dice.com/job-detail/{uuid} | https://www.dice.com/job-detail/e1be0c83-95a9-4c72-af15-457bd41c92ee |
Copy-pasteable startUrls
{"startUrls": ["https://www.dice.com/jobs?q=software+engineer&location=United+States&radiusUnit=mi&language=en&countryCode=US","https://www.dice.com/job-detail/e1be0c83-95a9-4c72-af15-457bd41c92ee"]}
Keyword / filter mode
Leave startUrls empty and the actor builds the Dice search URL for you:
{"keyword": "data engineer","location": "Austin, TX","workplaceType": "Remote","employmentType": "FULLTIME","postedDate": "SEVEN"}
Priority rule: when both are configured, startUrls wins — the keyword and filter fields are ignored for that run.
Unsupported inputs
- ❌ URLs outside
dice.com(other DHI boards like ClearanceJobs are not supported) - ❌ Anything behind the Dice login wall — candidate profiles, applications, employer dashboards
- ❌ Shortened or redirect URLs — paste the full URL from your browser
Use Cases
| Audience | Use case |
|---|---|
| Recruiters & staffing agencies | Pull fresh postings by tech stack, spot direct-hire vs recruiter listings, reach employers via enriched contact emails |
| Lead-gen & sales teams | Companies hiring engineers are buying tools — enrich with contact email + payment-stack signals to qualify leads |
| Job-market analysts | Track salary ranges, skill demand, remote-vs-onsite ratios across the US tech market |
| Job-alert builders | Monitoring + a schedule + webhookUrl = NEW / UPDATED / EXPIRED alerts for a niche search (e.g. visa-sponsoring roles) |
| HR & comp teams | Benchmark pay rates by title, region, and employment type from real listings |
| Agencies | Deliver client-ready Dice datasets without writing or maintaining scrapers |
How It Works

- Input — provide Dice search/job URLs, or a keyword plus optional filters
- Search crawl — the actor walks the search result pages, auto-paginating until
maxItemsor the last page - Detail fetch — every job is fetched from Dice's job-detail API for the full payload
- Optional enrichment — with
enrichEmailson, each employer's website is discovered and scanned for a contact email; withqualifyByPaymentalso on, the same pages are checked for payment processors - Output — one JSON row per job, exportable as JSON, CSV, Excel, or via the Apify API
Input Configuration
Input fields
| Field | Type | Required | Notes |
|---|---|---|---|
startUrls | array<string> | yes (or keyword) | Full Dice search or job-detail URLs; overrides filter fields when non-empty |
keyword | string | yes (when no URLs) | Search query (q on Dice) |
location | string | optional | e.g. Remote, United States, Austin, TX |
postedDate | string enum | optional | ONE (24 h), THREE (3 days), SEVEN (7 days); unset = any time |
employmentType | string enum | optional | FULLTIME, PARTTIME, CONTRACTS, THIRD_PARTY (one per search) |
workplaceType | string enum | optional | Remote, Hybrid, On-Site |
easyApply | boolean | optional | Only jobs with Dice Easy Apply. Default false |
willingToSponsor | boolean | optional | Only visa-sponsoring jobs. Default false |
employerType | string enum | optional | Recruiter or Direct Hire |
radius / radiusUnit | integer / mi·km | optional | Search radius around location |
countryCode, language | string | optional | Geo/language query params (e.g. US, en) |
latitude, longitude, locationPrecision | number / string | optional | Advanced precise-geo search |
maxItems | integer | optional | Cap on scraped jobs. Default 1000 |
monitoringMode | boolean | optional | Change feed: emit NEW / UPDATED / EXPIRED / REAPPEARED. Default false |
monitoringStateKey | string | optional | Names the feed store. Default is a hash of the start URLs |
emitUnchanged | boolean | optional | Also save rows whose snapshot did not change. Default false |
webhookUrl | string | optional | POST each change as JSON (Slack incoming webhooks get a text line) |
skipReposts | boolean | optional | Drop listings whose title + company + description was already seen under a different Dice id. Default false |
enrichEmails | boolean | optional | Adds contactEmail, contactWebsite, emailEnrichment. Default false |
qualifyByPayment | boolean | optional | Requires enrichEmails. Adds takesPayments, paymentProcessors, stripeLiveKey, paymentConfidence. Default false |
maxConcurrency / minConcurrency | integer | optional | Defaults 10 / 1 |
maxRequestRetries | integer | optional | Default 100 |
proxy | object | optional | Defaults to Apify Residential |
Common scenarios
1. Remote full-time roles, last 7 days, with employer emails
{"keyword": "devops engineer","workplaceType": "Remote","employmentType": "FULLTIME","postedDate": "SEVEN","enrichEmails": true,"maxItems": 200}
2. Paste a search URL as-is
{"startUrls": ["https://www.dice.com/jobs?q=machine+learning&location=New+York,+NY&filters.workplaceTypes=Remote"],"maxItems": 100}
3. Scheduled change feed with payment-qualified leads and a Slack webhook
{"keyword": "react developer","location": "United States","monitoringMode": true,"webhookUrl": "https://hooks.slack.com/services/…","enrichEmails": true,"qualifyByPayment": true}
Output Overview
Each dataset item is one job posting containing:
- Identifiers & dates —
id,jobUUID,status,isExpired,isRepost,changeType,changedFields,firstSeenAt,lastSeenAt,postedDate,modifiedDate,deactivationDate,webURL - Compensation & terms —
payRate,salaryMin,salaryMax,salaryCurrency,salaryPeriod,employmentTypes,willingToSponsor,remote,travelRequired - Role content —
skills[], full HTMLdescription,position.title,position.location(city, state, coordinates, workplace types) - Apply metadata —
apply.easyApply,apply.applicationMethodName,apply.url,apply.jobApplyCount(when Dice exposes it) - Company profile —
company.name, logo, profile URL,brandMaxInfocompany description, branding assets - Search-card snapshot —
basicInfo(the original search-result card: summary, salary text,employerType, easy-apply flag) - Optional enrichment —
contactEmail,contactWebsite,emailEnrichment, and payment fields when toggled on
Rows are nested JSON. Apify's export automatically flattens them for CSV/Excel (e.g. position.location.city becomes a column).
Output Samples
Search start — contract role (trimmed real row)
{"id": "5f2e9d3d57dda81c0c7009c880fa6275","jobUUID": "e1be0c83-95a9-4c72-af15-457bd41c92ee","status": "ACTIVE","isExpired": false,"isRepost": false,"changeType": "NEW","changedFields": [],"firstSeenAt": "2026-09-15T15:00:00.000Z","lastSeenAt": "2026-09-15T15:00:00.000Z","postedDate": "2026-07-16T03:04:53.000Z","willingToSponsor": false,"skills": ["Software Engineer (I)"],"employmentTypes": ["CONTRACT_W2"],"payRate": "USD70 - USD88","salaryMin": 70,"salaryMax": 88,"salaryCurrency": "USD","salaryPeriod": "hour","description": "job summary:<br /><br /><p>As a Software Engineer, you make direct technical contributions…", // full HTML, trimmed"webURL": "https://www.dice.com/job-detail/e1be0c83-95a9-4c72-af15-457bd41c92ee","remote": false,"apply": {"url": "https://www.randstadusa.com/jobs/4/1339256/software-engineer-i_mountain-view/…","easyApply": false,"applicationMethodName": "APPLY_TO_URL","jobApplyCount": null},"company": {"name": "Randstad Digital","absoluteLogoPath": "https://d3qscgr6xsioh.cloudfront.net/nwd2B9CDT8Oo4K91VMeJ_transformed.png?format=webp","profileUrl": "https://www.dice.com/ee3855f3-d056-5325-bc31-ad5f53052a28"},"position": {"title": "Software Engineer (I)","location": { "city": "Mountain View", "state": "CA", "displayName": "Mountain View, CA, US", "workplaceTypes": ["ONSITE"] }},"basicInfo": { "employerType": "Recruiter", "employmentType": "Contract", "salary": "USD70 - USD88", "easyApply": false }/* …more fields: modifiedDate, deactivationDate, posterId, telecommuteOption, brandMaxInfo… */}
Remote + Easy Apply row (trimmed real row)
{"id": "5c44a28d10f36e0591a7a2fddc3ebd1b","jobUUID": "9a306c41-61ab-4e5c-985b-42082ab248f6","position": { "title": "Sr Software Engineer with Hadoop & AWS" },"company": { "name": "Innovative IT Solutions Inc" },"skills": ["Hadoop", "AWS", "lead", "engineer"],"employmentTypes": ["CONTRACT_W2"],"payRate": "60","salaryMin": 60,"salaryMax": 60,"salaryCurrency": null,"salaryPeriod": "hour","isExpired": false,"remote": true,"apply": { "easyApply": true, "applicationMethodName": "APPLY_TO_EMAIL" },"basicInfo": { "employerType": "Direct Hire" }}
Enrichment columns (shape — added when enrichEmails / qualifyByPayment are on)
{/* …all job fields above, plus: */"contactEmail": "…", // best contact email found on the employer's site ("" if none)"contactWebsite": "…", // discovered employer website"emailEnrichment": { /* detailed discovery trace */ },"takesPayments": true, // qualifyByPayment only"paymentProcessors": ["stripe"],"stripeLiveKey": "pk_live_…", // when publicly exposed on the site"paymentConfidence": "high"}
Key Output Fields
Job Core
id,jobUUID,status,isExpired,isRepost,changeType(NEW/UPDATED/UNCHANGED/EXPIRED/REAPPEARED),changedFields[],firstSeenAt,lastSeenAt,postedDate,modifiedDate,deactivationDate,webURL
Compensation & Terms
payRate(raw Dice string),salaryMin,salaryMax,salaryCurrency,salaryPeriod(hour/day/week/month/year)employmentTypes[],willingToSponsor,remote,telecommuteOption,travelRequired
Role & Location
position.title,skills[],description(full HTML)position.location—city,state,country,postalCode,latitude,longitude,displayName,workplaceTypes[]
Apply
apply.easyApply,apply.applicationMethodName(APPLY_TO_URL/APPLY_TO_EMAIL),apply.url,apply.jobApplyCount
Company
company.name,company.absoluteLogoPath,company.profileUrl,company.brandMaxInfo.companyInfobasicInfo.employerType(Recruiter/Direct Hire),basicInfo.summary,basicInfo.salary
Enrichment (opt-in)
contactEmail,contactWebsite,emailEnrichmenttakesPayments,paymentProcessors[],stripeLiveKey,paymentConfidence
What Makes This Richer Than the Competition
The other Dice.com actors on Apify Store return the standard job fields — title, company, salary, description — and stop there. This actor is the only one that turns each posting into a qualified lead and supports scheduled monitoring.
| Capability | shahidirfan · worldunboxer · fatihtahta | This actor |
|---|---|---|
| Job title, company, salary, skills, description | ✅ | ✅ |
Parsed salary (salaryMin / salaryMax / currency / period) | partial | ✅ |
Expired / repost flags (isExpired, skipReposts) | ❌ | ✅ |
Applicant count per job (apply.jobApplyCount) | ❌ | ✅ (when Dice exposes it) |
Employer contact-email enrichment (contactEmail / contactWebsite) | ❌ | ✅ opt-in |
Payment-stack qualification (takesPayments, paymentProcessors, stripeLiveKey) | ❌ | ✅ opt-in |
Change feed — NEW / UPDATED / EXPIRED + webhook | ❌ / partial | ✅ per-search KV + Slack/generic POST |
Full company profile — branding assets, recruiter vs direct, willingToSponsor, modifiedDate | partial | ✅ complete |
If you only need a flat list of postings, any of these actors works. If you need to reach the employer, score the lead, or track what's new, this is the only Dice actor that does it.
FAQ
Which Dice URLs are supported?
Job search URLs (dice.com/jobs?q=…, with any filters applied in your browser) and job-detail URLs (dice.com/job-detail/{uuid}). Login-gated pages, other DHI boards, and shortened URLs are not supported.
Do I need a URL at all?
No. Set keyword (plus optional location, workplaceType, employmentType, postedDate, easyApply, willingToSponsor, employerType, radius/geo fields) and the actor builds the search URL. If startUrls is non-empty, it takes priority and the filter fields are ignored.
What exactly does monitoring mode do?
With monitoringMode: true, each job is compared to a per-search snapshot store. Reruns emit NEW, UPDATED (title / pay / status / dates / description changed), REAPPEARED (was expired, now back), or EXPIRED (vanished from this search after a full pagination). Unchanged jobs are skipped unless emitUnchanged is on. EXPIRED is not emitted if maxItems or maxPages stopped the crawl early — that would mark jobs you simply did not reach. Two different keywords do not expire each other unless you set the same monitoringStateKey. Optional webhookUrl POSTs each change (Slack incoming-webhook URLs get a one-line text payload). Turn monitoring off for a full scrape matching the Dice UI count.
How do isExpired and skipReposts work?
isExpired is true when Dice marks the job anything other than ACTIVE, or when deactivationDate is already in the past. The row is still saved — filter it in your export if you want live jobs only. skipReposts: true drops a job (and does not charge it) when the same title + company + description was already seen under a different Dice id. Saved rows have isRepost: false because matches never reach the dataset.
How does email enrichment work, and is it guaranteed?
It's best-effort. Dice only links to the company's Dice profile, so the actor discovers the employer's real website by name, then reads its contact/about pages for an email. Rows get contactEmail (may be empty), contactWebsite, and a detailed emailEnrichment object. Enrichment never blocks a row — jobs without a discoverable site still come through.
What is payment qualification for?
Lead scoring. With qualifyByPayment: true (requires enrichEmails), the pages already fetched for email discovery are scanned for payment processors and e-commerce platforms — Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more. You get takesPayments, paymentProcessors, stripeLiveKey (if publicly exposed), and paymentConfidence — useful for separating real paying businesses from shell listings.
Are applicant counts always filled?
No. apply.jobApplyCount is captured whenever Dice's API exposes it, but Dice frequently returns null — treat it as a bonus signal, not a guaranteed field.
Can I scrape candidate profiles or anything behind login?
No. The actor only accesses publicly available job and search pages. Candidate data, applications, and employer dashboards are out of scope.
Is there a free tier limit?
Yes — runs on non-paying Apify accounts are capped at 100 jobs and monitoring mode is disabled. Paid accounts get the full maxItems (default 1000) and all features.
What about proxies and rate limits?
The default configuration (Apify Residential) works out of the box. The actor uses plain HTTP requests plus Dice's mobile detail API — no browser — so runs are fast and light on memory.
Support
Found a bug or have a feature request? Open an issue on the actor's Issues tab or email me at muhameddidovic@gmail.com.
Additional Services
Need a custom export shape, extra fields, other job boards, or scheduled delivery to your CRM/Sheets? I do tailored work — drop me a line at muhameddidovic@gmail.com.
Explore More Scrapers
If you found this useful, you might also like:
- Indeed Jobs Scraper — Indeed jobs by keyword or URL, no login, with employer emails
- Glassdoor Scraper — jobs, reviews, and salaries with anti-bot handled
- StepStone Job Scraper — DACH + EU jobs by keyword/URL with emails
- LinkedIn Jobs Scraper — LinkedIn job listings, no cookies or login
- Monster Scraper — Monster.com search + details with emails
Full list at apify.com/memo23.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/apify-dice-scraper).
Purpose: scrapes Dice.com tech-job postings into one row per job, with employer contact-email enrichment, payment-stack lead qualification, parsed salary, and a NEW/UPDATED/EXPIRED change feed no competing Dice actor combines.
Minimal input:
{ "keyword": "software engineer", "location": "United States", "maxItems": 25 }
Output: one dataset row per job — id, jobUUID, status, isExpired, isRepost, changeType, changedFields, firstSeenAt, lastSeenAt, postedDate, deactivationDate, payRate, salaryMin, salaryMax, salaryCurrency, salaryPeriod, skills[], employmentTypes[], willingToSponsor, remote, description (HTML), webURL, apply {easyApply, applicationMethodName, url, jobApplyCount}, company {name, absoluteLogoPath, profileUrl, brandMaxInfo}, position {title, location {city, state, displayName, workplaceTypes}}, basicInfo {employerType, salary, summary}; plus opt-in contactEmail, contactWebsite, emailEnrichment, takesPayments, paymentProcessors, stripeLiveKey, paymentConfidence.
Behaviors an agent should know:
- Always set
maxItems; the default is 1000 and a broad keyword can hit it. startUrls(full dice.com search or job-detail URLs) overrideskeyword+ filter fields when non-empty.monitoringMode: trueemits a change feed (NEW/UPDATED/EXPIRED/REAPPEARED). Pair withwebhookUrlfor Slack or a generic POST.EXPIREDonly after a full search pagination.skipReposts: truedrops recycled listings (same title + company + description, new Dice id).isExpiredis always set from status /deactivationDate.enrichEmailsadds employer email/website columns (best-effort, may be empty);qualifyByPaymentrequiresenrichEmailsand adds payment-stack fields at no extra charge.- Billing is pay-per-event: a one-time actor-start fee, $0.0009 per job result, and a $0.010
contact-emailcharge applied only whenenrichEmailsactually finds an email. Non-paying Apify accounts are capped at 100 rows per run and cannot use monitoring mode. - Public data only — no candidate profiles or login-gated pages; only
dice.comURLs are accepted.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by DHI Group, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available job-listing pages — no authenticated endpoints, paid features, or content behind the dice.com login wall. Users are responsible for ensuring their use complies with dice.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.
SEO Keywords
dice scraper, scrape dice.com, dice.com API, dice jobs scraper, dice job listings export, tech jobs scraper, IT jobs data, job board scraper, job postings API, tech recruiting data, recruiter lead generation, employer contact emails, hiring companies leads, salary benchmark data, job market analysis, visa sponsorship jobs data, remote tech jobs data, job posting monitoring, staffing agency data, tech talent intelligence, Apify dice scraper, dice.com JSON export, dice.com CSV export