# Instahyre Scraper - India Tech Jobs, Skills & Experience (`scrapewise/instahyre-scraper`) Actor

Scrape instahyre.com tech jobs in India by skill, city, experience, job type and company: title, company profile, skills, experience range, job functions, posted date, locations and full description. Schedule it with onlyNew for daily alerts. Error rows are free.

- **URL**: https://apify.com/scrapewise/instahyre-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 job delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Instahyre Scraper: India tech jobs with skills, experience range and company profile

Instahyre Scraper collects **job listings from instahyre.com**, one of India's largest hiring platforms for software,
data and product roles, without an account, cookies or a browser. Search by skill, city, years of experience, job
type, company size or company name, or paste any Instahyre search, listing or job link. Every job comes back as one
clean row with the title, the company profile (tagline, founding year, employees, website, logo), the skills, the
experience range in years, the job category and functions, the cities, the posted date and the full description.

It is used to monitor hiring demand in the Indian tech market, to build job boards and alert feeds, to research which
skills and experience levels companies ask for in Bangalore, Hyderabad, Pune or Gurgaon, to find companies that are
hiring right now (sales and recruiting teams), and to feed job data into dashboards, spreadsheets and AI agents.

### At a glance

| What | Price |
|---|---|
| Job delivered | **US$ 1.00 per 1,000 jobs** (US$ 0.001 each) |
| Run start | US$ 0.005 per run |

- 500 jobs with full details = **US$ 0.505**.
- Error rows, duplicates and jobs skipped by `onlyNew` are never charged. `maxItems` is a hard cap, and a spending
  limit set on the run stops it cleanly with everything delivered so far.
- About 35 jobs per search page; with full details on, a run delivers roughly 5 to 10 jobs per second.

### Quick start

```json
{
  "searchQueries": ["python", "react"],
  "locations": ["Bangalore"],
  "maxItems": 100
}
```

More examples:

```json
{
  "searchQueries": ["data engineer"],
  "locations": ["Work From Home"],
  "experienceYears": 3,
  "onlyNew": true,
  "maxItems": 200
}
```

```json
{
  "startUrls": [
    "https://www.instahyre.com/python-jobs-in-pune/",
    "https://www.instahyre.com/search-jobs/?skills=java&jobLocations=Hyderabad",
    "https://www.instahyre.com/job-421654-staff-backend-engineer-at-arcana-bangalore/"
  ]
}
```

An empty input runs the example search `python` so you can see the output right away.

### Input

| Field | Type | What it does |
|---|---|---|
| `searchQueries` | list of text | Skills or keywords, one per line (python, react, devops, data engineer). Each line is one search. Empty = every job that matches the filters. |
| `locations` | list of text | Indian cities as the site names them: Bangalore, Hyderabad, Gurgaon, Pune, Chennai, Mumbai, Noida, Kolkata... `Work From Home` = remote jobs. Several cities are combined (any of them). |
| `experienceYears` | number | Only jobs whose experience range fits this many years. |
| `jobTypes` | list | `full time`, `internship`, or both (empty). |
| `companySizes` | list | `small`, `medium`, `large`, as the site groups companies. |
| `companies` | list of text | Only jobs from these companies, for example Amazon or Accenture. |
| `startUrls` | list of links | Instahyre search links, listing pages (`/python-jobs-in-bangalore/`, `/jobs-in-pune/`, `/internships-in-bangalore/`) or single job links. A link keeps its own filters. |
| `includeDetails` | true/false | On (default): full description, experience range, category, functions, posted date, region and company website. Off: faster rows with title, company, skills and cities. |
| `maxItems` | number | Hard cap for the whole run (default 50). 0 = no cap. |
| `onlyNew` | true/false | For schedules: remembers what earlier runs of the same search delivered and returns only new jobs. |
| `proxyConfiguration` | proxy | Apify datacenter proxy by default. |

Common names used by other tools also work: `keyword`, `query`, `skills`, `location`, `city`, `maxResults`, `urls`.

### Output

Each job is one row in the dataset. Real fields:

