# Dice Jobs Scraper (Cheap) (`data_api/dice-jobs-scraper-cheap`) Actor

Dice.com scraper that collects tech job listings by keyword search. Gives you job title, company, location, employment type, posting date, and direct apply URL for each result, with automatic pagination across multiple pages.

- **URL**: https://apify.com/data\_api/dice-jobs-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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/platform/actors/running/actors-in-store#pay-per-event

## 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

![Dice Jobs Scraper](cover.jpg)

Hunting for tech roles on Dice means scrolling page after page and copying the same details by hand: who's hiring, where, full-time or contract, and the link to apply. This scraper does the scrolling for you. Type in the keywords you care about, and every matching posting comes back as a clean row with the role title, employer, location, contract type, and a direct listing link already split out. It paginates on its own, runs without code, and you only pay for what you pull.

### What you get

Each Dice posting comes back as one row, grouped into three kinds of data:

- **The role** — `roleTitle`, `contractType`, `workLocation`, `summaryText`, `listedOn`, `isPromoted`
- **The employer** — `employerName`, `employerLogo`, `employerProfileUrl`
- **Identifiers and links** — `postingId`, `postingGuid`, `listingUrl`, `searchTerm`, `collectedAt`

### Quick start

1. Hit **Try for free** and add one or more queries under **Search terms** (for example `data engineer` and `cloud architect`).
2. Set **Search location** and **Location scope** to aim at a country, state, or single city.
3. Pick a **Results per term** cap to control how much you pull on each run.
4. Press **Start**, then export the rows as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Recruiters** — build a live feed of openings in your niche and reach out before the role fills.
- **Job seekers** — sweep several titles at once and export a single shortlist you can sort and filter.
- **Market researchers** — measure hiring demand by role, employer, and region over time.
- **Sales teams** — spot companies that are staffing up and time your outreach to their growth.
- **Salary and skills analysts** — gather a structured sample of postings to study titles, contract mixes, and locations.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerms` | array of strings | Yes | Job queries to run on Dice; each term is searched separately. Prefilled with `data engineer`. |
| `searchLocation` | string | No | Place to search within, country-wide or a single city/state. Default `United States`. |
| `regionCode` | string | No | Two-letter ISO 3166-1 alpha-2 country code. Default `US`. |
| `locationScope` | string | No | How wide the location filter reaches: Country, State, or City. Default `Country`. |
| `resultsLimit` | integer | No | Cap on postings gathered per term; the count resets each term. Default `25`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before giving up. Default `45`. |

#### Example input

```json
{
    "searchTerms": ["data engineer", "cloud architect"],
    "searchLocation": "Austin, Texas",
    "regionCode": "US",
    "locationScope": "City",
    "resultsLimit": 25,
    "timeoutSeconds": 45
}
````

### Output

Every posting on the search results becomes one row, paginated automatically up to your per-term cap. Fields Dice doesn't show on a given card come back empty rather than guessed.

#### Example output

