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

Extract public Instahyre jobs with employer profiles, locations, skills, supported facets, and India hiring-market counts. No login or browser required.

- **URL**: https://apify.com/automation-lab/instahyre-jobs-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 3 total users, 2 monthly users, 95.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instahyre Jobs Scraper

Extract **Instahyre jobs** from the platform's public India hiring feed without a login. The Actor returns stable job and employer IDs, titles, employer profiles, locations, skills, supported search facets, canonical URLs, and current hiring-market counts.

Use the results for vacancy tracking, recruiting research, employer hiring signals, skill-demand analysis, or a scheduled new-job feed. The Actor uses Instahyre's public JSON search API rather than challenged HTML pages.

### What does Instahyre Jobs Scraper do?

The Actor resolves public Instahyre job-function slugs, applies the source's genuine server-side filters, walks the search feed, and saves one normalized dataset row per vacancy.

It supports:

- one or several job functions, such as backend development or data science;
- full-time and internship filtering;
- small, medium, or large company facets;
- bounded pagination up to your requested job limit;
- monitor mode for recurring new-vacancy collection;
- aggregate counts for company sizes, job types, top locations, and job functions.

It does not scrape login-only candidate or recruiter information.

### Who is it for?

- **Recruiting teams** can identify companies hiring for specific technical functions.
- **Talent intelligence analysts** can compare vacancy and skill demand over time.
- **Job-market researchers** can track India technology hiring by location and company size.
- **Data engineers** can feed normalized job rows into a warehouse, spreadsheet, or BI tool.
- **Automation builders** can schedule the Actor and process only newly observed listings.

### Why use this Actor?

The main Instahyre search and detail HTML pages are protected by a browser challenge. The public search JSON feed is not: it provides structured listings without a browser, residential proxy, account, or fragile selectors.

The Actor validates filter values instead of silently accepting unsupported searches. Instahyre's public feed does **not** implement reliable keyword or location query parameters, so this Actor does not claim those filters. It exposes only source-supported job function, job type, and company-size facets.

### What Instahyre job data can I extract?

| Field | Meaning |
| --- | --- |
| `jobId` | Stable Instahyre vacancy ID |
| `title`, `candidateTitle` | Public job titles |
| `companyId`, `companyName` | Stable employer ID and name |
| `companyTagline`, `companyAbout` | Public employer profile summary |
| `companyFounded`, `employeeCount` | Employer context when available |
| `companyLogoUrl` | Public company logo URL |
| `locations`, `locationsRaw` | Normalized and source location values |
| `skills` | Skills and technology keywords |
| `acceptsOutstationCandidates` | Whether outstation candidates are accepted |
| `url`, `resourceUri` | Canonical page and API resource references |
| `jobFunctionSlugs`, `jobType`, `companySize` | Filters used for the row |
| `marketCounts` | Total and facet counts for the same search |
| `scrapedAt` | Collection timestamp in ISO 8601 format |

Fields may be `null` or empty when Instahyre does not provide a value.

### How to scrape Instahyre jobs

1. Open the Actor in Apify Console.
2. Enter one or more supported `jobFunctionSlugs`, or use an empty list for the full feed.
3. Choose a job type and company-size facet if needed.
4. Set `maxItems` to the maximum number of jobs to save.
5. Turn on `monitorMode` only for a recurring schedule that should deliver newly observed jobs.
6. Click **Start** and open the default dataset when the run finishes.

The default prefill collects current backend-development jobs and produces useful output immediately.

### Input parameters

| Input | Type | Default | Description |
| --- | --- | --- | --- |
| `jobFunctionSlugs` | string array | `['backend-development']` | Public Instahyre job-function slugs. Empty means all functions. |
| `jobType` | string | `any` | `any`, `full_time`, or `internship` |
| `companySize` | string | `any` | `any`, `small`, `medium`, or `large` |
| `maxItems` | integer | `100` | Maximum saved jobs, from 1 to 5,000 |
| `monitorMode` | boolean | `false` | On later runs with the same filters, stop at the previously observed feed head |

Unknown or inactive function slugs fail clearly rather than returning misleading unfiltered data.

### Example input