| Field | Example | Notes |
|---|---|---|
| `jobId` | 446412 | Instahyre job id |
| `title` | Python Engineer | |
| `companyName` | Nineleaps | Hiring company |
| `companyId` | 5003 | Instahyre employer id |
| `companyTagline` | We build high performance solutions | |
| `companyDescription` | Nineleaps are enablers of Digital Transformation... | Short company note shown on the site |
| `companyFoundedYear` | 2014 | |
| `companyEmployees` | 200 | |
| `companyLogo` | https://media.instahyre.com/... | |
| `companyWebsite` | https://www.nineleaps.com/ | With details on |
| `isFeaturedEmployer` | false | |
| `location`, `locations` | Bangalore, Hyderabad | Text and list |
| `isRemote` | false | True when the job lists Work From Home |
| `acceptsOutstation` | true | Open to candidates from other cities |
| `skills` | Python, FastAPI, PostgreSQL | |
| `jobCategory` | Software Engineering | With details on |
| `jobFunctions` | Backend Development, Full-Stack Development | With details on |
| `experienceMinYears`, `experienceMaxYears` | 2, 4 | With details on |
| `employmentType` | FULL_TIME | With details on |
| `isInternship`, `isActive` | false, true | With details on |
| `region`, `country` | Karnataka, India | With details on |
| `datePosted` | 2026-10-09 | With details on |
| `postedByAgency` | Zyoin | Name of the recruiting agency when the job is posted by one (company name, never a person) |
| `description`, `descriptionHtml` | Responsibilities: ... | Full text and HTML, with details on |
| `url` | https://www.instahyre.com/job-446412-... | Job page |
| `sourceQuery` | python | The search or link that found the job |
| `scrapedAt` | 2026-10-16T23:53:00Z | |

#### Real output example

```json
{
  "type": "job",
  "jobId": 446412,
  "title": "Python Engineer",
  "companyName": "Nineleaps",
  "companyId": 5003,
  "companyTagline": "We build high performance solutions",
  "companyFoundedYear": 2014,
  "companyEmployees": 200,
  "companyWebsite": "https://www.nineleaps.com/",
  "location": "Bangalore, Hyderabad",
  "locations": ["Bangalore", "Hyderabad"],
  "isRemote": false,
  "acceptsOutstation": true,
  "skills": ["FastAPI", "MySQL", "PostgreSQL", "Python", "SQL"],
  "jobCategory": "Software Engineering",
  "jobFunctions": ["Backend Development", "Full-Stack Development", "Other Software Development"],
  "experienceMinYears": 2,
  "experienceMaxYears": 4,
  "employmentType": "FULL_TIME",
  "isInternship": false,
  "isActive": true,
  "region": "Karnataka",
  "country": "India",
  "datePosted": "2026-10-09",
  "postedByAgency": null,
  "description": "Responsibilities:\n- Backend Development: Design, develop, and maintain robust, scalable, and high-performance backend systems using Python and FastAPI...",
  "url": "https://www.instahyre.com/job-446412-python-engineer-at-nineleaps-2-bangalore-hyderabad/",
  "sourceQuery": "python",
  "scrapedAt": "2026-10-16T23:53:00Z"
}
```

Privacy: the recruiter's name, title and photo that the site shows are **not** collected. E-mail addresses and phone
numbers inside descriptions are replaced by `[contact removed]`.

### Errors you may see

Error rows have `type: "error"`, an `errorCode` and a message. They are always free.

| errorCode | Meaning | What to do |
|---|---|---|
| `INVALID_INPUT` | A filter value is not accepted (for example a company size that does not exist) | Use one of the listed values |
| `INVALID_URL` | The link is not an Instahyre search, listing or job link | Copy the link from the browser address bar on instahyre.com |
| `NO_RESULTS` | The search has no jobs | Try a broader skill or fewer filters |
| `NOT_FOUND` | A job link points to a job that is closed or does not exist | Remove it |
| `BLOCKED` | The site refused every attempt for one search | Run again in a few minutes |
| `UNEXPECTED` | Anything else | Run again; the run never ends as failed |

### Integrations, scheduling and AI agents

- **Schedules**: run it every morning with `onlyNew: true` to get only the jobs posted since the last run, a ready
  feed for job alerts or a hiring-signal tracker.
