# Apna Jobs Scraper | India Jobs API (apna.co) with Salaries (`data_daemon/apna-jobs-scraper`) Actor

$0.80 per 1,000 jobs, description included | Scrape Apna (apna.co) India jobs by keyword, city, department, work mode, shift and education, or export the whole board (76,000+ jobs). Salary, area, experience, openings. Only-new mode. No login, no proxy.

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

## Pricing

from $0.56 / 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

## Apna Jobs Scraper | India Jobs API (apna.co) with Salaries

**Apna Jobs Scraper** is a pay-per-result Apify Actor that returns job listings from [Apna](https://apna.co/) (apna.co), India's largest job platform for entry-level, frontline and blue-collar hiring, as JSON, CSV or Excel. Typical roles are telecallers, sales and field executives, delivery partners, drivers, customer support, accountants, nurses and back-office staff. Each row has the **salary range** (fixed pay and earning potential with incentives), city, locality, PIN code and map coordinates, department and role, work mode (office, field, work from home), shift, experience, education and English level asked for, number of openings, posting and expiry dates, and the full job description. Price: **$0.80 per 1,000 jobs**, plus $0.001 per run. You need no login, cookies, proxy or browser. On 26 October 2026 Apna listed **76,800 open jobs**. About 950 of them were posted in the previous 24 hours and 13,750 in the previous 7 days.

**$0.0008 per job, description included**, plus $0.001 per run. The Actor reads the public JSON job feed that apna.co's own job pages load. Apify's free plan ($5 credit every month) covers about **6,000 jobs**. It is built for schedules. Switch on **Only new jobs since the last run** and a daily run returns, and charges for, only the jobs you have not received before.

> Live check, 26 Oct 2026: Delhi-NCR 4,940 open jobs, Bengaluru 3,650, Mumbai 3,400, Hyderabad 1,770, Pune 1,770. By department: Sales & BD 12,540, Banking / Insurance / Financial Services 9,930, Delivery / Driver / Logistics 4,410, Software Engineering 4,280, Finance & Accounting 4,010. There were 8,930 field jobs and 2,960 part-time jobs.

### Who uses Apna data, and what for

| You are | What this Actor gives you |
|---|---|
| **Job aggregators and job-alert apps** | Apna as a source: stable ids, salary, locality, department, full description and a board-wide daily feed (`All jobs` + `Last 24 hours` + only-new). Same conventions as the IIMJobs, Hirist, Foundit, Instahyre and Unstop Actors by the same publisher. |
| **Staffing agencies and recruiters** | Who is hiring telecallers, delivery riders or field sales staff in your city this week, at what salary, with how many openings. |
| **Labour-market and salary analysts** | Entry-level and frontline salaries by city, department and role, the share of field and night-shift jobs, demand trends by locality. |
| **B2B sales and lead generation** | A company posting 20 delivery openings in Pune is expanding there. Each row has the company name and Apna organisation id. |
| **HR-tech, skilling and government programmes** | Which jobs ask for ITI, a diploma or 12th pass, and the English level required, by district. |
| **AI agents (MCP)** | Ask Claude or ChatGPT "new telecaller jobs in Jaipur posted today with salary" and let it call this Actor through Apify's MCP server. |

### Quick start (about a minute)

1. Click **Try for free**. The form is pre-filled with the keyword `telecaller`.
2. Optionally add keywords (`delivery boy`, `accountant`, `driver`, `python developer`), cities (`Mumbai`, `Delhi`, `Bangalore`), departments, a work mode or **Posted within: Last 7 days**.
3. Click **Start**. 50 jobs take well under a minute and cost **$0.04**.
4. Download the results as JSON, CSV or Excel. Or save the input as a task, tick **Only new jobs since the last run** and **schedule it daily** to get a fresh feed in Google Sheets, a webhook, Make, Zapier or n8n.

**From code** (returns the jobs in one call):

```bash
curl -X POST "https://api.apify.com/v2/acts/data_daemon~apna-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cities": ["Pune"], "departments": ["Delivery / Driver / Logistics"], "postedWithin": "7d", "maxJobsPerSearch": 200}'
```

### Export every Apna job (full-board feed)

Turn on **All jobs on the board**. The Actor reads the board department by department (43 departments), because Apna serves at most about 75,000 results per listing. About 71,000 of the 76,800 open jobs carry a department and are covered. For a daily board-wide feed of new jobs, use:

```json
{
    "allJobs": true,
    "postedWithin": "24h",
    "onlyNewSinceLastRun": true,
    "stateName": "apna-daily-feed"
}
```

That is about 950 new jobs a day, roughly $0.76 a day or $23 a month. A one-off full export of about 71,000 jobs costs about $57 and takes about an hour (set the run timeout to 2 hours). Set a **maximum cost per run** first. You can add cities or departments to export only a slice.

### Input

Every field is optional. An empty input returns the 50 latest jobs on the board.

| Field | What it does |
|---|---|
| `searchTerms` | Job titles or skills, e.g. `telecaller`, `delivery boy`, `accountant`. Apna returns at most 500 jobs per keyword. Cities are checked on each job (Apna ignores the city filter on keyword searches). |
| `allJobs` | Every open job, read department by department. |
| `cities` | City names. Apna filters by 74 cities (Delhi, Gurgaon, Noida and Ghaziabad are Delhi-NCR). Other place names are matched against each job's location, and `remote` means work from home. |
| `departments` | Apna departments, or a word that picks one (`sales`, `delivery`, `healthcare`, `software`). |
| `workModes` | `wfh` (work from home), `wfo` (office), `wff` (field). |
| `workType` | `full_time` or `part_time`. |
| `shift` | `day_shift` or `night_shift`. |
| `education` | `10th`, `12th`, `diploma`, `iti`, `graduate`, `postgraduate`. |
| `englishLevel` | `noenglish`, `basic`, `intermediate`, `advanced`. |
| `postedWithin` | `24h`, `3d` or `7d`. |
| `includeDescription` | Full job description (default on; it costs the same either way). |
| `maxJobsPerSearch` | Cap per keyword or per city/department listing (default 50). `0` = no cap. |
| `maxJobs` | Total cap for the run. |
| `onlyNewSinceLastRun`, `stateName` | Only-new mode for schedules (see below). |
| `skipJobIds` | Job ids you already have; neither saved nor charged. |

Common names from other scrapers (`keywords`, `queries`, `location`, `city`, `category`, `maxItems`, `onlyNew`, `postedWithinDays` and more) are accepted as aliases.

### Output

One item per job:

```json
{
  "id": 149578990,
  "url": "https://apna.co/job/kolkata-calcutta/recruiter-general-staffing-149578990",
  "title": "Recruiter (General Staffing )",
  "company": "2Coms Consulting Pvt Ltd.",
  "companyId": 405182,
  "department": "Human Resources",
  "category": "Human Resource",
  "role": "Senior Recruiter",
  "city": "Kolkata",
  "state": "West Bengal",
  "area": "Kolkata",
  "pincode": "700073",
  "latitude": 22.5743545,
  "longitude": 88.3628734,
  "locationText": "All areas in Kolkata/Calcutta Region",
  "workMode": "field",
  "employmentType": "Full Time",
  "shift": "day",
  "salaryMin": 200000,
  "salaryMax": 350000,
  "salaryCurrency": "INR",
  "salaryPeriod": "yearly",
  "incentives": true,
  "experienceMinYears": 0,
  "experienceMaxYears": 3,
  "experienceText": "Min. 0 months",
  "education": "Graduate",
  "openings": 1,
  "tags": ["Field Job", "Full Time", "Any experience"],
  "isExternalJob": false,
  "postedAt": "2026-10-16T00:00:00.000Z",
  "expiresAt": "2026-10-31T00:00:00.000Z",
  "description": "Job Location - Kolkata/ Hyderabad/ Kerala\n\nExperience - Staffing Recruiter: 2+ years ...",
  "scrapedAt": "2026-10-26T05:30:00.000Z"
}
```

You can download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

#### Data fields

| Field | Description |
|---|---|
| `id`, `url` | Apna job id (stable) and public job page |
| `title`, `company`, `companyId`, `companyLogo` | Job and employer (or the staffing agency that posted it) |
| `department`, `category`, `role` | Apna department, role family and specific role |
| `city`, `state`, `area`, `pincode`, `latitude`, `longitude`, `locationText` | Where the job is |
| `workMode`, `employmentType`, `shift` | Office / field / work from home, full or part time, day or night |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Fixed salary range, INR per year |
| `earningPotential`, `incentives` | Maximum earnings with incentives, when Apna states them |
| `experienceMinYears`, `experienceMaxYears`, `experienceText` | Experience asked for |
| `education`, `englishLevel` | Minimum education and English level asked for |
| `openings`, `tags` | Number of openings; Apna's job tags |
| `isExternalJob`, `externalApplyUrl` | Jobs that are applied for on the employer's own career site |
| `postedAt`, `updatedAt`, `expiresAt` | Dates (ISO 8601, UTC) |
| `description` | Full job description as plain text |
| `searchTerm`, `scrapedAt` | Keyword that found the job; when this run saved it |

The Actor does not collect recruiter names, phone numbers or e-mail addresses.

### Scheduling & automation

**Recipe: new delivery and driver jobs in three cities, every morning**

```json
{
    "cities": ["Mumbai", "Pune", "Bangalore"],
    "departments": ["Delivery / Driver / Logistics"],
    "maxJobsPerSearch": 0,
    "onlyNewSinceLastRun": true,
    "stateName": "delivery-jobs-daily"
}
```

1. Paste the input, click **Save as task**, then **Schedules → Create schedule → Daily** (for example `0 8 * * *`, 08:00 IST) and add the task.
2. The first run delivers every matching job. Every later run delivers only jobs that were not delivered before, and **skipped jobs are not charged**. The memory is a key-value store named `apna-jobs-state` in your own Apify account, with one record per `stateName`. It forgets ids after 120 days.
3. Every run writes a `RUN-SUMMARY` record to its key-value store with found, new, filtered, skipped and charged counts. A webhook consumer can decide what to do without opening the dataset.

**Where the results go:** the task's Integrations tab sends them to Google Sheets, Slack, email or a webhook. Make, Zapier and n8n can use the Apify module with the task id.

### How much does it cost to scrape Apna?

Pay per event. Platform compute is included, and the Actor runs in 512 MB, so the start fee is always a single event.

| Event | Price | When it is charged |
|---|---|---|
| Job | $0.0008 | Each job saved to your dataset, description included |
| Actor start | $0.001 | Once per run |

That is **$0.80 per 1,000 jobs**. Jobs skipped by only-new mode, `skipJobIds`, de-duplication or your city and work-mode checks are never charged. Scale plans pay 15% less and Business plans 30% less.

| How teams use it | Volume (measured 26 Oct 2026) | Cost |
|---|---|---|
| Quick look: 50 `telecaller` jobs | 50 jobs, 1 run | $0.041 |
| Every delivery and driver job in India | about 4,400 jobs, 1 run | about $3.50 |
| Daily feed: new jobs in one city and department | about 20 new jobs a day | about $0.50 a month |
| Daily board-wide feed of new jobs | about 950 new jobs a day | about $23 a month |
| Full export of the board | about 71,000 jobs | about $57 |

### Tips

- Keyword searches return at most 500 jobs each. For more, use cities and departments without a keyword, or `allJobs`.
- Keyword searches fetch each job's page for the description and department, which takes longer. Turn off `includeDescription` if you only need titles, companies, salaries and locations.
- `cities`, `departments`, `workModes` (one value), `workType`, `shift`, `education`, `englishLevel` and `postedWithin` are applied by Apna before anything is downloaded.
- Salaries are yearly INR. Apna shows most frontline salaries per month on its website. Divide by 12 for the monthly figure.
- Set a **maximum cost per run** on the task. The Actor stops cleanly at the limit and says so in the status message.

### FAQ

**Is there an official Apna API?**

Not a public one. This Actor reads the public JSON job feed and job pages that the apna.co website loads. It exposes them as a REST API with schedules, webhooks and only-new runs.

**Does it return candidates or recruiter contacts?**

No. It returns job listings only: no candidate data, and no recruiter names, phone numbers or e-mail addresses.

**Why do some jobs have no salary?**

The employer did not disclose it, or the job is an external listing applied for on the employer's own career site.

**Do I need a proxy or login?**

No.

### Related Actors by Daemon Data

- [IIMJobs Jobs Scraper](https://apify.com/data_daemon/iimjobs-jobs-scraper) – India's MBA, finance, consulting and management jobs with full descriptions and only-new mode
- [Hirist.tech Jobs Scraper](https://apify.com/data_daemon/hirist-jobs-scraper) – India IT and tech jobs with full descriptions, same scheduling conventions
- [Foundit Jobs Scraper](https://apify.com/data_daemon/foundit-jobs-scraper) – foundit.in (Monster India) jobs with full descriptions, only-new mode for daily feeds
- [Instahyre Jobs Scraper](https://apify.com/data_daemon/instahyre-jobs-scraper) – India tech and startup jobs with company size and full descriptions
- [Shine Jobs Scraper](https://apify.com/data_daemon/shine-jobs-scraper) – Shine.com India jobs with full descriptions, salary range, experience, skills and industry; only-new mode
- [Unstop Scraper](https://apify.com/data_daemon/unstop-scraper) – Unstop jobs, internships, hackathons and competitions with salaries, prizes and deadlines
- [Oracle Jobs Scraper](https://apify.com/data_daemon/oracle-hcm-jobs-scraper) – every job on any Oracle Recruiting Cloud (Oracle HCM) career site
- [India IPO Tracker](https://apify.com/data_daemon/india-ipo-tracker) – live IPO GMP, subscription and listing data for India
- [Tickertape India Stocks Scraper](https://apify.com/data_daemon/tickertape-stocks-scraper) – NSE/BSE fundamentals, shareholding and screener

### Support

Found a bug or need another field or filter? Open an issue on the Issues tab; issues are usually answered within a day. Custom variants of this Actor are available on request.

A quick review on the Actor page helps other users find it.

### Disclaimer

This Actor collects publicly available job listings for informational purposes and deliberately leaves out recruiters' personal details. Respect the source website's terms of use and applicable data-protection laws when using the data.

# Actor input Schema

## `searchTerms` (type: `array`):

Job titles or skills, e.g. `telecaller`, `delivery boy`, `accountant`, `python developer`, `driver`. One Apna search per keyword; Apna returns at most 500 jobs per keyword. Leave empty for the latest jobs, filtered by city, department and the options below.

## `allJobs` (type: `boolean`):

Ignore the keywords and export every open Apna job, department by department (about 71,000 of the 76,800 open jobs on 26 Oct 2026 carry a department). Combine with `Only new jobs since the last run` for a daily feed, or with cities / departments to export a slice. Large: set a maximum cost per run.

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

City names, e.g. `Mumbai`, `Delhi`, `Bangalore`, `Hyderabad`, `Pune`, `Chennai`, `Kolkata`, `Ahmedabad`, `Jaipur`, `Lucknow`. Apna filters by 74 cities; Delhi, Gurgaon, Noida and Ghaziabad all map to Delhi-NCR. Other place names are matched against each job's location. `remote` means work from home.

## `departments` (type: `array`):

Apna departments, e.g. `Sales & BD`, `Customer Support`, `Delivery / Driver / Logistics`, `Software Engineering`, `Finance & Accounting`, `Healthcare / Doctor / Hospital Staff`, `Banking / Insurance / Financial Services`. A word such as `sales`, `delivery` or `healthcare` picks the matching department. Applies to runs without keywords.

## `workModes` (type: `array`):

Only jobs with these work modes. Empty = any.

## `workType` (type: `string`):

Only full-time or only part-time jobs.

## `shift` (type: `string`):

Only day-shift or only night-shift jobs.

## `education` (type: `string`):

Jobs open to candidates with this highest education, as Apna filters them.

## `englishLevel` (type: `string`):

Jobs open to candidates with this English level, as Apna filters them.

## `postedWithin` (type: `string`):

Only jobs posted recently (Apna's own windows). `Last 24 hours` with `All jobs` is a daily board-wide feed of about 950 new jobs.

## `includeDescription` (type: `boolean`):

Full job description as plain text. Keyword searches fetch each job page for it (slower); the feed already carries it. Price is the same either way.

## `maxJobsPerSearch` (type: `integer`):

Cap for each keyword (or each city / department listing). 0 = no cap. Not used with `All jobs`.

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

Stop after this many saved jobs. 0 or empty = no total cap (the run's maximum cost still applies).

## `onlyNewSinceLastRun` (type: `boolean`):

For schedules: remember delivered job ids (in a named key-value store in your account) and save only jobs that earlier runs with the same settings did not deliver. Skipped jobs are not charged.

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

Name of the only-new memory. Empty = derived from the keywords and filters. Give two schedules the same name to share one memory.

## `skipJobIds` (type: `array`):

Apna job ids you already have (the `id` field). They are neither saved nor charged.

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

Not needed: the Apna public job feed answers Apify servers directly. Use a proxy only if requests start failing.

## Actor input object example

```json
{
  "searchTerms": [
    "telecaller"
  ],
  "allJobs": false,
  "cities": [],
  "departments": [],
  "workModes": [],
  "workType": "any",
  "shift": "any",
  "education": "any",
  "englishLevel": "any",
  "postedWithin": "any",
  "includeDescription": true,
  "maxJobsPerSearch": 50,
  "onlyNewSinceLastRun": false,
  "skipJobIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Apna jobs as JSON items in the default dataset (also downloadable as CSV, Excel, XML).

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

RUN-SUMMARY record: keywords, filters, jobs found, new, filtered, skipped (already delivered / skipJobIds) and charged 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 = {
    "searchTerms": [
        "telecaller"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/apna-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 = { "searchTerms": ["telecaller"] }

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/apna-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 '{
  "searchTerms": [
    "telecaller"
  ]
}' |
apify call data_daemon/apna-jobs-scraper --silent --output-dataset

```

## MCP server setup

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