# Dice Jobs Scraper - Tech Jobs & Salary (`thirdwatch/dice-jobs-scraper`) Actor

Scrape US tech jobs from Dice.com. Get job titles, companies, locations, salaries, employment type, posted dates, remote flags, descriptions, and apply URLs. Optional per-job skills extraction. No API key needed.

- **URL**: https://apify.com/thirdwatch/dice-jobs-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Jobs Scraper

> Scrape US tech jobs from Dice.com by keyword and location — title, company, location, salary, employment type, posted date, remote flags, and description.

### What you get

Dice is one of the largest US tech-focused job boards. This actor turns Dice search results into clean, structured rows so you can build talent pipelines, monitor hiring trends, benchmark compensation, and aggregate listings — no account, no setup. Search by keyword (e.g. "python", "data engineer", "devops") and location (a city, "Remote", or the whole US), set how many results you want, and get a downloadable dataset (JSON, CSV, Excel) you can use right away.

Every job row includes the basics from the listing: title, company, location, salary (when posted), employment type, remote/on-site flag, a short description summary, posted date, and the apply URL. If you want each job's required-skills list, turn on the **Scrape Skills** option (off by default — it makes runs slower).

### Output fields

| Field | Description |
|-------|-------------|
| `title` | Job title |
| `companyName` | Hiring company |
| `companyLogoUrl` | Company logo image URL |
| `jobLocation` | Object with `city`, `state`, `country`, `displayName` |
| `locationDisplay` | Human-readable location string |
| `salary` | Salary text when posted (e.g. "USD 130,000 - 160,000 per year"). Sometimes empty or "Depends on Experience" |
| `employmentType` | Full-time, Contract, etc. |
| `workplaceTypes` | On-Site, Remote, Hybrid |
| `isRemote` | Whether the job is remote |
| `easyApply` | Whether Dice Easy Apply is available |
| `summary` | Short job description summary |
| `postedDate` | When the job was posted (ISO 8601) |
| `modifiedDate` | When the job was last updated (ISO 8601) |
| `detailsPageUrl` | Apply / job detail URL |
| `guid` / `id` | Dice job identifier |
| `skills` | Required skills list — only present when **Scrape Skills** is turned on |

### Example output

