# The Muse Jobs Scraper (`automation-lab/the-muse-jobs-scraper`) Actor

💼 Scrape public The Muse job listings with roles, companies, locations, levels, categories, descriptions, and canonical job URLs.

- **URL**: https://apify.com/automation-lab/the-muse-jobs-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

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

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

## The Muse Jobs Scraper

Scrape public job listings from The Muse into a clean Apify dataset.

### What does The Muse Jobs Scraper do?

The Muse Jobs Scraper collects job listings from the public The Muse jobs API.
It is built for users who need job titles, company names, locations, categories,
career levels, publication dates, job URLs, and description text without manually
copying data from search pages.

### Who is it for?

Recruiting teams use it to monitor hiring activity at companies that list jobs on The Muse.

Talent intelligence analysts use it to compare role demand by category, seniority, or location.

Job-board operators use it to enrich curated feeds with public The Muse listings.

Sales and market-research teams use it to identify companies with active hiring needs.

### Why use this scraper?

The actor uses The Muse's public JSON endpoint, so it is lightweight and does not require a browser.

It supports common filters such as company, location, category, and level.

It also includes an optional keyword filter that checks the title, company, location, category, level, tags, and description text.

### Data you can collect

| Field | Description |
| --- | --- |
| `id` | The Muse job ID |
| `name` | Job title |
| `url` | Public job page URL |
| `publicationDate` | Publication timestamp |
| `companyName` | Company name |
| `companyId` | Company ID from The Muse |
| `locations` | Listing locations |
| `categories` | Job categories |
| `levels` | Career levels |
| `contentsText` | Plain-text job description |
| `contentsHtml` | Optional HTML job description |
| `refs` | Source reference URLs |

### How much does it cost to scrape The Muse jobs?

The actor uses pay-per-event pricing with a small run-start event and a per-job result event.
The final published Store price is calculated from measured Apify cloud costs and competitor pricing checks.
Small test runs should use low `maxItems` and low `maxPages` values.

### How to run it

1. Open the actor on Apify.
2. Enter optional filters such as `location`, `company`, `category`, or `level`.
3. Set `maxItems` to the number of job listings you need.
4. Set `maxPages` high enough when using a keyword filter.
5. Start the run.
6. Export the dataset as JSON, CSV, Excel, or via the Apify API.

### Input options

#### Keyword

Use `keyword` to match text inside the listing title, company, location, category, level, tags, or description.
The Muse API does not expose a keyword query parameter, so this actor applies keyword matching after fetching pages.

#### Location

Use values such as `Remote`, `New York, NY`, or `San Francisco, CA`.

#### Category

Use The Muse category names such as `Data and Analytics`, `Sales`, `Marketing`, or `Engineering`.

#### Company

Use the company name, for example `SpaceX` or `DoorDash`.

#### Level

Use levels such as `Entry Level`, `Mid Level`, or `Senior Level`.

#### Pagination limits

`page` sets the starting API page.
`maxPages` limits how many API pages the actor requests.
`maxItems` limits how many matching jobs are saved.

### Example input

```json
{
  "keyword": "engineer",
  "location": "Remote",
  "maxItems": 25,
  "maxPages": 3,
  "includeHtml": true,
  "includeRaw": false
}
````

### Example output

```json
{
  "id": 123456,
  "name": "Senior Data Engineer",
  "url": "https://www.themuse.com/jobs/example/senior-data-engineer",
  "publicationDate": "2026-06-01T00:00:00Z",
  "companyName": "Example Company",
  "locations": ["Flexible / Remote"],
  "categories": ["Data and Analytics"],
  "levels": ["Senior Level"],
  "contentsText": "Example job description text..."
}
```

### Tips for better results

Use API-side filters first.
Company, location, category, and level are passed directly to The Muse.

Use keyword filtering for refinement.
If your keyword is rare, increase `maxPages` so the actor has enough listings to inspect.

Start small.
For testing, use `maxItems` between 10 and 25.

### Integrations

Connect the dataset to Google Sheets for weekly hiring reports.

Send results to a webhook when a company posts new roles.

Use Apify integrations to load job data into Airtable, Make, Zapier, or a data warehouse.

Combine this actor with company enrichment actors to add firmographic context.

### API usage

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/the-muse-jobs-scraper').call({
  location: 'Remote',
  keyword: 'engineer',
  maxItems: 25,
});
console.log(run.defaultDatasetId);
```

#### Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/the-muse-jobs-scraper').call(run_input={
    'location': 'Remote',
    'keyword': 'engineer',
    'maxItems': 25,
})
print(run['defaultDatasetId'])
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/automation-lab~the-muse-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"location":"Remote","keyword":"engineer","maxItems":25}'
```

### MCP usage

Use the Apify MCP server with this actor enabled:

`https://mcp.apify.com?tools=automation-lab/the-muse-jobs-scraper`

#### Claude Code setup

```bash
claude mcp add apify https://mcp.apify.com?tools=automation-lab/the-muse-jobs-scraper
```

#### Claude Desktop setup

Add this server to your Claude Desktop MCP configuration:

```json
{
  "mcpServers": {
    "apify-the-muse-jobs": {
      "url": "https://mcp.apify.com?tools=automation-lab/the-muse-jobs-scraper"
    }
  }
}
```

#### Example prompts for MCP usage

Use these example prompts after connecting the Apify MCP server:

> Using the Apify MCP tool `automation-lab/the-muse-jobs-scraper`, find up to 50 remote data and analytics jobs from The Muse and summarize companies hiring most often.

> Use MCP to scrape The Muse for senior engineering jobs in New York and return a table with company, title, URL, and publication date.

> Run the The Muse Jobs Scraper MCP tool for marketing roles and identify companies with repeated new listings.

Example Claude Desktop workflow:

