{
  "openapi": "3.0.1",
  "info": {
    "title": "🏆 AI Powered Indeed Job Scraper ⚡ Advanced Data, Best Value 🏆",
    "description": "Scrape job postings from Indeed by keyword, location, and country. Structured output with title, company, location, salary, job type, and apply link.",
    "version": "1.0",
    "x-build-id": "ZTilIujZ8VclrM9Bc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/claygenius~best-cheapest-indeed-job-scrapper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-claygenius-best-cheapest-indeed-job-scrapper",
        "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~best-cheapest-indeed-job-scrapper/runs": {
      "post": {
        "operationId": "runs-sync-claygenius-best-cheapest-indeed-job-scrapper",
        "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~best-cheapest-indeed-job-scrapper/run-sync": {
      "post": {
        "operationId": "run-sync-claygenius-best-cheapest-indeed-job-scrapper",
        "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": [
          "keywords",
          "maxItems"
        ],
        "properties": {
          "keywords": {
            "title": "Job Keywords (required)",
            "minItems": 1,
            "type": "array",
            "description": "At least one is required. Job titles, skills or company names — whatever you would type into Indeed's search box. Add as many as you like: each is searched separately and the results merged into one dataset, with any job found by two keywords appearing only once.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "us",
              "de",
              "gb",
              "ca",
              "au",
              "fr",
              "es",
              "it",
              "nl",
              "at",
              "ch",
              "in",
              "pk",
              "ae",
              "sg"
            ],
            "type": "string",
            "description": "Which Indeed country site to search.",
            "default": "us"
          },
          "locations": {
            "title": "Locations (optional)",
            "type": "array",
            "description": "Cities, states or postal codes — e.g. Amsterdam, Berlin, 10001. Add several to cover more than one area. Leave empty to search the whole country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "radius": {
            "title": "Search Radius",
            "type": "integer",
            "description": "How far around the location to search, in km. Ignored when no location is set.",
            "default": 25
          },
          "postedWithinDays": {
            "title": "Date Posted",
            "enum": [
              "0",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only include jobs posted within this window.",
            "default": "0"
          },
          "maxItems": {
            "title": "How Many Jobs To Scrape",
            "type": "integer",
            "description": "Total number of jobs to return.",
            "default": 50
          },
          "maxJobsPerKeyword": {
            "title": "Max Jobs Per Keyword",
            "type": "integer",
            "description": "Stops one broad keyword using up the whole total before the others run. 0 = no limit. Example: 3 keywords and a total of 60, set this to 20 and each keyword gives you 20.",
            "default": 0
          },
          "maxJobsPerCompany": {
            "title": "Max Jobs Per Employer",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Stops one big employer flooding your results. 0 = no limit; 2–10 spreads the same number of jobs across many more companies. Capped jobs are replaced, not lost — ask for 50 and you still get 50.",
            "default": 0
          },
          "fetchMoreCompanyJobs": {
            "title": "Also fetch more jobs from each employer?",
            "type": "boolean",
            "description": "Off by default. Turn on to also collect other open roles from every employer found. Companies are matched by their Indeed company ID, so a search for 'Delta' never mixes in Delta Dental.",
            "default": false
          },
          "moreJobsPerCompany": {
            "title": "How many extra jobs per employer",
            "type": "integer",
            "description": "Up to 25. Only used when the switch above is on.",
            "default": 5
          },
          "expandedJobsOutput": {
            "title": "Where to put the extra jobs",
            "enum": [
              "nested",
              "separateRows"
            ],
            "type": "string",
            "description": "Nested keeps one row per search result, with the extras listed inside it. Separate rows turns every extra job into its own row, which suits a job board but adds titles unrelated to your search.",
            "default": "nested"
          },
          "recruitmentAgencyHandling": {
            "title": "Recruitment agencies",
            "enum": [
              "off",
              "flag",
              "exclude"
            ],
            "type": "string",
            "description": "Works out whether an employer is a staffing agency or headhunter rather than a company hiring for itself. Start with Flag only so you can check the verdicts. Employers with no description are always kept, never guessed at.",
            "default": "off"
          },
          "openaiApiKey": {
            "title": "OpenAI API Key",
            "type": "string",
            "description": "Your own key (sk-...), billed to your OpenAI account. Only used for the filter above."
          },
          "fetchCompanyRatings": {
            "title": "Also fetch employer ratings and reviews?",
            "type": "boolean",
            "description": "Adds each employer's star rating, review count, CEO approval and head office. Needs Residential proxy selected below. Fetched once per company, so an employer with 30 jobs costs one request.",
            "default": false
          },
          "webhookUrl": {
            "title": "Send results to a webhook",
            "type": "string",
            "description": "Optional. Each job is POSTed to your URL as JSON, one request per job, once scraping and filtering have finished. Leave empty to skip.",
            "default": ""
          },
          "proxyConfig": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave alone. The Actor enables a cheap datacenter proxy by itself when a run needs one. Only switch to Residential if you turned on employer ratings.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}