The Muse Jobs Scraper

Extract public job listings from The Muse by category, location, company, level, and keywords. Export titles, companies, locations, links, and descriptions.

Data fields

FieldTypeDescription
idnumberValue exported as id.
titlestringValue exported as title.
companyNamestring | nullValue exported as companyName.
companyIdnumber | nullValue exported as companyId.
companyShortNamestring | nullValue exported as companyShortName.
locationsarrayValue exported as locations.
categoriesarrayValue exported as categories.
levelsarrayValue exported as levels.

Input preview

keywordsKeywords
locationsLocations
companiesCompanies
categoriesJob categories
levelsSeniority levels
maxItemsMaximum jobs

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Scrape public job listings from The Muse into clean, export-ready datasets. Filter by keywords, locations, companies, job categories, seniority levels, date, page range, and result limit.

What does The Muse Jobs Scraper do?

The Muse Jobs Scraper collects public job listings from The Muse and saves each matching job as a structured dataset item. It is built for repeatable job-market monitoring, recruiting research, sales prospecting, and competitive hiring analysis.

You can use it to answer questions such as:

  • ๐Ÿ’ผ Which companies are hiring remote software engineers right now?
  • ๐Ÿ“ What roles are open in a specific city or region?
  • ๐Ÿข Which The Muse employers are expanding a department?
  • ๐Ÿ“ˆ How many new jobs match a category and seniority level?
  • ๐Ÿ”Ž What job descriptions mention a target keyword or technology?

Who is it for?

Recruiters can monitor roles by category, company, location, and seniority.

Job aggregators can collect public listings for indexing and enrichment workflows.

Labor-market analysts can track demand by role, category, geography, and employer.

Sales teams can identify companies currently hiring for relevant departments.

Job seekers and career coaches can build curated job lists for specific personas.

Why use this scraper?

The Muse is a useful source of employer-branded job listings, company names, role titles, levels, categories, and application links. This actor turns those listings into structured data that can be exported to CSV, JSON, Excel, Google Sheets, BI tools, CRMs, or automation workflows.

Common use cases

  • Build a remote jobs feed
  • Monitor hiring at target accounts
  • Track category-level hiring trends
  • Find companies hiring for specific skills
  • Collect application URLs for job aggregation
  • Compare job descriptions across companies
  • Enrich recruiting dashboards with public job data

Input settings

Setting JSON key Type / default Description
Keywords keywords array, default ["engineer"] Optional words to match in the job title, company, location, category, level, or job description. Matching is applied after The Muse returns jobs.
Locations locations array, default ["Remote"] The Muse location names, for example Remote, New York, NY, London, United Kingdom, or Flexible / Remote.
Companies companies array Company names to filter by, for example SpaceX, Optum, or Atlassian. Leave empty to search all companies.
Job categories categories array, default ["Software Engineering"] The Muse job categories, for example Software Engineering, Data and Analytics, Sales, or Marketing.
Seniority levels levels array The Muse levels, for example Entry Level, Mid Level, Senior Level, or Management.
Maximum jobs maxItems integer, default 50 Maximum number of matching job listings to save.
Maximum pages pageLimit integer, default 5 Maximum The Muse result pages to scan. Each page can contain up to 20 jobs before keyword/date filtering.
Start page pageStart integer, default 1 Start scraping from this The Muse result page.
Published after date dateFrom string Optional ISO date. Jobs published before this date are skipped, for example 2026-01-01.
Proxy configuration proxyConfiguration object, default {"useApifyProxy":true} Optional Apify proxy settings. Keep enabled for reliable cloud runs; disable only if you know direct requests work for your environment.

Input overview

The actor supports these inputs:

  • keywords โ€” words to match in titles, companies, locations, categories, levels, or descriptions
  • locations โ€” location names such as Remote, New York, NY, or Flexible / Remote
  • companies โ€” company names such as SpaceX or Optum
  • categories โ€” categories such as Software Engineering or Sales
  • levels โ€” levels such as Entry Level, Mid Level, or Senior Level
  • maxItems โ€” maximum jobs to save
  • pageLimit โ€” maximum results pages to scan
  • pageStart โ€” starting result page
  • dateFrom โ€” optional minimum publication date
  • proxyConfiguration โ€” optional advanced proxy settings

Example input

{
  "keywords": ["engineer"],
  "locations": ["Remote"],
  "categories": ["Software Engineering"],
  "maxItems": 25,
  "pageLimit": 3,
  "pageStart": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}

Input tips

Use The Muse wording for best results. For example, try Flexible / Remote if Remote is too broad or too narrow.

Use companies when tracking specific employers.

Use categories and levels together when you need focused role lists.

Use keywords when the target term may appear inside the title or description rather than in a site filter.

Increase pageLimit when keyword filtering is strict because the actor may need to scan more source jobs to find enough matches.

Output data

Each job listing can include:

Field Description
id The Muse job identifier
title Job title
companyName Company name
companyId The Muse company identifier
companyShortName Company slug when available
locations Job locations
categories Job categories
levels Seniority levels
tags Tags returned for the listing
publicationDate Public posting timestamp
type Job type returned by The Muse
shortName Job slug
modelType Source model type
descriptionHtml Original public job description HTML
descriptionText Clean text description
applyUrl Application or landing page URL
jobUrl Public job URL
sourcePage Result page where the job was found
scrapedAt Scrape timestamp

