Monster Jobs Scraper - Jobs, Salaries, Companies & Contacts avatar

Monster Jobs Scraper - Jobs, Salaries, Companies & Contacts

Pricing

from $1.50 / 1,000 job records

Go to Apify Store
Monster Jobs Scraper - Jobs, Salaries, Companies & Contacts

Monster Jobs Scraper - Jobs, Salaries, Companies & Contacts

Scrape Monster.com job listings from search and direct job URLs. Extract full descriptions, salaries, companies, locations, geo data, application details, classifications, compliance fields, and public email addresses.

Pricing

from $1.50 / 1,000 job records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

Monster Scraper: Job Listings, Salaries and Employer Details

Monster Scraper turns Monster job search into structured data. Run a keyword and location search with filters for recency, employment type and remote work, or paste Monster search and direct job-opening links and let the actor page through them. Each record carries title, employer, salary, location and geo, dates, employment type, application links, the full HTML and plain-text description, optional public emails found in the listing, and the complete source object. Export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Two ways in. Run a structured keyword and location search, or paste Monster search and direct job-opening links; the same recency, employment type, company and sort filters narrow a pasted search link just like a structured search.
  • Server-side filters. On searches, recency, employment type and remote-only are applied by Monster itself, so filtered-out jobs are never fetched or charged.
  • Full description, twice over. The complete HTML description and a stripped plain-text version are both included, so you don't have to parse HTML yourself.
  • Compensation and classification, flattened. Salary range, currency, employment type, industry and Monster's own normalized title and skill enrichment come out as plain top-level fields.
  • Nothing thrown away. The complete source job object rides along in raw, so a field this actor doesn't flatten today is still in the record.
  • Optional email extraction. Pull any public email address left in the job description or employer profile, or switch it off.
  • Cost stays predictable. Max items and Max pages cap how far a run goes before it grows unexpectedly.

Use Cases

  • Recruiters and staffing agencies: track which employers are actively hiring, and for which roles and salary bands.
  • Job board and aggregator sites: mirror Monster listings into your own search product with structured, exportable fields.
  • Labor market researchers: sample salary, employment-type and location data across cities and industries.
  • Sales and business development teams: build outreach lists from companies posting new roles.
  • Compliance and market-rate teams: monitor posted salary ranges by employment type and region.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