```json
{
  "title": "Senior Lead Software Engineer, Full Stack (Python, ReactJS, AWS)",
  "companyName": "Capital One",
  "jobLocation": {
    "city": "New York",
    "state": "NY",
    "country": "USA",
    "displayName": "New York, New York, USA"
  },
  "locationDisplay": "New York, New York, USA",
  "salary": "USD 229,900.00 - 262,400.00 per year",
  "employmentType": "Full-time",
  "workplaceTypes": ["On-Site"],
  "isRemote": false,
  "easyApply": false,
  "summary": "Build and ship full-stack features across our card platform using Python, React, and AWS...",
  "postedDate": "2026-06-18T21:19:30Z",
  "modifiedDate": "2026-06-18T21:19:30Z",
  "detailsPageUrl": "https://www.dice.com/job-detail/b3df44c4-d9d3-4ec0-bf46-7393cd4a5ef7"
}
````

### Input parameters

| Parameter | Required | Description |
|-----------|----------|-------------|
| `q` | Yes | Job search keyword(s) to look up on Dice (e.g. "python", "data engineer", "devops"). |
| `location` | No | Location filter (e.g. "United States", "Remote", "New York, NY", "Austin, TX"). Defaults to the whole US. |
| `maxResults` | No | Maximum number of job listings to return. Defaults to 5 so a first run is cheap; raise it once you know the query works. |
| `scrapeSkills` | No | When on, adds each job's required-skills list. Slower, because it opens every job's detail page. Off by default. |

#### Search Python jobs across the US

```json
{
  "q": "python",
  "location": "United States",
  "maxResults": 5
}
```

#### Remote data engineering roles

```json
{
  "q": "data engineer",
  "location": "Remote",
  "maxResults": 100
}
```

#### DevOps jobs in a specific city, with skills

```json
{
  "q": "devops",
  "location": "Austin, TX",
  "maxResults": 25,
  "scrapeSkills": true
}
```

### Use cases

- **Recruiters and sourcers:** Build pipelines of open tech roles by skill, company, and location, and refresh them on a schedule.
- **Compensation analysts:** Aggregate posted salary ranges by role and market for benchmarking.
- **Hiring-trend intelligence:** Track which companies are hiring for which skills over time.
- **Job-board aggregators and ATS teams:** Feed Dice listings into your own board, ATS, or dashboard.
- **Founders and operators:** Watch a competitor's open tech roles and hiring velocity.

### Limitations

- **Base listing vs. skills:** Each job row includes title, company, location, salary, summary, and remote flag by default. The per-job **skills** list is opt-in — it only appears when you turn on **Scrape Skills**, which makes runs slower.
- **Salary isn't always there:** Many Dice listings don't post a salary. When that happens, the `salary` field is empty or reads "Depends on Experience".
- **US tech focus:** Dice is a US-focused tech job board. Coverage outside US tech roles is limited.
- **Results vary over time:** Available jobs, ordering, and which fields are filled in change by query and from day to day.

### Compared to alternatives

The main alternative on the Apify Store is **shahidirfan/Dice-Job-Scraper**. How this actor differs:

- **Cheaper first run.** This actor defaults to 5 results, so trying it out costs only a few cents. You scale up once you know the query is right, instead of burning credits on a default of dozens of jobs.
- **Optional skills, on your terms.** Required-skills extraction is a single toggle you control, so you only pay for the slower per-job step when you actually need it — not on every run.
- **Salary-honest output.** Salary is included when Dice posts it; when it isn't, you get a clear empty or "Depends on Experience" value instead of a misleadingly blank row.
- **Clean, dashboard-ready rows.** Structured location object plus a human-readable location string, posted/modified dates, remote and Easy Apply flags, and the direct apply URL in every row.

### FAQ

**Do I need an account or API key?**
No. Just enter a keyword and location and run it.

**How do I get the required skills for each job?**
Turn on the **Scrape Skills** toggle. This adds a `skills` array to each job. It makes runs slower because it opens every job's detail page, so it's best used with a smaller `maxResults`.

**Why is salary missing on some jobs?**
Many Dice listings simply don't post a salary. In those cases the `salary` field is empty or reads "Depends on Experience". That reflects what Dice shows.

**How many jobs can I get per query?**
Set `maxResults`. The actor pages through Dice search results until it hits your limit or runs out of matching jobs.

**Can I run it on a schedule?**
Yes. Use Apify's scheduler to re-run any saved input automatically (daily, hourly, etc.).

### Support and custom builds

Need scheduled monitoring, deduplication across runs, skill normalization, or dashboard-ready exports? Contact Thirdwatch at [thirdwatch.dev](https://thirdwatch.dev) or through the Apify actor support channel.

Last verified: 2026-06

# Actor input Schema

## `q` (type: `string`):

Job search keyword(s) to look up on Dice (e.g. 'python', 'data engineer', 'devops'). Searches US tech jobs.

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

Location filter (e.g. 'United States', 'Remote', 'New York, NY', 'Austin, TX'). Defaults to the whole US.

## `maxResults` (type: `integer`):

Maximum number of job listings to return. Dice returns ~20 jobs per page; pagination continues until this limit or the total result count is reached.

## `scrapeSkills` (type: `boolean`):

When enabled, adds the required skills list to each job. This makes the run slower because it opens each job's detail page. Off by default.

## Actor input object example

```json
{
  "q": "python",
  "location": "United States",
  "maxResults": 5,
  "scrapeSkills": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "q": "python",
    "location": "United States",
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/dice-jobs-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 = {
    "q": "python",
    "location": "United States",
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/dice-jobs-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 '{
  "q": "python",
  "location": "United States",
  "maxResults": 5
}' |
apify call thirdwatch/dice-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dice Jobs Scraper - Tech Jobs & Salary",
        "description": "Scrape US tech jobs from Dice.com. Get job titles, companies, locations, salaries, employment type, posted dates, remote flags, descriptions, and apply URLs. Optional per-job skills extraction. No API key needed.",
        "version": "1.0",
        "x-build-id": "UQDqHwuSfQpr7THVv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thirdwatch~dice-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thirdwatch-dice-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/thirdwatch~dice-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thirdwatch-dice-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/thirdwatch~dice-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thirdwatch-dice-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "q"
                ],
                "properties": {
                    "q": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Job search keyword(s) to look up on Dice (e.g. 'python', 'data engineer', 'devops'). Searches US tech jobs.",
                        "default": "python"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location filter (e.g. 'United States', 'Remote', 'New York, NY', 'Austin, TX'). Defaults to the whole US.",
                        "default": "United States"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of job listings to return. Dice returns ~20 jobs per page; pagination continues until this limit or the total result count is reached.",
                        "default": 5
                    },
                    "scrapeSkills": {
                        "title": "Scrape Skills (per-job detail fetch)",
                        "type": "boolean",
                        "description": "When enabled, adds the required skills list to each job. This makes the run slower because it opens each job's detail page. Off by default.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
