{
  "openapi": "3.0.1",
  "info": {
    "title": "🏆 AI Powered Advanced Seek Job Scraper ⚡ Best Value 🏆",
    "description": "Scrape jobs from Seek, JobStreet and JobsDB across Australia, New Zealand, Singapore, Malaysia, Philippines, Indonesia, Hong Kong and Thailand — full descriptions, salary, contacts, with recruitment agencies filtered out.",
    "version": "0.1",
    "x-build-id": "BRTXfcLkv8lwg8gSc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/claygenius~advanced-seek-job-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-claygenius-advanced-seek-job-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/claygenius~advanced-seek-job-scraper/runs": {
      "post": {
        "operationId": "runs-sync-claygenius-advanced-seek-job-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/claygenius~advanced-seek-job-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-claygenius-advanced-seek-job-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": {
          "searchUrl": {
            "title": "Seek Search URL",
            "type": "string",
            "description": "Paste a search URL from Seek, JobStreet or JobsDB and the actor reproduces that exact search — keyword, location, classification, work type, salary and date filters are all read from it, and the country is detected from the domain. When set, the fields below are ignored. Must be a SEARCH page, not a single job.",
            "default": ""
          },
          "country": {
            "title": "Country / Site",
            "enum": [
              "au",
              "nz",
              "sg",
              "my",
              "ph",
              "id",
              "hk",
              "th"
            ],
            "type": "string",
            "description": "Which Seek-family site to search.",
            "default": "au"
          },
          "keyword": {
            "title": "Search Keyword",
            "type": "string",
            "description": "Job title, skill or company (e.g. 'registered nurse', 'software engineer', 'forklift').",
            "default": "software engineer"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, suburb or region (e.g. 'Sydney', 'Auckland', 'Kuala Lumpur'). Leave empty to search the whole country."
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Relevance is Seek's default ranking. Date puts the newest listings first.",
            "default": "relevance"
          },
          "postedWithinDays": {
            "title": "Date Posted",
            "enum": [
              "0",
              "1",
              "3",
              "7",
              "14",
              "31"
            ],
            "type": "string",
            "description": "Only include jobs listed within this window.",
            "default": "0"
          },
          "workType": {
            "title": "Work Type",
            "enum": [
              "",
              "242",
              "243",
              "244",
              "245"
            ],
            "type": "string",
            "description": "Filter by employment type.",
            "default": ""
          },
          "classification": {
            "title": "Job Classification",
            "enum": [
              "",
              "1200",
              "6251",
              "6304",
              "1203",
              "1204",
              "7019",
              "6163",
              "1206",
              "6076",
              "6263",
              "6123",
              "1209",
              "6205",
              "1210",
              "1211",
              "1212",
              "6317",
              "6281",
              "1214",
              "1216",
              "6092",
              "6008",
              "6058",
              "1220",
              "6043",
              "6362",
              "1223",
              "6261",
              "6246",
              "1225"
            ],
            "type": "string",
            "description": "Restrict results to one of Seek's job categories, the same list as the Classification filter on the site.",
            "default": ""
          },
          "salaryMin": {
            "title": "Minimum Salary",
            "type": "integer",
            "description": "Minimum salary in the site's local currency. 0 = no minimum. Only applied together with a Salary Type.",
            "default": 0
          },
          "salaryMax": {
            "title": "Maximum Salary",
            "type": "integer",
            "description": "Maximum salary in the site's local currency. 0 = no maximum.",
            "default": 0
          },
          "salaryType": {
            "title": "Salary Type",
            "enum": [
              "annual",
              "monthly",
              "hourly"
            ],
            "type": "string",
            "description": "Which salary basis the minimum and maximum above refer to.",
            "default": "annual"
          },
          "maxItems": {
            "title": "Total Number of Records Required",
            "type": "integer",
            "description": "Maximum number of jobs to scrape. Seek caps every single search at 500 results, so ask for more than that and you will get 500 — narrow the search or run it again with a different keyword or location.",
            "default": 100
          },
          "maxJobsPerCompany": {
            "title": "Max Jobs Per Company",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Keep at most this many jobs from the same advertiser, so one company cannot flood your results. Defaults to 2, which gives far more distinct employers for the same number of rows. Typical values are 2-10; the maximum is 10. Use 0 for no limit at all. Skipped jobs do NOT count towards Max Items.",
            "default": 2
          },
          "fetchJobDetails": {
            "title": "Fetch Full Job Details",
            "type": "boolean",
            "description": "Visit each job for the complete description, and extract any application email and phone number stated in the text. One extra request per job, so it is slower — but this is where the contact details live.",
            "default": true
          },
          "minApplicants": {
            "title": "👥 Min Applicants",
            "type": "integer",
            "description": "Only keep jobs with at least this many applicants. 0 = no minimum. NOTE: Seek has no applicant filter on its search, so every job must be fetched before it can be checked — a narrow range can discard most of a run. Jobs whose applicant count is unknown are kept, never guessed at.",
            "default": 0
          },
          "maxApplicants": {
            "title": "👥 Max Applicants",
            "type": "integer",
            "description": "Only keep jobs with at most this many applicants. 0 = no maximum. Great for finding low-competition roles before they fill up.",
            "default": 0
          },
          "includeKeywords": {
            "title": "Include Keywords",
            "type": "array",
            "description": "Keep only jobs containing at least ONE of these words. Case-insensitive. Which parts of the listing are searched is set by 'Match In Fields' below — the SAME fields are used for include and exclude, so a word can never match on one and be missed by the other.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude Keywords",
            "type": "array",
            "description": "Drop any job containing ANY of these words. Searched in the same fields as Include Keywords, so behaviour is symmetric and predictable.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatchFields": {
            "title": "Match In Fields",
            "type": "array",
            "description": "Which parts of the listing the include/exclude keywords search. Leave empty for the sensible default: title, company, description, bullet points and category. Add location, salary or work type only if you want them — searching salary text is how 'remote' ends up matching a 'remote work allowance'.",
            "items": {
              "type": "string",
              "enum": [
                "title",
                "company",
                "description",
                "bulletPoints",
                "category",
                "location",
                "salary",
                "workType"
              ],
              "enumTitles": [
                "Job title",
                "Company name",
                "Description & teaser",
                "Bullet points",
                "Category & sub-category",
                "Location",
                "Salary text",
                "Work type & arrangement"
              ]
            },
            "default": []
          },
          "requireContactDetails": {
            "title": "Require Contact Details",
            "enum": [
              "off",
              "email",
              "phone",
              "either",
              "both"
            ],
            "type": "string",
            "description": "Keep only jobs where the advertiser put a contact in the ad text. Note that most jobs have neither — this is common on recruiter-posted ads and rare elsewhere, so expect a small result set.",
            "default": "off"
          },
          "maxAgeMinutes": {
            "title": "Max Age (minutes)",
            "type": "integer",
            "description": "Keep only jobs listed within the last N minutes. Built for scheduled runs that poll for brand-new listings — e.g. 60 for the last hour. 0 = off. For coarser windows use Date Posted above, which filters on Seek's side and is far cheaper.",
            "default": 0
          },
          "fetchCompanySalaries": {
            "title": "Fetch Company Salary Estimates",
            "type": "boolean",
            "description": "Also pull Seek's own per-role salary bands for each employer — the same data behind the Salaries tab on their company page, e.g. 'Marketing Manager $100K-$120K, based on 1 job ad'. Fetched ONCE per company and cached, so an employer with 30 jobs costs a single call. Large employers can return 100+ roles. These are Seek's estimates, some from the company's own past ads and some from industry averages.",
            "default": false
          },
          "fetchCompanyReviews": {
            "title": "Fetch Company Reviews & Ratings",
            "type": "boolean",
            "description": "Also pull each employer's star rating, category breakdown (work/life balance, career opportunity, management, diversity...), Seek's AI review summary, and the most recent employee reviews. Fetched ONCE per company and cached, so an employer with 30 jobs costs a single call.",
            "default": false
          },
          "maxReviewsPerCompany": {
            "title": "Reviews Per Company",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many individual employee reviews to include per company (1-30). The star rating, breakdown and AI summary are always included regardless.",
            "default": 5
          },
          "fetchMoreCompanyJobs": {
            "title": "Also Fetch More Jobs From The Same Company?",
            "type": "boolean",
            "description": "No by default. Turn on to also collect other open roles from every employer that appears in your results. Companies are matched by Seek's advertiser ID, so a search never mixes in a similarly-named company.",
            "default": false
          },
          "moreJobsPerCompany": {
            "title": "How Many Jobs Per Company",
            "type": "integer",
            "description": "How many other jobs to pull from each company. Accepts up to 25. Ignored unless the switch above is turned on.",
            "default": 5
          },
          "expandedJobsOutput": {
            "title": "How To Output The Extra Jobs",
            "enum": [
              "nested",
              "separateRows"
            ],
            "type": "string",
            "description": "Nested (recommended): your dataset keeps exactly one row per search result, and each row gains an 'otherJobsAtCompany' list — no unrelated titles mixed into your results. Separate rows: every extra job becomes its own full row, which suits feeding a job board, but your dataset will contain titles unrelated to your search and will hold more rows than Max Items.",
            "default": "nested"
          },
          "recruitmentAgencyHandling": {
            "title": "Recruitment Agencies (gpt-4o-mini)",
            "enum": [
              "off",
              "flag",
              "exclude"
            ],
            "type": "string",
            "description": "Seek is heavily used by recruitment agencies. This reads the advertiser's name, domain and description to decide whether they are a staffing firm hiring on behalf of others, and either labels or removes them. The keyword screen is free; add an OpenAI key for the AI pass. IMPORTANT: the AI can only judge companies whose description clearly states what the business does — companies with no description are kept and labelled null, never removed. Use 'Flag only' first to review the verdicts.",
            "default": "off"
          },
          "openaiApiKey": {
            "title": "OpenAI API Key",
            "type": "string",
            "description": "Optional. Your own OpenAI API key (sk-...), used only for the recruitment-agency filter above. Without it the free keyword screen still runs. Billed to your OpenAI account."
          },
          "openaiModel": {
            "title": "OpenAI Model",
            "enum": [
              "gpt-4o-mini"
            ],
            "type": "string",
            "description": "Fixed to gpt-4o-mini. The nano models were tried and returned unreliable verdicts for this classification, so they have been removed rather than left as traps.",
            "default": "gpt-4o-mini"
          },
          "webhookUrl": {
            "title": "Send Results To Webhook",
            "type": "string",
            "description": "Optional. POST each scraped job straight to your own URL as it is found — one HTTP request per job, with that job as the JSON body. Your workflow never has to fetch the dataset afterwards. Leave empty to skip.",
            "default": ""
          },
          "proxyConfig": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional. Seek serves this data without blocking, so proxies are usually unnecessary — enable them only for very large runs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}