- **Export**: download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.
- **Make, n8n and Zapier**: start the Actor and read the dataset with the Apify integrations to push new jobs to
  Google Sheets, Airtable, Slack, a CRM or your own database.
- **Webhooks**: get a call when a run finishes and fetch the new rows.
- **AI agents**: the Actor works as a tool in the Apify MCP server, so Claude, ChatGPT or any MCP client can ask
  "find React jobs in Bangalore for 3 years of experience" and get structured rows back.

### FAQ

**Do I need an Instahyre account?** No. The Actor reads the public job listings, the same ones anyone sees without
logging in.

**How many jobs does the site have?** About 12,000 to 13,000 active jobs in October 2026, most in Bangalore, Gurgaon
and Hyderabad.

**How do I get only remote jobs?** Add `Work From Home` to `locations`.

**What does `experienceYears` do?** It keeps the jobs whose experience range includes that number, the same filter as
the "Experience" box on the site.

**Can I scrape several skills at once?** Yes, one per line in `searchQueries`. Each line is its own search; a job that
shows up in two searches is delivered and charged once.

**Why is `postedByAgency` filled for some jobs?** Many jobs on Instahyre are posted by recruiting agencies on behalf of
the hiring company. The field holds the agency's company name so you can filter direct employers.

**Does it get salaries?** Instahyre does not publish salaries on its public job pages, so there is no salary field.

### Limitations

- Only data the public site shows: no candidate data, no applicant counts and no salary.
- Filters set in the input apply to `searchQueries`; links in `startUrls` keep the filters written in the link.
- Single job links are always delivered, even with `onlyNew` on.
- City names follow the site (Bangalore, Gurgaon); Bengaluru, Gurugram, Bombay and Remote are translated for you.

### Changelog

- **16 Oct 2026**: first version. Search by skill, city, experience, job type, company size and company; search,
  listing and job links; full details with description, experience range, functions and posted date; `onlyNew` for
  schedules; free error rows.

# Actor input Schema

## `searchQueries` (type: `array`):

Skills or keywords, one per line, for example python, react or data engineer. Each line is one search. Leave empty to list every job that matches the filters below.

## `locations` (type: `array`):

Indian cities as instahyre.com names them, for example Bangalore, Hyderabad, Gurgaon, Pune, Chennai, Mumbai, Noida. Use Work From Home for remote jobs. Empty = all of India.

## `experienceYears` (type: `integer`):

Only jobs whose experience range fits this many years, for example 3. Empty = any experience.

## `jobTypes` (type: `array`):

Full-time jobs, internships or both. Empty = both.

## `companySizes` (type: `array`):

Company size as instahyre.com groups it. Empty = all sizes.

## `companies` (type: `array`):

Only jobs from these companies, for example Amazon or Accenture. Empty = all companies.

## `startUrls` (type: `array`):

Optional: instahyre.com search links (https://www.instahyre.com/search-jobs/?skills=java), listing pages (https://www.instahyre.com/python-jobs-in-bangalore/) or single job links (https://www.instahyre.com/job-421654-.../).

## `includeDetails` (type: `boolean`):

On: opens each job for the full description, experience range, job functions, category, posted date, region and company website. Off: faster, the row has title, company, skills and locations.

## `maxItems` (type: `integer`):

Hard cap for the whole run, across all searches. 0 = no cap.

## `onlyNew` (type: `boolean`):

On: remembers the jobs delivered in earlier runs of the same search (in your account) and delivers only jobs not seen before. Skipped jobs are free.

## `proxyConfiguration` (type: `object`):

Apify datacenter proxy by default. If instahyre.com refuses the datacenter IPs, the run switches to residential India by itself (the cost guard watches it).

## Actor input object example

```json
{
  "searchQueries": [
    "python",
    "react"
  ],
  "locations": [
    "Bangalore"
  ],
  "includeDetails": true,
  "maxItems": 50,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "python",
        "react"
    ],
    "locations": [
        "Bangalore"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/instahyre-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": [
        "python",
        "react",
    ],
    "locations": ["Bangalore"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/instahyre-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "python",
    "react"
  ],
  "locations": [
    "Bangalore"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/instahyre-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/instahyre-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7zcsHoODSpSHCalCm/builds/7vZIatdstGnmRJX0M/openapi.json
