{
  "openapi": "3.0.1",
  "info": {
    "title": "Michael Page Scraper",
    "description": "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.",
    "version": "1.6",
    "x-build-id": "7YJKVC0xnYME0gcph"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~michaelpage-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-michaelpage-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/santamaria-automations~michaelpage-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-michaelpage-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/santamaria-automations~michaelpage-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-michaelpage-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Michael Page search result URLs from any supported country domain (for example https://www.michaelpage.ch/jobs/software). Run a search on the site and copy the URL. Filters already in the URL (sort_by, contract, page) are preserved.",
            "items": {
              "type": "string"
            }
          },
          "directUrls": {
            "title": "Job Detail URLs",
            "type": "array",
            "description": "Individual Michael Page job pages (for example https://www.michaelpage.com/job-detail/superintendent/ref/jn-092026-7113615). Each URL is fetched in detail mode, useful to check whether a saved job is still live. Expired jobs are skipped.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search Keywords",
            "type": "array",
            "description": "One or more search keywords (for example 'data analyst', 'marketing manager'). Each runs as a separate search on the domain selected by the 'country' field, using Michael Page's own keyword listing and its relevance order. If the site has no listing for a multi-word phrase (for example 'software engineer' on michaelpage.co.uk), the actor falls back to the broader single-word listing and logs it; use titleFilter to narrow. Results are deduplicated across queries. With no keywords, search URLs or direct URLs, the actor lists the newest jobs on the selected country domain.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region or postcode, as typed into Michael Page's own 'Region, postcode or city' box (for example London or Zürich). Applied server-side together with each keyword in Search queries, or on its own to list all jobs in that place. Michael Page may include nearby areas. Ignored for Search URLs and Direct URLs."
          },
          "country": {
            "title": "Country",
            "enum": [
              "US",
              "GB",
              "CH",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "BE",
              "PT",
              "PL",
              "AT",
              "IE",
              "AU",
              "SG",
              "HK",
              "JP",
              "BR",
              "MX",
              "AE"
            ],
            "type": "string",
            "description": "Target Michael Page country domain for keyword searches. Ignored when searchUrls are provided (the domain is read from the URL). Default: US (michaelpage.com). Luxembourg is not offered because michaelpage.lu now redirects to michaelpage.be.",
            "default": "US"
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "newest",
              "relevance",
              "salary_desc",
              "salary_asc"
            ],
            "type": "string",
            "description": "How to order results. 'newest' maps to sort_by=most_recent (Michael Page's own recency order), 'relevance' omits the sort param (platform default), 'salary_desc' maps to sort_by=max_to_min, 'salary_asc' maps to sort_by=min_to_max. Default: newest. Michael Page has no date-range filter; apply your own cutoff on posted_at.",
            "default": "newest"
          },
          "contractType": {
            "title": "Contract Type",
            "enum": [
              "",
              "PERMANENT",
              "TEMPORARY"
            ],
            "type": "string",
            "description": "Filter by employment contract type. PERMANENT maps to contract=permanent; TEMPORARY maps to contract=temp. Leave empty to return all contract types.",
            "default": ""
          },
          "salaryMin": {
            "title": "Minimum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose advertised pay is at or above this value, using Michael Page's own server-side salary filter (field_job_salary_min). Give thousands of the local currency (100 means 100k) or a full amount (100000). The site compares the raw advertised number, so hourly or daily rates in the same listing are compared as written. Leave empty for no filter. Applies to keyword, location and default searches, and to searchUrls that do not already carry the parameter."
          },
          "salaryMax": {
            "title": "Maximum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose advertised pay range fits at or below this value (field_job_salary_max). Same units as Minimum Salary. Michael Page rejects a maximum without a minimum, so the actor sends a minimum of 0 when you set only a maximum. Leave empty for no filter."
          },
          "sector": {
            "title": "Sector",
            "type": "string",
            "description": "Michael Page sector facet as it appears in the site URL, for example 'sales', 'information-technology' or 'sales/account-manager' (sector/sub-sector). Added as a path segment after the keyword (/jobs/marketing/sales), which the site filters server-side. Slugs are in the domain's language (copy them from a Michael Page search URL). Ignored for searchUrls."
          },
          "industry": {
            "title": "Industry",
            "type": "string",
            "description": "Michael Page industry facet as it appears in the site URL, for example 'financial-services' or 'technology-telecoms'. Added as a path segment after the keyword (/jobs/marketing/financial-services), filtered server-side. Slugs are in the domain's language (copy them from a Michael Page search URL). Ignored for searchUrls."
          },
          "includeJobDetails": {
            "title": "Include Job Details",
            "type": "boolean",
            "description": "Fetch each job's detail page for the full description (text, HTML, Markdown), requirements, benefits, posted date, consultant contact name and phone, reference number, category and industry. Turn off for a faster SERP-only run.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Detail Fetch Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Number of job detail pages fetched in parallel. Default 3, which keeps michaelpage.com under its rate limit; failed pages are retried with backoff and a second pass. Raise it for speed on domains that tolerate it.",
            "default": 3
          },
          "titleFilter": {
            "title": "Filter by Job Title",
            "type": "string",
            "description": "Comma-separated list of terms to match against job titles (case-insensitive OR-match). Only jobs whose title contains one of the terms are emitted. Non-matching rows are dropped before the detail-fetch event, so you don't pay for filtered-out jobs. Leave empty to disable.",
            "default": ""
          },
          "maxResultsPerQuery": {
            "title": "Max Results per Query",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum results per search URL or keyword. Set maxResults high enough to let every query reach this cap (maxResults >= maxResultsPerQuery x number of queries).",
            "default": 100
          },
          "maxResults": {
            "title": "Max Total Results",
            "minimum": 0,
            "type": "integer",
            "description": "Total cap across all queries and search URLs. Set to 0 for unlimited.",
            "default": 10
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}