# Apna.co Jobs Scraper: India Blue & Grey Collar Listings (`getascraper/apna-co-scraper`) Actor

Extract Apna.co blue & grey collar job listings, salary bands, and recruiter contact preferences (Calls/WhatsApp). Directly harvests pre-rendered Next.js JSON with zero browser overhead. Skip dynamic scraping. $1.99 per 1,000 results.

- **URL**: https://apify.com/getascraper/apna-co-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Apna.co Jobs Scraper: Blue and Grey Collar Vacancies

Get instant, structured access to blue-collar and grey-collar job listings in India. Extract verified salary ranges, direct call or WhatsApp recruiter preferences, and coordinate mappings in bulk.

### What does Apna.co Jobs Scraper do?

The **Apna.co Jobs Scraper** is a high-speed web scraping tool that extracts complete grey-collar and blue-collar job listings from **Apna** (apna.co), India's leading employment platform.

It is built for developers, recruitment boards, job aggregators, and sales lead-generation teams. By loading Apna's Next.js pre-rendered pages, it parses the server-side hydration state JSON from the `__NEXT_DATA__` script tag directly. 

This means a single page request harvests **25 complete, detailed job listings** (including descriptions, physical addresses, coordinate points, and direct call/WhatsApp HR contact preferences). You do not need to request individual job detailed pages, which reduces HTTP overhead by 96% and keeps your running cost extremely low.

With Apify, you can automate this scraper using a simple REST API, schedule runs daily to track fresh listings, and automatically integrate datasets with Google Sheets, Airtable, Make, or webhooks.

### Why use Apna.co Jobs Scraper?

- **Find Direct Recruiter Leads**: Filter for companies actively hiring at scale and see if they accept direct phone calls or WhatsApp messages. Perfect for B2B recruiting outreach and sales prospecting.
- **Benchmark Blue & Grey-Collar Compensation**: Compare minimum and maximum salary ranges across categories, departments, and cities to build accurate compensation datasets.
- **Track Hiring Gaps**: Monitor which roles are trending in specific municipal regions (e.g. Bengaluru, Mumbai, Delhi) to capture economic hiring demand shifts.
- **Deduplicated Job Feeds**: Feed your career dashboard, counselor portal, or job board with clean, normalized listings complete with direct application links.

### How to use Apna.co Jobs Scraper

1. **Set Up**: Open the Apna.co Jobs Scraper in the Apify Console.
2. **Configure Input**: Enter a search `keyword` (e.g., *telecalling_bpo_telesales*) and `location` (e.g., *Mumbai/Bombay*), or enter a direct search `url`.
3. **Limit Results**: Define `maxItems` to restrict dataset records and manage budgets.
4. **Run**: Click the **Start** button. Once finished, download your structured job records as JSON, CSV, Excel, or HTML from the Output tab.

---

### Input Parameters

The scraper accepts these input configuration settings:

| Field | Type | Description | Default |
| --- | --- | --- | --- |
| `url` | String | Direct search URL to crawl. Overrides keyword and location. | `""` |
| `keyword` | String | Search role, category, or title keyword (e.g. "delivery_person", "back_office"). | `"software engineer"` |
| `location` | String | Target city exactly as named on Apna (e.g. "Bengaluru/Bangalore", "Mumbai/Bombay"). | `"Bengaluru/Bangalore"` |
| `maxItems` | Integer | Maximum number of job records to collect. | `100` |
| `dateWithinDays` | Integer | Only include vacancies posted within the last N days (0 = any time). | `0` |
| `maxConcurrency` | Integer | Maximum parallel page requests. | `8` |
| `proxyConfiguration` | Object | Proxy routing settings. Datacenter proxies are fully supported. | `{"useApifyProxy": false}` |

---

### Output Structure

The scraper outputs fully normalized flat job rows with empty fields omitted. Here is a sample JSON representation:

```json
{
  "job_id": 795315922,
  "title": "Customer Service Executive",
  "description_text": "HIRING – INTERNATIONAL BPO | CUSTOMER SERVICE (MUMBAI)\n\nContact Heren Bhagchandani - HR lead - 8928056592\nSalary: ₹20K – ₹70K + Attractive Incentives...",
  "company": "Conviction Hr Private Limited",
  "url": "https://apna.co/job/mumbai-bombay/customer-service-executive-795315922",
  "location": "Malad West, Mumbai/Bombay",
  "city": "Mumbai",
  "category": "Telecalling / BPO / Telesales",
  "department_name": "Customer Support",
  "min_salary": 18000,
  "max_salary": 110000,
  "experience_in_years": "Freshers can apply",
  "no_of_openings": 10,
  "job_address_line_1": "1406/11, Chincholi Bunder Rd, Malad, Ram Nagar, Malad West, Mumbai, Maharashtra 400064, India",
  "job_address_area": "Quinscent Height",
  "job_address_city": "Mumbai",
  "company_address_line_1": "1406/11, Chincholi Bunder Rd, Malad, Ram Nagar, Malad West, Mumbai, Maharashtra 400064, India",
  "company_address_area": "Quinscent Height",
  "company_address_city": "Mumbai",
  "whatsapp_accepted": true,
  "call_accepted": true,
  "created_on": "2026-06-04T00:00:00.000+00:00",
  "expiry": "2026-06-19",
  "ui_tags": [
    "Work from Office",
    "Full Time",
    "Any experience",
    "Good (Intermediate / Advanced) English"
  ],
  "scraped_at": "2026-06-07T06:53:39.815Z"
}
````

***

### Output Fields Explanation

| Field Name | Type | Description |
| --- | --- | --- |
| `job_id` | Number | Unique identifier for the Apna.co vacancy posting. |
| `title` | String | Job position title. |
| `description_text` | String | Plain-text job description content. |
| `company` | String | Hiring organization name. |
| `logo_url` | String | Hiring organization logo URL. |
| `url` | String | Link to the original posting. |
| `location` | String | Main display location name. |
| `city` | String | Primary city. |
| `category` | String | Job category. |
| `department_name` | String | Job department name. |
| `min_salary` | Number | Minimum salary value. |
| `max_salary` | Number | Maximum salary value. |
| `experience_in_years` | String | Experience requirements summary label. |
| `no_of_openings` | Number | Number of openings. |
| `work_mode` | String | Work shift or location policies. |
| `job_address_line_1` | String | Flattened job address. |
| `job_address_area` | String | Flattened job area. |
| `job_address_city` | String | Flattened job city. |
| `company_address_line_1` | String | Flattened company address. |
| `company_address_area` | String | Flattened company area. |
| `company_address_city` | String | Flattened company city. |
| `whatsapp_accepted` | Boolean | Whether the employer accepts direct WhatsApp messages. |
| `call_accepted` | Boolean | Whether the employer accepts direct phone calls. |
| `created_on` | String | ISO formatted publication date. |
| `expiry` | String | Expiration date of the job posting. |
| `ui_tags` | Array | List of tags shown on the UI. |
| `scraped_at` | String | Scraping execution timestamp. |

***

### Cost Estimation & Pricing

Because this Actor utilizes Next.js state harvesting, a single page request harvests 25 complete, detailed records. No dynamic browser rendering (Playwright/Puppeteer) is required, which dramatically reduces memory and CPU overhead.

- **Standard platform rate**: **$1.99 per 1,000 results** (excludes micro platform execution fees).
- Scraping 5,000 detailed jobs requires only 200 HTTP page requests, costing approximately $9.95 in bandwidth and compute combined.

***

### FAQ, Disclaimers, and Support

- **Is scraping Apna.co legal?**
  Yes. This scraper extracts publicly visible job postings published by employers looking to attract applicants. It does not access private candidate profiles or personal account pages. Use the collected data in compliance with local privacy laws and respect server bandwidth by setting sensible concurrency limits.
- **Do I need residential proxies?**
  For small-scale runs (under 5,000 jobs), standard datacenter proxies or no proxy will work cleanly. For continuous, high-volume production crawls, residential proxies may be helpful.
- **Can I run this on a schedule?**
  Yes. Create a Schedule in the Apify Console to run the scraper daily, weekly, or monthly.
- **How can I suggest features or report bugs?**
  Open an issue in the **Issues** tab on this Actor's page, or contact us through the Apify Console.

# Actor input Schema

## `url` (type: `string`):

Optional direct Apna jobs search URL to scrape (e.g. 'https://apna.co/jobs/jobs-in-bengaluru\_bangalore'). If provided, it overrides keyword and location filters.

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

Search for specific jobs by role or specialty (e.g., 'software engineer', 'delivery rider', 'sales executive').

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

Filter by city or region name exactly as shown on Apna (e.g., 'Bengaluru/Bangalore', 'Mumbai/Bombay').

## `dateWithinDays` (type: `integer`):

Only include jobs posted within the last N days (0 = any time).

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

Maximum number of job postings to scrape in total.

## `maxConcurrency` (type: `integer`):

Maximum number of requests handled in parallel.

## `maxRequestRetries` (type: `integer`):

Number of times a request will be retried if it fails.

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

Proxy settings for crawling. Low request volume means datacenter proxies work perfectly without blocking.

## Actor input object example

```json
{
  "keyword": "software engineer",
  "location": "Bengaluru/Bangalore",
  "dateWithinDays": 0,
  "maxItems": 50,
  "maxConcurrency": 8,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "url": "",
    "keyword": "software engineer",
    "location": "Bengaluru/Bangalore",
    "dateWithinDays": 0,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/apna-co-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 = {
    "url": "",
    "keyword": "software engineer",
    "location": "Bengaluru/Bangalore",
    "dateWithinDays": 0,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/apna-co-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "url": "",
  "keyword": "software engineer",
  "location": "Bengaluru/Bangalore",
  "dateWithinDays": 0,
  "maxItems": 50
}' |
apify call getascraper/apna-co-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/apna-co-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apna.co Jobs Scraper: India Blue & Grey Collar Listings",
        "description": "Extract Apna.co blue & grey collar job listings, salary bands, and recruiter contact preferences (Calls/WhatsApp). Directly harvests pre-rendered Next.js JSON with zero browser overhead. Skip dynamic scraping. $1.99 per 1,000 results.",
        "version": "0.1",
        "x-build-id": "lcb1j1tWLhBhsXltU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~apna-co-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-apna-co-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/getascraper~apna-co-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-apna-co-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/getascraper~apna-co-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-apna-co-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "url": {
                        "title": "Direct Apna Jobs URL",
                        "type": "string",
                        "description": "Optional direct Apna jobs search URL to scrape (e.g. 'https://apna.co/jobs/jobs-in-bengaluru_bangalore'). If provided, it overrides keyword and location filters."
                    },
                    "keyword": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Search for specific jobs by role or specialty (e.g., 'software engineer', 'delivery rider', 'sales executive')."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Filter by city or region name exactly as shown on Apna (e.g., 'Bengaluru/Bangalore', 'Mumbai/Bombay')."
                    },
                    "dateWithinDays": {
                        "title": "Date Within Days",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include jobs posted within the last N days (0 = any time).",
                        "default": 0
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of job postings to scrape in total.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of requests handled in parallel.",
                        "default": 8
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of times a request will be retried if it fails.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for crawling. Low request volume means datacenter proxies work perfectly without blocking.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
