Michael Page Scraper
Pricing
from $1.00 / 1,000 actor starts
Michael Page Scraper
Scrape Michael Page jobs from 20 country domains. Returns title, city, salary, contract type, posted date, full description, requirements, benefits, consultant contact and apply URL. Pay per event: $0.001 per run, $0.003 per search job, $0.005 per full-detail job.
Pricing
from $1.00 / 1,000 actor starts
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Michael Page Scraper - Jobs, Salaries & Consultant Contacts from 20 Countries
Extract live job listings from Michael Page, one of the world's largest recruitment agencies, across 20 country domains. Each record includes job title, location, salary (min, max, currency, period), contract type, posted date, and the full description (text, HTML and Markdown). With detail mode on, you also get the Michael Page consultant handling the job (name and, on some domains, phone), the reference number, category and industry, requirements, benefits, and the apply link. No API key, no login.
Note on employers: Michael Page advertises most jobs for confidential clients. company_name is the recruiter brand (for example "Michael Page" or "Michael Page Japan"), and the client's own description is in company_about. The client's name is not published on the site.
Sample output
{"id": "jn-092026-7113615","title": "Superintendent","company_name": "Michael Page","company": "Michael Page","location": "Columbus","city": "Columbus","region": "Ohio","country": "US","employment_type": "Permanent","contract_type": "permanent","working_pattern": "Full-time","salary_min": 110000,"salary_max": 130000,"salary_currency": "USD","salary_period": "year","salary_text": "USD110,000 - USD130,000 per year","posted_at": "2026-09-29T00:00:00Z","posted_at_datetime": "2026-09-29T00:00:00Z","posted_at_text": "2026-09-29","description_snippet": "Quick promotion track with fast growing GC and great benefits.","description_full": "- Quick promotion track with fast growing GC and great benefits!\n\nAbout Our Client\nThis outstanding General Contractor has been one of the leading firms in the Mid-West...","description_html": "<ul><li>Quick promotion track with fast growing GC and great benefits!</li></ul>\n<h2>About Our Client</h2>...","description_md": "- Quick promotion track with fast growing GC and great benefits!\n\n## About Our Client\n\nThis outstanding General Contractor...","requirements": ["At least 5+ years of building construction experience required", "Completed OSHA 30 hour training course."],"benefits": ["Performance based bonus", "A 401(k) plan with a company match and immediate vesting"],"highlights": ["Quick promotion track with fast growing GC and great benefits!"],"category": "Construction","sub_category": "Site Manager","company_industry": "Property","company_about": "This outstanding General Contractor has been one of the leading firms in the Mid-West since the roaring 20's...","employer_disclosed": false,"contact_name": "Hunter Roberts","contact_phone": null,"contact_phones": null,"reference_number": "JN-092026-7113615","job_url": "https://www.michaelpage.com/job-detail/superintendent/ref/jn-092026-7113615","source_url": "https://www.michaelpage.com/job-detail/superintendent/ref/jn-092026-7113615","apply_url": "https://www.michaelpage.com/job-apply/superintendent/ref/jn-092026-7113615","source_platform": "michaelpage.com","search_query": "superintendent","scraped_at": "2026-09-29T10:00:00Z"}
Pricing
Pay per event:
- $0.001 per run start
- $0.003 per job returned (about $3 per 1,000)
- +$0.005 per job enriched with full details (about $8 per 1,000 jobs with details)
Every returned job is charged the first price. Jobs with a parsed detail page (description, contact, etc.) are charged the second price as well.
| Jobs | Search only | With detail |
|---|---|---|
| 10 jobs | $0.03 | $0.08 |
| 100 jobs | $0.30 | $0.80 |
| 1,000 jobs | $3.00 | $8.00 |
Add $0.001 per run for the start event.
New to Apify? Every account gets a $5 free monthly platform credit, enough for about 1,000 detail jobs before you commit to paying anything. Test extensively first.
Supported country domains
Checked live on 2026-09-29: all 20 domains below return job listings with the same page structure.
| Code | Domain | Code | Domain |
|---|---|---|---|
| US | michaelpage.com | IE | michaelpage.ie |
| GB | michaelpage.co.uk | AU | michaelpage.com.au |
| CH | michaelpage.ch | SG | michaelpage.com.sg |
| DE | michaelpage.de | HK | michaelpage.com.hk |
| FR | michaelpage.fr | JP | michaelpage.co.jp |
| ES | michaelpage.es | BR | michaelpage.com.br |
| IT | michaelpage.it | MX | michaelpage.com.mx |
| NL | michaelpage.nl | AE | michaelpage.ae |
| BE | michaelpage.be | AT | michaelpage.at |
| PT | michaelpage.pt | PL | michaelpage.pl |
Luxembourg is not supported: michaelpage.lu now redirects to michaelpage.be.
Job text is returned in the language of the domain (German on .de, Japanese on .co.jp, and so on). Some Swiss and Polish jobs are only published in their local language.
Input
No API key required. Pick a country and keywords, or paste search URLs. With an empty input the actor lists the newest jobs on the selected country domain (default US).
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
searchQueries | array | No | Keywords. Each runs as a separate search on the country domain, using Michael Page's own keyword listing (/jobs/software-engineer) and its relevance order. Very rare keywords can return no results, because Michael Page only has listing pages for keywords it knows. | ["data analyst", "controller"] |
location | string | No | City, region or postcode, as typed into Michael Page's own location box (for example London or Zürich). Filtered on the Michael Page server together with each keyword, or on its own to list all jobs in that place. Michael Page may include nearby areas. Ignored for searchUrls and directUrls. | "London" |
country | string | No | Two-letter code from the table above. Default US. Ignored for searchUrls. | "CH" |
searchUrls | array | No | Michael Page search URLs from any supported domain. sort_by, contract and page already in the URL are kept. | ["https://www.michaelpage.ch/jobs/software"] |
directUrls | array | No | Individual job pages, fetched in detail mode. Expired jobs are skipped. | ["https://www.michaelpage.com/job-detail/superintendent/ref/jn-092026-7113615"] |
sortBy | string | No | newest (default, the site's sort_by=most_recent), relevance (site default), salary_desc, salary_asc. | "newest" |
contractType | string | No | PERMANENT or TEMPORARY. Empty means all. | "PERMANENT" |
maxResultsPerQuery | integer | No | Cap per keyword or URL. Default 100. | 50 |
maxResults | integer | No | Total cap across everything. 0 means unlimited. Default 10. | 200 |
includeJobDetails | boolean | No | Fetch each job page for the full description, contact, dates and taxonomy. Default true. | true |
maxConcurrency | integer | No | Parallel detail fetches (1 to 20). Default 3, which stays under the michaelpage.com rate limit. | 3 |
salaryMin | integer | No | Minimum advertised pay, filtered on the Michael Page server (field_job_salary_min). Thousands of local currency (100 = 100k) or a full amount (100000). The site compares the raw number, so hourly and daily rates are compared as written. | 100 |
salaryMax | integer | No | Maximum advertised pay (field_job_salary_max), same units. The site needs a minimum with a maximum, so the actor sends a minimum of 0 when only a maximum is set. | 150 |
sector | string | No | Sector facet slug from the site URL, optionally with sub-sector, for example sales or sales/account-manager. Added after the keyword in the path and filtered server-side. Slugs are in the domain's language. Ignored for searchUrls. | "sales" |
industry | string | No | Industry facet slug from the site URL, for example financial-services. Filtered server-side. Slugs are in the domain's language. Ignored for searchUrls. | "financial-services" |
titleFilter | string | No | Comma-separated title terms (OR-match, case-insensitive). Non-matching rows are dropped before the detail fetch, so you do not pay for them. | "manager, director" |
Copy-paste example:
{"searchQueries": ["software engineer", "data analyst"],"country": "CH","sortBy": "newest","contractType": "PERMANENT","includeJobDetails": true,"maxResultsPerQuery": 50,"maxResults": 100}
If maxResults is lower than maxResultsPerQuery times the number of keywords, the first keywords fill the total cap and later keywords get fewer or no rows. Set maxResults to at least the product to let every keyword reach its cap.
Precision title filter
{"searchQueries": ["director"],"titleFilter": "manager, director","country": "US","maxResults": 50}
Only jobs with "manager" or "director" in the title are returned. Non-matching rows are dropped before any detail fetch.
Sorting and dates
Each sortBy value maps to the site's own sort_by parameter: newest = sort_by=most_recent, relevance = no parameter, salary_desc = sort_by=max_to_min (by advertised maximum), salary_asc = sort_by=min_to_max (by advertised minimum). The site sorts the raw advertised number, so on domains that mix hourly or daily rates with annual salaries the rates sort alongside annual pay.
sortBy: "newest" uses Michael Page's own "most recent" order, so the freshest jobs come first on every domain. The site orders by its latest update of a listing, so a re-published older job can appear near the top; posted_at is the original posting day, and the order is mostly but not strictly descending on it. Michael Page has no "posted within N days" filter, so apply your own cutoff on posted_at (detail mode).
Output fields
Core
id: Michael Page job reference in lower case (for examplejn-092026-7113615), stable across runs.title: Job title.company_name: Advertiser name, the recruiter brand. See the note above.company: Deprecated duplicate ofcompany_name, see Deprecation notes below.employer_disclosed: Alwaysfalsetoday, because the client employer is not named.location: Location as printed on the search page.city,region,country: Parsed location.countryis a two-letter code. City and region need detail mode;countryis always set.
Employment
employment_type: Contract type as printed on the site, in the site's language (for examplePermanent,Festanstellung,正社員).contract_type: Language-neutralpermanent,temporaryorcontract(detail mode).working_pattern:Full-timeorPart-time(detail mode).work_arrangement: Work nature flag as printed (for example "Home Office"), when the listing has one.remote_option:hybridorremotederived fromwork_arrangement.nullwhen nothing is flagged.
Salary
salary_min,salary_max: Numeric bounds. Parsed for every locale (45.000€,CHF135.000,年収 800万円, and so on).nullwhen the listing shows no pay.salary_currency: ISO 4217 code.salary_period:year,month,week,dayorhour, as advertised.salary_text: Raw pay string from the search page.
Description (description_snippet on every row; the rest in detail mode)
description_snippet: Search page teaser.description_full: Full plain-text body (highlights, client, role, candidate profile, offer).description_html: The same body as cleaned HTML with section headings.description_md: The same body as Markdown.requirements: List items from the "Successful Applicant" section.benefits: List items from the "What's on Offer" section.nullwhen the posting has no such section, or when the section only repeats the requirements.highlights: The short bullets shown directly under the title (for example "Full desk, direct hire placements").nullwhen a posting has none.company_about: The "About Our Client" text.
Classification (detail mode)
category,sub_category: Michael Page function and specialisation (for example "Accounting & Finance" and "Financial Accounting").company_industry: Client industry.company_type: Company type flag. Only michaelpage.co.jp publishes it (for example "外資系企業");nullon every other domain, including US and GB.company_logo_url: Client logo, only on a few featured jobs (seen on michaelpage.co.uk, .fr and .pl);nullon US and the other domains.
Contact (detail mode; null when the domain does not publish it)
contact_name: The Michael Page consultant for the job.contact_phone,contact_phones: Consultant phone number. Published on some domains such as JP, DE and AU. No email addresses are published.reference_number: Quote this reference when contacting Michael Page (for exampleJN-092026-7113615).
Dates and links
posted_at,posted_at_datetime: ISO 8601 posted date (midnight UTC, the site publishes the day only). Detail mode.posted_at_text: The date string as published.job_url: Canonical job page.source_urlcarries the same value.apply_url: The Michael Page application page for the job.source_platform: The domain scraped, for examplemichaelpage.ch.search_query: The keyword or URL that produced the row.scraped_at: ISO timestamp when the record was written.
Deprecation notes
The following field name is deprecated and will be removed after 2027-09-29 (one-year backward-compatibility window):
company-> usecompany_name(canonical since 2026-09-29)
Both fields are emitted in every dataset row during the window. Please migrate downstream consumers to the canonical name before the removal date.
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.
Configure MCP server with Michael Page Scraper. Get a ready-to-use configuration for your MCP client with the Michael Page Scraper preconfigured at mcp.apify.com?tools=santamaria-automations/michaelpage-scraper. You can connect to the Apify MCP Server using clients like Tester MCP Client, or any other MCP client of your choice. See the Apify MCP docs for implementation details, the MCP protocol introduction for an overview, or the Apify blog post for a walkthrough.
{"mcpServers": {"apify": {"command": "npx","args": ["mcp-remote","https://mcp.apify.com/?tools=santamaria-automations/michaelpage-scraper","--header","Authorization: Bearer <YOUR_API_TOKEN>"]}}}
For per-tool schemas and copy-paste snippets for MCP clients, see the MCP tab.
Example prompt: "Use michaelpage-scraper to find permanent finance jobs in Switzerland posted this week. Return a table with title, city, salary and consultant name."
See the auto-generated API tab for language-specific examples (cURL, JS, Python, .NET, Ruby, PHP).
Why this actor
- 20 Michael Page domains in one actor, with the same output shape everywhere.
- Salary parsed to numbers in every locale, including European thousands separators and Japanese man-yen amounts.
- The consultant name, reference number and (where published) phone on every detail row, ready for outreach.
- Full description with section structure, requirements and benefits split out, so downstream LLM parsing has clean input.
- Newest-first sorting, contract-type, salary, sector and industry filters (all applied on the Michael Page server), and a title filter that saves detail fees on irrelevant rows.
Speed and scale
| Run | Measured time |
|---|---|
| 30 jobs, one keyword, detail mode | about 10 seconds |
| 50 jobs, two keywords, search pages only | about 3 to 10 seconds |
| 40 jobs across 20 country domains, detail mode | about 80 seconds |
Cost per run in these tests was well under $0.01 of compute; you pay only the per-job price. Larger runs scale roughly linearly. Michael Page rate limits fast bursts, so the actor backs off automatically and very large runs may take longer.
Each search page holds up to 30 jobs and pagination follows the site's own "next" link. Run time is dominated by detail-page fetches; turn detail mode off for a search-page-only run.
Notes and limits
- Michael Page publishes only the posting day, not the time, so
posted_atis midnight UTC. - The client employer is confidential on most listings. Use
company_aboutfor the client description. - Multi-word keywords use the site's own listing for the whole phrase. When a domain has no listing for the phrase (for example
software engineeron michaelpage.co.uk), the actor uses the broader single-word listing in the site's own order and logs a warning. Rows are not filtered by title unless you settitleFilter. - Michael Page rate limits fast bursts (HTTP 429). Detail fetches retry with exponential backoff, jitter and a fresh proxy session per retry, and rows that still fail get a slower second pass at the end.
- Search pages exist for keywords Michael Page has a listing for. An unknown keyword returns no rows and a clear log line; try a broader keyword or paste a
searchUrlslink from the site. - Some jobs on Swiss and Polish domains are published only in French, German, Italian or Polish, matching the domain's language versions.
Related actors
- Website Job Extractor: pull job listings from any employer career page.
- Indeed Scraper: Indeed jobs across many countries.
- Glassdoor Scraper: Glassdoor jobs with company ratings.
- Hays Scraper: another global recruitment agency's live jobs.
- Reed UK Scraper: UK job board listings.
- StepStone DE Scraper: German job market.
- Jobs.ch Scraper: Swiss job market.
Support
- Questions or issues? Email contact@nanoscrape.com, we typically reply within 6 hours. You can also open a ticket in the Issues tab on the actor page.
- Feature request for this actor? Open a ticket in the Issues tab or email contact@nanoscrape.com with the platform field you need and (if possible) a URL that shows the data live.
- Need a scraper for a job board we don't cover yet? Email contact@nanoscrape.com with the target site + your rough usage volume. We ship one-off boards regularly.