# Instahyre Jobs Scraper (`khadinakbar/instahyre-jobs-scraper`) Actor

Scrape public Instahyre India tech jobs by job function, job type, company size, skills, or city. Returns title, company, skills, locations, and job URL. MCP-ready.

- **URL**: https://apify.com/khadinakbar/instahyre-jobs-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

Extract public India tech job listings from Instahyre into structured JSON for recruiting workflows, hiring-market research, and MCP/API agents. You get title, company, skills, locations, company size, and the public job URL. No login required.

### What data can you extract from Instahyre?

| Field | Description |
|---|---|
| `title` / `candidateTitle` | Published role title |
| `companyName` / `companyId` / `employeeCount` / `companyFounded` | Hiring company identity and size |
| `companyTagline` / `companyAbout` / `companyLogoUrl` | Public employer context |
| `skills` | Skill and keyword tags published on the job |
| `locations` / `locationsRaw` / `isRemote` | Cities, raw location text, remote flag |
| `acceptOutstation` | Whether candidates from other cities are accepted |
| `publicUrl` / `jobId` | Public job page and stable ID |
| `jobFunctionSlug` / `jobTypeFilter` / `companySizeFilter` | Filters that produced the row |
| `sourceApiUrl` / `scrapedAt` | Provenance and freshness |

### Best fit

Use this Actor when you need public Instahyre job listings filtered by job function (for example backend, full-stack, or data science), job type (full-time or internship), or company size, then narrowed by skills, city, company name, or remote roles. It works well for India tech hiring intelligence, sourcing lists, and scheduled new-job alerts.

### Related next step

