# Dice.com Scraper — US Tech Jobs & Salaries, No Phones (`highbrow_fame/dice-jobs`) Actor

US tech jobs from Dice.com: title, company, direct hire or recruiter, location, remote/hybrid, employment type, salary and its numbers, posted date, skills and the full ad. No phones.

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

## Pricing

$0.90 / 1,000 job delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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.com Scraper — US Tech Jobs & Salaries, No Phones

Get tech job ads from Dice.com, the US job board for IT and engineering: title, company, whether it is a direct employer or a recruiter, location, remote / hybrid / on-site, full-time, contract or third party, the salary as the ad gives it plus its minimum, maximum and period, Easy Apply and visa-sponsorship flags, when it was posted and updated — and, if you want, the full ad, the skills, the contract terms (W2, Corp To Corp, Independent), the closing date and the company's position id. Paste your Dice search links — or just type a job title and a place.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on dice.com and paste the link. Or type keywords and places here — "python developer" in "Austin, TX", "data engineer" in "Remote" — and choose distance, "posted within", employment type, remote / hybrid / on-site, direct hire or recruiter, Easy Apply, willing to sponsor and company below.
- ⚡ **Fast.** A live test run read three searches — remote Java contracts, software engineers in Seattle, devops jobs from recruiters in Texas posted in the last 7 days — 2,422 jobs in 60 seconds.
- 💵 **Salaries you can sort by.** Next to the ad's own salary line ("USD 130,000.00 - 155,000.00 per year", "$60 - $65", "120-150K") every job has `salaryMin`, `salaryMax`, `salaryPeriod` (hour, day, week, month, year) and `salaryCurrency`. When the ad hides the numbers ("Depends on Experience") they stay empty.
- 🧾 **Contract terms and skills.** Tick **Open every job for the full ad** for the skills list and the contract terms Dice shows on the job page — `Contract W2`, `Contract Corp To Corp`, `Contract Independent`, `Full Time` — the closing date and the company's own position id.
- 🔒 **No phone numbers, no recruiter names.** Companies and staffing agencies are named by their company name only. Dice takes phone numbers and e-mail addresses out of the ads itself; anything it misses is replaced with `[phone removed]` / `[e-mail removed]`, and the recruiter's signature ("Thanks & Regards, <name>, Technical Recruiter …") and sentences that name a recruiter ("please contact me directly, <name> …", "My name is <name>, a recruiter with …") are taken out of the ad text.
- 💸 **You pay only for jobs delivered.** A link that is not a Dice search, or a place Dice does not know, comes back as a free record with the reason.

### What you get

For every job:

| Field | What it is |
|---|---|
| `title`, `jobId`, `url` | the job ad |
| `company`, `employerType`, `companyId`, `companyUrl`, `logo` | who posted it — `Direct Hire`, `Recruiter` or `Other` — and their page on Dice |
| `location`, `city`, `state`, `stateCode`, `country` | where the job is, as Dice gives it (empty for many remote jobs) |
| `workplaceTypes`, `isRemote`, `isHybrid`, `workFromHomeAvailable` | `Remote`, `Hybrid`, `On-Site` — a job can have more than one |
| `employmentType`, `employmentTypes` | "Contract, Third Party" as Dice shows it, and as a list |
| `salary`, `salaryMin`, `salaryMax`, `salaryPeriod`, `salaryCurrency` | the ad's salary line, and its numbers |
| `postedAt`, `updatedAt` | when it was posted and last updated |
| `easyApply`, `willingToSponsor` | apply with a Dice profile; the employer sponsors work visas |
| `snippet` | the start of the ad |
| `input`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, the place Dice searched, and why a search gave nothing |

With **Open every job for the full ad** also: `description`, `skills`, `employmentDetails` (the contract terms), `expiresAt`, `postalCode`, `positionId` — and `detailsError` for a job whose page has no ad: 11 of 506 jobs in a live run were "Direct Apply" jobs whose Dice page only forwards applicants to the employer's own site.

#### Example

A real record from a live run with the full ad — "business analyst", recruiters only, posted within the last 3 days, 25 September 2026:

