{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Ai Scraper",
    "description": "Scrape Indeed job listings with titles, companies, salaries, locations, apply links, and more. Each job gets a free AI match score so you can focus on the most relevant roles, export straight to Google Sheets, and pay per request.",
    "version": "0.0",
    "x-build-id": "YAELKDNqeG0nfjRHZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hamas~indeed-ai-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hamas-indeed-ai-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/hamas~indeed-ai-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hamas-indeed-ai-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/hamas~indeed-ai-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hamas-indeed-ai-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",
        "properties": {
          "search_keywords": {
            "title": "Positions / Keywords for Search (one per line)",
            "type": "string",
            "description": "Enter job titles or keywords to search on Indeed, one per line. The scraper builds search URLs automatically from these.\n\nExample:\nPython Developer\nBackend Engineer\nDjango Developer\n\nLeave blank if you are providing your own 'Indeed Search URLs' below."
          },
          "search_country": {
            "title": "Country for Search",
            "enum": [
              "us",
              "ae",
              "ar",
              "at",
              "au",
              "be",
              "bh",
              "br",
              "ca",
              "ch",
              "cl",
              "cn",
              "co",
              "cr",
              "cz",
              "de",
              "dk",
              "ec",
              "eg",
              "es",
              "fi",
              "fr",
              "gb",
              "gr",
              "hk",
              "hu",
              "id",
              "ie",
              "il",
              "in",
              "it",
              "jp",
              "kr",
              "kw",
              "lu",
              "ma",
              "mx",
              "my",
              "ng",
              "nl",
              "no",
              "nz",
              "om",
              "pa",
              "pe",
              "ph",
              "pk",
              "pl",
              "pt",
              "qa",
              "ro",
              "ru",
              "sa",
              "se",
              "sg",
              "th",
              "tr",
              "tw",
              "ua",
              "uy",
              "ve",
              "vn",
              "za"
            ],
            "type": "string",
            "description": "The country to search on Indeed. Determines which Indeed domain is used (e.g. indeed.com, uk.indeed.com).",
            "default": "us"
          },
          "search_location": {
            "title": "Location for Search (optional)",
            "type": "string",
            "description": "City, state, or region to search within. Leave blank to search nationwide or for remote jobs.\n\nExamples: San Francisco, CA | New York | Remote | London"
          },
          "date_filter": {
            "title": "Date Posted Filter",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only return jobs posted within this time window. Applied to keyword-based searches only — has no effect if you supply your own 'Indeed Search URLs'.",
            "default": "any"
          },
          "start_urls": {
            "title": "Indeed Search URLs (optional — overrides keyword search)",
            "type": "array",
            "description": "Paste your own Indeed search URLs here. These take priority over the keyword/location/country fields above.\n\nWhen to use this: if you want to use Indeed's filters (date posted, salary, job type) that aren't available through the keyword builder — set up your search on Indeed with those filters and copy the URL.\n\nLeave blank to use the keyword search fields above.",
            "items": {
              "type": "string"
            }
          },
          "processed_job_urls": {
            "title": "Already-Processed Job URLs",
            "type": "string",
            "description": "Paste Indeed job URLs from previous runs to skip duplicates. The scraper extracts job IDs from these URLs and skips jobs that have already been processed."
          },
          "ignore_companies": {
            "title": "Companies to Skip (optional)",
            "type": "string",
            "description": "Jobs from these companies will be ignored. Enter one company name per line.\n\nExample:\nGoogle\nAmazon\nStaffing Solutions Inc"
          },
          "ignore_related": {
            "title": "Keywords to Skip in Job Description (optional)",
            "type": "array",
            "description": "If a job description contains any of these words, that job is skipped (or flagged, depending on the 'Skip Jobs Matching Keywords' toggle). Enter one keyword per line.\n\nExample:\nclearance required\nC++\nmanagement consulting",
            "items": {
              "type": "string"
            }
          },
          "google_sheet_url": {
            "title": "Google Sheet URL (optional)",
            "type": "string",
            "description": "Export results to Google Sheets — no credentials needed.\n\nSetup (one-time):\n1. Open your Google Sheet.\n2. Click Share.\n3. Under 'General access', add this email with Editor access: python-api@indeed-leads-467810.iam.gserviceaccount.com\n4. Paste the sheet's URL here."
          },
          "min_match_percentage": {
            "title": "Minimum AI Match Score (0–100)",
            "minimum": 0,
            "maximum": 90,
            "type": "integer",
            "description": "Only used when AI matching is enabled and search_keywords is filled in. Jobs scoring below this threshold are skipped.\n\nLower = more results, less targeted. Higher = fewer but more relevant.\nRecommended: 40–90.",
            "default": 0
          },
          "max_jobs": {
            "title": "Total Jobs to Collect",
            "minimum": 1,
            "type": "integer",
            "description": "The scraper stops once it has saved this many jobs total across all keywords and search URLs.",
            "default": 25
          },
          "per_company_jobs": {
            "title": "Max Jobs per Company",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Limits how many jobs from the same company are saved. Keeps results diverse.",
            "default": 5
          },
          "ai_matching_enabled": {
            "title": "Enable AI Job Matching",
            "type": "boolean",
            "description": "When enabled, the scraper computes a match score from 0–100 for each job showing how closely it matches your search_keywords.",
            "default": true
          },
          "save_unique_only": {
            "title": "Save Only Unique Job Listings",
            "type": "boolean",
            "description": "When enabled, if the same job title at the same company appears more than once, for example across different search URLs, only the first occurrence is saved. Recommended to keep on.",
            "default": true
          },
          "skip_expired_jobs": {
            "title": "Skip Expired Jobs",
            "type": "boolean",
            "description": "When enabled, jobs marked as expired on Indeed are silently skipped and not saved to your results.\n\nDisable if you want to collect expired listings for market research.",
            "default": true
          },
          "skip_ignore_related_jobs": {
            "title": "Skip Jobs Matching 'Keywords to Skip'",
            "type": "boolean",
            "description": "When enabled, any job whose description contains a word from your 'Keywords to Skip' list is silently skipped and not saved.\n\nDisable if you want those jobs saved but flagged instead. The ignore_related field will be set to 'True' in the output.",
            "default": true
          },
          "scrape_company_details": {
            "title": "Scrape Company Details (feature currently unavailable)",
            "type": "boolean",
            "description": "When enabled, the scraper visits each company's Indeed profile page to collect extra data: company size, industry, and a short description.\n\nNote: this roughly doubles the number of page loads, so scraper price per result would be approximately doubled.",
            "default": false
          },
          "follow_apply_redirect": {
            "title": "Follow Redirects for Apply Link (feature currently unavailable)",
            "type": "boolean",
            "description": "When enabled, the scraper resolves the external 'Apply on company site' link to its final destination URL by following redirects. Useful when you want the real company careers page URL instead of Indeed's redirect.\n\nSlightly slower — only enable if you need resolved URLs.",
            "default": false
          },
          "concurrency": {
            "title": "Concurrency (advanced)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of parallel browser workers per phase (listing + processing). Higher values can increase speed but also increase resource usage.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}