{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Job Details Scraper - Title, Company, Salary by URL",
    "description": "Paste public Indeed job URLs you already have and get one JSON row per job: title, employer, location, job type, salary text, description and the job URL. Pay the posting does not show stays null. Not a job search. Failed or blocked pages are free.",
    "version": "0.1",
    "x-build-id": "0VToItdJimmjS4gyT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~indeed-job-details/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-indeed-job-details",
        "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/tidytools~indeed-job-details/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-indeed-job-details",
        "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/tidytools~indeed-job-details/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-indeed-job-details",
        "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": {
          "urls": {
            "title": "Indeed job URLs",
            "type": "array",
            "description": "Paste public Indeed job detail URLs, one per line (for example https://www.indeed.com/viewjob?jk=... or a country site such as ph.indeed.com). The sample is one public job; replace it with yours. Search result pages and pages behind a login are not supported. Repeated URLs are read once. Invalid URLs return a free error row. You can also use startUrls or a datasetId.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Job URLs (request list, optional)",
            "type": "array",
            "description": "Same as \"Indeed job URLs\", in Apify's request list format (also accepts a link to a text file with URLs). Kept for existing integrations; new integrations should use \"urls\".",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "preset": {
            "title": "Ready-made fields",
            "enum": [
              "property",
              "hotel",
              "menu",
              "recipe",
              "lead_directory",
              "product_catalog",
              "job_detail",
              "invoice",
              "receipt",
              "bank_statement"
            ],
            "type": "string",
            "description": "Job posting is selected: title, employer, location, employmentType, salaryText, description and jobUrl. Only the main job on the page is read; similar or related job cards are ignored. Pay the posting does not print is null. Extra Fields are merged and your types win.",
            "default": "job_detail"
          },
          "fields": {
            "title": "Extra fields (optional)",
            "type": "object",
            "description": "Leave empty for the job fields. Add columns such as {\"benefits\": \"array\"} to extend them (your types win); advanced JSON Schema replaces both."
          },
          "instructions": {
            "title": "Instructions (optional)",
            "type": "string",
            "description": "Optional hints, such as \"Description in under 100 words\"."
          },
          "outputMode": {
            "title": "Output",
            "enum": [
              "page",
              "items"
            ],
            "type": "string",
            "description": "The job posting preset always returns one row per page. Values: page = One row per page; items = One row per item on the page (lists, for other presets).",
            "default": "page"
          },
          "flatOutput": {
            "title": "Flat columns (for Google Sheets, n8n, CSV)",
            "type": "boolean",
            "description": "Put every job field in its own column instead of inside \"data\". Every row has the same columns in the same order, failed pages included (empty values, recordCount 0). Same number of rows and same price as without it.",
            "default": false
          },
          "qualityReport": {
            "title": "Batch data quality report",
            "type": "boolean",
            "description": "Write DATA_QUALITY.json and DATA_QUALITY.csv with field missing counts, type error counts, review suggestions and completeness across saved data rows. Failed or free rows are counted separately. Quality hints are not human verification. No extra AI calls or page-extracted charges.",
            "default": false
          },
          "jsonSchema": {
            "title": "JSON Schema (advanced)",
            "type": "object",
            "description": "Optional full JSON Schema (type: object). When set, it replaces the job fields and Extra fields."
          },
          "datasetId": {
            "title": "Dataset ID (optional)",
            "type": "string",
            "description": "Read the job URLs from another Actor run's dataset, e.g. a list of job links you collected earlier."
          },
          "datasetField": {
            "title": "Dataset field",
            "type": "string",
            "description": "Field with the URLs, e.g. \"url\" (dot paths such as \"job.url\" work). Empty = the first URL field found."
          },
          "mode": {
            "title": "Page fetching (HTTP or browser)",
            "enum": [
              "auto",
              "fast",
              "browser"
            ],
            "type": "string",
            "description": "\"Auto\" reads pages over plain HTTP and switches to a real browser when a site blocks it or needs JavaScript. Values: auto = Auto (recommended); fast = Fast (HTTP only); browser = Browser (JavaScript rendering).",
            "default": "auto"
          },
          "maxConcurrency": {
            "title": "Parallel pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many pages are processed at the same time.",
            "default": 5
          },
          "itemTimeoutSecs": {
            "title": "Time limit per page (seconds)",
            "minimum": 0,
            "maximum": 900,
            "type": "integer",
            "description": "A page that takes longer (reading + AI) is stopped and returned as a free error row with errorType \"timeout\". 0 = no limit.",
            "default": 180
          },
          "aiModel": {
            "title": "AI model",
            "enum": [
              "auto",
              "llama-3.3-70b",
              "qwen3-30b",
              "llama-4-scout"
            ],
            "type": "string",
            "description": "Same price for every model.",
            "default": "auto"
          },
          "httpVia": {
            "title": "Plain HTTP requests from",
            "enum": [
              "auto",
              "backend",
              "direct",
              "vm"
            ],
            "type": "string",
            "description": "Some sites block requests from data centers. Auto retries from a second network before falling back to a real browser. If both are refused, Auto also tries our second server (Oracle, different IP) before a real browser.",
            "default": "auto"
          },
          "proxyConfiguration": {
            "title": "Proxy (optional)",
            "type": "object",
            "description": "Only used for requests sent from Apify's network. Apify proxy usage is billed to your Apify account."
          },
          "respectRobotsTxt": {
            "title": "Skip pages robots.txt disallows",
            "type": "boolean",
            "description": "Off (default): the job URLs you give are read even though Indeed's robots.txt disallows automated readers on job pages, as when you open them yourself. We never log in and never solve CAPTCHAs; a page that shows a block or verification check is a free error row. On: such pages are not read and return a free robots_disallowed row.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}