{
  "openapi": "3.0.1",
  "info": {
    "title": "Instahyre Jobs Scraper | India Tech Jobs API with Descriptions",
    "description": "$0.80 per 1,000 jobs, full description included | Scrape Instahyre India tech jobs by skill, city, experience, company and company size. Only-new mode + skipJobIds for daily schedules. JSON API, no login, no proxy.",
    "version": "0.1",
    "x-build-id": "XD5llU7W8Tav2gYDO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_daemon~instahyre-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_daemon-instahyre-jobs-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/data_daemon~instahyre-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-data_daemon-instahyre-jobs-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/data_daemon~instahyre-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-data_daemon-instahyre-jobs-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Skills or roles to search",
            "minItems": 1,
            "type": "array",
            "description": "One Instahyre search per item, matched against job titles and skill tags, e.g. `python`, `react`, `data science`, `devops`, `product management`, `java developer`. Put cities in `locations`. A job found by two keywords is saved and charged once. Leave the list with one item for a quick first run.",
            "default": [
              "python"
            ],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (cities)",
            "type": "array",
            "description": "Optional. Cities as Instahyre lists them: `Bangalore`, `Mumbai`, `Delhi`, `Gurgaon`, `Noida`, `Hyderabad`, `Chennai`, `Pune`, `Kolkata`, `Ahmedabad`, or `Work From Home` for remote roles; regions such as `South India` and about 300 smaller cities also work. Several cities = any of them. Common alternative spellings (`Bengaluru`, `Gurugram`, `Bombay`, `Remote`) are mapped; an unknown name is ignored with a note in the status message. Leave empty for all of India.",
            "items": {
              "type": "string"
            }
          },
          "minExperience": {
            "title": "Minimum experience (years)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Only jobs whose stated experience range reaches at least this many years (0-30). Checked on each job page; jobs that state no range are kept."
          },
          "maxExperience": {
            "title": "Maximum experience (years)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Only jobs whose stated experience range starts at or below this many years (0-30). `1` or `2` is a good early-career filter."
          },
          "experienceYears": {
            "title": "Candidate experience (years, site filter)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Instahyre's own experience filter: only jobs open to a candidate with exactly this many years (the job's range must cover it). Applied by the site before anything is fetched, so it is the cheapest way to narrow a search; combine with `minExperience`/`maxExperience` for a band."
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only jobs posted in the last N days (1-365). Instahyre keeps jobs open for months and its search has no date filter, so the Actor reads the posting date from each job page and leaves out older jobs without charging. In only-new mode the jobs that are left out are remembered too, so later runs do not re-check them."
          },
          "companySizes": {
            "title": "Company size",
            "type": "array",
            "description": "Optional. Any of `small` (under 100 employees), `medium` (100-1,000) and `large` (over 1,000). Several values = any of them. Applied by the site.",
            "items": {
              "type": "string"
            }
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "all",
              "full-time",
              "internship"
            ],
            "type": "string",
            "description": "`all` (default), `full-time` or `internship`. Applied by the site.",
            "default": "all"
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Optional. Only jobs posted by these companies, e.g. `Amazon`, `Deutsche Telekom Digital Labs`. Several names = any of them. Applied by the site; combine with an empty keyword list to watch everything a company posts.",
            "items": {
              "type": "string"
            }
          },
          "includeDescription": {
            "title": "Include full job description",
            "type": "boolean",
            "description": "On (default): one extra request per job reads the public job page and adds the full description (HTML and plain text), posting date, experience range, employment type, job functions and the company website. The price per job is the same either way. Off: listing fields only (title, company profile, cities, skills, URL), about three times as fast, enough for counting jobs or sizing a market.",
            "default": true
          },
          "maxJobsPerQuery": {
            "title": "Max jobs per keyword",
            "minimum": 1,
            "type": "integer",
            "description": "Stop a keyword after this many new jobs (default 50). Cost: $0.0008 per job with its description, so 50 jobs = $0.04. Raise it for full exports: `python` alone matches about 4,300 open jobs and the site serves 35 per page.",
            "default": 50
          },
          "maxJobs": {
            "title": "Max jobs total",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on saved jobs for the whole run across all keywords (0 = no cap).",
            "default": 0
          },
          "onlyNewSinceLastRun": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "On: deliver only jobs that an earlier run with the same `stateName` has not already delivered, and skip the rest without charging. Set `maxJobsPerQuery` high enough for the first run to take the whole result list (or add `postedWithinDays`), so later runs really return only new postings. Off (default): return every matching job.",
            "default": false
          },
          "stateName": {
            "title": "State name (name of this saved search)",
            "type": "string",
            "description": "Optional name for this search's memory when `onlyNewSinceLastRun` is on, e.g. `python-bangalore-daily`. Leave empty to derive it from the keywords, cities and filters. Use a new name to start over."
          },
          "skipJobIds": {
            "title": "Skip job IDs",
            "type": "array",
            "description": "Array of job IDs you already have (the `id` field from earlier runs), e.g. `[\"424473\", \"441980\"]`. They are skipped before any page fetch and never charged. Large arrays are fine.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional, none by default. Instahyre's JSON API and job pages answer Apify's datacenter IPs directly, so no proxy is needed; set one only if your own network policy requires it."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}