{
  "openapi": "3.0.1",
  "info": {
    "title": "MyCareersFuture Jobs Scraper [💰$0.85] Salary & Monitoring",
    "description": "Scrape all ~100,000 jobs on MyCareersFuture.gov.sg, Singapore's national job portal. 76 fields per job: salary range, skills, company UEN, website & industry, views, applicants, lat/lng & district. Filter by region, postal district, direct employer vs agency, flexible work. Alerts on changes.",
    "version": "0.1",
    "x-build-id": "CZ4Rb2YioYG1sE4jt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corvuslab~mycareersfuture-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corvuslab-mycareersfuture-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/corvuslab~mycareersfuture-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corvuslab-mycareersfuture-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/corvuslab~mycareersfuture-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corvuslab-mycareersfuture-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": {
          "query": {
            "title": "🔑 Search keywords",
            "type": "string",
            "description": "Job titles, skills or company names to search for, e.g. <code>data analyst</code>, <code>nurse</code>, <code>python</code>. Separate several searches with commas — each runs on its own and results are merged and de-duplicated."
          },
          "startUrls": {
            "title": "🔗 MyCareersFuture URLs",
            "type": "array",
            "description": "Paste search-result links (the filters in the link are applied) or individual job links. Job links are always returned, whatever the filters below say.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "🔢 Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs to return across all searches. Set 0 for no limit — all of Singapore is roughly 100,000 open jobs.",
            "default": 50
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "newest",
              "salary"
            ],
            "type": "string",
            "description": "Newest first is best for monitoring; highest salary first is best for salary research.",
            "default": "newest"
          },
          "categories": {
            "title": "🗂️ Job categories",
            "type": "array",
            "description": "Only jobs in these categories. Pick several to widen the search.",
            "items": {
              "type": "string",
              "enum": [
                "Accounting / Auditing / Taxation",
                "Admin / Secretarial",
                "Advertising / Media",
                "Architecture / Interior Design",
                "Banking and Finance",
                "Building and Construction",
                "Consulting",
                "Customer Service",
                "Design",
                "Education and Training",
                "Engineering",
                "Entertainment",
                "Environment / Health",
                "Events / Promotions",
                "F&B",
                "General Management",
                "General Work",
                "Healthcare / Pharmaceutical",
                "Hospitality",
                "Human Resources",
                "Information Technology",
                "Insurance",
                "Legal",
                "Logistics / Supply Chain",
                "Manufacturing",
                "Marketing / Public Relations",
                "Medical / Therapy Services",
                "Others",
                "Personal Care / Beauty",
                "Precision Engineering",
                "Professional Services",
                "Public / Civil Service",
                "Purchasing / Merchandising",
                "Real Estate / Property Management",
                "Repair and Maintenance",
                "Risk Management",
                "Sales / Retail",
                "Sciences / Laboratory / R&D",
                "Security and Investigation",
                "Social Services",
                "Telecommunications",
                "Travel / Tourism",
                "Wholesale Trade"
              ]
            }
          },
          "employmentTypes": {
            "title": "💼 Employment types",
            "type": "array",
            "description": "Only jobs with these employment types.",
            "items": {
              "type": "string",
              "enum": [
                "Permanent",
                "Full Time",
                "Part Time",
                "Contract",
                "Temporary",
                "Freelance",
                "Internship/Attachment"
              ],
              "enumTitles": [
                "Permanent",
                "Full time",
                "Part time",
                "Contract",
                "Temporary",
                "Freelance",
                "Internship / attachment"
              ]
            }
          },
          "positionLevels": {
            "title": "🎓 Seniority",
            "type": "array",
            "description": "Only jobs at these position levels.",
            "items": {
              "type": "string",
              "enum": [
                "Senior Management",
                "Middle Management",
                "Manager",
                "Professional",
                "Senior Executive",
                "Executive",
                "Junior Executive",
                "Non-executive",
                "Fresh/entry level"
              ]
            }
          },
          "regions": {
            "title": "🗺️ Regions",
            "type": "array",
            "description": "Only jobs located in these regions of Singapore.",
            "items": {
              "type": "string",
              "enum": [
                "Central",
                "East",
                "West",
                "North",
                "North-East"
              ]
            }
          },
          "districts": {
            "title": "📍 Postal districts",
            "type": "array",
            "description": "Only jobs in these postal districts. Combined with Regions, a job in either matches.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15",
                "16",
                "17",
                "18",
                "19",
                "20",
                "21",
                "22",
                "23",
                "24",
                "25",
                "26",
                "27",
                "28"
              ],
              "enumTitles": [
                "D01 Marina, Raffles Place, People's Park, Cecil",
                "D02 Anson, Tanjong Pagar",
                "D03 Queenstown, Bukit Merah, Tiong Bahru",
                "D04 Harbourfront, Sentosa Island, Telok Blangah",
                "D05 Pasir Panjang, Hong Leong Garden, Clementi New Town",
                "D06 Beach Road, High Street",
                "D07 Middle Road, Golden Mile",
                "D08 Little India",
                "D09 Cairnhill, Orchard, River Valley",
                "D10 Tanglin, Ardmore, Bukit Timah, Holland Road",
                "D11 Watten Estate, Thomson, Novena",
                "D12 Toa Payoh, Balestier, Serangoon",
                "D13 Macpherson, Braddell",
                "D14 Geylang, Eunos",
                "D15 Joo Chiat, Katong, Amber Road",
                "D16 Bedok, Eastwood, Kew Drive, Upper East Coast",
                "D17 Changi, Loyang",
                "D18 Pasir Ris, Tampines",
                "D19 Hougang, Sengkang, Serangoon Garden, Punggol",
                "D20 Ang Mo Kio, Bishan",
                "D21 Upper Bukit Timah, Clementi Park, Ulu Pandan",
                "D22 Jurong, Jurong Island, Tuas",
                "D23 Hillview, Bukit Panjang, Dairy Farm, Choa Chu Kang",
                "D24 Tengah, Lim Chu Kang",
                "D25 Kranji, Woodgrove, Woodlands",
                "D26 Springleaf, Upper Thomson",
                "D27 Sembawang, Yishun",
                "D28 Seletar"
              ]
            }
          },
          "minSalary": {
            "title": "💰 Minimum monthly salary (SGD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose salary range reaches at least this monthly amount. Salaries are shown on almost every MyCareersFuture posting, so this filter is reliable."
          },
          "postedBy": {
            "title": "🏢 Posted by",
            "enum": [
              "any",
              "direct",
              "recruiter"
            ],
            "type": "string",
            "description": "Direct employers only, recruitment agencies only, or both. Agencies are recognised whether or not they name their client — many advertise without one.",
            "default": "any"
          },
          "companyName": {
            "title": "🏷️ Company name",
            "type": "string",
            "description": "Only jobs from companies whose name matches this text, e.g. <code>DBS</code>."
          },
          "flexibleWorkArrangements": {
            "title": "🕒 Flexible work arrangements",
            "type": "array",
            "description": "Only jobs offering at least one of these arrangements.",
            "items": {
              "type": "string",
              "enum": [
                "Flexi-Hours",
                "Telecommuting",
                "Employees Choice of Days Off",
                "Staggered Time",
                "Compressed Work Schedule",
                "Creative Scheduling"
              ]
            }
          },
          "postedWithinDays": {
            "title": "📅 Posted within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Only jobs posted in the last N days. Leave empty for any date. Pairs well with a daily schedule."
          },
          "maxYearsExperience": {
            "title": "🧑‍🎓 Max years of experience required",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs asking for at most this many years of experience — set 0 or 1 to find graduate and entry-level roles."
          },
          "responsiveEmployersOnly": {
            "title": "⚡ Responsive employers only",
            "type": "boolean",
            "description": "Only jobs from employers MyCareersFuture marks as responsive to applicants.",
            "default": false
          },
          "governmentSchemeOnly": {
            "title": "🏛️ Government-supported jobs only",
            "type": "boolean",
            "description": "Only jobs offered under a government scheme such as the Mid-Career Pathways Programme or Career Conversion Programmes.",
            "default": false
          },
          "requireContact": {
            "title": "📇 Require contact details",
            "enum": [
              "off",
              "email",
              "phone",
              "either",
              "both"
            ],
            "type": "string",
            "description": "Keep only jobs that include a contact in the posting. Off = keep everything; Email / Phone = require that channel; Either = at least one; Both = email and phone. Jobs without a match are not charged.",
            "default": "off"
          },
          "descriptionFormat": {
            "title": "📝 Description format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Which version(s) of the job description to include.",
            "default": "all"
          },
          "compact": {
            "title": "📦 Compact records",
            "type": "boolean",
            "description": "Emit only the core fields (title, company, salary, levels, location, dates). Ideal for AI agents and MCP clients.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Remove null, empty-string and empty-array fields from each record.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Track jobs between runs and tag each with a changeType (NEW / UPDATED / UNCHANGED / EXPIRED). An UPDATED job whose salary moved is tagged salaryChange = INCREASE or DECREASE, with the previous salary.",
            "default": false
          },
          "stateKey": {
            "title": "🗝️ State key",
            "type": "string",
            "description": "Stable name for the tracked search. Leave empty to derive one automatically from your search settings."
          },
          "emitUnchanged": {
            "title": "🔁 Include unchanged records",
            "type": "boolean",
            "description": "Also emit records that have not changed since the previous run.",
            "default": false
          },
          "emitExpired": {
            "title": "🗑️ Include expired records",
            "type": "boolean",
            "description": "Also return jobs that were listed on the previous run but are gone now. Only reported when a run covers the whole search (Max jobs 0, or above the number of matching jobs).",
            "default": false
          },
          "telegramToken": {
            "title": "💬 Telegram bot token",
            "type": "string",
            "description": "Bot token from @BotFather."
          },
          "telegramChatId": {
            "title": "🆔 Telegram chat ID",
            "type": "string",
            "description": "Chat or channel ID, e.g. \"-100123456789\" or \"@yourchannel\"."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Slack incoming-webhook URL."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Discord incoming-webhook URL."
          },
          "webhookUrl": {
            "title": "🪝 Webhook URL",
            "type": "string",
            "description": "Any HTTPS endpoint. Receives a JSON POST with the matched records — works with n8n, Make and Zapier."
          },
          "webhookHeaders": {
            "title": "🧾 Webhook headers",
            "type": "object",
            "description": "Extra headers for the webhook request, e.g. {\"Authorization\": \"Bearer xyz\"}."
          },
          "notificationLimit": {
            "title": "🔢 Records per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many records to include in each notification message.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Not needed — MyCareersFuture is reached directly. Only enable a proxy if your runs are being refused.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxRequestRetries": {
            "title": "🔄 Max request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed request before giving up on it.",
            "default": 3
          },
          "ignoreUrlFailures": {
            "title": "⏭️ Ignore URL failures",
            "type": "boolean",
            "description": "Skip URLs that cannot be interpreted instead of failing the whole run.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}