Monster.com Multi-City Job Scraper
Pricing
from $3.00 / 1,000 dataset items
Monster.com Multi-City Job Scraper
Search one job keyword across many US cities on Monster.com in a single run. Jobs found in several areas are returned once, each tagged with its search city: title, company, GPS, salary when listed, remote flag, posting date and apply URL. No login.
Pricing
from $3.00 / 1,000 dataset items
Rating
0.0
(0)
Developer
axly
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Search one job keyword across many US cities on Monster.com in a single run. Give it a keyword and a list of cities; get back one deduplicated dataset where every job is tagged with the city that found it. No login, no cookies, no browser.
Built for recruiters and staffing agencies tracking open roles nationwide, HR and compensation teams comparing demand between metro areas, and job boards or labour-market researchers who want a clean multi-city export instead of stitching together many single-city runs.
If you only need one city, the single-location Monster.com Job Scraper fits better. This Actor is for several cities at once: nearby cities overlap (New York and Newark share many jobs), so jobs are deduplicated across locations and you are not charged for repeats.
What you get
Each row starts with easy flat columns, followed by Monster's complete record.
| Field | Description |
|---|---|
jobId | Monster's unique job id |
searchLocation, searchQuery | The city query that returned the job, and the keyword |
title, company | Job title and hiring company |
city, state, postalCode | Job location (postal code only when Monster provides it) |
latitude, longitude | GPS of the job location |
remote | Monster's remote flag |
salaryMin, salaryMax, salaryUnit, salaryCurrency | Salary, only when the employer lists one (a minority of jobs) |
employmentType | For example FULL_TIME, CONTRACTOR, when available |
datePosted, dateRecency, formattedDate | Posting date and Monster's "6 days ago" text |
monsterUrl, applyUrl | Job page on monster.com and the apply link |
jobPosting | Full posting object including the HTML job description and hiring organization details |
enrichments, apply, derivedProperties | Monster's normalized locations, apply type and flags |
Use cases
- Nationwide hiring analysis: the same role across 20 metros in one export.
- Salary benchmarking: collect
salaryMin/salaryMaxwhere listed, per city. - Recruiting and lead lists: companies hiring for a role, with apply links.
- Job board feeds: schedule daily runs with
postedWithinDays.
Input
| Field | Description |
|---|---|
query | Job title or keywords, e.g. Software Engineer |
locations | List of cities written City, ST (up to 100) |
radius | Search radius around each city, in miles (default 30) |
postedWithinDays | any, 1, 3, 7, 14 or 30. Older jobs are skipped and not charged |
maxPerLocation | Jobs to collect per city (default 100, max 501) |
maxTotal | Hard cap on jobs saved in the whole run, also your cost ceiling |
deduplicate | Return a job once even if several cities find it (default on) |
concurrency | Cities searched in parallel, 1-5 |
{"query": "Software Engineer","locations": ["New York, NY", "Chicago, IL", "Austin, TX"],"radius": 30,"maxPerLocation": 10,"maxTotal": 30,"deduplicate": true}
Good to know
- US only. Monster's mobile data returns jobs for US searches only; other countries came back empty, so only
USis accepted. - 501 results per search. Monster serves at most the first 501 results for a keyword and city. For deeper coverage use more specific keywords or add neighbouring cities.
- Ranked by relevance, not date. With
postedWithinDaysset to a short window only some jobs on each page qualify; raisemaxPerLocationto scan deeper. - Salary is sparse. Most Monster postings do not list pay; those rows have
nullsalary fields. - Listing data is public job-posting information. You are responsible for using it in line with applicable laws and Monster's terms.
Scheduling and integrations
Run it on a schedule from the Apify Console (for example daily with postedWithinDays: "1") and send new results to Google Sheets, Slack, a webhook or your database through Apify integrations. Results export as JSON, CSV, Excel or via the API. Runs that stop before finishing (for example after a platform migration) resume from where they were when started again with the same input.
Use from code or AI agents
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("axlymxp/monster-multi-scraper").call(run_input={"query": "registered nurse","locations": ["Boston, MA", "Denver, CO", "Miami, FL"],"maxPerLocation": 50,"postedWithinDays": "7",})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["searchLocation"], job["title"], job["company"], job["salaryMin"])
Because it is a plain Apify Actor, it can also be called from AI agents through the Apify MCP server.
FAQ
Why did a city return fewer jobs than I asked for? Either Monster has fewer matches within the radius, the postedWithinDays window removed older ones, or the jobs were already returned for an earlier city (deduplication).
Which city is shown for a job found by several? The first one that returned it, in searchLocation. The job's own city and state are in city and state.
Does it need a login or proxy? No.
Something looks wrong or is missing. Open an issue on the Actor page with the run link.