# 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

from $1.20 / 1,000 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Dice Jobs Scraper

> **Thirdwatch portfolio:** 8,800+ users across 140+ public Actors, 2M+ records delivered, >95% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).

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

### Related Actors

- [Adzuna Scraper - Global Job Search Aggregator](https://apify.com/thirdwatch/adzuna-jobs-scraper) — Thirdwatch
- [Career Site Job Listing Scraper](https://apify.com/thirdwatch/career-site-job-scraper) — Thirdwatch

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(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 '{
  "q": "python",
  "location": "United States",
  "maxResults": 5
}' |
apify call thirdwatch/dice-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thirdwatch/dice-jobs-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/kHaylwJqxtu0IwS9N/builds/aFn5gUZgwTe9fcI0F/openapi.json
