Apna Jobs Scraper avatar

Apna Jobs Scraper

Pricing

from $0.48 / 1,000 item extracteds

Go to Apify Store
Apna Jobs Scraper

Apna Jobs Scraper

Search public Apna India vacancies by role and location and export titles, employers, salaries, experience, qualifications, posting dates, and canonical URLs.

Pricing

from $0.48 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Search public Apna jobs by role and Indian location, then export normalized vacancy records for recruiting research, salary analysis, and labor-market data pipelines.

The Actor reads public Apna search pages and enriches every accepted result from its public job page. Each row includes a stable job ID, title, employer, location, salary when shown, experience, qualifications, posting dates, and canonical URL.

What does Apna Jobs Scraper do?

Apna Jobs Scraper turns public vacancy pages into analysis-ready JSON, CSV, Excel, XML, or RSS output through Apify datasets.

It can:

  • search by job keyword and Indian city or region;
  • collect a specific public apna.co/jobs/... page;
  • paginate through up to 20 search-result pages;
  • enrich cards with public detail-page metadata;
  • keep only records matching the supplied keyword and location;
  • stop at an exact maximum number of useful jobs;
  • retry temporary blocks with a fresh proxy identity;
  • produce stable source IDs and canonical links for deduplication.

It does not log in, apply for jobs, access candidate profiles, or invent missing fields.

Who is it for?

Recruiters and sourcing teams

Build a structured shortlist of current public vacancies by role and location, compare employers, and identify hiring demand.

Labor-market researchers

Analyze advertised salary ranges, experience levels, qualifications, departments, and publication dates across Indian cities.

Job aggregators and HR technology teams

Feed normalized public records into a warehouse, search index, spreadsheet, or internal vacancy product.

Data and automation teams

Schedule repeat runs in Apify and compare stable jobId values in a downstream system to find additions and removals.

Why use this Actor?

  • Detail enrichment: output is not limited to card text; public JobPosting metadata supplies dates, salary units, descriptions, experience, and canonical URLs.
  • Stable identity: jobId comes from Apna's source listing identifier.
  • Fail-closed extraction: blocked pages and unrecognized HTML are errors, not misleading empty success.
  • Bounded collection: maxItems, maxPages, and retries have explicit limits.
  • Lightweight HTTP: no browser assets, images, fonts, or videos are downloaded.
  • India-aware routing: common names such as Delhi NCR and Bengaluru map to their public Apna location routes.

What Apna job data can I extract?

FieldMeaning
sourceAlways apna.co
jobIdStable source job identifier
titlePublic job title
employerHiring organization shown by Apna
locationPublic street/locality/city text
salaryMin, salaryMaxNumeric advertised range when present
salaryCurrency, salaryPeriodCurrency and source pay unit
experience, experienceMonthsDisplay requirement and structured duration
qualificationsPublic education requirement
englishLevelPublic English requirement when shown
employmentTypeFull-time, part-time, or another published type
workModeOffice, work-from-home, remote, or hybrid tag when shown
shiftPublished shift
department, categorySource industry and occupational category
descriptionPublic plain-text description when enabled
datePosted, validThroughSource posting and validity metadata
canonicalUrlCanonical public job page
sourceSearchUrl, sourcePositionSearch provenance and position
scrapedAtUTC collection timestamp

Optional values are omitted when Apna does not publish them.

Getting started

  1. Open the Actor input page.
  2. Enter a keyword, a location, or one or more public Apna search URLs.
  3. Keep maxItems small for the first run.
  4. Leave the default Apify proxy enabled.
  5. Click Start.
  6. Open the default dataset when the run finishes.
  7. Export the table or connect it to your workflow.

A useful first input is:

{
"keyword": "delivery",
"location": "Delhi NCR",
"maxItems": 10,
"maxPages": 3,
"includeDescription": false,
"proxyConfiguration": { "useApifyProxy": true }
}

Input parameters

