# SimplyHired Jobs Scraper — 9 Fields, JSON Route, No Login (`themineworks/simplyhired-scraper`) Actor

Scrape live job listings from SimplyHired search results. Titles, companies, locations, salaries, job types, descriptions and apply URLs. No login, no anti-bot, pay per job. Use it as an MCP server in Claude, ChatGPT & AI agents.

- **URL**: https://apify.com/themineworks/simplyhired-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## 💼 SimplyHired Scraper: Jobs, Salaries & Descriptions

### Overview

SimplyHired Scraper turns a job title and location into a clean, structured list of live US job postings from simplyhired.com: title, company, location, salary (when disclosed), job type, posted date, a description snippet, and the direct apply URL. No login, no API key, no anti bot fight. Give it a keyword like "data analyst" and a city like "Chicago" and it returns ready to use job records for your job board, recruiting feed, or market research pipeline.

It's a pay as you go alternative to building your own SimplyHired parser. You pay only for jobs actually returned. There is no free tier.

✅ No login required | ✅ No API key | ✅ Pay only for jobs returned | ✅ MCP ready for AI agents

### Features

Keyword + location search. Any job title, any US city, state, or zip code.
Real salary data. Pulls the salary range shown on the listing whenever the employer discloses it.
Job type detection. Full time, part time, contract, and other employment types where shown.
CRM/ATS ready export. Clean JSON, CSV, or Excel for pipelines, dashboards, and recruiting tools.
Fast pagination. Follows SimplyHired's own result pages until your requested count is reached.

### How it works

SimplyHired's search results pages are server rendered: the full list of job cards is embedded directly in the page's HTML as structured JSON, the same data React uses to hydrate the page in the browser. That means the actor reads the page with a single HTTP request, pulls that embedded JSON out, and returns clean fields straight from SimplyHired's own data, no HTML scraping, no headless browser, no login wall to fight.

When more jobs are requested than fit on one page, it follows SimplyHired's own pagination tokens to fetch additional pages until it hits your requested count or runs out of matching jobs.

### 🧾 Input configuration

```json
{
  "query": "data analyst",
  "location": "Chicago",
  "maxResults": 30
}
```

| Field | Description |
| --- | --- |
| `query` | Job title or keyword to search for. Required. |
| `location` | City, state, or zip code to search in. Leave blank to search all locations. |
| `maxResults` | Maximum number of jobs to return. Default 30. |

### 📤 Output format

```json
{
  "title": "Healthcare Data Analyst - Chicago",
  "company": "Midwest Express Clinic",
  "location": "Chicago, IL",
  "salary": "$80,000 - $100,000 a year",
  "job_type": "Full-time",
  "posted_date": "2026-04-24T15:10:47.631Z",
  "description_snippet": "Become an EMR super user supporting clinical teams. Support inventory and cost optimization. Partner directly with clinical, finance, and operations leaders.",
  "apply_url": "https://www.simplyhired.com/job/-e97-pBJGmo8rtoCqrfruQ79gqBQJzkNJ1ybbFsgkMmnPpN0h16Tqw",
  "scraped_at": "2026-07-14T11:30:00.000Z"
}
```

Every job record contains these fields:

| Field | Description |
| --- | --- |
| 💼 `title` | Job title |
| 🏢 `company` | Hiring company name |
| 📍 `location` | Job location |
| 💰 `salary` | Salary or salary range, when disclosed by the employer |
| 🕒 `job_type` | Employment type(s), e.g. Full time, Contract |
| 📅 `posted_date` | ISO timestamp of when the job was posted |
| 📝 `description_snippet` | Short snippet of the job description shown in search results |
| 🔗 `apply_url` | Direct URL to the job's SimplyHired listing page |
| 🧭 `scraped_at` | ISO timestamp of when this record was captured |

### 💼 Use cases

**Job board aggregation**
Pull fresh US listings for a niche job board or newsletter without building your own crawler.
Combine with other job scrapers in this collection to cover multiple sources in one feed.

**Recruiting and sourcing**
Track which companies are hiring for specific roles in specific cities right now.
Feed live openings into a sourcing tool or outreach sequence.

**Market and salary research**
Track posted salary ranges for a role across cities over time.
Benchmark how many companies are hiring for a given title this month versus last.

**Lead generation for B2B sales**
Companies posting a burst of job openings are a classic buying signal, hiring is spending.
Turn active job posts into a list of companies to prospect.

### 🚀 Getting started

1. Open the actor and enter a job title or keyword, e.g. "software engineer" or "data analyst".
2. Add a location (city, state, or zip code) to narrow the search, or leave it blank for nationwide results.
3. Set max results (default 30) to control volume and cost.
4. Click Start and let the actor paginate through SimplyHired's search results automatically.
5. Download the dataset as JSON, CSV, or Excel, or pull it via API/MCP.

### FAQ

**Does this scrape the full job description page?**
No. It returns the description snippet shown on the search results page, along with the direct apply URL so you can visit the full posting when needed. This keeps the actor fast and keeps cost per job low.

**Does it require a login or API key?**
No. SimplyHired's search results are public and server rendered, no account, no cookies, no API key.

**How much does it cost?**
Pay per event: $0.001 per job, with no free tier. You're charged only for jobs actually delivered, never for empty or blocked searches.

**What happens if my search has no results?**
The actor returns a summary record showing zero jobs found and you are not charged anything for that run.

**Can I use it inside an AI agent?**
Yes. It's exposed as an MCP tool. See below.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/simplyhired-scraper
```

Or call it programmatically with the Apify client:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/simplyhired-scraper').call({
  query: 'data analyst',
  location: 'Chicago',
  maxResults: 30,
});

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

### 🛠️ Complete your hiring signal pipeline

Found the jobs. Now pair them with the rest of the suite:

- **[ATS Jobs Scraper](https://apify.com/themineworks/ats-jobs)**: pull direct listings from Greenhouse, Lever, and Ashby company boards.
- **[LinkedIn Jobs Scraper](https://apify.com/themineworks/linkedin-jobs-scraper)**: cross reference the same roles on LinkedIn.
- **[B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)**: turn hiring companies into contactable decision maker leads.

Typical flow: simplyhired-scraper and ats-jobs surface who is hiring for what, B2B Leads Finder turns those companies into named contacts to reach out to.

Questions or need a custom field set? Reach out through the Apify profile.

# Actor input Schema

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

Job title or keyword to search for, e.g. 'software engineer' or 'data analyst'.

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

City, state or zip code to search in, e.g. 'Chicago' or 'New York, NY'. Leave blank to search all locations.

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

Maximum number of jobs to return. Each job costs $0.001 after the first 10 free per account.

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

Proxy configuration. SimplyHired is a US site behind Cloudflare and 403s both datacenter IPs and non-US residential exits, so this pins US residential.

## Actor input object example

```json
{
  "query": "data analyst",
  "location": "Chicago",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "query": "data analyst",
    "location": "Chicago",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/simplyhired-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": "data analyst",
    "location": "Chicago",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/simplyhired-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 '{
  "query": "data analyst",
  "location": "Chicago",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call themineworks/simplyhired-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TX8A6pIUaOcdOHIMF/builds/iyG7D2Hax2O9v1BiD/openapi.json
