{
  "openapi": "3.0.1",
  "info": {
    "title": "MyCareersFuture Scraper — Singapore Jobs, Salaries & Leads",
    "description": "Scrape Singapore's official government job portal, MyCareersFuture. Get real salary ranges, skills, position level, employer UEN, company website, full description and GPS location — turning hiring into B2B leads. Monitor mode emits only new or changed jobs. No login or API key needed.",
    "version": "0.1",
    "x-build-id": "iuCWlwRZZkU3MZfec"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~mycareersfuture-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~mycareersfuture-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-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/scrapesage~mycareersfuture-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-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": {
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search for, e.g. <code>software engineer</code>, <code>nurse</code>, <code>data analyst</code>. Each keyword runs its own search and is combined with the filters below. Leave blank to scrape every job that matches the filters (or all of Singapore's newest jobs if no filters are set).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "MyCareersFuture URLs",
            "type": "array",
            "description": "Optional. Paste MyCareersFuture URLs directly: individual job pages (e.g. <code>https://www.mycareersfuture.gov.sg/job/.../...-085da1b5d4c665c1bf2a9e7913e4ceee</code>) to scrape only those jobs, or a search/results URL with your filters applied on the site (e.g. <code>https://www.mycareersfuture.gov.sg/search?search=data&category=Information%20Technology</code>). Used in addition to the keywords above.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Job categories",
            "type": "array",
            "description": "Restrict results to one or more MyCareersFuture job categories.",
            "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",
                "Personal Care / Beauty",
                "Professional Services",
                "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",
                "Precision Engineering",
                "Others"
              ]
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Restrict results to one or more employment types.",
            "items": {
              "type": "string",
              "enum": [
                "Permanent",
                "Full Time",
                "Part Time",
                "Contract",
                "Temporary",
                "Freelance"
              ]
            },
            "default": []
          },
          "positionLevels": {
            "title": "Seniority / position levels",
            "type": "array",
            "description": "Restrict results to one or more seniority levels.",
            "items": {
              "type": "string",
              "enum": [
                "Senior Management",
                "Middle Management",
                "Manager",
                "Professional",
                "Senior Executive",
                "Executive",
                "Junior Executive",
                "Non-executive",
                "Fresh/entry level"
              ]
            },
            "default": []
          },
          "salaryMin": {
            "title": "Minimum monthly salary (SGD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs whose minimum monthly salary is at least this amount (in SGD). Salary disclosure is legally mandated on MyCareersFuture under the Fair Consideration Framework, so this filter is reliable. Leave blank for any salary."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "new_posting_date",
              "min_monthly_salary",
              "relevance"
            ],
            "type": "string",
            "description": "Ordering of search results.",
            "default": "new_posting_date"
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs posted within this many days (based on the original posting date). Use 0 for no date limit. Great with Monitor mode and Schedules to capture only fresh postings.",
            "default": 0
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs to scrape across all keywords and URLs. Use 0 for no limit (can be 60,000+ across all of Singapore).",
            "default": 100
          },
          "scrapeJobDetails": {
            "title": "Scrape full job details",
            "type": "boolean",
            "description": "Open each job's detail endpoint to enrich it with the full job description, number of vacancies, minimum years of experience, SSOC occupation code, working hours, government support schemes, screening questions, expiry date, view count and the employer's website, industry (SSIC) and company description. Turn off for a fast, cheap run with the (still rich) search-result fields only.",
            "default": true
          },
          "includeCompanyLeads": {
            "title": "Emit hiring-company leads",
            "type": "boolean",
            "description": "In addition to job records, push one deduplicated lead record per hiring company (type = \"company\") with the company profile (UEN, website, industry, employee count, logo) and aggregated hiring signals across this run: live job count, total vacancies, salary range, and the categories and seniority levels they're hiring for.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode (only new & changed)",
            "type": "boolean",
            "description": "Only output jobs that are new or have changed (e.g. salary updated, re-opened) since the previous run for the same input. State persists across runs, so this pairs perfectly with Apify Schedules to track a role, sector or employer over time without re-pulling unchanged jobs. Leave off to always return every match.",
            "default": false
          },
          "monitorTrackChanges": {
            "title": "Flag salary changes",
            "type": "boolean",
            "description": "When monitor mode is on, re-emit a job when its salary changes and tag it <code>salary_increase</code> / <code>salary_decrease</code> with the previous salary. Turn off to treat only brand-new jobs as changes.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests fetched in parallel.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. The MyCareersFuture API has no aggressive anti-bot and is not geo-locked, so the Apify Proxy default is plenty and helps spread requests across IPs on large runs.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}