JobCook
Pricing
from $10.00 / 1,000 jobs
Go to Apify Store
JobCook
Find verified jobs on employer career pages and ATS boards. Excel-ready dataset, direct employers only.
JobCook
Pricing
from $10.00 / 1,000 jobs
Find verified jobs on employer career pages and ATS boards. Excel-ready dataset, direct employers only.
You can access the JobCook programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.1", "x-build-id": "93ne77LC6Eih5bBgc" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/solutionssmart~jobcook/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-solutionssmart-jobcook", "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/solutionssmart~jobcook/runs": { "post": { "operationId": "runs-sync-solutionssmart-jobcook", "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/solutionssmart~jobcook/run-sync": { "post": { "operationId": "run-sync-solutionssmart-jobcook", "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": { "mode": { "title": "Mode", "enum": [ "auto", "discover", "crawl" ], "type": "string", "description": "Choose automatic, discovery, or crawl workflow.", "default": "auto" }, "task": { "title": "Discovery task", "type": "string", "description": "Natural-language hiring goal." }, "careerPages": { "title": "Career pages", "type": "array", "description": "Known employer career or ATS board URLs.", "default": [], "items": { "type": "string" } }, "maxResults": { "title": "Maximum results", "minimum": 1, "maximum": 5000, "type": "integer", "description": "Maximum normalized jobs to save.", "default": 100 }, "maxRequests": { "title": "Maximum requests", "minimum": 1, "maximum": 10000, "type": "integer", "description": "Maximum HTTP requests for this run.", "default": 500 }, "maxCareerPages": { "title": "Maximum career pages", "minimum": 1, "maximum": 500, "type": "integer", "description": "Maximum pages discovered by search.", "default": 50 }, "maxPagesPerCareerSite": { "title": "Maximum pages per site", "minimum": 1, "maximum": 500, "type": "integer", "description": "Maximum candidate job pages followed per source.", "default": 50 }, "maxAgentSteps": { "title": "Maximum agent steps", "minimum": 1, "maximum": 100, "type": "integer", "description": "Maximum controller actions.", "default": 30 }, "maxBrowserPages": { "title": "Maximum browser pages", "minimum": 0, "maximum": 100, "type": "integer", "description": "Maximum browser-rendered pages per run when enableBrowser is true.", "default": 20 }, "enableBrowser": { "title": "Enable browser rendering", "type": "boolean", "description": "Render public JavaScript-heavy non-ATS employer career pages with the bundled browser. Browser support is included in the deployed Actor image.", "default": false }, "includeDescriptions": { "title": "Include descriptions", "type": "boolean", "description": "Include job descriptions where available.", "default": true }, "validateJobs": { "title": "Validate jobs", "type": "boolean", "description": "Check pages for active or inactive signals.", "default": true }, "directEmployersOnly": { "title": "Direct employers only", "type": "boolean", "description": "Keep only confidently direct-employer postings.", "default": false }, "countries": { "title": "Countries", "type": "array", "description": "Optional country filters.", "default": [], "items": { "type": "string" } }, "locations": { "title": "Locations", "type": "array", "description": "Optional location filters.", "default": [], "items": { "type": "string" } }, "keywords": { "title": "Keywords", "type": "array", "description": "Required text keywords.", "default": [], "items": { "type": "string" } }, "excludeKeywords": { "title": "Exclude keywords", "type": "array", "description": "Excluded text keywords.", "default": [], "items": { "type": "string" } }, "postedWithinDays": { "title": "Posted within days", "minimum": 1, "type": "integer", "description": "When set, jobs that publish a posting date are kept only if that date is inside the window. Jobs with no published date are still kept." }, "agentController": { "title": "Agent controller", "enum": [ "rules", "jev", "function-gemma" ], "type": "string", "description": "Jev (TypeSafe System One) is the default when TYPESAFE_API_KEY is set; rules is the stable fallback; FunctionGemma is optional.", "default": "rules" }, "debug": { "title": "Debug logging", "type": "boolean", "description": "Enable additional run diagnostics.", "default": false }, "discoverySources": { "title": "Discovery sources", "type": "array", "description": "Discovery hints: web searches and LinkedIn leads help find employer career pages. JobCook verifies jobs on the employer's own ATS or career page before saving them to the dataset.", "default": [ "web", "linkedin" ], "items": { "type": "string" } }, "proxyMode": { "title": "Apify proxy mode", "enum": [ "none", "unblocker", "google-serp", "both" ], "type": "string", "description": "Use Unblocker for career/job pages, Google SERP Proxy for web discovery, or both. Proxy usage is billed separately by Apify.", "default": "none" }, "proxyCountryCode": { "title": "Unblocker country code", "pattern": "^[A-Za-z]{2}$", "type": "string", "description": "Optional two-letter country code for Unblocker, for example US or DE. Leave empty to let Unblocker choose automatically." }, "googleDomain": { "title": "Google SERP domain", "pattern": "^google\\.[A-Za-z.]{2,}$", "type": "string", "description": "Google domain used by Google SERP Proxy, for example google.com or google.de.", "default": "google.com" }, "googleSheetsEnabled": { "title": "Export to Google Sheets", "type": "boolean", "description": "Send results to Google Sheets after run completes.", "default": false }, "googleSheetsSpreadsheetId": { "title": "Google Sheets spreadsheet ID", "type": "string", "description": "The spreadsheet ID from the Google Sheets URL (required when export enabled)." }, "googleSheetsOperation": { "title": "Google Sheets operation", "enum": [ "APPEND", "UPSERT" ], "type": "string", "description": "APPEND adds new rows; UPSERT updates existing rows based on upsert key.", "default": "APPEND" }, "googleSheetsUpsertKey": { "title": "Upsert key column", "type": "string", "description": "Column name to use as unique key for UPSERT operation (required when operation is UPSERT)." }, "googleSheetsServiceAccountKey": { "title": "Service account JSON key", "type": "string", "description": "Google service account JSON key with Sheets API access. Use secret input to protect this credential." }, "googleSheetsFirstRowHeaders": { "title": "First row as headers", "type": "boolean", "description": "Treat first row of spreadsheet as column headers.", "default": true }, "jobSourcesPreset": { "title": "Job sources preset", "enum": [ "usa", "eu", "remote", "serbia" ], "type": "string", "description": "Optional curated regional job board preset (usa, eu, remote, serbia). Adds board URLs as discovery seeds. Derived from cursustrace under Apache-2.0." }, "tags": { "title": "Custom tags", "type": "array", "description": "Optional tags to add to all emitted jobs. Auto-tags (e.g., 'remote', region) are added automatically when using presets.", "default": [], "items": { "type": "string" } }, "minSalary": { "title": "Minimum salary", "minimum": 1, "type": "integer", "description": "Optional minimum salary filter. Jobs with no salary data or salary below this minimum are excluded. Requires salaryCurrency." }, "salaryCurrency": { "title": "Salary currency", "pattern": "^[A-Z]{3}$", "type": "string", "description": "Three-letter ISO currency code for salary filtering (e.g., USD, EUR, GBP). Required when minSalary is set." } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for JobCook from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: