{
  "openapi": "3.0.1",
  "info": {
    "title": "SEEK Company Reviews - Profiles, Ratings & Employee Sentiment",
    "description": "From $1/1K. Scrape SEEK Australia and New Zealand company profiles and employee reviews. Choose aggregated company data with top reviews or one row per review for sentiment analysis. Region is auto-detected from each URL, with clean structured output ready for analytics.",
    "version": "0.1",
    "x-build-id": "GaFfmzZlwnTwlin2s"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~seek-companies-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-seek-companies-reviews-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/abotapi~seek-companies-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-seek-companies-reviews-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/abotapi~seek-companies-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-seek-companies-reviews-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "companies",
              "reviews"
            ],
            "type": "string",
            "description": "companies → one row per company with embedded top reviews. reviews → one row per individual review, fanned out across the resolved companies.",
            "default": "companies"
          },
          "region": {
            "title": "Region",
            "enum": [
              "AU",
              "NZ"
            ],
            "type": "string",
            "description": "Country market. AU = au.seek.com (anz-1), NZ = nz.seek.com (anz-2). When you paste URLs, the region is auto-detected per URL and overrides this field.",
            "default": "AU"
          },
          "urls": {
            "title": "Company URLs",
            "type": "array",
            "description": "Paste SEEK URLs: company profile, /reviews (a pasted ?sortby=recent is applied), /jobs, bare numeric id, legacy hosts, or a directory ?q= keyword. Region auto-detected per URL; mix AU and NZ freely. The shipped example URLs only run when Industry is cleared to blank; while Industry keeps its default (Mining, Resources & Energy) they are ignored and that industry is browsed. To scrape your own URLs, replace the examples (any other list wins). Unsupported URLs (directory landing, numeric industry ids) are skipped with a warning in the log.",
            "default": [
              {
                "url": "https://au.seek.com/companies/atlassian-437216"
              },
              {
                "url": "https://au.seek.com/companies/atlassian-437216/reviews"
              },
              {
                "url": "https://au.seek.com/companies/atlassian-437216/reviews?page=2"
              },
              {
                "url": "https://au.seek.com/companies/atlassian-437216/reviews?sortby=recent"
              },
              {
                "url": "https://au.seek.com/companies/atlassian-437216/jobs"
              },
              {
                "url": "https://nz.seek.com/companies/atlassian-437216"
              },
              {
                "url": "https://nz.seek.com/companies/air-new-zealand-432555"
              },
              {
                "url": "https://www.seek.com.au/companies/atlassian-437216"
              },
              {
                "url": "https://www.seek.co.nz/companies/atlassian-437216"
              },
              {
                "url": "https://au.seek.com/companies/437216"
              },
              {
                "url": "https://au.seek.com/companies"
              },
              {
                "url": "https://au.seek.com/companies?q=atlassian"
              },
              {
                "url": "https://au.seek.com/companies?industry=1203"
              },
              {
                "url": "https://au.seek.com/companies/browse?industry=1200"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Optional. Search SEEK by company name (e.g. 'atlassian', 'westpac', 'trust'). Several names may be separated by commas, semicolons or new lines (each is searched, up to 20 hits per name, results merged without duplicates). A comma, semicolon or new line always starts a new name, so a single company name that itself contains a comma (for example 'Smith, Jones & Co') is searched as two names; use its URL instead. Combined with 'Industry' below, the actor browses the industry then filters to companies whose name contains the keyword."
          },
          "industry": {
            "title": "Industry",
            "enum": [
              "",
              "Accounting",
              "Administration & Office Support",
              "Advertising, Arts & Media",
              "Banking & Financial Services",
              "Call Centre & Customer Service",
              "Community Services & Development",
              "Construction",
              "Consulting & Strategy",
              "Design & Architecture",
              "Education & Training",
              "Engineering",
              "Farming, Animals & Conservation",
              "Government & Defence",
              "Healthcare & Medical",
              "Hospitality & Tourism",
              "Human Resources & Recruitment",
              "Insurance & Superannuation",
              "Legal",
              "Manufacturing, Transport & Logistics",
              "Marketing & Communications",
              "Mining, Resources & Energy",
              "Real Estate & Property",
              "Retail & Consumer Products",
              "Sales",
              "Science & Technology",
              "Sport & Recreation",
              "Trades & Services"
            ],
            "type": "string",
            "description": "Optional. Select a SEEK industry to browse up to 30 companies in it. Combined with 'Keywords' above, narrows the industry to companies whose name matches the keyword. Leave blank to use keyword-only or URL-only sourcing.",
            "default": "Mining, Resources & Energy"
          },
          "maxReviewsPerCompany": {
            "title": "Max reviews per company",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Companies mode: how many top reviews to embed per company record. Reviews mode: maximum reviews per company. Set 0 for the default of 30; higher values fetch deeper history.",
            "default": 20
          },
          "reviewSort": {
            "title": "Review sort order",
            "enum": [
              "helpful",
              "recent"
            ],
            "type": "string",
            "description": "How SEEK orders the reviews returned. 'helpful' = most upvoted first (best for companies-mode top-N). 'recent' = newest first (best for ongoing sentiment monitoring).",
            "default": "helpful"
          },
          "includeAISummary": {
            "title": "Include AI review summary",
            "type": "boolean",
            "description": "Companies mode only. Adds SEEK's ~200-word AI-generated summary of the company's reviews (pros, cons, themes) when available. Disable to drop the field.",
            "default": true
          },
          "includeJobs": {
            "title": "Include open jobs",
            "type": "boolean",
            "description": "Companies mode only. When true, embeds a `jobs` array on each company record with the company's currently-listed jobs (id, title, location, salary, workType, listingDate, url). Adds a small amount of extra time per company. Capped by `maxJobsPerCompany`.",
            "default": false
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on jobs embedded per company when `includeJobs` is true. The actor pulls jobs page-by-page from SEEK Jobs and stops as soon as this many matching jobs have been collected (or the company runs out). Set 0 to pull open jobs up to the 1000 maximum (large brands like Coles, BHP can have hundreds). This is THE cap on jobs — no other field overrides it.",
            "default": 50
          },
          "maxItems": {
            "title": "Max items to return",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Total cap across all URLs / search results. Default 1000, hard ceiling 100000 (0 is read as the ceiling). In reviews mode counts individual reviews; in companies mode counts companies. The `maxJobsPerCompany` cap applies independently to each company's embedded jobs and is not affected by this field.",
            "default": 1000
          },
          "maxTimeSec": {
            "title": "Max run time (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "Wall-clock cap. When exceeded, the actor flushes whatever it already fetched and exits cleanly. 0 = no time limit.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Defaults to Apify datacenter proxy (free-tier friendly). For production workloads, set apifyProxyGroups to [\"RESIDENTIAL\"] on a paid Apify plan.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": []
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large crawl without returning or charging for records already collected there. Use this after an interrupted run. For recurring monitoring of the same query, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns everything matched as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED records. A record is UPDATED when any compared field changes (company profile, rating, review count, recommended percent, open jobs added or removed, and so on); changedFields names them. Never compared (kept in the output, never cause UPDATED): scrapedAt, topReviews, topReviewCount (companies mode), each job's listingDateDisplay, and any field you list in \"Ignore fields when detecting changes\". Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those records returned (and billed). State is kept separately per Mode (companies vs reviews are never mixed) and per URLs/keywords/industry/review-sort/includeJobs/includeAISummary setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from mode + the query/URL/review settings — different queries then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired companies (incremental mode + companies mode only)",
            "type": "boolean",
            "description": "Off by default. Companies mode only — reviews mode is a bounded top-N sample per company, not an exhaustive scan, so a missing review is not reliable evidence it was deleted. Turn on to also return companies that were present in a previous run but no longer resolved by your URLs/keywords/industry, marked EXPIRED. Only produced once a run has fully scanned the tracked targets — not when Max items or Max run time capped it, or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Incremental mode only. Field names that never count as a change: they stay in the output but do not make a record UPDATED or appear in changedFields. Use a top-level name such as ratingOverall, or a dotted path for a nested field such as jobs.salaryLabel. Applies to a saved baseline immediately, with no one-time wave of UPDATED rows.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}