# Instahyre Jobs Scraper 💼 (tech jobs India) (`tagadanar/instahyre-jobs-scraper`) Actor

Jobs on Instahyre, India's tech hiring platform, by skill, city, experience or function: company, skills, experience range and full description. Only-new monitor mode for daily feeds. No API key, no login.

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

## Pricing

from $0.70 / 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.
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 Jobs Scraper: tech jobs in India by skill, city and experience

Get the jobs listed on Instahyre, India's tech and product hiring platform, as clean rows: title, company (with size, founding year and tagline), cities, skills, and with one switch on the full description, the experience range in years, job category and functions, and the recruiter. Search by skill or role, city, years of experience, job function, company or company size, or paste any Instahyre job or search page.

Run it daily in **only-new mode** and you get a feed of jobs you have not seen before.

$1.00 per 1,000 jobs (Free plan; less on paid plans), platform usage included. Full descriptions cost nothing extra. No API key, no login.

### What you get

One row per job:

| Field | Description |
| --- | --- |
| `id`, `url`, `applyUrl` | Instahyre's job ID and the job page. Applying on Instahyre needs a free candidate login, so the job page is the apply link |
| `title`, `company`, `companyId` | What the job says |
| `companyTagline`, `companyFoundedYear`, `companyEmployeeCount`, `companyLogoUrl` | Company facts as Instahyre states them (employee count is the figure Instahyre shows, e.g. 200) |
| `locations`, `isRemote`, `acceptsOutstation` | Cities as listed (a job in several cities keeps all of them), `Work From Home` flag, and whether outstation candidates are accepted |
| `skills` | The skill tags the recruiter attached |
| `isInternship` | True for internships (known from your job-type setting, exact with details on) |
| `search`, `scrapedAt` | Which of your searches found it and when |

With **Include full description** on: `description` (plain text, bullet points kept), `experience` (`3-4 years`), `experienceMinYears`, `experienceMaxYears`, `jobCategory`, `jobFunctions`, `recruiterName`, `recruiterTitle`, `isActive`.

With **Include company details** on (one request per company): `companyIndustry`, `companyWebsite`, `companyLinkedin`, `companyAbout`, `companyRating` (the employer rating Instahyre shows), `companyTechStack`, `companyOpenJobs`.

**Not available:** Instahyre does not show salary or a posting date to logged-out visitors, so there is no salary or `postedAt` field and this actor does not invent one. Use only-new mode to catch jobs as they appear.

#### Example row (real, 2026-10-16)

```json
{
  "id": 439850,
  "url": "https://www.instahyre.com/job-439850-python-engineer-at-nineleaps-2-bangalore/",
  "title": "Python Engineer",
  "company": "Nineleaps",
  "companyId": 5003,
  "companyFoundedYear": 2014,
  "companyEmployeeCount": 200,
  "locations": ["Bangalore"],
  "isRemote": false,
  "skills": ["API", "FastAPI", "Python", "REST"],
  "experience": "3-4 years",
  "experienceMinYears": 3,
  "experienceMaxYears": 4,
  "jobCategory": "Software Engineering",
  "jobFunctions": ["Backend Development", "Data Science / Machine Learning", "Other Software Development"],
  "recruiterName": "Ana Bardhan",
  "recruiterTitle": "Talent Partner",
  "companyIndustry": "Computer Software / IT / Internet",
  "companyWebsite": "https://www.nineleaps.com/",
  "search": "Python, in Bangalore",
  "scrapedAt": "2026-10-16T16:15:45.327Z"
}
```

### Input

| Field | What it does |
| --- | --- |
| `keywords` | Skills or role names, one per line (Python, React, Data Analyst, Product Manager). Each line is its own search |
| `locations` | Cities, one per line, or `Remote`. Bengaluru, Gurugram, Delhi NCR and WFH are understood. Several cities in one search are OR-ed |
| `jobFunctions` | Instahyre function names (Backend Development, DevOps / Cloud, Data Science / Machine Learning, ...). Part of a name is enough |
| `experienceYears`, `experienceYearsMax` | Instahyre's experience filter: jobs open to a candidate with that many years. Set both for a range (3 and 5 = open to 3, 4 or 5 years) |
| `jobType` | Jobs (default), internships, or both |
| `companySize` | Any, small, medium or large |
| `companies` | Only these companies |
| `maxResults` | Cap per search (default 100, up to 10,000). Instahyre lists about 10,000 jobs per search at most |
| `includeDetails`, `includeCompanyDetails` | The extra fields above |
| `onlyNew` | Skip jobs an earlier run already delivered to your account (monitor mode) |
| `startUrls` | Instahyre job pages or search pages. Job pages return that job; search pages keep their skills, city, experience and function filters |

All filters in one search combine with AND; repeated values inside a filter (several cities, several functions) combine with OR.

#### Examples

Backend jobs in Bangalore or Pune open to 3 to 5 years, with descriptions:

```json
{ "keywords": ["Java", "Spring Boot"], "locations": ["Bangalore", "Pune"], "experienceYears": 3, "experienceYearsMax": 5, "includeDetails": true, "maxResults": 300 }
```

A daily feed of new remote data jobs:

