# Dice.com Jobs Scraper — Emails, Applicant Counts & Monitoring (`memo23/apify-dice-scraper`) Actor

Dice.com tech-jobs scraper — search by URL or filters. Deep job rows: pay rate, skills, visa sponsorship, applicant counts and full employer profile. Optional employer contact-email enrichment + payment-stack qualification. Monitoring mode scrapes only new listings. JSON or CSV out.

- **URL**: https://apify.com/memo23/apify-dice-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Stats:** 41 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$21.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 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 in **monitoring mode** so scheduled reruns return only never-seen-before postings.

### 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)
- ✅ Monitoring mode — schedule it and each rerun emits only jobs it has never seen before
- ✅ Applicant-count field (`apply.jobApplyCount`) captured whenever Dice exposes it
- ✅ 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

```json
{
  "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:

```json
{
  "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 mode + a schedule = an only-new-jobs feed for niche alerts (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

![How the Dice.com Jobs Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-dice.png)

1. **Input** — provide Dice search/job URLs, or a keyword plus optional filters
2. **Search crawl** — the actor walks the search result pages, auto-paginating until `maxItems` or the last page
3. **Detail fetch** — every job is fetched from Dice's job-detail API for the full payload
4. **Optional enrichment** — with `enrichEmails` on, each employer's website is discovered and scanned for a contact email; with `qualifyByPayment` also on, the same pages are checked for payment processors
5. **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 | Only never-seen jobs are fetched and saved. 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**

```json
{
  "keyword": "devops engineer",
  "workplaceType": "Remote",
  "employmentType": "FULLTIME",
  "postedDate": "SEVEN",
  "enrichEmails": true,
  "maxItems": 200
}
```

**2. Paste a search URL as-is**

```json
{
  "startUrls": [
    "https://www.dice.com/jobs?q=machine+learning&location=New+York,+NY&filters.workplaceTypes=Remote"
  ],
  "maxItems": 100
}
```

**3. Scheduled only-new-jobs monitor with payment-qualified leads**

```json
{
  "keyword": "react developer",
  "location": "United States",
  "monitoringMode": true,
  "enrichEmails": true,
  "qualifyByPayment": true
}
```

### Output Overview

Each dataset item is one job posting containing:

- **Identifiers & dates** — `id`, `jobUUID`, `status`, `postedDate`, `modifiedDate`, `deactivationDate`, `webURL`
- **Compensation & terms** — `payRate`, `employmentTypes`, `willingToSponsor`, `remote`, `travelRequired`
- **Role content** — `skills[]`, full HTML `description`, `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, `brandMaxInfo` company 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)

```jsonc
{
  "id": "5f2e9d3d57dda81c0c7009c880fa6275",
  "jobUUID": "e1be0c83-95a9-4c72-af15-457bd41c92ee",
  "status": "ACTIVE",
  "postedDate": "2026-07-16T03:04:53.000Z",
  "willingToSponsor": false,
  "skills": ["Software Engineer (I)"],
  "employmentTypes": ["CONTRACT_W2"],
  "payRate": "USD70 - USD88",
  "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)

```jsonc
{
  "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",
  "remote": true,
  "apply": { "easyApply": true, "applicationMethodName": "APPLY_TO_EMAIL" },
  "basicInfo": { "employerType": "Direct Hire" }
}
```

#### Enrichment columns (shape — added when `enrichEmails` / `qualifyByPayment` are on)

```jsonc
{
  /* …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`, `postedDate`, `modifiedDate`, `deactivationDate`, `webURL`

#### Compensation & Terms

- `payRate`, `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.companyInfo`
- `basicInfo.employerType` (`Recruiter` / `Direct Hire`), `basicInfo.summary`, `basicInfo.salary`

#### Enrichment (opt-in)

- `contactEmail`, `contactWebsite`, `emailEnrichment`
- `takesPayments`, `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 | ✅ | ✅ |
| **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 |
| **Monitoring mode** — reruns emit only never-seen jobs | ❌ | ✅ per-user KV dedup |
| **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`, every job is checked against a per-user key-value store of previously seen jobs; only never-seen jobs are fetched and saved. That's why a monitored rerun can return 4 rows while the Dice site shows 35 — the other 31 were captured earlier. Turn it off for a full scrape matching the Dice UI count.

#### 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](https://apify.com/memo23/apify-dice-scraper/issues) 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**](https://apify.com/memo23/apify-indeed-cheerio-ppr) — Indeed jobs by keyword or URL, no login, with employer emails
- [**Glassdoor Scraper**](https://apify.com/memo23/glassdoor-scraper-ppr) — jobs, reviews, and salaries with anti-bot handled
- [**StepStone Job Scraper**](https://apify.com/memo23/stepstone-search-cheerio-ppr) — DACH + EU jobs by keyword/URL with emails
- [**LinkedIn Jobs Scraper**](https://apify.com/memo23/linkedin-jobs-scraper) — LinkedIn job listings, no cookies or login
- [**Monster Scraper**](https://apify.com/memo23/monster-scraper) — Monster.com search + details with emails

Full list at [apify.com/memo23](https://apify.com/memo23).

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/apify-dice-scraper`).

**Purpose:** scrapes Dice.com tech-job postings into one row per job, with optional employer contact-email enrichment and payment-stack lead qualification no competing Dice actor provides.

**Minimal input:**

```json
{ "keyword": "software engineer", "location": "United States", "maxItems": 25 }
```

**Output:** one dataset row per job — `id`, `jobUUID`, `status`, `postedDate`, `payRate`, `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) overrides `keyword` + filter fields when non-empty.
- `monitoringMode: true` keeps per-user seen-job state in a key-value store; reruns emit only new jobs.
- `enrichEmails` adds employer email/website columns (best-effort, may be empty); `qualifyByPayment` requires `enrichEmails` and adds payment-stack fields at no extra charge.
- Billing is a flat monthly rental with a free trial; there is no per-row charge. 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.com` URLs 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

# Actor input Schema

## `startUrls` (type: `array`):

Full `dice.com` job search or job-detail URLs (copy from your browser).

## `keyword` (type: `string`):

Search query (`q` on Dice). Required when start URLs are empty.

## `location` (type: `string`):

Location text (e.g. Remote, United States, Austin, TX).

## `postedDate` (type: `string`):

Maps to Dice `filters.postedDate`. Leave unset for any time.

## `employmentType` (type: `string`):

Maps to `filters.employmentType`. Dice allows one type per search URL.

## `workplaceType` (type: `string`):

Maps to `filters.workplaceTypes` (Remote, Hybrid, or On-Site).

## `easyApply` (type: `boolean`):

When enabled, adds `filters.easyApply=true`.

## `willingToSponsor` (type: `boolean`):

When enabled, adds `filters.willingToSponsor=true`.

## `employerType` (type: `string`):

Maps to `filters.employerType`.

## `radius` (type: `integer`):

Optional radius used with Location (same unit as Radius unit). Omit to use Dice default.

## `radiusUnit` (type: `string`):

Unit for Search radius.

## `countryCode` (type: `string`):

Optional ISO country code for geo search (e.g. US).

## `language` (type: `string`):

Dice `language` query parameter.

## `latitude` (type: `number`):

Optional; use with Longitude for precise geo (advanced).

## `longitude` (type: `number`):

Optional; use with Latitude for precise geo (advanced).

## `locationPrecision` (type: `string`):

Optional Dice `locationPrecision` (e.g. Country, City) when using coordinates.

## `maxItems` (type: `integer`):

Maximum number of items that will be scraped.

## `monitoringMode` (type: `boolean`):

When enabled, each job is looked up in a per-user key-value store: only jobs never seen before are fetched and saved. You will see far fewer rows than the Dice website (e.g. 4 vs 35) if most listings were already stored in earlier runs. **Turn this off** for a normal full scrape of the current search results.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each employer by discovering the company's website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

## `qualifyByPayment` (type: `boolean`):

Requires "Enrich with contact emails". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments (is this a real paying business?), paymentProcessors (which stack), stripeLiveKey (the public key if exposed) and paymentConfidence. Turn raw contacts into monetization-qualified leads. No extra charge — included with each enriched company.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `proxy` (type: `object`):

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.dice.com/jobs?q=software+engineer&location=United+States&radiusUnit=mi&language=en&latitude=38.7945952&longitude=-106.5348379&countryCode=US&locationPrecision=Country"
  ],
  "keyword": "software engineer",
  "location": "United States",
  "easyApply": false,
  "willingToSponsor": false,
  "radiusUnit": "mi",
  "countryCode": "US",
  "language": "en",
  "maxItems": 1000,
  "monitoringMode": false,
  "enrichEmails": false,
  "qualifyByPayment": false,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.dice.com/jobs?q=software+engineer&location=United+States&radiusUnit=mi&language=en&latitude=38.7945952&longitude=-106.5348379&countryCode=US&locationPrecision=Country"
    ],
    "keyword": "software engineer",
    "location": "United States",
    "countryCode": "US",
    "language": "en",
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/apify-dice-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": ["https://www.dice.com/jobs?q=software+engineer&location=United+States&radiusUnit=mi&language=en&latitude=38.7945952&longitude=-106.5348379&countryCode=US&locationPrecision=Country"],
    "keyword": "software engineer",
    "location": "United States",
    "countryCode": "US",
    "language": "en",
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/apify-dice-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.dice.com/jobs?q=software+engineer&location=United+States&radiusUnit=mi&language=en&latitude=38.7945952&longitude=-106.5348379&countryCode=US&locationPrecision=Country"
  ],
  "keyword": "software engineer",
  "location": "United States",
  "countryCode": "US",
  "language": "en",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/apify-dice-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/apify-dice-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/xUPneOdhlxUKJjj1B/builds/HyCQ669HaTdyZ8e3Q/openapi.json
