# Dice Jobs Scraper — US Tech Jobs Data & API (`sian.agency/dice-jobs-scraper`) Actor

Dice.com scraper & tech-jobs data API. Extract US technology job postings: title, company, salary, skills, employment type, remote flags, location, dates & full descriptions — clean JSON/CSV. Search by query or paste a search URL. No account or API key needed.

- **URL**: https://apify.com/sian.agency/dice-jobs-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Stats:** 11 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 extracted overview jobs

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 — US Tech Jobs, Salaries & Skills Data 💼

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Jobs Search API](https://img.shields.io/badge/Store-Jobs%20Search%20API-1AE392)](https://apify.com/sian.agency/jsearch-jobs-scraper?fpr=sian) [![Glassdoor Scraper](https://img.shields.io/badge/Store-Glassdoor%20Scraper-0CAA41)](https://apify.com/sian.agency/glassdoor-data-scraper?fpr=sian) [![Email & Lead Scraper](https://img.shields.io/badge/Store-Email%20%26%20Lead%20Scraper-1AE392)](https://apify.com/sian.agency/email-contact-lead-scraper?fpr=sian)

#### 🎉 Turn Dice.com into a clean tech-jobs dataset — salary, skills & full descriptions in one run

##### Built for recruiters, sourcers, market researchers & HR-tech teams who need structured job data, not screenshots

***

### 📋 Overview

**Need US tech job data without copy-pasting from Dice all day?** This actor extracts technology job postings from Dice.com into a clean, structured dataset — search by keyword and location, or paste a search URL with all your filters, and export ready-to-use JSON or CSV.

**Why thousands of professionals choose us:**

- ✅ **Rich rows by default**: every job carries title, company, salary, employment type, remote status, derived tech-skills, location and dates — not just a title and a link
- ⚡ **Fast & lightweight**: pulls ~30 jobs per search page in seconds, hundreds per run
- 🎯 **Two depths, your call**: cheap **Overview** for bulk lists, or full **Detail** with the complete HTML description, normalized salary value, expiry date and postal code
- 💰 **Pay-per-result pricing**: you're only charged for jobs you actually receive — once per distinct job, never twice for a repeat, and no charge at all on invalid input
- 💎 **Auto-detected skills**: each posting is tagged with the tech skills mentioned (Python, AWS, Kubernetes, React…) for instant filtering
- ✨ **No account or API key needed**: just a keyword and a location

***

### ✨ Features

- 🔍 **Keyword + location search**: type `python developer` in `New York` — locations are geocoded automatically
- 🔗 **Search-URL mode**: paste any Dice `/jobs?…` URL and every on-site filter is preserved
- 🔎 **Detail mode**: enrich each job with its full description, normalized salary and posting expiry
- 🧠 **Skill tagging**: automatic detection of 35+ in-demand tech skills from each posting
- 🏠 **Remote & filter support**: filter by remote, employment type, posting date, visa sponsorship and Easy Apply
- 💵 **Salary capture**: both the raw salary string and the normalized numeric value (detail mode)
- 📅 **Fresh data**: sort by newest first to track jobs as they're posted
- 📤 **Clean export**: JSON, CSV or Excel straight from the Apify dataset

***

### 🎬 Quick Start

Pick a scrape mode, type a query and location, hit Start. In under a minute you'll have a structured dataset of US tech jobs.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~dice-jobs-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"scrapeMode":"overview","searchMode":"byQuery","query":"python developer","location":"United States","maxResults":100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your search

Type a keyword and location (e.g. `data engineer` in `Remote`), or paste a Dice search URL.

#### Step 2: Pick your depth

**Overview** for fast bulk lists, or **Detail** for full descriptions and normalized salaries.

#### Step 3: Run & export

Click Start and download your results as JSON, CSV or Excel.

**That's it! In about a minute, you'll have:**

- A structured dataset of tech jobs with salary and skills
- Clean fields ready for your ATS, CRM or spreadsheet
- An HTML run report summarizing what was extracted

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| scrapeMode | string | No | `overview` (fast list) or `detail` (full job pages) |
| searchMode | string | No | `byQuery`, `bySearchUrl` or `byJobUrl` |
| query | string | No | Search keyword(s), e.g. `python developer` |
| location | string | No | Free-text location, e.g. `United States`, `New York, NY`, `Remote` |
| searchUrls | array | No | One or more Dice `/jobs?…` search URLs |
| jobUrls | array | No | Specific Dice job URLs or GUIDs (detail mode) |
| maxResults | integer | No | Max **distinct** jobs per run (FREE: 25, PAID: unlimited) |
| sort | string | No | `relevance` or `date` (newest first) |
| postedDate | string | No | Posted within: 1 / 3 / 7 / 14 days |
| employmentType | string | No | Full-time, Contract, Part-time, Third party |
| isRemote | boolean | No | Only remote jobs |
| willingToSponsor | boolean | No | Only visa-sponsoring employers |
| easyApply | boolean | No | Only Easy Apply jobs |

**Example:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "byQuery",
  "query": "data engineer",
  "location": "United States",
  "sort": "date",
  "maxResults": 200
}
```

**By search URL:**

```json
{
  "searchMode": "bySearchUrl",
  "searchUrls": ["https://www.dice.com/jobs?q=devops&location=Remote&filters.postedDate=SEVEN"]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **35+ fields** including:

| Field | Type | Description |
|-------|------|-------------|
| jobTitle | string | The job posting title |
| company | string | Hiring company name |
| salary_raw | string | Salary as shown on the listing |
| value | number | Normalized numeric base salary (detail mode) |
| currency | string | Salary currency (USD) |
| employment_type | string | Full-time, Contract, etc. |
| is_remote | boolean | Whether the role is remote |
| skills | array | Auto-detected tech skills |
| location | string | Display location |
| city / state / country | string | Parsed location components |
| posted_date | string | When the job was posted |
| valid_through | string | Posting expiry (detail mode) |
| description | string | Full HTML description (detail mode) |
| url | string | Canonical job URL |

**Example:**

```json
{
  "jobTitle": "Lead Software Engineer (Python, Kubernetes)",
  "company": "Capital One",
  "salary_raw": "Depends on Experience",
  "value": 197300,
  "currency": "USD",
  "employment_type": "FULL_TIME",
  "is_remote": false,
  "skills": ["Python", "Java", "Go", "AWS", "Kubernetes", "Docker"],
  "city": "McLean",
  "state": "VA",
  "posted_date": "2026-06-10T21:08:34.000Z",
  "valid_through": "2026-07-23T20:57:46.000Z",
  "url": "https://www.dice.com/job-detail/036ff01b-8677-4679-8ff3-6fb2e8b62890"
}
```

***

### 💼 Use Cases & Examples

#### 1. Tech Recruiting Pipelines

**Recruiters and sourcers building candidate and req lists.**

**Input:** A keyword + location (e.g. `react developer` in `Austin, TX`)
**Output:** Structured postings with company, salary and skills
**Use:** Feed open reqs into your ATS and prioritize by skill match.

#### 2. Salary Benchmarking

**Compensation analysts pricing roles by market.**

**Input:** A role keyword across the US
**Output:** Raw and normalized salaries per posting
**Use:** Build pay bands by title, skill and location.

#### 3. Skill-Demand Research

**Market researchers tracking which technologies are hiring.**

**Input:** Broad queries over time (e.g. `machine learning`)
**Output:** Per-job skill tags and posting dates
**Use:** Quantify demand for Python vs Go vs Rust by month.

#### 4. Competitor Hiring Intelligence

**Talent teams watching who their rivals are hiring.**

**Input:** Company-specific searches
**Output:** Live and recent postings with roles and locations
**Use:** Spot hiring sprees and new team builds early.

#### 5. Job-Board Aggregation

**HR-tech products enriching their own listings.**

**Input:** Search URLs with filters
**Output:** Clean, normalized job records
**Use:** Power a niche job board or alert product.

#### 6. Lead Generation

**Agencies sourcing companies that are actively hiring.**

**Input:** Skill-based searches
**Output:** Hiring companies with locations
**Use:** Build outbound lists of companies in growth mode.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/dice-jobs-scraper').call({
  scrapeMode: 'overview',
  searchMode: 'byQuery',
  query: 'python developer',
  location: 'United States',
  maxResults: 100
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/dice-jobs-scraper').call(
    run_input={
        'scrapeMode': 'overview',
        'searchMode': 'byQuery',
        'query': 'data engineer',
        'location': 'Remote',
        'maxResults': 100
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~dice-jobs-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byQuery","query":"devops","location":"United States"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule (e.g. daily) or webhook
2. **HTTP Request**: Call the actor API
3. **Process**: Handle the JSON results
4. **Action**: Save to a sheet, sync to your ATS/CRM, or send alerts

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 jobs** per run — full feature access, same data quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** jobs per run
- Faster, uninterrupted processing
- Pay-per-result: only charged for jobs you actually receive

💰 **Best value for enriched tech-jobs data** — rich rows (salary + skills + remote) at cheap-list prices.

🔗 [View current pricing](https://apify.com/sian.agency/dice-jobs-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many jobs can I extract?**
A: FREE tier: 25 per run. PAID tier: unlimited.

**Q: Do I need a Dice account or API key?**
A: No — just a keyword and location, or a search URL.

**Q: What's the difference between Overview and Detail?**
A: Overview is the fast list (title, company, salary, skills, location). Detail fetches each job page for the full HTML description, normalized salary, expiry date and postal code.

**Q: What output formats are available?**
A: JSON, CSV and Excel — export directly from the Apify dataset.

**Q: Can I filter by remote, salary or date?**
A: Yes — filter by remote, employment type, posting date, visa sponsorship and Easy Apply, and sort by newest.

**Q: Is this legal?**
A: We only extract publicly available job postings. See the legal section below.

***

### 🐛 Troubleshooting

**No results returned**

- Check your keyword spelling and broaden the location (try `United States`)
- Remove restrictive filters (e.g. last-1-day + remote-only + sponsorship)

**Fewer results than expected on FREE**

- FREE is capped at 25 jobs per run — upgrade for unlimited

**Detail mode is slower**

- Detail fetches one page per job for the full description; use Overview for bulk lists

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

> **Trademark notice:** *Dice* and *Dice.com* are trademarks of DHI Group, Inc. This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by** DHI Group or Dice.com. All product and company names are the property of their respective owners and are used here for identification purposes only.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/dice-jobs-scraper/changelog.md

# Actor input Schema

## `scrapeMode` (type: `string`):

🧭 **Choose how much data per job:**

- **Overview** (cheap) — fast list scrape from search results: title, company, salary, skills, location, dates, remote flags. ~30 jobs/page.
- **Detail** (full) — fetches each job page for the complete HTML description, normalized salary value + currency, posting expiry date & postal code.

💡 Detail mode is a superset of overview — it discovers jobs from search, then enriches each one.

## `searchMode` (type: `string`):

🔀 **How do you want to find jobs?**

- **By Query** — type a keyword + location (e.g. "python developer" in "New York").
- **By Search URL** — paste a dice.com `/jobs?…` search URL (carries all your on-site filters).
- **By Job URL** — paste specific dice.com job URLs or GUIDs (detail mode only).

## `query` (type: `string`):

🔍 **Job keyword(s)** to search — e.g. `python developer`, `data engineer`, `devops`.

Used when Search Mode is **By Query**. Combine with the Location field below.

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

📍 **Free-text location** — e.g. `United States`, `New York, NY`, `Remote`. Dice geocodes it server-side, so a city, state, or the whole country all work.

Used with **By Query**.

## `searchUrls` (type: `array`):

🔗 **Paste one or more dice.com search URLs** (the `/jobs?…` page). All filters and sorting you set on the site are preserved.

Used when Search Mode is **By Search URL**.

💡 Click "Bulk edit" to paste multiple URLs (one per line).

## `jobUrls` (type: `array`):

🔎 **Paste specific dice.com job URLs or job GUIDs** to fetch full details for. Used when Scrape Mode is **Detail** and Search Mode is **By Job URL**.

💡 Click "Bulk edit" to paste multiple (one per line).

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

🔢 **How many jobs to return.**

- **FREE users:** capped at 25 per run.
- **PAID users:** unlimited.

Counts **distinct** jobs — if Dice serves the same posting on two pages it is saved and charged only once, and the run keeps paging until your number is met. Dice returns about 30 jobs per search page.

## `sort` (type: `string`):

↕️ **Result ordering.** `relevance` (default) or `date` (newest first).

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

📅 **Only jobs posted within this window.** Leave blank for all.

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

💼 **Filter by employment type.** Leave blank for all.

## `isRemote` (type: `boolean`):

🏠 **Only show remote jobs.**

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

🛂 **Only employers willing to sponsor a visa.**

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

⚡ **Only jobs that support one-click Easy Apply.**

## `useProxy` (type: `boolean`):

🛡️ **Route requests through a US residential proxy pool.** Off by default — Dice does not require a proxy. Enable only as a rate-limit hedge for very high-volume runs.

## Actor input object example

```json
{
  "scrapeMode": "overview",
  "searchMode": "byQuery",
  "query": "python developer",
  "location": "United States",
  "maxResults": 100,
  "sort": "relevance",
  "postedDate": "",
  "employmentType": "",
  "isRemote": false,
  "willingToSponsor": false,
  "easyApply": false,
  "useProxy": false
}
```

# Actor output Schema

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

Clean tech-job postings: title, company, salary, skills, location, dates & descriptions.

## `scrapingSummary` (type: `string`):

HTML summary showing extracted and failed results with key run metrics.

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

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/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 = {
    "query": "python developer",
    "location": "United States",
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/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/65YVZdkieT8UBCs3a/builds/VYYHp4rd1dMeICCrS/openapi.json
