Apna Jobs Scraper | 50 Categories, 23 Fields, Monitor Mode avatar

Apna Jobs Scraper | 50 Categories, 23 Fields, Monitor Mode

Pricing

from $0.60 / 1,000 jobs

Go to Apify Store
Apna Jobs Scraper | 50 Categories, 23 Fields, Monitor Mode

Apna Jobs Scraper | 50 Categories, 23 Fields, Monitor Mode

Scrape live job listings from Apna.co, India's largest blue-collar and early-career job app. Title, company, salary, location, tags by city, category and job type. No login, no anti-bot, pay per job. Works in Claude, ChatGPT & any MCP AI agent.

Pricing

from $0.60 / 1,000 jobs

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

28

Total users

7

Monthly active users

4 days ago

Last modified

Share

250 Apna jobs in 94 seconds: a recorded run returned 250 all-India Apna.co job listings in 93.9 seconds

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors. This actor ranks #3 for "apna jobs" in Apify Store search.

Apna.co is India's big job app for entry level, field and blue collar work: telecallers, delivery riders, sales executives, back office staff, drivers, technicians and nurses, across metros and smaller cities alike. This actor turns Apna's public job listings into clean rows with title, company, location, salary range and the tag chips Apna shows, and can add the full description and structured salary from each job's own page.

Why choose this actor?

  • 250 jobs in about 90 seconds, 10 fields on every one. On 1 Oct 2026 a run of the all-India feed returned 250 jobs in 93.9 seconds, and all 250 rows had every listing field filled. It reads Apna's public pages over plain HTTP: no login, no cookies, no browser.
  • Only new jobs on repeat runs. Turn on monitorMode and the actor remembers up to 50,000 job IDs it has delivered to your account and skips them next time. A job you already received is never sent or charged again.
  • From $0.60 per 1,000 jobs. You pay per job saved, plus Apify's start event of $0.005 per run at the 1 GB memory this actor uses. The summary row, jobs already seen in monitor mode and failed pages are never charged.

Run it on Apify

Part of The Mine Works Jobs and hiring family: Foundit Monster India Jobs, Hirist Jobs Scraper, India Jobs MCP, Naukri Jobs Scraper, Shine.com Jobs Scraper, Internshala Scraper.

Try it in one minute

Paste this into the JSON tab of the input page and press Start. It returns 10 Bengaluru jobs in a few seconds: our own daily runs of 3 Bengaluru jobs finish in 4 to 10 seconds on Apify.

{
"city": "Bangalore",
"maxJobs": 10
}

The actor takes filters, not Apna links or search words, because Apna's website has no keyword search. Pick a city (a plain name such as Pune; Bangalore, Bombay, Calcutta, Delhi, Mysore and Allahabad style names are mapped to Apna's own city pages for you), or a category from Apna's 50 departments, or one of the job type, education, night shift, work from home, freshers or female candidate options. Then narrow with keyword, which keeps only titles that contain your word.

Apify's free plan includes $5 of credit every month, which covers about 4,990 results at this actor's price.

Copy to your AI assistant