```json
{
  "jobFunctionSlugs": ["backend-development"],
  "jobType": "full_time",
  "companySize": "any",
  "maxItems": 25,
  "monitorMode": false
}
```

For internships across all functions, use an empty `jobFunctionSlugs` array and set `jobType` to `internship`.

### Example output

```json
{
  "jobId": 430341,
  "title": "Senior Software Engineer - Care & Onboarding",
  "candidateTitle": "Senior Software Engineer - Care & Onboarding",
  "companyId": 36883,
  "companyName": "Toast",
  "companyTagline": "Be there",
  "companyFounded": 2011,
  "employeeCount": 1000,
  "companyAbout": "Toast provides cloud-based restaurant software and customer support.",
  "companyLogoUrl": "https://media.instahyre.com/images/profile/base/employer/36883/sample.webp",
  "locations": ["Bangalore"],
  "locationsRaw": "Bangalore",
  "skills": ["Java"],
  "acceptsOutstationCandidates": false,
  "url": "https://www.instahyre.com/job-430341-senior-software-engineer-care-onboarding-at-toast-bangalore/",
  "resourceUri": "/api/v1/job_search/430341",
  "jobFunctionSlugs": ["backend-development"],
  "jobType": "full_time",
  "companySize": "any",
  "marketCounts": {
    "totalJobs": 3952,
    "byCompanySize": { "small": 1105, "medium": 626, "large": 2227 },
    "byJobType": { "full_time": 3952, "internship": 6 },
    "topLocations": [{ "name": "Bangalore", "count": 2348 }],
    "topJobFunctions": [{ "id": 10, "name": "Backend Development", "count": 3958 }]
  },
  "scrapedAt": "2026-08-12T20:16:58.452Z"
}
```

The example reflects the current output shape. Source values and counts change as Instahyre's feed changes.

### How does monitor mode work?

With `monitorMode: true`, the Actor stores a small feed-head state for the exact combination of job functions, job type, and company size. A first run returns current jobs up to `maxItems`. Later scheduled runs read newest-first pages and stop when they reach an ID saved at the previous feed head.

Use a separate Apify Task for each monitored filter combination. Changing filters intentionally creates a separate state key. Monitor mode detects newly appearing feed records; it is not an alert delivery service by itself. Connect the dataset to a webhook, Make, Zapier, Slack, email workflow, or your own system for notifications.

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

Pricing uses one `start` event per run plus one `item` event per delivered job. Empty pages and duplicate jobs do not create item charges.

At the BRONZE tier, the run fee is **$0.001** and each delivered job is **$0.001056**:

- 10 jobs: about **$0.01156**;
- 100 jobs: about **$0.1066**;
- 1,000 jobs: about **$1.057**.

Apify subscription tiers apply decreasing per-job prices. The Console shows the active price before you start a paid run. Platform compute is included in Store PPE pricing for users of the published Actor.

### Limits and source coverage

- Instahyre returns 35 records per search page even when a different page size is requested.
- The source search index limits deep offset pagination to approximately 10,000 jobs per filter combination.
- `maxItems` is capped at 5,000 to bound runtime and output.
- Public search results include employer summaries and skills, but not full job descriptions or per-job salary ranges.
- Keyword and location parameters are not exposed because observed public API parameters for them are ignored.
- Individual detail pages may require a browser challenge or account and are outside this Actor's scope.
- The public API can change. A changed or non-JSON response causes a failed run rather than silent empty output.

### Reliability and troubleshooting

Requests time out after 30 seconds and retry transient network errors, HTTP 429 responses, and temporary server failures up to three attempts. Invalid input and deterministic source errors are not retried blindly.

If a run fails with **Unknown or inactive job function slug**, check the spelling and use a current Instahyre slug such as `backend-development`, `full-stack-development`, or `data-science-machine-learning`.

If a narrow combination returns no rows, try `companySize: 'any'` or an empty job-function list. A genuine zero-result query completes without fabricated records or item charges.

### Export and integration workflows

Dataset rows can be downloaded as JSON, CSV, Excel, XML, or RSS from Apify. Common workflows include:

1. schedule a data-science monitor every morning;
2. send each resulting dataset to Google Sheets or a warehouse;
3. group rows by `companyName`, `locations`, or `skills`;
4. compare `marketCounts.totalJobs` across scheduled snapshots;
5. trigger recruiting outreach research when a target employer begins hiring.