InputTypeDefaultDescription
startUrlsarrayemptyPublic https://apna.co/jobs/... search pages
keywordstringemptyEvery word must match public card text
locationstringemptyCity or region used for discovery and filtering
includeDescriptionbooleantrueInclude the public detail-page description
maxItemsinteger25Useful records to save, from 1 to 1,000
maxPagesinteger5Search pages per URL, from 1 to 20
maxRequestRetriesinteger3Fresh-session retries, from 0 to 5
proxyConfigurationobjectApify proxyNetwork route used for Apna requests

Provide at least one of startUrls, keyword, or location.

Supplied URLs must use HTTPS, the apna.co host, and the /jobs path. Keyword and location filters are still applied when you provide an explicit URL.

Search by role and location

When a location is supplied, the Actor opens that public location feed and applies the keyword to titles, employers, locations, and visible work tags.

For example:

{
"keyword": "sales",
"location": "Mumbai",
"maxItems": 50,
"maxPages": 5
}

This approach preserves source-visible results and avoids pretending that an unsupported free-text role is an official Apna category.

Collect a specific Apna search page

Use startUrls when you already know the exact category or location page:

{
"startUrls": [
{ "url": "https://apna.co/jobs/freshers-jobs-in-delhi_ncr" }
],
"maxItems": 25,
"includeDescription": false
}

The Actor validates every URL before requesting it.

Output example

A current output row has this shape:

{
"source": "apna.co",
"jobId": "357713384",
"title": "Delivery Associate",
"employer": "Blinkit Private Limited",
"location": "Janakpuri, New Delhi, Delhi, India",
"salaryMin": 50000,
"salaryMax": 125000,
"salaryCurrency": "INR",
"salaryPeriod": "MONTH",
"experience": "Any experience",
"qualifications": "10th or Below 10th",
"englishLevel": "No English Required",
"employmentType": "PART TIME",
"shift": "Day Shift",
"department": "Delivery / Driver / Logistics",
"category": "Delivery",
"datePosted": "2026-09-05T10:44:36.798Z",
"validThrough": "2026-09-20",
"canonicalUrl": "https://apna.co/job/new-delhi/delivery-associate-357713384",
"sourceSearchUrl": "https://apna.co/jobs/jobs-in-delhi_ncr",
"sourcePosition": 5,
"scrapedAt": "2026-09-14T20:42:18.389Z"
}

Titles, employers, dates, and availability can change. Treat this as a schema example, not a guaranteed live vacancy.

How much does it cost to extract Apna jobs?

The Actor uses pay-per-event pricing:

  • a $0.0005 start event for each run;
  • the Free tier pays $0.00092 per saved job;
  • the Bronze tier pays $0.0008 per saved job;
  • the Silver tier pays $0.000624 per saved job;
  • Gold, Platinum, and Diamond pay $0.00048 per saved job.

At Bronze pricing, 10 saved jobs cost about $0.0085, 100 cost about $0.0805, and 1,000 cost about $0.8005. Apify platform usage and proxy transfer may also apply according to your plan. Failed, duplicate, filtered, and skipped records do not create item events.

Scheduling and monitoring

Use an Apify Schedule for daily or weekly collection. Send each run's dataset to Google Sheets, a webhook, Make, Zapier, or your database.

This Actor does not persist a change history. For monitoring, use jobId as the source key in your destination and compare successive datasets. A missing record can mean the listing expired, moved beyond the requested page range, or no longer matched the filters.

Export and integration workflows

Common workflows include:

  1. Salary research: group salaryMin and salaryMax by location, category, and employer.
  2. Qualification demand: count qualifications, experienceMonths, and englishLevel values.
  3. Hiring signals: aggregate newly observed jobId values by employer and week.
  4. Vacancy feed: index canonical URLs and titles in an internal search product.
  5. Spreadsheet review: export the overview table to CSV or Excel.

Run through the Apify API with cURL

Replace YOUR_TOKEN with an Apify API token:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~apna-india-job-listings-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword":"delivery","location":"Delhi NCR","maxItems":10}'

Use the returned run's defaultDatasetId to download items.

Run with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/apna-india-job-listings-scraper').call({
keyword: 'sales',
location: 'Mumbai',
maxItems: 25,
includeDescription: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Run with Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/apna-india-job-listings-scraper").call(
run_input={
"keyword": "freshers",
"location": "Pune",
"maxItems": 25,
"includeDescription": False,
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with MCP and AI agents

Add this Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/apna-india-job-listings-scraper"

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

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/apna-india-job-listings-scraper"
}
}
}

