# Apna.co Scraper: India Jobs Feed with Salaries & Posted Dates (`getascraper/apna-co-scraper`) Actor

Apna.co scraper for India jobs: search any role and city, get title, company, pay range, location, work tags and stable IDs. Optional job-page fields add posted date, category, skills and pincode. Schedule it as a new-and-updated India jobs feed and export JSON, CSV or Excel.

- **URL**: https://apify.com/getascraper/apna-co-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 267 total users, 116 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 4.00 out of 5 stars

## Pricing

from $0.78 / 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.co Scraper: India Jobs Feed with Salaries & Posted Dates

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;margin-bottom:0">
<tr>
<td colspan="4" style="padding:14px 18px;background:#F0FDFA;border:none;border-top:3px solid #0F766E;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:16px;font-weight:700;color:#1C1917">Turn Apna.co into a daily India jobs feed.</span> <span style="font-size:15px;color:#57534E">Search any role and city, add posted dates and skills, and schedule a feed that returns only new and updated listings.</span>
</td>
</tr>
<tr>
<td colspan="4" style="padding:10px 14px;background:#0F766E;border:none;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;color:#FFFFFF">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">INDIA JOBS SOURCES AND INVENTORY</span>
<span style="color:#FFFFFF;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Apna, CutShort, Internshala, Instahyre, and the combined India job feed</span>
</td>
</tr>
<tr>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25.0%;background:#F0FDFA;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-Bqf3sZlaZvWnVZbe1-X4r5SBrUub-CompressJPEG.Online_img%28512x512%29_%2813%29.jpg" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/apna-co-scraper" style="color:#0F766E;text-decoration:none;font-weight:700;font-size:13px">Apna.co Scraper</a></span><br>
<span style="color:#0F766E;font-size:11px;font-weight:700">&#10148; You are here</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25.0%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-hgMCIk2Sb7HnSumQC-vaaBV31jet-ChatGPT_Image_Sep_4__2026__07_42_37_AM.png" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/cutshort-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">CutShort Jobs</a></span><br>
<span style="color:#57534E;font-size:11px">Technology and startup roles</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25.0%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-4dMyE80KpfCIKroD4-AeB3jBrmgG-ChatGPT_Image_Sep_10__2026__08_22_23_PM.png" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/internshala-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Internshala Monitor</a></span><br>
<span style="color:#57534E;font-size:11px">Internships and entry-level jobs</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25.0%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-M5Myh7i6WMTmfwMlw-NCEUGam6gM-logo_200_200.webp" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/instahyre-jobs-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Instahyre Jobs</a></span><br>
<span style="color:#57534E;font-size:11px">Tech jobs and hiring alerts</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#F0FDFA;border:1px solid #99F6E4;border-top:none;color:#1C1917">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Apna.co jobs with pay, posted dates and skills, delivered as a clean feed</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Collect Apna search results with titles, companies, pay ranges, and work tags, add posted dates, categories and skills from each job page, then schedule a change-only feed.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0"><tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px"><span style="font-size:15px;font-weight:800;color:#115E59">✓ Source-grounded</span><br><span style="font-size:12px;color:#57534E">Missing values stay missing.</span></td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top;border-top:none;color:#1C1917"><span style="font-size:15px;font-weight:800;color:#115E59">↻ Detect change</span><br><span style="font-size:12px;color:#57534E">See new and updated listings.</span></td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top;border-top:none;color:#1C1917"><span style="font-size:15px;font-weight:800;color:#115E59">⌁ Posted dates</span><br><span style="font-size:12px;color:#57534E">Keep only jobs from the last N days.</span></td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0"><span style="font-size:15px;font-weight:800;color:#115E59">↓ Export cleanly</span><br><span style="font-size:12px;color:#57534E">Use a flat, stable dataset.</span></td>
</tr></table>

Collect public job listings from Apna.co search pages for job-board feeds, compensation research, and recurring hiring signals. Each row keeps its source job ID, search context, and the fields Apna publishes. Switch on job page fields to add the posted date, category, skills, and address pincode.

### 🔍 What does this Actor do?

The Actor collects public listings from Apna.co job-search pages. It returns titles, companies, locations, pay ranges, visible work tags, and listing links when those fields are published. With job page fields on, it also reads each public job page for the posted date, expiry date, category, industry, skills, full address, and pincode. It does not use a login or access candidate profiles.

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0"><tr><td style="border:none;padding:12px 18px;background:#F0FDFA;border-left:4px solid #0F766E;color:#1C1917"><span style="font-size:15px;color:#1C1917">&#9889; <b>Useful on day one, better on a schedule.</b> Reuse a monitor scope to receive only new or updated public listings in later runs, or set Posted within days to 1 for a daily fresh-jobs feed.</span></td></tr></table>

### 📧 Employer emails (optional)

Switch on **Find employer contact email** to add a public contact email for each company. The Actor looks for the company's own website and reads the address it publishes there, such as info@ or careers@. When a company publishes no email, the row says so and the email fields stay empty. Every job from the same company carries the same email.

The option is off by default. An email is billed only when one is found, once per company per run. Free Apify plans can look up a limited number of companies per run.

### 👥 Who uses it?

- Job-data teams building a source-attributed India jobs feed and job-board aggregators.
- Recruiters and staffing agencies watching entry-level, field, and work-from-home openings in India by city.
- Hiring and market researchers comparing public demand by role, location, and compensation.
- Operations teams that need a recurring public-listing change feed without manual rechecks.

### 🚀 How to use it

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0"><tr>
<td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917"><span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 1</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Choose searches</span><br><span style="font-size:12px;color:#57534E">Enter a role and location, or add public Apna search URLs.</span></td>
<td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-left:none;vertical-align:top;color:#1C1917"><span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 2</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Set the output</span><br><span style="font-size:12px;color:#57534E">Pick the row limit and choose all listings or changes only.</span></td>
<td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917"><span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 3</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Schedule the feed</span><br><span style="font-size:12px;color:#57534E">Reuse the monitor scope on future runs and download the results.</span></td>
</tr></table>

### ⚙️ Input

| Field                       | Type          | Required | Description                                                                          |
| --------------------------- | ------------- | -------- | ------------------------------------------------------------------------------------ |
| `startUrls`                 | array of URLs | No       | Public `https://apna.co/jobs/...` search URLs. Their query filters remain in place.  |
| `url`                       | URL           | No       | Backward-compatible single search URL. It is added to `startUrls` when both are set. |
| `keyword` and `location`    | text          | No       | Generates one search when no search URL is supplied.                                 |
| `dateWithinDays`            | integer       | No       | Keeps only jobs posted within the window. The posted date is read from each job page. |
| `categories`                | array         | No       | Keeps jobs whose category or industry matches, such as Telesales. Read from each job page. |
| `jobTypes`, `shifts`, `cityAliases` | array | No       | Keeps listings whose published tags or location match. |
| `includeDetails`            | boolean       | No       | Adds posted date, expiry, category, industry, skills, address, and pincode from each job page. |
| `monitoringMode`            | enum          | No       | Emits all records with a status, or only `NEW` and `UPDATED` records.                |
| `monitorScope`              | text          | No       | Stable state name for repeated runs of the same search scope.                        |
| `resetMonitoringState`      | boolean       | No       | Begins a new monitoring baseline for the selected state key.                         |
| `includeContactPreferences` | boolean       | No       | Adds source-published call and WhatsApp preference flags only.                       |
| `enrichEmails`              | boolean       | No       | Adds a public contact email from each company's own website, when it publishes one. Off by default. |
| `maxItems`                  | integer       | No       | Maximum rows across every supplied search URL. Free Apify plans are limited to 25 rows per run. |

### 📦 Data table