When you also need broader India board coverage beyond Instahyre, route the same sourcing job to [Naukri Jobs Scraper](https://apify.com/khadinakbar/naukri-jobs-scraper) for Naukri search results. For startup-heavy India tech hubs, use [CutShort Jobs Scraper](https://apify.com/khadinakbar/cutshort-jobs-scraper). For LinkedIn job postings with salary and skills, use [LinkedIn Jobs Scraper](https://apify.com/khadinakbar/linkedin-jobs-scraper).

### Workflow story

A Bengaluru talent-intel analyst wants to know which small companies are hiring Python backend engineers. She sets `jobFunctionSlugs: ["backend-development"]`, `companySize: "small"`, `skills: ["Python"]`, and `locations: ["Bangalore"]`, capped at 50 jobs. The Actor reads Instahyre's public feed with those server-side filters, keeps only Python roles in Bangalore, and writes validated rows with the company headcount and job URL. She then schedules the same input with `monitorMode: true`, so each daily run returns only new postings.

### How it works

1. Resolves your job-function slugs against Instahyre's live public job-function catalog
2. Reads Instahyre's public job search feed over HTTPS (35 jobs per page) with verified server-side filters: job function, job type, and company size
3. Applies optional client-side filters (skills, locations, company names, remote)
4. Validates and deduplicates each row, charges `job-scraped`, then writes it to the dataset
5. Writes `OUTPUT` and `RUN_SUMMARY`, including a live market snapshot of Instahyre facet counts

### Input example

```json
{
  "jobFunctionSlugs": ["backend-development"],
  "jobType": "full_time",
  "companySize": "small",
  "skills": ["Python"],
  "locations": ["Bangalore"],
  "maxJobs": 50
}
```

Common job-function slugs: `backend-development`, `full-stack-development`, `frontend-development`, `data-science-machine-learning`, `devops-cloud`, `mobile-development`, `software-testing-qa-sdet`, `other-software-development`. Unknown slugs are skipped with a warning in `OUTPUT`.

### Example output

```json
{
  "jobId": "406690",
  "title": "Staff Engineer",
  "companyName": "Quince",
  "employeeCount": 200,
  "companyFounded": 2018,
  "locations": ["Bangalore"],
  "isRemote": false,
  "skills": ["Distributed Systems", "Golang", "Java", "Spring"],
  "acceptOutstation": true,
  "publicUrl": "https://www.instahyre.com/job-406690-staff-engineer-at-quince-bangalore/",
  "jobFunctionSlug": "backend-development",
  "sourceApiUrl": "https://www.instahyre.com/api/v1/job_search/?limit=35&offset=0&job_functions=10",
  "scrapedAt": "2026-09-30T00:00:00.000Z"
}
```

You can download the dataset as JSON, CSV, Excel, or HTML.

### Pricing

This Actor uses **Pay per event** with **platform usage** passed through to the caller. Current event prices:

- `apify-actor-start`: $0.00005 per run
- `job-scraped`: $0.002 per validated job written to the dataset

For example, 100 jobs cost about $0.20 plus small platform usage. Jobs filtered out, duplicates, and jobs already seen in monitor mode are not charged. Treat the **live Pricing tab** on the Actor page as the current source of truth for event prices and platform usage before budgeting a production run.

### Outcomes

Every run writes `OUTPUT` and `RUN_SUMMARY` with one of:

`COMPLETE` | `PARTIAL` | `VALID_EMPTY` | `INVALID_INPUT` | `UPSTREAM_FAILED` | `CONFIG_ERROR`

- `VALID_EMPTY`: Instahyre responded, but no job matched your filters (or no new jobs in monitor mode)
- `INVALID_INPUT`: none of your job-function slugs exist on Instahyre
- `UPSTREAM_FAILED`: Instahyre's public API did not return usable data and nothing was saved

### API example

```bash
curl "https://api.apify.com/v2/acts/khadinakbar~instahyre-jobs-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jobFunctionSlugs":["data-science-machine-learning"],"maxJobs":20}'
```

### MCP / agent prompt card

> Use Instahyre Jobs Scraper to fetch up to 20 public full-time backend-development jobs from small companies in Bangalore that mention Python. Return title, companyName, employeeCount, skills, and publicUrl.

### Tips for best results

- Use job function, job type, and company size first: they filter on Instahyre's side and keep runs fast
- Skills, locations, and company names filter after fetching. Raise `maxPages` if a narrow filter returns too few rows
- Instahyre caps any single filter combination at about 10,000 results; split big pulls by job function
- For daily alerts, enable `monitorMode` and give each saved search its own `stateName`

### FAQ

**How do I target a role or city?** Pick the closest job-function slug, then add `skills` and `locations`. Instahyre's public feed filters by job function, job type, and company size, so those are sent to Instahyre and the rest is matched on each returned job.

**What job details are included?** Listing and employer fields that Instahyre publishes in its public feed: title, skills, locations, company size, founding year, tagline, and the public job URL. Open `publicUrl` for the full posting.

**Do I need an Instahyre account?** No account is needed. The Actor reads the public feed only.

### Builder's note

I built this Actor after probing Instahyre's public job search API and checking each filter against its own facet counts. I found that job type and company size are numeric IDs, and the company-size IDs follow their own order (small is 1, large is 2, medium is 3). Free-text parameters such as keyword or location return the full feed unchanged, so I designed the Actor to send only the confirmed server-side filters and apply skills, city, and company matching on each returned job.

### Legal / responsible use

This Actor collects publicly visible Instahyre job listings and employer details only; candidate profiles and job applications are outside its scope. You remain responsible for complying with applicable terms and employment and privacy laws. Instahyre is a trademark of its respective owner. This independent Actor is not affiliated with, associated with, or endorsed by Instahyre.

# Changelog

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

# Actor input Schema

## `jobFunctionSlugs` (type: `array`):

Instahyre job-function slugs such as backend-development, full-stack-development, or data-science-machine-learning. Each slug is resolved against Instahyre's live job-function catalog and applied as a server-side filter. Unknown slugs are skipped with a warning. Leave empty to read the full public feed.

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

Server-side employment-type filter. Choose any, full_time, or internship.

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

Server-side filter on the hiring company's Instahyre size band. Choose any, small, medium, or large.

## `maxJobs` (type: `integer`):

Caps validated job rows written and billed for this run across all job functions. Defaults to 100. Accepts 1 through 5000.

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

Optional client-side filter on the job's published skill tags, such as Python, React, or Java. Partial, case-insensitive match. Applied after fetching, so narrow filters may need more pages.

## `skillMatch` (type: `string`):

Keep jobs that list any of the requested skills, or require all of them.

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

Optional client-side filter on the published location text, such as Bangalore, Pune, Gurgaon, or Hyderabad. Partial, case-insensitive match against Instahyre's own spelling.

## `remoteOnly` (type: `boolean`):

When true, keep only jobs whose published location explicitly says Work From Home or remote. Defaults to false.

## `companyNames` (type: `array`):

Optional client-side filter keeping jobs from companies whose name contains any of these terms, such as Amazon or Razorpay.

## `maxPages` (type: `integer`):

Maximum Instahyre API pages (35 jobs each) scanned per job function. Defaults to 20. Raise it when client-side filters are narrow. Instahyre caps any single filter combination at about 10,000 results.

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

When true, return only job IDs not seen in earlier monitor runs with the same state name. Built for scheduled runs. Previously seen jobs are skipped and not billed.

## `stateName` (type: `string`):

Name for the monitor-mode memory of seen job IDs. Use different names for different saved searches. Letters, numbers, hyphens only.

## Actor input object example

```json
{
  "jobFunctionSlugs": [
    "backend-development",
    "data-science-machine-learning"
  ],
  "jobType": "full_time",
  "companySize": "small",
  "maxJobs": 10,
  "skills": [
    "Python",
    "Django"
  ],
  "skillMatch": "any",
  "locations": [
    "Bangalore",
    "Pune"
  ],
  "remoteOnly": false,
  "companyNames": [
    "Amazon"
  ],
  "maxPages": 20,
  "monitorMode": false,
  "stateName": "backend-bangalore"
}
```

# Actor output Schema

## `jobs` (type: `string`):

Validated public Instahyre job listings returned by this run.

## `output` (type: `string`):

Compact outcome, item counts, warnings, and charged event totals.

## `runSummary` (type: `string`):

Pagination totals, resolved job functions, Instahyre facet snapshot, and billing counts.

# 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 = {
    "jobFunctionSlugs": [
        "backend-development"
    ],
    "maxJobs": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = {
    "jobFunctionSlugs": ["backend-development"],
    "maxJobs": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/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 '{
  "jobFunctionSlugs": [
    "backend-development"
  ],
  "maxJobs": 10
}' |
apify call khadinakbar/instahyre-jobs-scraper --silent --output-dataset

```

## MCP server setup

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