Example prompts:

  • “Find up to 20 delivery jobs in Delhi NCR and return employer, salary, and qualifications.”
  • “Extract current fresher jobs from this public Apna search URL and group them by education requirement.”
  • “Build a Mumbai sales-vacancy dataset with posting dates and canonical links.”

Reliability, retries, and proxies

Apna may reject direct cloud traffic. The input therefore enables Apify proxy by default. Development tests found the complete public HTML route through datacenter proxy; no automatic residential or browser fallback is used.

A temporary 403, 429, 492, 5xx, timeout, or reset can trigger a bounded retry with a fresh proxy session. Deterministic bad URLs and malformed pages are not retried blindly.

For stable production use:

  • keep the default proxy enabled;
  • use moderate page limits;
  • avoid many overlapping schedules;
  • inspect warnings for skipped detail pages;
  • retry a failed run later rather than raising retries to the maximum immediately.

Limits and expected behavior

  • Public search pages typically expose about 25 cards per page.
  • maxPages limits discovery, so a rare keyword may not appear in a shallow run.
  • Output reflects what was publicly visible at collection time.
  • Salary, qualifications, and dates are omitted when the source omits them.
  • One search card normally requires one detail-page request.
  • Listings can expire between the search and detail requests.
  • Apna can change routes, markup, JSON-LD, or anti-bot behavior.
  • The Actor supports public jobs only; it does not submit applications.

Troubleshooting

The run says no jobs matched

Check the spelling, use a broader keyword, increase maxPages, or try the public Apna URL in startUrls. A successful HTTP response without recognizable cards is treated as an error.

A URL is rejected before the run starts

Use a public HTTPS URL on apna.co whose path begins with /jobs. Individual /job/... detail URLs are not search inputs.

Requests return HTTP 492 or another block

Restore the default Apify proxy configuration and run again. Do not disable proxy routing for production unless direct access is known to work from your environment.

Some optional fields are missing

The source did not publish them for that job, or the relevant detail element was absent. The Actor omits missing values rather than guessing.

Fewer records were saved than requested

Filters may remove cards, detail pages may expire, or the page limit may be exhausted. Review logs and increase maxPages within the documented limit if appropriate.

Data handling, AI, and storage

The Actor does not use AI or send input or scraped data to an AI provider. It makes public Apna HTTPS requests through the user-selected Apify proxy configuration and writes validated jobs only to the run's default dataset. It keeps no external cache or separate copy. Datasets, key-value store records, and logs follow the retention and deletion controls in your Apify account. Logs contain operational status, public source URLs, and job IDs; they do not intentionally include secrets or private account data.

Only collect public data for lawful purposes. Review Apna's current terms, robots guidance, and applicable employment, privacy, database, and data-protection rules before production use.

Job descriptions can contain personal or contact information supplied by an employer. Minimize collection, control access, set retention limits, and avoid using public vacancy data for unsolicited messaging, discrimination, candidate profiling, or decisions with legal effects.

You are responsible for your inputs, collection frequency, downstream use, and compliance. This Actor is not affiliated with or endorsed by Apna.

Choose this Actor when Apna is the required source and source-specific salary, requirement, and canonical-link fields matter.

FAQ

Does it need an Apna account?

No. It uses public search and job pages without login.

Does it scrape candidate profiles?

No. It only processes public job vacancies.

Can I supply more than one search URL?

Yes. maxItems applies across all supplied URLs. Duplicate source job IDs are saved once.

Can I search the whole of India?

Yes. Supply only a keyword. Adding a location makes the scope more specific and usually more useful.

Does it guarantee every vacancy on Apna?

No. It collects the requested public pages within your item and page limits.

Can I disable descriptions?

Yes. Set includeDescription to false for smaller records and lower transfer.

What is the deduplication key?

Use jobId. It is the stable source listing identifier present in the canonical URL and JobPosting metadata.

Are empty runs charged per item?

No item event is charged unless a validated job record is saved. The one-time start event still applies.