| Field                                          | Type          | Description                                                          |
| ---------------------------------------------- | ------------- | -------------------------------------------------------------------- |
| `source`, `job_id`, `dedupe_key`               | text          | Source identity and a stable key in the form `apna:{job_id}`.        |
| `source_url`, `source_position`                | text, integer | The originating search and its position in that source response.     |
| `canonical_url`, `application_url`             | URL           | Source-published listing and application links when available.       |
| `title`, `company`, `location`                 | text          | Public job title, company name, and display location.                |
| `min_salary`, `max_salary`, `salary_type`      | number, text  | Public pay-range values and pay period when published.               |
| `created_on`, `expiry`                         | text          | Posted date and last valid date from the job page (job page fields). |
| `category`, `industry`, `skills`               | text, array   | Category, industry, and skills from the job page (job page fields).  |
| `pincode`, `job_address_line_1`, `experience_months` | text, number | Address, six-digit pincode, and months of experience from the job page, when published. |
| `experience_in_years`, `english`, `ui_tags`    | text, array   | Public card requirements and visible tags when available.            |
| `work_mode`, `employment_type`                 | text          | Public work-arrangement and employment tags when available.          |
| `change_type`, `first_seen_at`, `last_seen_at` | text          | Monitoring status and collection history for the selected state key. |
| `employer_email`, `employer_email_kind`        | text          | The company's public contact email and whether it is a team mailbox or a named one (Find employer contact email option). |
| `employer_email_domain`, `employer_email_source_url`, `email_lookup_status` | text | The email's website, the page it was found on, and whether an email was found for this company. |
| `scraped_at`                                   | text          | Time this row was collected.                                         |

Source fields that are not published are omitted. The Actor does not invent company names, listing links, opening counts, salary periods, or location values.

### 💰 Pricing

Pricing is pay per result, with no subscription. Empty runs do not create result charges. Reading job pages does not add any extra charge. Store run-start and platform charges may apply, so check the pricing panel before a production rollout. With Find employer contact email on, each company email found is billed once per run; companies without a published email cost nothing extra.

### ⭐ Enjoying Apna.co Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0"><tr><td style="padding:20px 24px 14px;background:#F0FDFA;border:1px solid #99F6E4;border-left:5px solid #0F766E;border-radius:10px 10px 0 0;color:#1C1917"><span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br><span style="font-size:17px;font-weight:800;color:#1C1917">A review helps job-data and hiring-research teams find a more trustworthy Apna listing feed.</span><br><span style="font-size:14px;color:#57534E">Your feedback tells us which public-listing workflow to improve next.</span></td></tr><tr><td style="padding:0;background:#0F766E;border:1px solid #0F766E;border-left:5px solid #0F766E;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF"><a href="https://apify.com/getascraper/apna-co-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a></td></tr></table>

### ❓ FAQ

#### Does it collect candidate profiles or phone numbers?

No. It is limited to public job-search listings. The optional preference fields are boolean source flags, not contact details. The optional employer emails come from each company's own website, never from candidates.

#### Where do the employer emails come from?

From the company's own public website. The Actor reads only addresses the company publishes for contact, such as info@ or careers@, and leaves the field empty when it cannot confirm the website belongs to that company. Apna itself does not show employer emails.

#### Will every company have an email?

No. Many small employers on Apna have no website or publish no email on it. Those rows say no email was found and are not billed for one.

#### What does new and updated only mean?

The Actor compares a source job ID and a fingerprint of material public fields with the saved state. It emits first-seen and changed listings only.

#### Can I combine several cities or job roles?

Yes. List several cities, or add multiple public Apna job-search URLs. The row limit applies across the whole run, and a job that appears in two searches is saved once.

#### Why did my run return 0 jobs?

The run's status message in Apify Console says why. The usual reasons: Apna lists no jobs for that keyword and city (check the spelling or try a broader keyword), an education filter was set (Apna does not publish education on its pages), or a monitoring run found nothing new since the last run.

#### How do I get only today's new jobs?