```json
{ "jobFunctions": ["Data Science / Machine Learning", "Data Engineering"], "locations": ["Remote"], "onlyNew": true, "maxResults": 500 }
```

### Pricing

$1.00 per 1,000 jobs on the Free plan ($0.90 Bronze, $0.80 Silver, $0.70 Gold). Plus $0.001 per run to start. Platform usage (compute, proxies, storage) is included. Descriptions and company details cost nothing extra. A search with no jobs costs nothing beyond the run start, and you can cap spend with Apify's maximum-charge setting: the run stops cleanly when it is reached.

### FAQ

**Do I need an Instahyre account or API key?** No. The actor reads the same public listing data the site shows to visitors who are not logged in.

**Why is there no salary?** Instahyre shows compensation only to logged-in candidates, so it is not in the public data. The same goes for the posting date.

**What if I type a city Instahyre does not know?** The run status says so and nothing is charged for that search. Use a major city name or `Remote`.

**How does only-new mode work?** The actor keeps the IDs it has delivered in a key-value store named `instahyre-jobs-seen` in your account. Schedule the same input daily and each run returns just the jobs that appeared since. Delete the store to start over.

**How fast is it?** About 35 jobs per request. Full descriptions add one request per job, so a 1,000-job run with descriptions takes a few minutes. Instahyre rate-limits each address, and the actor moves to a fresh route when it is slowed down.

**Why fewer jobs than I asked for?** The run status names the reason: the list ended, the page ceiling was hit, or the run time limit stopped it.

### Related actors

- [Naukri Jobs Scraper](https://apify.com/tagadanar/naukri-scraper): experienced-hire jobs across India with salaries and skills.
- [Foundit Jobs Scraper](https://apify.com/tagadanar/foundit-jobs-scraper): jobs from Foundit (ex-Monster), a major Indian job portal.
- [Internshala Scraper](https://apify.com/tagadanar/internshala-scraper): internships and fresher jobs in India with stipend or CTC.
- [LinkedIn Jobs Scraper](https://apify.com/tagadanar/linkedin-jobs-scraper): hiring signals from LinkedIn job posts.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/instahyre-jobs-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

Skills or role names as you would type them into Instahyre's search box, one per line (for example Python, React, Data Analyst, Product Manager). Each line is a separate search. Leave keywords, locations and function empty to collect the newest-listed jobs across Instahyre.

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

Indian cities, one per line (for example Bangalore, Mumbai, Delhi / NCR, Hyderabad, Pune, Chennai, Gurgaon, Noida) or Remote. Aliases such as Bengaluru, Gurugram, Delhi NCR and WFH are understood. A listing in several cities matches if any of them is yours.

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

Instahyre's own function names, one per line (for example Backend Development, Full-Stack Development, Data Science / Machine Learning, DevOps / Cloud, Product Management, Sales). Part of a name is enough. A name Instahyre does not have is reported in the run status.

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

Only jobs open to a candidate with this many years of experience (Instahyre's own experience filter). Set both fields for a range: 3 and 5 returns jobs open to 3, 4 or 5 years. Empty = any.

## `experienceYearsMax` (type: `integer`):

Upper end of the range above. Leave empty to use the single value. Ranges wider than 8 values are sampled.

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

Full-time jobs, internships, or both.

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

Instahyre's company size filter.

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

Only jobs at these companies (for example Amazon, Razorpay). Names as Instahyre shows them.

## `maxResults` (type: `integer`):

Stop each search (each keyword, URL or filter set) after this many jobs. You only pay for jobs delivered. Instahyre lists at most about 10,000 jobs per search.

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

Open every job for its full description, experience range (min and max years), job category and functions, and the recruiter. One extra request per job; slower on big runs; same price per job.

## `includeCompanyDetails` (type: `boolean`):

Add the company's industry, website, LinkedIn page, about text, employee rating and tech stack to each row (one request per company).

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

Skip any job an earlier run of this scraper already delivered to your account, so a scheduled daily run returns only new listings. The memory is a key-value store named instahyre-jobs-seen in your account; delete it to start over.

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

Paste Instahyre job pages (https://www.instahyre.com/job-439850-python-engineer-at-nineleaps-2-bangalore/) or search pages (https://www.instahyre.com/search-jobs/?skills=python\&location=Pune). Works together with the fields above.

## Actor input object example

```json
{
  "keywords": [
    "Python"
  ],
  "locations": [
    "Bangalore"
  ],
  "jobType": "jobs",
  "companySize": "any",
  "maxResults": 30,
  "includeDetails": false,
  "includeCompanyDetails": false,
  "onlyNew": false
}
```

# Actor output Schema

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

One item per Instahyre job in the default dataset.

# 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 = {
    "keywords": [
        "Python"
    ],
    "locations": [
        "Bangalore"
    ],
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/instahyre-jobs-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 = {
    "keywords": ["Python"],
    "locations": ["Bangalore"],
    "maxResults": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/instahyre-jobs-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 '{
  "keywords": [
    "Python"
  ],
  "locations": [
    "Bangalore"
  ],
  "maxResults": 30
}' |
apify call tagadanar/instahyre-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tagadanar/instahyre-jobs-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/oaMTYgZpvPs1Xuxcf/builds/nHaeUQwuQQUHZJN1G/openapi.json