themineworks/apna-jobs-scraper on Apify. It browses public Apna.co job listings (India entry level and blue collar jobs) by city, category, job type, education or audience, and returns one row per job with title, company, location, salary range text, tag chips and job link, plus description, structured salary, experience and dates when includeFullDescription is on. Call ApifyClient("TOKEN").actor("themineworks/apna-jobs-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: nothing (empty input reads the all-India feed). Optional: city (string), category (one of 50 Apna department slugs such as "telecaller_bpo" or "dep_delivery_driver_logistics"), jobType ("full_time" or "part_time"), educationLevel ("10th_pass" or "12th_pass"), nightShiftOnly, workFromHomeOnly, freshersOnly, femaleOnly (booleans, default false), keyword (title contains), maxJobs (default 5, maximum 1000), includeFullDescription (default false), monitorMode (default false), proxyConfiguration (default no proxy; keep it). Only one of category, jobType, educationLevel, the four flags or city is used to browse, in that order; city and keyword then filter the results, other unused filters are ignored. Rows with a _type field are run summaries, not jobs. Full spec: GET https://api.apify.com/v2/acts/themineworks~apna-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations

Key features

  • 10 fields on every job from the listing card, rising to 23 with includeFullDescription: description, posted and closing dates, structured salary with its unit, months of experience, industry, occupation, address and more, read from the schema.org JobPosting data on each job's page.
  • 50 Apna departments in the category list, from Telecaller / BPO and Delivery, Driver & Logistics to Healthcare, Retail and Software Engineering.
  • 8 browse filters and 2 narrowing filters. Apna's site serves one filter per page, so the actor browses by the most specific one you set and then narrows by city and keyword on its side.
  • 25 jobs per page, up to 60 pages and 1,000 jobs per run. Jobs are de-duplicated by Apna's job ID within the run.
  • Monitor mode for daily or hourly feeds of new jobs only.
  • A summary row at the end of every run with jobs requested, delivered, failed pages and charged count. It is never charged.

How to use it

Basic: one city

{
"city": "Pune",
"maxJobs": 100
}

With only a city set, the actor browses Apna's page for that city, 25 jobs per page, until it has 100.

A category in one city, narrowed by a word

{
"category": "telecaller_bpo",
"city": "Pune",
"keyword": "outbound",
"maxJobs": 100
}

Apna's site cannot combine a category and a city on one page, so the actor browses the Telecaller / BPO feed for all of India and keeps only jobs whose location text contains "pune" and whose title contains "outbound". Narrowing can only remove jobs, so a narrow combination may return fewer than maxJobs even after reading all 60 pages.

Daily new-job alerts

{
"category": "dep_sales_bd",
"city": "Hyderabad",
"maxJobs": 200,
"monitorMode": true
}

Save this as a task and schedule it daily, for example with the cron 0 8 * * *. The first run records a baseline. Every run after that delivers only jobs you have not received before, and the summary row shows how many were skipped. The memory of seen jobs is shared by every run of this actor on your account, so a job delivered by one task is skipped by another.

Full descriptions and structured salary

{
"category": "dep_delivery_driver_logistics",
"city": "Bengaluru",
"maxJobs": 200,
"includeFullDescription": true
}

Each job gets one extra request to its own page, which adds the description, structured salary (salary_min, salary_max, salary_unit, salary_currency), experience_months, date_posted, valid_through, industry, occupational_category, address and direct_apply. It is slower, and for a few hundred jobs or more with this on, raise the run memory to 2,048 MB in Run options.

Work from home jobs

{
"workFromHomeOnly": true,
"keyword": "customer",
"maxJobs": 100
}

The four audience options (nightShiftOnly, workFromHomeOnly, freshersOnly, femaleOnly) each map to one Apna page. Set only one: if you set two, the actor uses the first in its order and ignores the other. The same goes for jobType and educationLevel. Only city and keyword narrow the results on top.

Wage benchmarking by category

{
"category": "dep_retail_ecommerce",
"maxJobs": 1000
}

Run one category at a time and compare salary_text by city_slug, or turn on includeFullDescription for numeric salary_min and salary_max. Repeat the run weekly to watch pay move.

Input parameters

ParameterTypeDefaultWhat it does
citystringnoneA city name such as Pune or Bangalore. Used to browse when no other filter is set; otherwise it narrows results to jobs whose location text contains it.
categorystring, one of 50noneAn Apna department, such as telecaller_bpo, delivery_person, dep_sales_bd or dep_customer_support. Takes first priority for browsing.
jobTypestring: full_time or part_timenoneBrowse full time or part time jobs. Used only if category is empty.
educationLevelstring: 10th_pass or 12th_passnoneBrowse jobs Apna tags for that minimum education. Used only if the filters above are empty.
nightShiftOnlybooleanfalseBrowse night shift jobs.
workFromHomeOnlybooleanfalseBrowse work from home jobs.
freshersOnlybooleanfalseBrowse jobs open to freshers.
femaleOnlybooleanfalseBrowse jobs open to or preferring female candidates.
keywordstringnoneKeep only jobs whose title contains this text, ignoring case.
maxJobsinteger, 1 to 1,0005Cap on jobs delivered. Set it; the default is only 5.
includeFullDescriptionbooleanfalseOpen each job's own page for the description and 12 more structured fields. One extra request per job.
monitorModebooleanfalseDeliver only jobs not delivered to your account in an earlier run.
proxyConfigurationobject{"useApifyProxy": false}Leave it off. See "Do I need a proxy?" below.

The browse order is category, then jobType, educationLevel, nightShiftOnly, workFromHomeOnly, freshersOnly, femaleOnly, and last city. With nothing set, the actor reads Apna's all-India feed.

The input form in the Apify Console starts with Pune, Software Engineering, Full time, 10th pass and the keyword delivery filled in. Run as is, that browses Software Engineering jobs and keeps only those in Pune with "delivery" in the title, which may be none. Clear the fields you do not want before you start. Runs through the API or an AI assistant get only what you send.

What data do you get?

One row per job. A field Apna does not publish for a job is left out of that row rather than sent empty.

From the listing card (every row): job_id, title, company, location as Apna writes it (for example "Kothrud, Pune" or "All areas in Hyderabad Region"), city_slug from the job link, salary_text as shown on the card, tags (the chips Apna shows, see below), company_logo, job_url and scraped_at.

With includeFullDescription on: description, employment_type (such as FULL_TIME), date_posted, valid_through, industry, occupational_category, experience_months, salary_min, salary_max, salary_unit (such as MONTH), salary_currency, address and direct_apply.

Run rows: every run ends with a _type: "summary" row (jobs requested, delivered and charged, failed pages, the filter used, monitor counts) and, when at least one job was delivered, a _type: "info" row. Neither is charged. Filter on _type to keep only jobs.

Tag chips we saw in 695 rows on 1 Oct 2026: Full Time, Part Time, Field Job, Work from Office, Night Shift, Any experience, Freshers only, Min. 6 months up to Min. 10 years, and the English level (No English Required, Basic English, Good (Intermediate / Advanced) English).

What else we saw, so you can plan for it:

  • salary_text has no unit on the card. All 38 jobs in our full description sample gave salary_unit MONTH, but some cards appear to show yearly packages, such as "₹5,00,000 to ₹10,00,000" for a field manager. With includeFullDescription on, salary_max can be higher than the card's top figure: one telecaller job showed ₹12,000 to ₹85,000 on the card and salary_max 103000 on its page.
  • company_logo is the first image on the card. About 1 row in 4 (80 of 345 in one run) had no company logo, and the field then holds Apna's "Work from office" badge image instead.
  • city_slug comes from the job link and can be a suburb or district, such as hoskote for a job listed as "All areas in Bengaluru/Bangalore Region".
  • description is plain text with HTML entities such as   left in. In our sample the median was 925 characters.
  • When a job's own page cannot be read, the job is still delivered with its card fields and charged like any other job. In our full description test through a datacenter proxy, 38 of 100 jobs got the extra fields; see "Do I need a proxy?".

Stable fields for automations

These 10 fields were present, and not empty, in all 695 job rows from our three 1 Oct 2026 runs. Their names will not change, so a Sheet, Zap, Make scenario or n8n flow can map to them safely.

FieldWhat it is
job_idApna's job ID. Use it as the unique key.
titleJob title as posted
companyHiring company or recruiter
locationArea and city as shown on the card
city_slugCity or locality part of the job link
salary_textPay range as shown on the card, without a unit
tagsList of tag chips
company_logoImage link from the card (see note above)
job_urlLink to the job on apna.co
scraped_atWhen the row was collected, ISO 8601 in UTC

Output examples

Real rows from our 1 Oct 2026 runs. The description is cut to its first words.

A listing card row from the all-India feed

{
"job_id": "45932498",
"title": "Registrar / Junior Anaesthetist",
"company": "International Knee & Orthopaedic Centre",
"location": "HSR Layout, Bengaluru/Bangalore",
"city_slug": "bengaluru-bangalore",
"salary_text": "₹1,00,000 - ₹1,49,999",
"tags": ["Work from Office", "Full Time", "Min. 2 years", "Good (Intermediate / Advanced) English"],
"company_logo": "https://apna-organization-logos.gumlet.io/production/logos/7eb074b0-9cb7-4240-aae4-ed3cf0c10742/61c5e47696bead7dc1713e69.jpg?w=128",
"job_url": "https://apna.co/job/bengaluru-bangalore/registrar-junior-anaesthetist-45932498",
"scraped_at": "2026-10-01T13:54:24.258Z"
}

A field job whose card shows a yearly package

{
"job_id": "898583317",
"title": "Assistant General Manager",
"company": "Cadila Pharmaceuticals Limited",
"location": "All areas in Hyderabad Region",
"city_slug": "hyderabad",
"salary_text": "₹5,00,000 - ₹10,00,000",
"tags": ["Field Job", "Full Time", "Min. 1 year"],
"company_logo": "https://apna-organization-logos.gumlet.io/production/63084769fec4fe072bcdf94e?w=128",
"job_url": "https://apna.co/job/hyderabad/assistant-general-manager-898583317",
"scraped_at": "2026-10-01T13:54:21.137Z"
}

A telesales job with includeFullDescription on

{
"job_id": "696773884",
"title": "Telesales Manager",
"company": "Galaxy HR Solutions",
"location": "Kothrud, Pune",
"city_slug": "pune",
"salary_text": "₹40,000 - ₹65,000",
"tags": ["Work from Office", "Full Time", "Min. 5 years", "Good (Intermediate / Advanced) English"],
"company_logo": "https://apna-organization-logos.gumlet.io/production/logos/80713705-9788-42c2-b828-cc5361023a8f/66c82cf0ce68242fd2c0da80.png?w=128",
"job_url": "https://apna.co/job/pune/telesales-manager-696773884",
"scraped_at": "2026-10-01T13:47:12.678Z",
"description": "Designation: Telesales Manager Location: Pune Job Description:  1. Lead, supervise and motivate telesales team to achieve individual and team advertisement sales target...",
"employment_type": "FULL_TIME",
"date_posted": "2026-09-26T05:56:12.796Z",
"valid_through": "2026-10-11",
"industry": "Sales & BD",
"occupational_category": "Telesales",
"experience_months": 60,
"salary_min": 40000,
"salary_max": 70000,
"salary_unit": "MONTH",
"salary_currency": "INR",
"address": "Kothrud, Pune, Maharashtra, India",
"direct_apply": true
}

The summary row from the 250 job run

{
"_type": "summary",
"facet": "(all-India feed)",
"jobs_requested": 250,
"low_memory_warning": false,
"jobs_scraped": 250,
"jobs_failed": 12,
"charged_for": 250,
"pages_fetched": 22,
"ended_on_deadline": false,
"monitor": false,
"scraped_at": "2026-10-01T13:55:47.296Z"
}

jobs_failed counts failed pages and any row that could not be saved. Here it is the 12 pages Apna refused through a datacenter proxy; the run skipped them and carried on. With monitorMode on, the summary also shows previously_seen, new_this_run and skipped_duplicates.

Pricing

Pay per event: you are charged for each job saved to your dataset, plus Apify's standard start event. The price per job drops as your Apify plan goes up.

EventFree planBronze (Starter)Silver (Scale)Gold and above (Business)
job-scraped, per job$0.001$0.0009$0.00075$0.0006
Per 1,000 jobs$1.00$0.90$0.75$0.60
apify-actor-start, per run$0.005 per GB of memory$0.005 per GB$0.005 per GB$0.005 per GB
  • Start fee: $0.005 per GB of run memory, with a minimum of one event. This actor runs with at least 1,024 MB, so a run at the default memory pays $0.005. If you raise memory to 2,048 MB for a large full description run, the start fee is $0.01.
  • Never charged: the summary and info rows, jobs already delivered in monitor mode, jobs repeated on a later page of the same run, jobs removed by your city or keyword filter, and refused or empty pages.
  • Charged at the normal price: a job whose own page could not be read in full description mode. It arrives with its card fields only.
  • Spending cap: if you set a maximum cost per run in Apify, the actor stops once that budget is used, so you never receive rows you were not charged for and never pay past your cap.
  • No price change is scheduled. The current prices have applied since 17 Sep 2026.

Worked examples on the Free plan: 100 jobs cost $0.10 plus the $0.005 start fee, and 1,000 jobs cost $1.00 plus $0.005. On Gold, 1,000 jobs cost $0.60 plus $0.005.

FAQ

What is Apna.co? Apna is an Indian job app built for entry level, field and blue collar hiring: telecalling, delivery, sales, back office, drivers, retail, healthcare staff and trades. It is strong in tier 2 and tier 3 cities where Naukri and LinkedIn have less coverage.

How many jobs can I get? Up to 1,000 per run. The actor reads up to 60 pages of 25 jobs and stops early when two pages in a row bring nothing new. In our 1 Oct 2026 test the all-India feed still had new jobs on page 36. For more than 1,000, split the work across cities or categories.

Can I search by keyword? Not on Apna itself: its website has no keyword search. keyword filters the titles of the jobs the actor browses. For best results, pick the closest category and add a short keyword.

Can I combine a city and a category? Yes. Apna's pages take one filter at a time, so the actor browses by category and keeps jobs whose location contains your city. The same works for keyword. Other combinations do not: if you set category and freshersOnly, for example, only category is used. To get freshers jobs in one category, run freshersOnly with a keyword instead.

How fresh is the data? Each run reads Apna live when it starts. There is no cache. With includeFullDescription on, date_posted and valid_through show each job's age and closing date.

Do I need an Apna account, cookies or an API key? No. The actor reads the same public pages any visitor sees, with no login. You only need an Apify account.

Do I need a proxy? No, and we suggest you leave it off, which is the default. Our scheduled runs on Apify without a proxy have all succeeded. Through Apify's datacenter proxy, Apna refused many pages with HTTP 492 on 1 Oct 2026: 12 of 22 in our best run and all of the first 6 in another, which ended with no jobs. The actor skips a refused page and stops after 6 refusals in a row, so a blocked run costs only the start fee.

How does monitor mode decide what is new? It keeps a list of the job IDs it has delivered to your Apify account, up to 50,000, and skips any job on that list. The list is shared by every run of this actor on your account, whatever the input. If the list cannot be read, that run delivers everything and the summary shows monitor_degraded: true.

Why did my run return fewer jobs than maxJobs? Either the feed ran out, your city or keyword filter removed most jobs, or monitor mode skipped jobs you already had. The summary row shows the filter used and the counts. Only delivered jobs are charged.

Can I run it on a schedule? Yes. Save your input as a task, then add a schedule in Apify Console under Schedules, for example daily at 08:00. Turn on monitorMode so each run brings only new jobs.

Which formats can I export? JSON, CSV, Excel, XML, RSS or HTML from the run's Storage tab, or through the Apify API. In CSV and Excel, list fields such as tags are split into numbered columns (tags/0, tags/1 and so on).

Can I use it from Claude, ChatGPT or another AI assistant?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/apna-jobs-scraper.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http apna-jobs-scraper "https://mcp.apify.com/?tools=themineworks/apna-jobs-scraper".

Is it legal to scrape Apna? The actor collects only public job listings, the same pages anyone can view without logging in. It collects nothing about job seekers. Listings can include an employer's address, which is business information. You are responsible for how you use the data, including Apna's terms and data protection law such as GDPR, CCPA and India's DPDP Act. This is general information, not legal advice.

Integrations

  • Google Sheets: send each run's dataset to a sheet with Apify's Google Sheets integration.
  • Make, Zapier and n8n: start a run and read the jobs with the official Apify modules and nodes.
  • Webhooks: have Apify call your URL when a run finishes, then fetch the dataset.
  • API: start runs and read results over HTTP, or with the Python and JavaScript clients.
  • MCP clients: Claude, ChatGPT, Cursor and other MCP clients can call the actor through https://mcp.apify.com.

More from The Mine Works

Jobs and hiring

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

More tools

Support

Found a bug or need a field we do not return? Open an issue in the Issues tab. Want a job board or data source we do not cover yet? Email dmineworks@gmail.com. A guide for this actor also lives at themineworks.com.

Apna Jobs Scraper turns Apna.co's public listings into clean job rows by city, category or audience, with new-job monitoring and pay per job from $0.60 per 1,000.