# Instahyre Jobs Scraper: India Tech Jobs & Employers (`cprussin/instahyre-jobs`) Actor

Scrape Instahyre jobs by skill, city, experience, job function, company size and job type: title, skills, locations and job URL, plus employer name, tagline, founded year and headcount. Monitor mode flags new, updated and removed jobs. No login. $1.50 per 1,000 jobs.

- **URL**: https://apify.com/cprussin/instahyre-jobs.md
- **Developed by:** [Connor Prussin](https://apify.com/cprussin) (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 $1.50 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Jobs Scraper: India Tech Jobs & Employers

**Instahyre Jobs Scraper** exports job listings from Instahyre (instahyre.com), India's tech hiring platform, as clean JSON, CSV or Excel. It reads the same public job search data the Instahyre website loads, no login needed:

- ✅ **Jobs by skill, city and experience**: any skills (`Python`, `Java`, `React`, `AWS`, ...), cities (`Bangalore`, `Pune`, `Hyderabad`, `Gurgaon`, `Work From Home`, ...) and years of experience.
- ✅ **Job function, company size and job type**: e.g. `Backend Development` or `Data Science / Machine Learning`, small, medium or large employers, full-time jobs or internships.
- ✅ **Employer data on every job**: company name, tagline, founded year, headcount and logo.
- ✅ **Monitor mode**: flags each job as `new`, `updated` or `removed` since the previous run. Unchanged jobs are skipped and not billed.
- ✅ Fast, light and polite: plain JSON requests, one at a time, no browser. Pay only for jobs written to your dataset.

### Start in one minute

Click **Start** with the prefilled input:

```json
{
  "skills": ["Python"],
  "maxItems": 20
}
```

You get 20 Python jobs with `title`, `keywords`, `locations`, `jobUrl`, `employerName`, `employerHeadcount` and `employerFoundedYear`.

**Cost:** $0.03: 20 jobs × $0.0015, plus the $0.00005 actor-start fee.

### Use with an AI assistant

Connect the [Apify MCP server](https://mcp.apify.com) to Claude, ChatGPT, Cursor or any MCP client (`https://mcp.apify.com?tools=cprussin/instahyre-jobs` loads only this actor), then paste:

```text
Use the Apify actor cprussin/instahyre-jobs to get 50 backend Go jobs in Bangalore on Instahyre, and list which companies are hiring and how big they are.
```

### Recipes

#### Backend jobs for mid-level engineers in two cities

```json
{
  "skills": ["Java", "Go"],
  "locations": ["Bangalore", "Pune"],
  "years": 4,
  "jobFunctions": ["Backend Development"],
  "maxItems": 100
}
```

#### Startups hiring data scientists

Small companies only; sort by `employerFoundedYear` to find the youngest.

```json
{
  "jobFunctions": ["Data Science / Machine Learning"],
  "companySize": "small",
  "maxItems": 200
}
```

#### Tech internships

```json
{
  "jobType": "internship",
  "maxItems": 100
}
```

#### Daily hiring-change alert

Schedule it daily: after the first run you get (and pay for) only new, updated and removed jobs.

```json
{
  "skills": ["React"],
  "locations": ["Work From Home"],
  "maxItems": 500,
  "monitorMode": true
}
```

### Who uses Instahyre job data?

- **Recruiters and staffing agencies**: see which companies are hiring for a skill in a city right now.
- **Sales and lead generation**: employers opening many tech roles are growing and buying. Get their size and founded year with each job.
- **Job seekers and job boards**: build your own feed or alerts for Indian tech jobs.
- **Market analysts**: track in-demand skills, functions and hiring by company size over time.
- **AI agents**: give an LLM live Indian tech job listings through the Apify API or MCP server.

### How does the Instahyre jobs scraper work?

1. Set skills and any other filters.
2. The actor calls Instahyre's public job search API, 35 jobs per page, about one request per second.
3. It pages through results until `maxItems` jobs, or the end of the results.
4. You get one dataset item per job, in Instahyre's ranking order.

### Input

| Field                | Description                                                         | Example                     |
| -------------------- | ------------------------------------------------------------------- | --------------------------- |
| `skills`             | Skills; a job matches any of them. Empty = all jobs                 | `["Python", "Django"]`      |
| `locations`          | Cities; a job matches any of them. Empty = all of India             | `["Bangalore", "Pune"]`     |
| `years`              | Years of experience the job is open to (`0` = freshers)             | `3`                         |
| `jobFunctions`       | Instahyre job functions, by name                                    | `["DevOps / Cloud"]`        |
| `companySize`        | `any`, `small`, `medium` or `large`                                 | `"large"`                   |
| `jobType`            | `any`, `full-time` or `internship`                                  | `"internship"`              |
| `maxItems`           | Max jobs to output (in monitor mode: new, updated and removed jobs) | `500`                       |
| `monitorMode`        | Flag jobs as new, updated or removed since the previous run         | `true`                      |
| `proxyConfiguration` | Optional Apify Proxy (not needed normally)                          | `{ "useApifyProxy": true }` |

- **Locations** accept common spellings: `Bengaluru` = `Bangalore`, `Gurugram` = `Gurgaon`, `Remote` = `Work From Home`. A multi-city job matches if any of its cities does.
- **Job functions** use Instahyre's names, e.g. `Backend Development`, `Frontend Development`, `Full-Stack Development`, `Mobile Development`, `Data Science / Machine Learning`, `Data Engineering / DWH / ETL`, `DevOps / Cloud`, `Software Testing / QA / SDET`, `Product Management`, `Engineering Management`, `UX / Visual Design`.
- Instahyre serves at most 10,000 results per search. Narrow the filters to go deeper.

### What data do you get for each Instahyre job?

```json
{
  "jobId": "439850",
  "title": "Python Engineer",
  "keywords": ["API", "FastAPI", "Python", "REST"],
  "locations": ["Bangalore"],
  "jobUrl": "https://www.instahyre.com/job-439850-python-engineer-at-nineleaps-2-bangalore/",
  "employerId": "5003",
  "employerName": "Nineleaps",
  "employerTagline": "We build high performance solutions",
  "employerFoundedYear": 2014,
  "employerHeadcount": 200,
  "employerLogoUrl": "https://media.instahyre.com/images/profile/base/employer/5003/dcac758458/nineleaps.webp",
  "changeType": null,
  "scrapedAt": "2026-10-16T13:20:28.220Z"
}
```

- `keywords` are the skills the employer tagged on the job.
- `employerHeadcount` is Instahyre's size bucket (the lower bound: `200` means 200+ employees).
- `changeType` is `new`, `updated` or `removed` in monitor mode, otherwise `null`.
- No job descriptions, salaries or recruiter contacts: Instahyre shows those only on its job pages and to signed-in candidates.

### How much does it cost to scrape Instahyre jobs?

Pay-per-event, only for jobs written to your dataset:

| Event | Price       |
| ----- | ----------- |
| Job   | **$0.0015** |

That's **$1.50 per 1,000 jobs**. In monitor mode, unchanged jobs are skipped and free. If you set a **maximum cost per run**, the actor stops cleanly when it reaches it.

### How do I monitor Instahyre for new and changed jobs?

Turn on `monitorMode` and run the actor on an [Apify schedule](https://docs.apify.com/platform/schedules) (e.g. daily; save the input as a task and schedule the task).

- The first run is a baseline: every job is `new`.
- Later runs output only jobs that are `new`, `updated` (title, skills, locations or employer changed) or `removed` (no longer in the results). Unchanged jobs are skipped and not charged.
- Removed jobs come with their latest data when Instahyre still has it.
- Removals are detected only when a run reads every result. Set `maxItems` above the number of changes you expect; a run that stops early checks removals on a later run.
- State lives in your account in the key-value store `instahyre-jobs-state`, one record per set of filters. Changing the filters starts a new baseline. It remembers 50,000 jobs.
- Add a Slack, email or webhook integration to the task to get alerts.

### Instahyre jobs scraper FAQ

**Is this an official Instahyre API?** No. It reads the public job search results instahyre.com shows to logged-out visitors, and respects instahyre.com's robots.txt.

**Why no job descriptions?** Instahyre's job pages are behind a bot challenge. This actor reads only the open search API, so it stays fast and cheap.

**Do I need a proxy?** No. The Instahyre API answers Apify's servers directly. You can still enable Apify Proxy; the actor then switches IP automatically if a request is blocked.

**Can I use it through the API or with AI agents?** Yes. Call it through the Apify API, the Apify MCP server or any Apify integration.

**Disclaimer:** This actor is not affiliated with, endorsed by or sponsored by Instahyre. Instahyre is a trademark of its owner. You are responsible for complying with Instahyre's terms and applicable laws when using the data.

### Related actors

- [foundit-jobs](https://apify.com/cprussin/foundit-jobs?fpr=to54nm): Indian job listings from Foundit (formerly Monster India) with salary, experience and skills.
- [hirist-iimjobs-jobs](https://apify.com/cprussin/hirist-iimjobs-jobs?fpr=to54nm): India tech jobs from Hirist and management jobs from iimjobs.
- [wellfound-jobs](https://apify.com/cprussin/wellfound-jobs?fpr=to54nm): Startup jobs from Wellfound (AngelList Talent) with salary, equity and company data.

# Actor input Schema

## `skills` (type: `array`):

Skills or technologies, e.g. <code>Python</code>, <code>Java</code>, <code>React</code>, <code>AWS</code>. A job matches if it lists any of them. Leave empty to list all jobs.

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

Optional cities, e.g. <code>Bangalore</code>, <code>Pune</code>, <code>Hyderabad</code>, <code>Gurgaon</code>, <code>Mumbai</code>, or <code>Work From Home</code> (or <code>Remote</code>). A job matches if it lists any of them. Leave empty for all of India.

## `years` (type: `integer`):

Optional: only jobs open to candidates with this many years of experience. <code>0</code> = freshers.

## `jobFunctions` (type: `array`):

Optional Instahyre job functions (names as on instahyre.com), e.g. <code>Backend Development</code>, <code>Full-Stack Development</code>, <code>Data Science / Machine Learning</code>, <code>DevOps / Cloud</code>, <code>Frontend Development</code>, <code>Mobile Development</code>, <code>Product Management</code>. A job matches if it is in any of them.

## `companySize` (type: `string`):

Optional employer size filter, as Instahyre defines it.

## `jobType` (type: `string`):

Full-time jobs, internships, or both.

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

Stop after this many jobs (in monitor mode: new, updated and removed jobs). Each job is billed as one event.

## `monitorMode` (type: `boolean`):

Flag each job with <code>changeType</code> <code>new</code>, <code>updated</code> or <code>removed</code> since the previous run with the same filters; unchanged jobs are skipped (not billed). Schedule the actor (e.g. daily) for change alerts: the first run is a baseline where every job is new. State is kept in the key-value store "instahyre-jobs-state" in your account.

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

Optional Apify Proxy. Not needed normally: the Instahyre API answers datacenter IPs directly. If set, the actor switches to a new IP whenever a request is blocked or rate-limited.

## Actor input object example

```json
{
  "skills": [
    "Python"
  ],
  "companySize": "any",
  "jobType": "any",
  "maxItems": 20,
  "monitorMode": false
}
```

# Actor output Schema

## `results` (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 = {
    "skills": [
        "Python"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("cprussin/instahyre-jobs").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 = {
    "skills": ["Python"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("cprussin/instahyre-jobs").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 '{
  "skills": [
    "Python"
  ],
  "maxItems": 20
}' |
apify call cprussin/instahyre-jobs --silent --output-dataset

```

## MCP server setup

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

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/4QBOOJBkIg96YBgSO/builds/8AbWS8wIe1GM2Gz7P/openapi.json