Example output

{
  "id": 21200162,
  "title": "Supplier Development Engineer, Mechanical (Starship)",
  "companyName": "SpaceX",
  "companyId": 15000190,
  "companyShortName": "spacex",
  "locations": ["El Segundo, CA"],
  "categories": ["Software Engineering"],
  "levels": ["Mid Level"],
  "tags": [],
  "publicationDate": "2026-06-26T18:34:43Z",
  "type": "external",
  "shortName": "supplier-development-engineer-mechanical-starship-c2f42a",
  "modelType": "jobs",
  "descriptionText": "SpaceX was founded under the belief...",
  "applyUrl": "https://www.themuse.com/jobs/spacex/...",
  "jobUrl": "https://www.themuse.com/jobs/spacex/...",
  "sourcePage": 1,
  "scrapedAt": "2026-07-03T00:00:00.000Z"
}

How to run it

  1. Open the actor on Apify.
  2. Add one or more filters.
  3. Set maxItems to a safe first-run value.
  4. Click Start.
  5. Download results from the Dataset tab.

How to export data

After the run finishes, open the dataset and export results as:

  • JSON
  • CSV
  • Excel
  • XML
  • RSS
  • HTML table

You can also fetch the dataset through the Apify API for automated workflows.

API usage

Run The Muse Jobs Scraper from your own code with the Apify API.

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
  "keywords": [
    "engineer"
  ],
  "locations": [
    "Remote"
  ],
  "companies": [],
  "categories": [
    "Software Engineering"
  ],
  "levels": []
};

const run = await client.actor('fetch_cat/the-muse-jobs-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/the-muse-jobs-scraper").call(run_input={
  "keywords": [
    "engineer"
  ],
  "locations": [
    "Remote"
  ],
  "companies": [],
  "categories": [
    "Software Engineering"
  ],
  "levels": []
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~the-muse-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["engineer"],"locations":["Remote"],"companies":[],"categories":["Software Engineering"],"levels":[]}'

Use with AI agents via MCP

The Muse Jobs Scraper can be used by AI assistants through the hosted Apify MCP server.

Claude Code setup

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/the-muse-jobs-scraper"

Claude Desktop, Cursor, or VS Code JSON config

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

Example prompts

  • "Run The Muse Jobs Scraper with this input JSON and summarize the dataset."
  • "Export the latest The Muse Jobs Scraper results to a table I can review."
  • "Schedule this Actor for monitoring and tell me what changed between runs."

Integrations

Use this actor with:

  • Google Sheets for recruiting trackers
  • Airtable for job board workflows
  • Notion for curated job lists
  • Slack alerts for new matching roles
  • CRM enrichment for hiring-signal workflows
  • BI dashboards for labor-market analysis
  • Zapier or Make scenarios through Apify integrations

Data quality notes

The actor saves public job fields as returned by the source. Some jobs may have multiple locations, multiple levels, or long HTML descriptions. Some fields can be empty if the source listing does not provide them.

Keyword filtering is intentionally broad: it checks several text fields so users can discover jobs where the keyword appears outside the title.

Limits and pagination

The source returns paginated job listings. The actor stops when it reaches maxItems, reaches pageLimit, finds no more jobs, or reaches the available page count.

For narrow keyword searches, increase pageLimit because many scanned jobs may not match the keyword filter.

Troubleshooting

If you get fewer jobs than expected, try these checks:

  • Remove one filter and run again
  • Increase pageLimit
  • Check spelling and capitalization of company or category names
  • Try a broader location such as Remote
  • Lower keyword specificity

If a run finishes with no items, the selected filter combination may not have matching public listings.

Best practices

Start with a small run before scaling.

Save working inputs as Apify tasks for recurring monitoring.

Use specific company lists for account-based workflows.

Use date filters when you only need recent postings.

Export descriptionText for NLP analysis and descriptionHtml when formatting matters.

Legality and responsible use

This actor collects publicly available job listing data. Make sure your use complies with applicable laws, The Muse terms, privacy rules, and your internal data policies. Do not use scraped data for discriminatory hiring, spam, or unlawful profiling.

Support

Report bugs, wrong output, blocked runs, or missing fields from the Actor page. Include the Apify run ID or run URL, your input JSON, what you expected, what the Actor returned, and one reproducible public URL so the issue can be tested quickly.

Common questions

Questions and answers reused from the canonical actor README.

Can I scrape remote jobs only?

Yes. Add Remote or Flexible / Remote to locations, then set a suitable maxItems value.

Can I track specific companies?

Yes. Add company names in the companies input. You can provide one company or a list of companies.

Can I filter by seniority?

Yes. Use levels such as Entry Level, Mid Level, Senior Level, or other level names used by The Muse.

Does the actor return apply links?

Yes. applyUrl and jobUrl contain the public landing page URL when The Muse provides it.

Why are there no results for my category?

The selected category may have few current jobs, or the exact category wording may differ. Try a broader category or remove the category filter for discovery.