# Dice Scraper (`deltaspider/dice-scraper`) Actor

Extract structured Dice job listings with titles, salaries, company data, locations, and hiring signals

- **URL**: https://apify.com/deltaspider/dice-scraper.md
- **Developed by:** [delta spider](https://apify.com/deltaspider) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 44 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 standard results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## 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

### What does Dice Job Scraper do?

It collects technology job listings from Dice.com and returns them as structured rows. Search by keyword and location, or paste a Dice search URL and get exactly the results you saw on the site. Turn on full details and every job also carries its complete description, its tagged skills, and its salary as numbers.

It is built for recruiters and sourcers, staffing teams tracking who is hiring, and analysts studying the technology job market.

### Why use it

- **Full descriptions, not previews.** Dice's own search API truncates every summary at 500 characters. Turn on full details and you get the complete posting, usually a few thousand characters, and up to ten thousand.
- **Skills as data.** Detailed jobs carry their tagged skills as an array, ready to count, filter, or join. Around ten per job is typical and the richest postings list sixty.
- **Salary you can compute on.** Where Dice publishes a figure, detailed rows carry it as numbers in `salaryMin`, `salaryMax`, `salaryValue` and `salaryCurrency`, alongside the original free-text string. Roughly half of detailed jobs have one.
- **Your own filters.** Anything you can select on dice.com/jobs works here, by pasting the URL.
- **No duplicates.** Dice reorders its index while a run pages through it. Repeats are removed, so every row is a distinct job.
- **Pay only for rows.** No monthly fee, and nothing is charged for a run that returns nothing.

### What data you get

Every job returns the title, company, location broken into city, state, region and country, employment type, employer type, workplace type, remote flag, sponsorship flag, easy-apply flag, posted and modified dates, a 500-character summary, and links to the job and the company.

Turn on **Also scrape full job details** and each job additionally returns:

| field                                     | what it is                                              |
| ----------------------------------------- | ------------------------------------------------------- |
| `description`                             | the complete posting, usually a few thousand characters |
| `skills`                                  | the job's tagged skills, around ten per job             |
| `salaryMin` / `salaryMax` / `salaryValue` | salary as numbers                                       |
| `salaryCurrency`                          | currency code                                           |
| `validThrough`                            | when the posting expires                                |
| `companyProfileUrl`                       | the company's Dice profile                              |

### How to scrape Dice jobs

1. Enter a search term, and optionally a location and distance.
2. Or run your search on dice.com/jobs and paste the URL into **Filter by URL**.
3. Set how many jobs you want. The default is 500.
4. Turn on **Also scrape full job details** if you need descriptions and skills.
5. Run it, then export as JSON, CSV, or Excel.

### Input

All fields are optional.

| field                        | notes                                                       |
| ---------------------------- | ----------------------------------------------------------- |
| Search term                  | job title, keywords, or company                             |
| Search location              | city, country, or postal code                               |
| Distance                     | 10, 30, 50 or 75 miles; only applies with a location        |
| Filter by URL                | a dice.com/jobs URL; takes precedence over the fields above |
| Posted date                  | any date, today, last 3 days, last 7 days                   |
| Employment type              | full-time, part-time, contracts, third party                |
| Employer type                | direct hire, recruiter, other                               |
| Workplace types              | remote, on-site, hybrid                                     |
| Max results                  | default 500, up to 10,000, or 5,000 with full details       |
| Also scrape full job details | off by default                                              |

```json
{
  "keyword": "data engineer",
  "location": "Austin, TX, USA",
  "radius": "50",
  "max_results": 500,
  "scrape_details": true
}
```

### Usage examples

**Remote senior roles, this week.** Search term `senior software engineer`, workplace type `Remote`, posted date `Last 7 Days`.

**Who is hiring in one metro.** Search location `Austin, TX, USA`, distance `50`, employer type `Direct Hire` to exclude agencies.

**Skills demand study.** Any keyword, full details on, then count the `skills` arrays across a few thousand rows.

**Daily monitoring.** Posted date `Today`, scheduled to run each morning, results pushed to your own store.

### Sample output

```json
{
  "title": "Senior Data Engineer",
  "companyName": "Booz Allen Hamilton",
  "jobLocation": { "city": "McLean", "state": "Virginia", "country": "USA", "region": "VA" },
  "employmentType": "Full-time",
  "workplaceTypes": ["Hybrid"],
  "isRemote": false,
  "willingToSponsor": false,
  "salary": "USD 61,900.00 - 141,000.00 per year",
  "salaryMin": 61900,
  "salaryMax": 141000,
  "salaryCurrency": "USD",
  "skills": ["Python", "Apache Spark", "ETL", "AWS"],
  "postedDate": "2026-08-12T20:06:04Z",
  "validThrough": "2026-09-21T18:32:47.000Z",
  "detailsPageUrl": "https://www.dice.com/job-detail/f178e384-..."
}
```

### What it costs

|                            | free plan     | paid plans    |
| -------------------------- | ------------- | ------------- |
| Each job                   | $0.0005       | $0.0004       |
| Each job with full details | $0.0005 extra | $0.0004 extra |

500 jobs costs $0.25 on the free plan and $0.20 on a paid one. With full descriptions and skills for all 500, $0.50 and $0.40. There is no monthly fee, no charge for starting a run, and a run that finds nothing costs nothing.

### Tips

- Not every job carries every field, and salary is the one that varies most: about one posting in seven omits it for engineering searches, rising to half for nursing. Treat everything except the title, id, and URL as optional.
- Full details make one extra request per job, so runs take noticeably longer and are capped at 5,000 jobs.
- A run stops early when Dice has fewer matches than you asked for.

### Integrations and export

Results land in a standard Apify dataset: export as JSON, CSV, Excel, or XML, pull them through the API, or connect to Make, Zapier, Slack, Google Sheets, or your own webhook.

### FAQ

**How many jobs can one run collect?** Up to 10,000, or 5,000 with full details on.

**Can I use a Dice search URL instead of the fields?** Yes. Paste it into Filter by URL and it takes precedence.

**Why is salary sometimes missing?** Because Dice does not always publish one, and how often depends on what you search for. Measured across a thousand results per search, engineering roles omitted it 14% of the time and nursing roles 51%.

**Is the description the full text?** Yes, when full details are on. Without it you get Dice's own 500-character summary.

**Are the rows unique?** Yes. Dice reorders its index mid-run and re-serves jobs across page boundaries; those repeats are removed.

### Support

Found something wrong or missing? Open an issue on the Actor's Issues tab and it will be looked at.

# Actor input Schema

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

Enter a search term (Job title, Keywords, Company)

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

Enter a location (City, Country, Postal code)

## `radius` (type: `string`):

How far are you willing to commute from the location specified in your search?

## `filter_by_url` (type: `string`):

Go to dice.com/jobs and choose your filters. Then copy the URL and paste it here. Takes precedence over the individual fields above. Filters Dice itself ignores are ignored here too.

## `posted_date` (type: `string`):

Select the posted date

## `max_results` (type: `integer`):

How many jobs to return. A run stops early if Dice has fewer matches.

## `scrape_details` (type: `boolean`):

Fetch each job's own Dice page to add the full description, skills, structured salary, and expiry date. This makes one extra request per job, so runs take much longer and are capped at 5000 jobs.

## `employmentType` (type: `array`):

Filter by employment types

## `employerType` (type: `array`):

Filter by employer types

## `workplaceTypes` (type: `array`):

Filter by workplace types

## Actor input object example

```json
{
  "radius": "",
  "posted_date": "",
  "max_results": 500,
  "scrape_details": false,
  "employmentType": [],
  "employerType": [],
  "workplaceTypes": []
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("deltaspider/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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call deltaspider/dice-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deltaspider/dice-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/io0P3liahIIYFFcFC/builds/EM28kokUygaySJlEA/openapi.json