```json
{
  "input": "business analyst",
  "position": 10,
  "jobId": "c1171559-6a34-4057-97d9-43e7fff478a8",
  "url": "https://www.dice.com/job-detail/c1171559-6a34-4057-97d9-43e7fff478a8",
  "title": "Business Analyst",
  "company": "HonorVet Technologies",
  "employerType": "Recruiter",
  "companyId": "90941473",
  "companyUrl": "https://www.dice.com/company-profile/2264a566-2563-59a3-ba87-bc2b5904b731",
  "location": "Des Moines, Iowa, USA",
  "city": "Des Moines",
  "state": "Iowa",
  "stateCode": "IA",
  "country": "USA",
  "workplaceTypes": ["On-Site"],
  "isRemote": false,
  "isHybrid": false,
  "employmentType": "Contract, Third Party",
  "employmentTypes": ["Contract", "Third Party"],
  "salary": "$48 - $50",
  "salaryMin": 48,
  "salaryMax": 50,
  "salaryPeriod": "hour",
  "salaryCurrency": "USD",
  "postedAt": "2026-09-23T14:14:54Z",
  "updatedAt": "2026-09-25T14:27:20Z",
  "easyApply": true,
  "willingToSponsor": false,
  "snippet": "HonorVet Technologies is a Service Disable Veteran-Owned IT staffing firm, ISO 9001 and ISO 27001 certified, working with federal agencies, state gove…",
  "description": "HonorVet Technologies is a Service Disable Veteran-Owned IT staffing firm, ISO 9001 and ISO 27001 certified, working with federal agencies, state governments, and Fortune 500 enterprise clients across the US. What makes us different isn't a tagline; it's the way we work. We don't forward resumes and…",
  "skills": ["BUSINESS ANALYST", "GOOGLE CLOUD", "FEDRAMP", "SDLC", "AZURE DEVOPS", "TFS", "JIRA", "RTC", "MICROSOFT SQL SERVER", "AGILE", "MICROSOFT OFFICE", "VISIO", "EXCEL", "WORD", "POWERPOINT"],
  "employmentDetails": ["Contract Corp To Corp", "Contract W2"],
  "expiresAt": "2026-10-24T14:14:54.000Z",
  "postalCode": "50309",
  "positionId": "26-25015",
  "status": "OK"
}
```

### How to use it

1. Paste **Search links** from dice.com, one per line — or type **Keywords** and **Places** (every keyword is searched in every place) and choose the filters.
2. Set **Max jobs per search**, and tick **Open every job for the full ad** if you need the description, skills and contract terms.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new jobs, save your input as a task with **Posted within** set to "Today" and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per job delivered** — see the price on this page. Opening jobs for the full ad costs nothing extra, only time (506 jobs with their full ads in 57 seconds in a live run). Links that are not Dice searches and places Dice does not know are free.

### FAQ

**How many jobs per search?** Dice shows at most the first 10,000 results of any search. A live run asked for everything under "engineer" (86,449 jobs on Dice): the first 10,000 results held 9,649 different jobs — Dice repeats some jobs deeper in its list, and every search here is delivered without repeats — in 256 seconds. For more, split the search: by keyword, by place, by employment type or by "posted within".

**Why are there remote jobs from other states in my place search?** Dice itself adds remote jobs from anywhere to a search for a place, and links keep that. For typed places you can untick **Add remote jobs from anywhere**: in a live run, "devops" in Texas from recruiters, posted in the last 7 days, gave 98 jobs, all 98 in Texas. In a Seattle link search with Dice's remote jobs, all 2,000 jobs were either in Washington or remote.

**Are the filters obeyed?** Yes, Dice applies them. In live runs, 324 of 324 jobs from a "remote Java contracts" link were remote contracts, and 98 of 98 jobs in the Texas search were posted by recruiters within the last 7 days.

**How is the salary read?** From the ad's own salary line, which advertisers type freely. When it names no period, an amount under 500 is taken as hourly and one of 10,000 or more as yearly; anything in between stays without a period. The currency is USD unless the line says otherwise.