For stable incremental processing, deduplicate downstream records by `jobId`.

### Use the API with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~instahyre-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jobFunctionSlugs":["backend-development"],"maxItems":25}'
```

To wait for completion and receive dataset items directly, use the synchronous dataset-items endpoint documented in Apify Console.

### Use the API with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/instahyre-jobs-scraper').call({
  jobFunctionSlugs: ['data-science-machine-learning'],
  jobType: 'full_time',
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use the API with Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/instahyre-jobs-scraper').call(run_input={
    'jobFunctionSlugs': ['backend-development'],
    'companySize': 'small',
    'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use Instahyre Jobs Scraper with MCP

Add the Actor to Claude Code through Apify MCP:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/instahyre-jobs-scraper"
```

**Claude Desktop, Cursor, and VS Code setup:** add this JSON MCP server configuration in the client's MCP settings.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/instahyre-jobs-scraper"
    }
  }
}
```

Example prompts:

- "Collect 50 current backend-development jobs from Instahyre and summarize the most common skills."
- "Export Instahyre internships and group them by location."
- "Run my Instahyre data-science monitor and list newly observed employers."

### Responsible use and legality

This Actor accesses publicly returned job-search data. You are responsible for complying with applicable laws, Instahyre's terms, privacy requirements, and your downstream use case. Do not use the data for discrimination, harassment, spam, or attempts to identify private candidates or recruiters.

Store only what your workflow needs, apply suitable retention controls, and respect deletion or correction obligations. This documentation is operational guidance, not legal advice.

### Frequently asked questions

#### Does the Actor require an Instahyre login?

No. It uses the public unauthenticated job-search and job-function JSON endpoints.

#### Does it scrape full descriptions or salary?

No. Those fields are not available in the accepted public search feed, and this Actor does not bypass challenged or account-dependent detail pages.

#### Can I search by arbitrary keyword or city?

Not server-side. Instahyre's observed public feed ignores plausible keyword and location parameters. Use supported job-function facets, then filter the returned `skills` or `locations` downstream.

#### Why did a monitor run return zero jobs?

That normally means no records appeared ahead of the saved feed head for those exact filters. It does not mean the existing search feed is empty.

#### Can I use several job functions together?

Yes. Provide up to 20 valid slugs. Instahyre combines repeated job-function filters in one search.

### Related automation-lab Actors

- [Cutshort Jobs Scraper](https://apify.com/automation-lab/cutshort-jobs-scraper) for another India-focused technology hiring source.
- [Internshala Scraper](https://apify.com/automation-lab/internshala-scraper) for public internship and early-career listings.
- [Company Career Page Jobs Scraper](https://apify.com/automation-lab/company-career-page-jobs-scraper) for normalized listings from supplied employer career pages.

Combining source-specific Actors can broaden market coverage while preserving each source's stable identifiers and supported filters.

# Actor input Schema

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

Instahyre job-function slugs. Leave empty for the unfiltered feed. Supported examples include backend-development, full-stack-development, and data-science-machine-learning.

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

Filter the public feed by employment type.

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

Filter jobs using Instahyre's supported company-size facet.

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

Maximum number of job records to save. Instahyre limits each filter combination to its first 10,000 search results.

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

Remember the newest records for this exact filter combination and return only jobs posted ahead of the previous run on later scheduled runs.

## Actor input object example

```json
{
  "jobFunctionSlugs": [
    "backend-development"
  ],
  "jobType": "any",
  "companySize": "any",
  "maxItems": 20,
  "monitorMode": false
}
```

# Actor output Schema

## `overview` (type: `string`):

Public job listings with employer, location, skills, filters, and market 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"
    ],
    "jobType": "any",
    "companySize": "any",
    "maxItems": 20,
    "monitorMode": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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"],
    "jobType": "any",
    "companySize": "any",
    "maxItems": 20,
    "monitorMode": False,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/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"
  ],
  "jobType": "any",
  "companySize": "any",
  "maxItems": 20,
  "monitorMode": false
}' |
apify call automation-lab/instahyre-jobs-scraper --silent --output-dataset

```

## MCP server setup

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