```json
{
    "postingId": "a1b2c3d4",
    "postingGuid": "f8e7d6c5-1234-4abc-9def-0123456789ab",
    "roleTitle": "Senior Data Engineer",
    "employerName": "Northwind Analytics",
    "employerLogo": "https://www.dice.com/assets/logos/northwind-analytics.png",
    "employerProfileUrl": "https://www.dice.com/company-profile/northwind-analytics",
    "workLocation": "Austin, Texas",
    "listedOn": "2 days ago",
    "listingUrl": "https://www.dice.com/job-detail/f8e7d6c5-1234-4abc-9def-0123456789ab",
    "summaryText": "Build and own batch and streaming pipelines on AWS, partnering with analytics teams to ship reliable data products.",
    "contractType": "Full-time",
    "isPromoted": false,
    "searchTerm": "data engineer",
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `postingId` | string | Dice's internal short hash ID for the posting |
| `postingGuid` | string | GUID Dice embeds in the posting link |
| `roleTitle` | string | Job title as printed on the card |
| `employerName` | string | Company doing the hiring |
| `employerLogo` | string | Link to the company logo image |
| `employerProfileUrl` | string | Link to the company profile page on Dice |
| `workLocation` | string | Where the role is based, e.g. `Austin, Texas` or `Remote` |
| `listedOn` | string | Relative posting age, e.g. `Today`, `Yesterday`, `3 days ago` |
| `listingUrl` | string | Direct link to the full posting page on Dice |
| `summaryText` | string | Short description blurb shown on the result card |
| `contractType` | string | Engagement badge, e.g. `Full-time`, `Contract`, `Part-time` |
| `isPromoted` | boolean | True when Dice flags the posting as Sponsored |
| `searchTerm` | string | The keyword query that surfaced this posting |
| `collectedAt` | string | ISO 8601 UTC timestamp of when the row was captured |

### Tips for best results

- **Be specific with your terms.** Tighter queries like `kubernetes platform engineer` return cleaner, more relevant rows than broad ones.
- **Match `locationScope` to your goal.** Use City for a focused metro search and Country for a nationwide sweep.
- **Start small, then scale.** Run with a low `resultsLimit` to confirm the output fits your pipeline before pulling the full set.
- **Run several terms in one go.** Each term in `searchTerms` is swept on its own, so you can cover a whole role family in a single run.
- **Raise `timeoutSeconds`** if a slow connection produces timeout errors on larger pulls.

### How can I use Dice job data?

**How can I use the Dice Jobs Scraper to track tech hiring demand?**
Run the same `searchTerms` on a schedule and watch how many postings come back per term and region. With `roleTitle`, `employerName`, `workLocation`, and `listedOn` on every row, you can chart which roles and markets are heating up week to week.

**How can I export Dice job listings to a spreadsheet for recruiting?**
Add your target titles to `searchTerms`, set `searchLocation`, and run. Every posting lands as a row with `listingUrl`, `employerName`, and `contractType`, so you can export to CSV or Excel and work your shortlist without copy-pasting from the site.

**How can I find companies that are actively hiring on Dice?**
Search the skills your prospects need and group the results by `employerName`. Pair `employerProfileUrl` and `workLocation` with `listedOn` to surface companies staffing up right now, then time your outreach to their growth.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. 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/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `searchTerms` (type: `array`):

Job queries to run on Dice. Every term is searched on its own, so 'data engineer' and 'cloud architect' come back as two separate sweeps.

## `searchLocation` (type: `string`):

Place to look within. Keep 'United States' for a country-wide sweep, or name a single city or state.

## `regionCode` (type: `string`):

Two-letter ISO 3166-1 alpha-2 code for the country you are searching in.

## `locationScope` (type: `string`):

Sets how wide a net the location filter casts over the results.

## `resultsLimit` (type: `integer`):

Ceiling on how many postings to gather for each search term. The count starts fresh for every term.

## `timeoutSeconds` (type: `integer`):

How long to wait on a single request before giving up. Bump it up if slow connections trigger timeout errors.

## Actor input object example

```json
{
  "searchTerms": [
    "data engineer",
    "cloud architect"
  ],
  "searchLocation": "Austin, Texas",
  "regionCode": "US",
  "locationScope": "Country",
  "resultsLimit": 25,
  "timeoutSeconds": 45
}
```

# 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 = {
    "searchTerms": [
        "data engineer"
    ],
    "searchLocation": "United States",
    "regionCode": "US",
    "locationScope": "Country"
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/dice-jobs-scraper-cheap").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 = {
    "searchTerms": ["data engineer"],
    "searchLocation": "United States",
    "regionCode": "US",
    "locationScope": "Country",
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/dice-jobs-scraper-cheap").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 '{
  "searchTerms": [
    "data engineer"
  ],
  "searchLocation": "United States",
  "regionCode": "US",
  "locationScope": "Country"
}' |
apify call data_api/dice-jobs-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dice Jobs Scraper (Cheap)",
        "description": "Dice.com scraper that collects tech job listings by keyword search. Gives you job title, company, location, employment type, posting date, and direct apply URL for each result, with automatic pagination across multiple pages.",
        "version": "0.0",
        "x-build-id": "XrJr22nYD9vB8JffM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~dice-jobs-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-dice-jobs-scraper-cheap",
                "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/data_api~dice-jobs-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-dice-jobs-scraper-cheap",
                "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/data_api~dice-jobs-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-dice-jobs-scraper-cheap",
                "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": [
                    "searchTerms"
                ],
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Job queries to run on Dice. Every term is searched on its own, so 'data engineer' and 'cloud architect' come back as two separate sweeps.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchLocation": {
                        "title": "Search location",
                        "type": "string",
                        "description": "Place to look within. Keep 'United States' for a country-wide sweep, or name a single city or state.",
                        "default": "United States"
                    },
                    "regionCode": {
                        "title": "Region code",
                        "type": "string",
                        "description": "Two-letter ISO 3166-1 alpha-2 code for the country you are searching in.",
                        "default": "US"
                    },
                    "locationScope": {
                        "title": "Location scope",
                        "enum": [
                            "Country",
                            "State",
                            "City"
                        ],
                        "type": "string",
                        "description": "Sets how wide a net the location filter casts over the results.",
                        "default": "Country"
                    },
                    "resultsLimit": {
                        "title": "Results per term",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Ceiling on how many postings to gather for each search term. The count starts fresh for every term.",
                        "default": 25
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 1020,
                        "type": "integer",
                        "description": "How long to wait on a single request before giving up. Bump it up if slow connections trigger timeout errors.",
                        "default": 45
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