Set Posted within days to 1, or schedule the Actor with the same monitor scope and choose new and updated only. Both work together.

#### Why is a field absent from a row?

Apna did not publish that value in the source listing. The Actor omits missing values instead of guessing.

### 🔗 Other actors

- [India Jobs Feed: Internshala, Instahyre, CutShort, Apna, Shine](https://apify.com/getascraper/india-job-inventory-feed) ↗ - one feed of new, updated, and closed India jobs across several boards.
- [Internshala Scraper: Applicants per Opening & Deadline Alerts](https://apify.com/getascraper/internshala-scraper) ↗ - tracks public internships and entry-level jobs in India.
- [CutShort Jobs Scraper: India Tech Jobs & Salaries](https://apify.com/getascraper/cutshort-scraper) ↗ - collects public Indian technology and startup job listings.
- [Instahyre Jobs Scraper: India Tech Jobs & Hiring Monitor](https://apify.com/getascraper/instahyre-jobs-scraper) ↗ - monitors public Instahyre tech roles.
- [Job Bank Scraper](https://apify.com/getascraper/jobbank-scraper) ↗ - collects public Canadian job listings.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/apna-co-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Optional batch of public Apna job-search URLs. When supplied, these URLs replace generated keyword and city searches.

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

Backward-compatible single public search URL. It is added to the URL list when both are supplied.

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

Role or specialty used for generated searches when no URLs are supplied.

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

Optional cities for generated searches. Known aliases such as Bangalore and Bengaluru resolve to Apna's combined route.

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

Backward-compatible city for one generated search when Cities and aliases is empty.

## `cityAliases` (type: `array`):

Keep listings whose published location matches any city or known alias, useful with broad or supplied search URLs.

## `categories` (type: `array`):

Keep jobs whose Apna category or industry matches any value, for example Telesales or Sales & BD. The category is read from each job page, so this filter opens the job pages and runs a little slower.

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

Keep listings whose published job type, work mode, or visible work tag matches any supplied value, for example Full Time or Work from Home.

## `educationLevels` (type: `array`):

Keep jobs whose education requirement matches any value. Apna's listing pages often do not show it, which leaves 0 jobs.

## `shifts` (type: `array`):

Keep jobs whose shift matches any value, for example Day Shift or Night Shift.

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

Keep only jobs posted within this many days, for example 1 for a daily feed. The posted date is read from each job page, so a positive value opens the job pages and runs a little slower. 0 turns the filter off.

## `monitoringMode` (type: `string`):

All listings emits every matching row and its change status. New and updated only emits only first-seen or changed listings while refreshing saved state.

## `monitorScope` (type: `string`):

Optional stable name for saved monitoring state. Reuse the same name for the same search scope. Capital letters and spaces are converted to lowercase letters and hyphens.

## `resetMonitoringState` (type: `boolean`):

Start this run as a new baseline for the selected state key. This does not alter prior dataset records.

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

Include the source-published plain-text description when the listing payload contains it.

## `includeCompanyDetails` (type: `boolean`):

Include source-published organization identifiers, logo URL, and company address details when available.

## `includeLocationDetails` (type: `boolean`):

Include source-published address components and coordinates when available.

## `includeRequirements` (type: `boolean`):

Include source-published experience, education, English, shift, employment, and work-tag fields when available.

## `includeSalary` (type: `boolean`):

Include source-published minimum pay, maximum pay, and pay period when available.

## `includeContactPreferences` (type: `boolean`):

Include only source-published call and WhatsApp preference flags. The Actor never extracts phone numbers or WhatsApp identifiers.

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

Open each job page to add the posted date, expiry date, category, industry, skills, full address and pincode when Apna publishes them. Slower than a search-only run. Turned on automatically when Posted within days or Categories is set.

## `enrichEmails` (type: `boolean`):

Optional add-on. For each company, finds a contact email published on the company's own public website (for example info@ or hr@) and adds it to its job rows. Each company is looked up once per run. Not guaranteed: many employers, especially small local ones, publish no email. Billed only for companies where an email is found. Runs a little slower.

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

Hard cap across every supplied source URL. In new-and-updated-only mode, unchanged listings do not consume the cap. Free Apify plans are limited to 25 rows per run.

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

Hard cap on listing pages fetched for each search URL. Each public page typically carries about 25 listings.

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

Concurrent page requests. Lower values are gentler for scheduled collection.

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

Retry count for a failed public search page. Each retry uses a fresh connection.

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

Network routing for search requests. Apify datacenter proxy is on by default because direct connections from shared cloud IPs are often refused by Apna.

## Actor input object example

```json
{
  "startUrls": [],
  "url": "",
  "keyword": "sales executive",
  "locations": [],
  "location": "Bengaluru/Bangalore",
  "cityAliases": [],
  "categories": [],
  "jobTypes": [],
  "educationLevels": [],
  "shifts": [],
  "dateWithinDays": 0,
  "monitoringMode": "all",
  "monitorScope": "",
  "resetMonitoringState": false,
  "includeDescription": true,
  "includeCompanyDetails": false,
  "includeLocationDetails": false,
  "includeRequirements": true,
  "includeSalary": true,
  "includeContactPreferences": false,
  "includeDetails": false,
  "enrichEmails": false,
  "maxItems": 25,
  "maxPages": 20,
  "maxConcurrency": 3,
  "maxRequestRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Flat public job rows, including stable source identifiers and monitoring fields.

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

Counts of emitted, skipped, successful, and failed source pages.

# 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 = {
    "startUrls": [],
    "url": "",
    "keyword": "sales executive",
    "locations": [],
    "location": "Bengaluru/Bangalore",
    "cityAliases": [],
    "categories": [],
    "jobTypes": [],
    "educationLevels": [],
    "shifts": [],
    "dateWithinDays": 0,
    "monitoringMode": "all",
    "monitorScope": "",
    "resetMonitoringState": false,
    "includeDescription": true,
    "includeCompanyDetails": false,
    "includeLocationDetails": false,
    "includeRequirements": true,
    "includeSalary": true,
    "includeContactPreferences": false,
    "includeDetails": false,
    "maxItems": 25,
    "maxPages": 20,
    "maxConcurrency": 3,
    "maxRequestRetries": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// 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 = {
    "startUrls": [],
    "url": "",
    "keyword": "sales executive",
    "locations": [],
    "location": "Bengaluru/Bangalore",
    "cityAliases": [],
    "categories": [],
    "jobTypes": [],
    "educationLevels": [],
    "shifts": [],
    "dateWithinDays": 0,
    "monitoringMode": "all",
    "monitorScope": "",
    "resetMonitoringState": False,
    "includeDescription": True,
    "includeCompanyDetails": False,
    "includeLocationDetails": False,
    "includeRequirements": True,
    "includeSalary": True,
    "includeContactPreferences": False,
    "includeDetails": False,
    "maxItems": 25,
    "maxPages": 20,
    "maxConcurrency": 3,
    "maxRequestRetries": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# 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(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 '{
  "startUrls": [],
  "url": "",
  "keyword": "sales executive",
  "locations": [],
  "location": "Bengaluru/Bangalore",
  "cityAliases": [],
  "categories": [],
  "jobTypes": [],
  "educationLevels": [],
  "shifts": [],
  "dateWithinDays": 0,
  "monitoringMode": "all",
  "monitorScope": "",
  "resetMonitoringState": false,
  "includeDescription": true,
  "includeCompanyDetails": false,
  "includeLocationDetails": false,
  "includeRequirements": true,
  "includeSalary": true,
  "includeContactPreferences": false,
  "includeDetails": false,
  "maxItems": 25,
  "maxPages": 20,
  "maxConcurrency": 3,
  "maxRequestRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/apna-co-scraper --silent --output-dataset

```

## MCP server setup

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