{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Job Extractor (Browser)",
    "description": "Extract job listings from JavaScript-rendered career pages (React, Vue, Angular) using AI + Playwright. Companion to the HTTP-only Website Job Extractor. Use it for the ~28% of company sites that need a real browser. Same output format, same quality, same LLM fallback chain.",
    "version": "1.3",
    "x-build-id": "6zKanxwoGJFS9UecE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~website-job-extractor-browser/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-website-job-extractor-browser",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/santamaria-automations~website-job-extractor-browser/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-website-job-extractor-browser",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/santamaria-automations~website-job-extractor-browser/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-website-job-extractor-browser",
        "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": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "List of companies to extract jobs from. This actor uses a browser (Playwright) to render JavaScript — use for React, Vue, Angular career pages that the HTTP actor cannot handle.",
            "items": {
              "type": "object",
              "properties": {
                "company_id": {
                  "title": "Company ID",
                  "type": "string",
                  "description": "Your internal company identifier (UUID or any string)"
                },
                "company_name": {
                  "title": "Company Name",
                  "type": "string",
                  "description": "Name of the company (used for context in AI extraction)"
                },
                "website_url": {
                  "title": "Website URL",
                  "type": "string",
                  "description": "Company website URL. The actor will auto-discover career pages from the homepage navigation."
                },
                "career_urls": {
                  "title": "Career URLs",
                  "type": "array",
                  "description": "List of specific career page URLs to extract jobs from.",
                  "items": {
                    "type": "string"
                  },
                  "default": []
                },
                "career_page_url": {
                  "title": "Career Page URL",
                  "type": "string",
                  "description": "Single pre-discovered career page URL (added as priority URL before career_urls)"
                },
                "website_domain": {
                  "title": "Website Domain",
                  "type": "string",
                  "description": "Website domain for cross-subdomain career discovery (e.g., tertianum.ch)"
                }
              },
              "required": [
                "company_id",
                "company_name"
              ]
            }
          },
          "outputLanguage": {
            "title": "Output Language",
            "enum": [
              "en",
              "de",
              "fr",
              "it",
              "es",
              "pt",
              "nl",
              "auto"
            ],
            "type": "string",
            "description": "Language for text output fields. 'auto' = match website language.",
            "default": "auto"
          },
          "managedLlmBudgetUsd": {
            "title": "Managed LLM Budget (USD)",
            "minimum": 0.01,
            "maximum": 50,
            "type": "number",
            "description": "Maximum USD to spend on the managed OpenRouter LLM (deepseek-chat-v3-0324) within this run. Free-tier users are hard-capped at $0.30 regardless of this value. Paying users default to $10.00 if left blank; maximum $50.00. Has no effect when you supply your own API key (BYOK mode).",
            "default": 10
          },
          "llmProvider": {
            "title": "LLM Provider",
            "enum": [
              "gemini",
              "groq",
              "openrouter"
            ],
            "type": "string",
            "description": "Primary AI provider for job extraction. Leave all API key fields blank to use managed mode (recommended for first-time users). Supply your own key here to use BYOK mode.",
            "default": "gemini"
          },
          "fallbackProvider": {
            "title": "Fallback LLM Provider",
            "enum": [
              "gemini",
              "groq",
              "openrouter"
            ],
            "type": "string",
            "description": "Second-level fallback if primary fails."
          },
          "fallback2Provider": {
            "title": "Third-Level Fallback",
            "enum": [
              "gemini",
              "groq",
              "openrouter"
            ],
            "type": "string",
            "description": "Third-level fallback if both primary and first fallback fail."
          },
          "llmModel": {
            "title": "LLM Model (optional override)",
            "type": "string",
            "description": "Override the model identifier for the selected provider. Free-text so you can pick any current model without waiting for us to rebuild. Defaults: Gemini -> gemini-3.6-flash (workhorse — was gemini-2.5-flash, restricted to existing users in Aug 2026). Groq -> openai/gpt-oss-120b (was llama-3.3-70b-versatile, decommissioned by Groq on 2026-08-16). OpenRouter -> meta-llama/llama-3.1-8b-instruct. Provider catalogs: Gemini https://ai.google.dev/gemini-api/docs/models, Groq https://console.groq.com/docs/models, OpenRouter https://openrouter.ai/models. This field takes any model string the provider supports. Defaults may change without notice as providers retire models."
          },
          "llmApiKey": {
            "title": "LLM API Key (Groq/OpenRouter)",
            "type": "string",
            "description": "API key for Groq or OpenRouter."
          },
          "geminiApiKey": {
            "title": "Gemini API Key",
            "type": "string",
            "description": "OPTIONAL -- leave blank to use managed mode (see above). API key for Google Gemini (free tier: 1M tokens/minute). Get one at https://aistudio.google.com/apikey"
          },
          "groqApiKey": {
            "title": "Groq API Key",
            "type": "string",
            "description": "OPTIONAL -- leave blank to use managed mode (see above). API key for Groq (fast inference, free tier available). Get one at https://console.groq.com/keys"
          },
          "openrouterApiKey": {
            "title": "OpenRouter API Key",
            "type": "string",
            "description": "OPTIONAL -- leave blank to use managed mode (see above). API key for OpenRouter (many free models available). Get one at https://openrouter.ai/keys"
          },
          "maxResultsPerCompany": {
            "title": "Max Results Per Company",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Soft cap on how many jobs to extract per company. The browser actor keeps rendering and extracting pages until this count is reached, no more pagination is found, or the 20-page safety cap is hit. Default: 200. Lower values reduce browser rendering cost.",
            "default": 200
          },
          "maxPagesPerCompany": {
            "title": "Max Pages Per Company (DEPRECATED)",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "DEPRECATED: renamed to maxResultsPerCompany, will be removed 2027-09-19. If provided, treated as maxResultsPerCompany = maxPagesPerCompany × 40 for backwards compatibility."
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Maximum number of concurrent browser pages (keep low to avoid memory issues)",
            "default": 2
          },
          "jobKeywords": {
            "title": "Job Keywords Filter",
            "type": "array",
            "description": "Only extract jobs matching these keywords. Leave empty to extract all jobs.",
            "items": {
              "type": "string"
            }
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "URL to POST results to when extraction completes"
          },
          "skipAtsExtraction": {
            "title": "Skip LLM for Known ATS Platforms",
            "type": "boolean",
            "description": "When a supported ATS platform is detected (Lever, Greenhouse, Workday, Ashby, etc.), skip LLM extraction and output the ATS URL instead. Feed these URLs into the Career Site Jobs Scraper for faster, cheaper, structured extraction. Supports 16 ATS platforms.",
            "default": false
          },
          "_managedKeyProfile": {
            "title": "Managed key profile (internal)",
            "type": "string",
            "description": "Internal. Selects which managed OpenRouter key is used for cost attribution (\"default\" or \"jobfeed\"). Ignored when you supply your own API key. Never changes pricing."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}