**Why no phone numbers or recruiter names?** They are personal data. Every job has its `url`; applicants apply on Dice. Recruiter names are taken out by rules that know how staffing agencies sign their ads. Rules can miss an unusual wording: in four live runs with 1,666 full ads from recruiters, a recruiter's name got through in 4 ads ("contact me directly, <name>, SVP …", "Find <name>'s email on her LinkedIn profile", "reach out to our Talent Acquisition Specialist <name>"), and in 12 of 13,767 snippets from six runs (most of them one agency's "reach out to our Talent Acquisition Specialist <name>" and signatures glued to the text, "…systemsThanks & Regards<name>") — each of those wordings is caught now. That is why the full ad is off by default; the short `snippet` goes through the same rules.

**Is this affiliated with Dice?** No. This is an independent tool that reads public job ads on dice.com.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

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

Set up a search on dice.com with all the filters you want and paste the address of the results page. One per line. Links like dice.com/jobs/q-python-l-Austin,\_TX-jobs work too.

## `keywords` (type: `array`):

Or search here without a link: job titles, skills or keywords (python developer, data engineer, SAP, "site reliability"). Each keyword is searched in each place below, or in the whole US when there is no place. The filters below apply.

## `locations` (type: `array`):

Cities, states or ZIP codes (Austin, TX; New York; Texas; 10001). "Remote" gives remote jobs anywhere. A place without keywords gives all its jobs.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many jobs. dice.com reaches the first 10,000 jobs of a search.

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

For the places above: how far around the place, as on dice.com.

## `includeRemote` (type: `boolean`):

dice.com adds remote jobs from anywhere in the US to a search for a place. Untick for jobs in or near the place only.

## `postedWithinDays` (type: `string`):

Optional: only jobs posted recently.

## `employmentTypes` (type: `array`):

Optional: only jobs of any of these kinds.

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

Optional: only jobs with any of these work settings.

## `employerTypes` (type: `array`):

Optional: direct employers, recruiters (staffing agencies) or others.

## `easyApplyOnly` (type: `boolean`):

Optional: only jobs you can apply to on dice.com with your Dice profile.

## `willingToSponsorOnly` (type: `boolean`):

Optional: only jobs whose employer is willing to sponsor a work visa.

## `company` (type: `string`):

Optional: only this company's jobs, by its name as dice.com shows it (Capital One). Alone, without keywords or places, it gives all the company's jobs.

## `sortBy` (type: `string`):

For the keywords and places above.

## `includeDetails` (type: `boolean`):

Off by default. Adds the full job description, the skills, contract details (W2, Corp To Corp, Independent), the closing date, the ZIP code and the company's position id. One more page per job, so slower. Recruiters' names in the ad are taken out by rules, which can miss an unusual wording — see the README.

## `maxConcurrency` (type: `integer`):

How many searches to work on at the same time.

## `proxyConfiguration` (type: `object`):

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.dice.com/jobs?q=python&location=Austin%2C%20TX%2C%20USA&filters.postedDate=SEVEN"
  ],
  "maxListingsPerSearch": 30,
  "radius": "30",
  "includeRemote": true,
  "postedWithinDays": "any",
  "easyApplyOnly": false,
  "willingToSponsorOnly": false,
  "sortBy": "relevance",
  "includeDetails": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "searchUrls": [
        "https://www.dice.com/jobs?q=python&location=Austin%2C%20TX%2C%20USA&filters.postedDate=SEVEN"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/dice-jobs").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 = {
    "searchUrls": ["https://www.dice.com/jobs?q=python&location=Austin%2C%20TX%2C%20USA&filters.postedDate=SEVEN"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/dice-jobs").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 '{
  "searchUrls": [
    "https://www.dice.com/jobs?q=python&location=Austin%2C%20TX%2C%20USA&filters.postedDate=SEVEN"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/dice-jobs --silent --output-dataset

```

## MCP server setup

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

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/DjherOBb2fASROgkf/builds/A0lFdeviE4N7IGoNG/openapi.json