jobId"11111111-2222-3333-4444-555555555555"
seoJobId"senior-backend-engineer-austin-tx--11111111-2222-3333-4444-555555555555"
title"Senior Backend Engineer"
companyName"Cascade Analytics Inc."
companyLogohttps://media.example.com/logo.png
location"Austin, TX, US"
latitude / longitude30.2672 / -97.7431
datePosted"2026-01-01T00:00:00.000Z"
dateRecency"3 days ago"
validThrough"2026-03-01T00:00:00.000Z"
status"ACTIVE"
employmentTypesText"FULL_TIME"
salaryMin / salaryMax95000 / 130000
salaryCurrency"USD"
remotetrue
applyUrlhttps://www.monster.com/job-openings/sample-role
jobUrlhttps://www.monster.com/job-openings/sample-role--11111111-2222-3333-4444-555555555555
descriptionText"Sample job description text."
contactEmail"jobs@example.com"
skills["python", "kubernetes"] (when Monster's own enrichment provides them)
rawthe complete source job object

When every request in a run is refused, or no live job matches, the dataset instead gets one diagnostic row (error: true, code: "ZERO_RESULTS") rather than nothing at all.

How to Use

  1. Pick a mode: search (structured keyword and location filters) or url (paste Monster search or job-opening links).
  2. In search mode, fill in Keywords and Location. In url mode, paste one or more Monster links. The shared filters (recency, employment type, company, sort) narrow every search, whether structured or pasted as a link; a direct job-opening link is narrowed by Company only.
  3. Set Max items and Max pages to control how far each source pages and how many rows you pay for.
  4. Start the run, then download the dataset as JSON, CSV or Excel, or read it through the API.

Basic keyword search:

{
"mode": "search",
"query": "product manager",
"location": "Chicago, IL",
"maxItems": 20
}

Remote jobs, posted this week, newest first:

{
"mode": "search",
"query": "data engineer",
"location": "United States",
"workplace": "remote",
"datePosted": "week",
"sortBy": "date",
"maxItems": 50
}

Paste a Monster search link:

{
"mode": "url",
"startUrls": [
"https://www.monster.com/jobs/search?q=nurse&where=Dallas%2C+TX"
],
"maxPages": 3,
"maxItems": 60
}

Paste a direct job-opening link, filtered to one employer:

{
"mode": "url",
"startUrls": [
"https://www.monster.com/job-openings/sample-role--11111111-2222-3333-4444-555555555555"
],
"company": "cascade"
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/monster-com").call(run_input={"mode": "search", "query": "data engineer", "location": "Austin, TX"})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["companyName"], job["salaryMin"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/monster-com').call({ mode: 'search', query: 'data engineer', location: 'Austin, TX' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How Max items and Max pages interact

Max items is a ceiling shared across every search and URL in one run, not a per-source guarantee: once it's reached, no further source is started. Max pages (default 2) limits how many pages each individual source walks before moving on; set it to 0 to let a source page until Max items is reached or the site runs out of results. Within one run, each source stops as soon as one of its own pages returns no job the run hasn't already collected, so raising Max pages only helps if there are genuinely more unseen jobs left to find.

Known limitation when pasted search links overlap. The "no new job on this page" check compares against every job collected so far in the whole run, not just the current link's own jobs. So if a later link's page is made up entirely of jobs an earlier link already returned, that later link stops right there, even on its very first page, and its deeper pages are never requested. A page with even one job the run hasn't seen yet does not trigger this. Example, with Max items set high enough to reach both links: link A (nurse jobs in Dallas) returns jobs 1 to 20. Link B (registered nurse jobs in Dallas) would serve jobs 1 to 20 again on page 1 and jobs 21 to 40 on page 2. Page 1 of link B holds only jobs link A already returned, so link B stops on page 1 and jobs 21 to 40 are never collected, even with Max pages set to 0. Raising Max pages does not help, because the stop happens before any page limit is reached. Workaround: when your links are likely to share results (the same keyword in nearby places, or similar keywords in one place), run each link as its own run, for example one saved task per link, for complete results.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (structured filters) or url (paste Monster links).
querystringsoftware engineerJob title, skill, or keyword (search mode).
locationstringNew York, NYCity, state, ZIP code, or country (search mode).
radiusinteger30Search radius in miles around Location, 1 to 100 (search mode).
workplacestringallall workplaces or remote jobs only.
startUrlsarraysample URLMonster search result URLs or direct job-opening URLs (url mode).
datePostedstringallLimit results by posting recency. Applies to structured searches and pasted search links (a link's own recency setting wins), not to direct job-opening links.
employmentTypestringallLimit results to one employment type. Applies to structured searches and pasted search links, not to direct job-opening links.
companystringemptyCase-insensitive employer name filter. Applies in both modes, including a single pasted job link.
sortBystringrelevanceSort by relevance or newest posting date. Applies to structured searches and pasted search links (a link's own sort setting wins).
enrichEmailsbooleantrueExtract public email addresses from the returned job content.
maxItemsinteger20Maximum matching rows to save, shared across every source in the run.
maxPagesinteger2Pages walked per source before moving on; 0 means no page limit.
proxyobjectApify ResidentialConnection settings.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"jobId": "11111111-2222-3333-4444-555555555555",
"seoJobId": "senior-backend-engineer-austin-tx--11111111-2222-3333-4444-555555555555",
"title": "Senior Backend Engineer",
"companyName": "Cascade Analytics Inc.",
"location": "Austin, TX, US",
"latitude": 30.2672,
"longitude": -97.7431,
"datePosted": "2026-01-01T00:00:00.000Z",
"dateRecency": "3 days ago",
"status": "ACTIVE",
"employmentTypes": ["FULL_TIME"],
"employmentTypesText": "FULL_TIME",
"salaryMin": 95000,
"salaryMax": 130000,
"salaryCurrency": "USD",
"remote": true,
"applyUrl": "https://www.monster.com/job-openings/sample-role",
"jobUrl": "https://www.monster.com/job-openings/sample-role--11111111-2222-3333-4444-555555555555",
"descriptionText": "Sample job description text.",
"contactEmail": "jobs@example.com",
"raw": {},
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

Apify's Residential proxy group is recommended for this connection; datacenter and free connections can be refused more often. Pick the proxy group under Connection. The actor establishes a working connection automatically and refreshes it when a request is refused.

FAQ

How much does it cost?

You pay a small run-start fee plus a per-record charge for each job saved to the dataset. The Pricing tab shows current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available job listings. You are responsible for how you use the data: follow Monster's terms and the laws that apply to you, and get legal advice before any commercial redistribution. Employer content such as logos and company descriptions may carry their own rights.

Can I schedule it to catch new postings?

Yes, schedule the actor from the Schedules tab. This actor does not track state between runs, so a recurring run returns every job currently matching your search or links each time, not only what changed since the last run.

Why did my run return fewer jobs than Max items?

Max items is a ceiling shared across every search and URL in the run, not a per-source guarantee. A source stops early once its current page returns no job it hasn't already collected this run, once Max pages is reached, or once the site has no more results, whichever comes first. With several pasted links in one run, that first rule counts jobs collected by any earlier link, so a link whose first page repeats another link's jobs can stop before reaching its own new jobs; run overlapping links as separate runs for complete results (see Known limitation when pasted search links overlap above). Fewer live jobs can also simply mean fewer matches exist for your keywords, location, and filters.

A direct job-opening link is filtered by Company only; Date posted, Employment type and Sort apply to searches and do not remove a directly linked job. If Company is set and that job's employer name doesn't contain the text you entered, the job is skipped, and the run saves only the ZERO_RESULTS diagnostic row described below.

Why did my run finish with one row instead of failing?

If every request to Monster is refused for the whole run, the actor does not fail; it saves one diagnostic row (code: "ZERO_RESULTS") so "no matching jobs" is never silently confused with "the connection never worked," and suggests broadening your search or switching the connection type. A run fails outright only when none of the pasted links are usable Monster search or job URLs.

Can I use it with AI agents or MCP?

Yes. Call it through the Apify API or SDKs like any other actor, and wire its dataset into an agent or automation platform through Apify's integrations.

🔗 Want more jobs data?

Pair this actor with these related scrapers from the same team:

💼 CareerBuilder Scraper
Scrape CareerBuilder.com job listings by search or URL. Returns title, company profile...
💼 ZipRecruiter Scraper
From $1/1K. Scrape ZipRecruiter jobs with titles, companies, salaries, locations...
💼 Jora Jobs Scraper
Scrape Jora.com job listings across supported countries by keyword, filters, or URL...
💼 SEEK Jobs Scraper
From $0.7/1K. Scrape SEEK.com.au and SEEK.co.nz jobs by keyword, location, or filters...
💼 Gupy Jobs Scraper
Scrape public jobs from Gupy.io by keyword, state, city, workplace type, job type...
💼 Wellfound Jobs Scraper
Scrape startup jobs from Wellfound.com by keyword, location, role, or remote status...

👉 Browse all abotapi scrapers

💬 Support & custom scrapers

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.