# WorkIndia Jobs & Candidate Scraper (`fetchfinch/workindia-unified-scraper`) Actor

\[💰 $0.90 / 1K]  Extract WorkIndia job listings and recruiter candidate profiles via fast HTTP APIs. Filter by type, city, category, qualification, and experience, enrich job details, and infer candidate industries.

- **URL**: https://apify.com/fetchfinch/workindia-unified-scraper.md
- **Developed by:** [Fetch Finch](https://apify.com/fetchfinch) (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

$0.90 / 1,000 results

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?

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

## WorkIndia Jobs & Candidate Scraper for Recruitment Data

![No API key required](https://img.shields.io/badge/No%20API%20key-required-43A047)
![Pricing](https://img.shields.io/badge/Pricing-Pay%20per%20event-5C6BC0)
![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F39C12)
![Public tasks](https://img.shields.io/badge/Public%20tasks-6%20ready--to--run-00A98F)
![HTTP API](https://img.shields.io/badge/HTTP%20API-no%20browser-3178C6)

### Try public task examples

| Task | Demonstrates | Link |
| --- | --- | --- |
| Work From Home Jobs | Basic job collection | [Run task](https://apify.com/fetchfinch/workindia-unified-scraper/examples/workindia-work-from-home-jobs) |
| Category and City Jobs | Full-time Accounts jobs in Mumbai | [Run task](https://apify.com/fetchfinch/workindia-unified-scraper/examples/workindia-filtered-category-city-jobs) |
| Fresher 12th Pass Jobs | Qualification and experience filters | [Run task](https://apify.com/fetchfinch/workindia-unified-scraper/examples/workindia-fresher-12th-pass-jobs) |
| Enriched Account Jobs | Public detail-page enrichment | [Run task](https://apify.com/fetchfinch/workindia-unified-scraper/examples/workindia-enriched-account-jobs) |
| Multi-City Delivery Jobs | Role search across several cities | [Run task](https://apify.com/fetchfinch/workindia-unified-scraper/examples/workindia-multi-city-delivery-jobs) |
| Delivery Candidate Search | Candidate search with industry inference | [Run task](https://apify.com/fetchfinch/workindia-unified-scraper/examples/workindia-delivery-candidate-search) |

Extract public WorkIndia job listings or candidate profiles using fast HTTP requests. The Actor does not launch a browser and does not require a WorkIndia login.

### Why use this Actor?

- One Actor supports both job discovery and candidate sourcing.
- Filters follow WorkIndia's familiar type, city, category, qualification, experience, and role terminology.
- Job detail enrichment adds fields published on the public job page, including descriptions, timings, openings, interview details, skills, and salary data.
- Candidate searches can infer the relevant WorkIndia industry from a job title when no industry is supplied.
- Every record includes normalized fields and the original source object under `raw`.
- Results are written directly to an Apify dataset and can be exported as JSON, CSV, Excel, XML, or RSS.

### Quick start

#### Collect jobs

```json
{
  "mode": "jobs",
  "jobType": "Work From Home Jobs",
  "resultsWanted": 100
}
```

#### Collect candidates

```json
{
  "mode": "candidates",
  "jobTitles": ["Delivery Executive"],
  "cities": ["mumbai", "delhi"],
  "maxResults": 100,
  "sortBy": "newest"
}
```

### Jobs mode

Set `mode` to `jobs` to collect job listings. The most useful filters are:

| Input | Description |
| --- | --- |
| `jobType` | WorkIndia type: `Work From Home Jobs`, `Part-Time Jobs`, `Fresher Jobs`, `Jobs for Women`, `Full-Time Jobs`, or `Night Shift Jobs`. |
| `jobCategory` | WorkIndia category, such as `Accounts`, `Delivery / Pick Up Boy`, `Driver`, `Back Office`, or `Tele-caller / BPO`. The input form contains the complete source category list. |
| `jobSubcategory` | Role keyword, such as `Delivery Executive`, `Account Executive`, `Cashier`, or `Data Entry`. |
| `jobCities` | One or more cities, for example `mumbai`, `delhi`, or `pune`. |
| `jobLocations` | Optional localities, such as `Andheri` or `Koramangala`. |
| `jobQualifications` | Values such as `10th Pass`, `12th Pass`, `Graduate`, `Diploma`, or `ITI`. |
| `jobExperiences` | WorkIndia experience values, such as `fresher` or `1-3 years`. |
| `keyword` / `location` | Simple keyword and location aliases for quick searches. |
| `includeDetails` | Fetch and merge each listing's public detail-page data. |
| `resultsWanted` | Maximum number of jobs to save; maximum 2,000. |
| `maxPages` / `pageSize` | Pagination controls; page size defaults to 20. |

For advanced integrations, plural fields such as `jobTypes`, `jobCategories`, and `jobSubcategories`, plus the raw `filters` object, are also supported.

#### Job detail enrichment

Set `includeDetails` to `true` to enrich each listing from its public WorkIndia detail page. Enriched records may include:

- Full description and HTML description
- Salary range and employment type
- Qualification and experience requirements
- Job timings and interview instructions
- Number of openings and branch address
- Skills, posting date, expiry, and structured location type

### Candidates mode

Set `mode` to `candidates` to search public candidate profiles.

| Input | Description |
| --- | --- |
| `jobTitles` | One or more roles, such as `Delivery Executive`, `Telecaller`, or `Field Sales`. |
| `cities` | One or more WorkIndia city slugs, such as `mumbai`, `delhi`, or `bangalore`. |
| `industries` | Optional WorkIndia industry slugs, such as `delivery`, `driver`, `retail`, or `telecalling`. |
| `sortBy` | `newest`, `active`, or `nearest`. |
| `qualification` / `experience` / `english` | Optional candidate filters when supported by the source. |
| `localities` | Optional locality filters. |
| `maxResults` | Maximum candidates to save; maximum 5,000. |
| `maxPages` / `pageSize` | Pagination controls; candidate page size defaults to 10. |
| `requestDelay` | Optional delay between candidate API requests in milliseconds. |

When `industries` is omitted, the Actor maps common job titles to WorkIndia role categories and records the effective value in `searchIndustries`. Explicit industries take precedence.

### Output

Each dataset item has a `recordType` of either `job` or `candidate`.

#### Job records

Common fields include `title`, `company`, `location`, `salary`, `salaryMin`, `salaryMax`, `jobId`, `url`, `detailUrl`, `description`, `qualification`, `experience`, `industry`, `skills`, `employmentType`, `datePosted`, and `validThrough`.

#### Candidate records

Common fields include `candidateId`, `fullName`, `city`, `age`, `gender`, `qualification`, `englishLevel`, `totalExperience`, `yearsOfExperience`, `previousJobTitle`, `previousCompany`, `skills`, `sectors`, `languages`, `assets`, `matchScore`, `hotLeadStatus`, `lastSeen`, `joinDate`, `hasResume`, and `isLookingUrgently`.

Both record types also include `raw`, `sourceUrl`, `apiUrl`, `position`, and `scrapedAt` when available.

### Pricing

The Actor costs **$0.90 per 1,000 dataset results**. A result is one job listing or one candidate profile. There is no separate Actor-start charge, and detail enrichment does not add a second result charge.

### Proxy and reliability

The Actor works through direct HTTP requests. An Apify Proxy configuration can be supplied through the standard `proxyConfiguration` input when proxy routing is needed. The Actor retries transient source and proxy failures automatically.

### Responsible use

This Actor collects publicly available WorkIndia data. Candidate records may contain personal information. Use the output only for lawful recruitment, sourcing, analytics, or research purposes, and comply with WorkIndia's terms, applicable privacy and data-protection laws, and fair-hiring requirements.

Public candidate searches do not unlock private contact details. The `mobileNo` field is normally empty unless the source makes a number publicly available.

### Support

For questions or feature requests, use the Issues tab on the [Actor page](https://apify.com/fetchfinch/workindia-unified-scraper).

# Actor input Schema

## `mode` (type: `string`):

Use jobs for public job listings or candidates for public recruiter candidate profiles. A run produces one record type only.

## `startUrl` (type: `string`):

Jobs mode: public WorkIndia search page used as the referer and as a source for default filters. Defaults to the work-from-home search.

## `keyword` (type: `string`):

Jobs mode: keyword or WorkIndia search slug. Candidate mode: compatibility alias for one job title.

## `location` (type: `string`):

Jobs mode: city or locality filter. Candidate mode: compatibility alias for one city.

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

Jobs mode: source-style WorkIndia type choice. Fresher Jobs and Jobs for Women are translated to the corresponding experience/gender filters.

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

Jobs mode: optional compatibility/advanced list of additional source-style type choices. The Job type dropdown is recommended for normal runs.

## `jobCities` (type: `array`):

Jobs mode: one or more city values. Values are sent to WorkIndia's city filter.

## `jobLocations` (type: `array`):

Jobs mode: locality or location values, for example Andheri or Koramangala.

## `jobCategory` (type: `string`):

Jobs mode: source-style WorkIndia industry category. The label is translated to the API industry constant.

## `jobCategories` (type: `array`):

Jobs mode: optional compatibility/advanced list of additional source-style WorkIndia industry categories. The Job category dropdown is recommended for normal runs.

## `jobSubcategory` (type: `string`):

Jobs mode: source-style role keyword, such as Delivery Executive, Account Executive, Cashier, or Data Entry.

## `jobSubcategories` (type: `array`):

Jobs mode: role keywords used by WorkIndia's search, such as Delivery Executive, Account Executive, Cashier, or Data Entry. WorkIndia exposes these as search/SEO roles rather than a separate API subcategory field.

## `jobQualifications` (type: `array`):

Jobs mode: qualification values, such as 10th pass, 12th pass, graduate, or below 10th. Common labels are mapped to WorkIndia IDs; numeric IDs are also accepted.

## `jobExperiences` (type: `array`):

Jobs mode: WorkIndia experience values or labels, such as fresher or 1-3 years.

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

Jobs mode: fetch each public job detail page over HTTP and merge its structured data into the listing. This increases request volume.

## `jobTitles` (type: `array`):

Candidates mode: one or more WorkIndia job-title strings, such as Delivery Executive or Telecaller.

## `cities` (type: `array`):

Candidates mode: lowercase WorkIndia city slugs such as mumbai, delhi, or bangalore. Empty searches all cities for the selected title.

## `industries` (type: `array`):

Candidates mode: optional WorkIndia role-category slugs, for example delivery, driver, retail, or telecalling.

## `sortBy` (type: `string`):

Candidates mode sort order.

## `qualification` (type: `string`):

Candidates mode qualification filter when supported by WorkIndia.

## `english` (type: `string`):

Candidates mode English-level filter when supported by WorkIndia.

## `experience` (type: `string`):

Candidates mode experience filter when supported by WorkIndia.

## `localities` (type: `array`):

Candidates mode optional locality values passed to WorkIndia as repeated location filters.

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

Candidates mode total candidate cap across all title and city combinations.

## `requestDelay` (type: `integer`):

Candidates mode delay between API requests in milliseconds.

## `workType` (type: `array`):

Compatibility alias for jobTypes. Values are used in the WorkIndia work\_type filter.

## `filters` (type: `object`):

Optional raw fields to merge into the feed filter object. This is useful when WorkIndia adds a filter not yet represented by the Actor input.

## `sort` (type: `string`):

WorkIndia feed sort value.

## `resultsWanted` (type: `integer`):

Maximum number of jobs to save.

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

Maximum number of API pages to request. Each page uses pageSize records.

## `pageSize` (type: `integer`):

Number of jobs requested per feed call. WorkIndia's web UI uses 20.

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

Optional Apify Proxy configuration. For local testing, the Actor also honors the PROXY environment variable.

## `proxyUrl` (type: `string`):

Optional HTTP(S) or SOCKS proxy URL. If omitted, PROXY is checked locally.

## `cookie` (type: `string`):

Optional Cookie header for troubleshooting. It is never written to the dataset or logs.

## Actor input object example

```json
{
  "mode": "jobs",
  "startUrl": "https://www.workindia.in/work-from-home-jobs/",
  "jobType": "Work From Home Jobs",
  "includeDetails": false,
  "sortBy": "newest",
  "maxResults": 100,
  "requestDelay": 0,
  "workType": [
    "work_from_home"
  ],
  "sort": "freshness",
  "resultsWanted": 100,
  "maxPages": 20,
  "pageSize": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

Structured public WorkIndia jobs or candidate profiles from the run's 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchfinch/workindia-unified-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("fetchfinch/workindia-unified-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 '{}' |
apify call fetchfinch/workindia-unified-scraper --silent --output-dataset

```

## MCP server setup

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