1. Add the Apify MCP server.
2. Enable `automation-lab/the-muse-jobs-scraper`.
3. Ask for a filtered The Muse jobs dataset.
4. Export or summarize the results.

### Data freshness

The actor returns data from The Muse at run time.
Run it on a schedule if you need recurring job-market monitoring.

### Error handling

If The Muse returns an empty page, pagination stops.
If an API request returns an HTTP error, the actor fails with the exact status code.
Invalid or missing optional fields are saved as `null` or empty arrays.

### Limitations

The actor scrapes public listings only.
It does not apply to private applicant tracking systems behind login walls.
The keyword filter is client-side because the sampled public API does not support keyword search.

### Legality

This actor collects publicly available job listing data.
You are responsible for using the data in accordance with applicable laws, The Muse terms, and your own compliance requirements.
Do not use the output for prohibited discrimination, spam, or unauthorized profiling.

### FAQ

#### Does it require a The Muse account?

No. The actor uses public job listing data.

#### Why did my keyword run return fewer items than requested?

Keyword matching happens after pages are fetched. Increase `maxPages` or use broader API-side filters.

#### Can I scrape one company?

Yes. Set the `company` input to the company name shown on The Muse.

#### Can I get raw API fields?

Yes. Enable `includeRaw` to include the source object.

### Related scrapers

- https://apify.com/automation-lab/linkedin-jobs-scraper
- https://apify.com/automation-lab/indeed-jobs-scraper
- https://apify.com/automation-lab/google-jobs-scraper
- https://apify.com/automation-lab/company-enrichment-scraper

### Support

If you need a new The Muse field or an additional filter, open an Apify issue with your desired input and an example listing URL.

### Changelog

Initial version: HTTP-only public The Muse jobs scraper with filters, pagination, and clean job listing output.

# Actor input Schema

## `keyword` (type: `string`):

Optional keyword to match in the job title, company, location, categories, levels, tags, or description text. The Muse API does not expose server-side keyword search, so this is applied after each page is fetched.

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

The Muse location filter, for example `Remote`, `New York, NY`, or `San Francisco, CA`.

## `category` (type: `string`):

The Muse category name, for example `Data and Analytics`, `Engineering`, `Marketing`, or `Sales`. Leave empty for all categories.

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

Company name filter, for example `SpaceX`, `DoorDash`, or `Atlassian`. Leave empty for all companies.

## `level` (type: `string`):

The Muse level filter, for example `Entry Level`, `Mid Level`, or `Senior Level`.

## `maxItems` (type: `integer`):

Maximum number of matching job listings to save.

## `page` (type: `integer`):

The Muse API page to start from.

## `maxPages` (type: `integer`):

Safety cap for pagination. Increase this when using a keyword filter that may skip many listings.

## `includeHtml` (type: `boolean`):

Include the raw job description HTML in `contentsHtml`.

## `includeRaw` (type: `boolean`):

Include the full source object from The Muse API in the `source` field for debugging or custom transformations.

## Actor input object example

```json
{
  "keyword": "engineer",
  "location": "Remote",
  "maxItems": 20,
  "page": 1,
  "maxPages": 3,
  "includeHtml": true,
  "includeRaw": false
}
```

# Actor output Schema

## `overview` (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 = {
    "keyword": "engineer",
    "location": "Remote",
    "maxItems": 20,
    "maxPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/the-muse-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 = {
    "keyword": "engineer",
    "location": "Remote",
    "maxItems": 20,
    "maxPages": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/the-muse-jobs-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 '{
  "keyword": "engineer",
  "location": "Remote",
  "maxItems": 20,
  "maxPages": 3
}' |
apify call automation-lab/the-muse-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "The Muse Jobs Scraper",
        "description": "💼 Scrape public The Muse job listings with roles, companies, locations, levels, categories, descriptions, and canonical job URLs.",
        "version": "0.1",
        "x-build-id": "ce2pT3cB9XWSVebTH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~the-muse-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-the-muse-jobs-scraper",
                "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/automation-lab~the-muse-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-the-muse-jobs-scraper",
                "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/automation-lab~the-muse-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-the-muse-jobs-scraper",
                "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",
                "properties": {
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Optional keyword to match in the job title, company, location, categories, levels, tags, or description text. The Muse API does not expose server-side keyword search, so this is applied after each page is fetched."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "The Muse location filter, for example `Remote`, `New York, NY`, or `San Francisco, CA`."
                    },
                    "category": {
                        "title": "Category",
                        "type": "string",
                        "description": "The Muse category name, for example `Data and Analytics`, `Engineering`, `Marketing`, or `Sales`. Leave empty for all categories."
                    },
                    "company": {
                        "title": "Company",
                        "type": "string",
                        "description": "Company name filter, for example `SpaceX`, `DoorDash`, or `Atlassian`. Leave empty for all companies."
                    },
                    "level": {
                        "title": "Level",
                        "type": "string",
                        "description": "The Muse level filter, for example `Entry Level`, `Mid Level`, or `Senior Level`."
                    },
                    "maxItems": {
                        "title": "Maximum jobs",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of matching job listings to save.",
                        "default": 50
                    },
                    "page": {
                        "title": "Start page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "The Muse API page to start from.",
                        "default": 1
                    },
                    "maxPages": {
                        "title": "Maximum pages to request",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Safety cap for pagination. Increase this when using a keyword filter that may skip many listings.",
                        "default": 10
                    },
                    "includeHtml": {
                        "title": "Include HTML description",
                        "type": "boolean",
                        "description": "Include the raw job description HTML in `contentsHtml`.",
                        "default": true
                    },
                    "includeRaw": {
                        "title": "Include raw source object",
                        "type": "boolean",
                        "description": "Include the full source object from The Muse API in the `source` field for debugging or custom transformations.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
