Michael Page Scraper avatar

Michael Page Scraper

Pricing

from $1.00 / 1,000 actor starts

Go to Apify Store
Michael Page Scraper

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

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

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.

JobsSearch onlyWith 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.

CodeDomainCodeDomain
USmichaelpage.comIEmichaelpage.ie
GBmichaelpage.co.ukAUmichaelpage.com.au
CHmichaelpage.chSGmichaelpage.com.sg
DEmichaelpage.deHKmichaelpage.com.hk
FRmichaelpage.frJPmichaelpage.co.jp
ESmichaelpage.esBRmichaelpage.com.br
ITmichaelpage.itMXmichaelpage.com.mx
NLmichaelpage.nlAEmichaelpage.ae
BEmichaelpage.beATmichaelpage.at
PTmichaelpage.ptPLmichaelpage.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).

FieldTypeRequiredDescriptionExample
searchQueriesarrayNoKeywords. 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"]
locationstringNoCity, 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"
countrystringNoTwo-letter code from the table above. Default US. Ignored for searchUrls."CH"
searchUrlsarrayNoMichael Page search URLs from any supported domain. sort_by, contract and page already in the URL are kept.["https://www.michaelpage.ch/jobs/software"]
directUrlsarrayNoIndividual job pages, fetched in detail mode. Expired jobs are skipped.["https://www.michaelpage.com/job-detail/superintendent/ref/jn-092026-7113615"]
sortBystringNonewest (default, the site's sort_by=most_recent), relevance (site default), salary_desc, salary_asc."newest"
contractTypestringNoPERMANENT or TEMPORARY. Empty means all."PERMANENT"
maxResultsPerQueryintegerNoCap per keyword or URL. Default 100.50
maxResultsintegerNoTotal cap across everything. 0 means unlimited. Default 10.200
includeJobDetailsbooleanNoFetch each job page for the full description, contact, dates and taxonomy. Default true.true
maxConcurrencyintegerNoParallel detail fetches (1 to 20). Default 3, which stays under the michaelpage.com rate limit.3
salaryMinintegerNoMinimum 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
salaryMaxintegerNoMaximum 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
sectorstringNoSector 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"
industrystringNoIndustry 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"
titleFilterstringNoComma-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 example jn-092026-7113615), stable across runs.
  • title: Job title.
  • company_name: Advertiser name, the recruiter brand. See the note above.
  • company: Deprecated duplicate of company_name, see Deprecation notes below.
  • employer_disclosed: Always false today, because the client employer is not named.
  • location: Location as printed on the search page.
  • city, region, country: Parsed location. country is a two-letter code. City and region need detail mode; country is always set.

Employment

  • employment_type: Contract type as printed on the site, in the site's language (for example Permanent, Festanstellung, 正社員).
  • contract_type: Language-neutral permanent, temporary or contract (detail mode).
  • working_pattern: Full-time or Part-time (detail mode).
  • work_arrangement: Work nature flag as printed (for example "Home Office"), when the listing has one.
  • remote_option: hybrid or remote derived from work_arrangement. null when nothing is flagged.

Salary

  • salary_min, salary_max: Numeric bounds. Parsed for every locale (45.000€, CHF135.000, 年収 800万円, and so on). null when the listing shows no pay.
  • salary_currency: ISO 4217 code.
  • salary_period: year, month, week, day or hour, 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. null when 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"). null when 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 "外資系企業"); null on 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); null on 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 example JN-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_url carries the same value.
  • apply_url: The Michael Page application page for the job.
  • source_platform: The domain scraped, for example michaelpage.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 -> use company_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

RunMeasured time
30 jobs, one keyword, detail modeabout 10 seconds
50 jobs, two keywords, search pages onlyabout 3 to 10 seconds
40 jobs across 20 country domains, detail modeabout 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_at is midnight UTC.
  • The client employer is confidential on most listings. Use company_about for 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 engineer on 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 set titleFilter.
  • 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 searchUrls link 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.

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.