Monster Jobs Scraper at a glance
Monster Jobs Scraper is a ready-to-run Apify actor from abotapi for collecting jobs data. Its documented output includes job id, title, company, location and date posted, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Jobs, Automation, Developer Tools
- Pricing
- $2.20 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 28 options
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.
What Monster Jobs Scraper can do
- 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, flattened, with optional emails. Salary range, currency, employment type, industry and Monster's own normalized title and skill enrichment come out as plain top-level fields, plus public emails from the listing when enabled.
- 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.
- Incremental mode. Schedule the same search and receive only NEW, UPDATED and REAPPEARED jobs, with EXPIRED rows for jobs that disappeared.
Choose what to collect
These inputs let you configure Monster Jobs Scraper - Jobs, Salaries, Companies & Contacts. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose structured search mode or URL mode. |
querystring | Job title, skill, or keyword. |
locationstring | City, state, ZIP code, or country. |
addressstring | Alias of Location. When both are set, Address wins. |
radiusinteger | Search radius around the selected location. |
workplacestring | Return all workplaces or remote jobs only. |
startUrlsarray | Monster search URLs (/jobs/search?q=&where=&page=&rad=, /jobs/q--jobs[-l-]) or direct /job-openings/- links. Left unedited, url mode scrapes one example of each shape. |
Show 21 more inputs
| Input | What it controls |
|---|---|
datePostedstring | Limit results by posting recency. |
postedWithinDaysstring | Alias of Date posted by day count. Overrides Date posted when not 'Any'. 3 days uses the last-week window trimmed to 3 days. |
countrystring | Monster serves the United States only. |
employmentTypestring | Limit results to one employment type. |
companystring | Optional case-insensitive employer filter. |
sortBystring | Sort results by relevance or newest posting date. |
enrichEmailsboolean | Extract email addresses present in the returned job description and employer metadata. |
maxItemsinteger | Maximum matching rows to save. Fewer may be returned when fewer live jobs match. |
maxPagesinteger | Pages walked per source. 0 (default) means no page limit: the run still stops at Max items, when results end, or when a page repeats the previous one. Set a number to stop earlier. |
scrapeAllPagesboolean | Ignore Max pages and page through every result page, still bounded by Max items. |
startPageinteger | First result page to fetch in search mode (pasted search URLs carry their own page). |
pageSizeinteger | Jobs requested per page (1-50). |
incrementalModeboolean | Remember the jobs from earlier runs of the same search and return only what changed: NEW, UPDATED (title, company, location, salary, description, posting or expiry date and other listing content changed) or REAPPEARED jobs. Relative age labels (such as '2 days ago'), the scrape time and the raw source copy never count as a change. Jobs that are unchanged are skipped and not charged. |
stateKeystring | Name that identifies the remembered baseline. Leave empty to derive it from the search settings, so each distinct search keeps its own baseline. |
emitUnchangedboolean | Incremental mode only. Also write unchanged jobs to the dataset, marked UNCHANGED. They are never charged. |
emitExpiredboolean | Incremental mode only. Write an EXPIRED row for baseline jobs missing from a run that walked the whole search. Skipped when the run was capped by Max items or Max pages, started mid-way, or used direct job links. EXPIRED rows are never charged. |
resumeFromRunIdstring | Run ID of an earlier interrupted run of this actor. Jobs it already saved are skipped. A resumed run never reports EXPIRED jobs. |
ignoreFieldsForChangesarray | Extra output field names (dotted paths allowed for nested fields, for example enrichments.skills) that must not trigger UPDATED. Always ignored: scrapedAt, raw, dateRecency, formattedDate. Posting and expiry dates are compared. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
jobIdJob ID (text)titleTitle (text)companyNameCompany (text)locationLocation (text)datePostedDate posted (date)dateRecencyRecency (text)employmentTypesTextEmployment types (text)salaryMinSalary min (number)salaryMaxSalary max (number)salaryCurrencyCurrency (text)salaryUnitSalary unit (text)remoteRemote (boolean)Show 17 more fields
statusStatus (text)industryIndustry (text)applyUrlApply (link)jobUrlJob URL (link)latitudeLatitude (number)longitudeLongitude (number)contactEmailEmail (text)descriptionTextDescription (text)scrapedAtScraped at (date)normalizedSalaryNormalized salary (object)companyUrlCompany URL (link)companyLogoLogo (image)contactEmailsEmails (array)cityCity (text)regionRegion (text)postalCodePostal code (text)countryCountry (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Monster Jobs Scraper return?
The documented output for Monster Jobs Scraper includes job id, title, company, location, date posted, recency, employment types and salary min. Availability of each field depends on the source page and the selected mode.
How much does Monster Jobs Scraper cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I schedule it to catch new postings?
Yes. Schedule the actor from the Schedules tab and switch on Only report changes since the last run. The actor remembers the jobs of the same search and writes only NEW, UPDATED and REAPPEARED jobs, each with changeType, changedFields, firstSeenAt and lastSeenAt. Unchanged jobs are skipped and not charged; with Also return unchanged jobs they are written as UNCHANGED, still not charged. Each row also carries the full apply, jobPosting and brandingExt blocks plus flattened companyBannerUrl and companyPhotos. Relative age labels (dateRecency, formattedDate), scrapedAt and raw never count as a change, while datePosted and validThrough do; add more with Ignore fields when detecting changes. With Report jobs that are no longer listed, baseline jobs missing from a run that walked the whole search are written as EXPIRED (not charged). A run capped by Max items or Max pages, or using direct job links, cannot prove a complete walk and reports no EXPIRED jobs. The baseline is keyed by your search settings, or by State name if set.
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.
Why does a single pasted job link sometimes return no job?
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.
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.
