Apna Jobs Scraper — Salary, Shift & Contact
Pricing
from $0.80 / 1,000 job scrapeds
Apna Jobs Scraper — Salary, Shift & Contact
Scrape apna.co jobs — title, employer, salary, shift, department, education, English level, applicant counts. Category and city search. No login.
Pricing
from $0.80 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Apna Jobs Scraper — India Jobs, Salary, Shift & Employer Contact
Scrape job postings from apna.co, India's largest entry-level and blue/grey-collar job board — no login, no cookies, no proxy, no browser. Pick categories and cities, or paste listing / job URLs, and get back 35 structured fields per job: employer, full postal address with pincode, salary band, shift, department and role category, and the screening requirements apna asks for that most job feeds throw away — education, English level, experience and stated gender preference — plus how many people have already applied. Schedule it and only new jobs are billed.
Why Use This Scraper?
- Screening fields, not just listings.
education,englishLevel,experienceRequiredandshiftare what actually decide whether a candidate can take the job. They live in apna's own panels, not in the schema.org block, and they are read here by anchoring on the visible labels. - Full postal address, including pincode.
address,location,regionandpostalCodecome straight from apna's structured data — enough to map or route on. - Live competition signal.
applicantCountshows how many people have already applied to that exact posting. - Real coverage. 58 categories × 42 verified cities. apna claims 95,000+ live postings.
- The city names people actually type.
Bangalore,DelhiandGurgaonall fail on apna's own URLs; this actor maps them to the slugs that work. - No proxy needed. apna answers a direct request, so runs are fast and you are not burning proxy budget.
- Only-new monitoring. Flip
monitorModeon a schedule and already-delivered job IDs are skipped — not fetched, not billed. Name each watch withmonitorStateNameif you run more than one.
Overview
apna.co is where most of India's non-white-collar hiring happens: delivery, retail, back office, field sales, telecalling, security, beauty, driving, plus entry-level roles filtered by 10th/12th pass.
This actor walks apna's category landing pages (/jobs/{category}-jobs, optionally narrowed to a city), harvests the posting URLs, then reads each posting's own page — where apna publishes a complete schema.org JobPosting block alongside the panels that carry the screening requirements.
Listing cards are deliberately not parsed: apna's markup is emotion-generated and its class names change on every deploy, while the detail page's structured data is a published contract.
Supported Inputs
| Input type | Pattern | Example |
|---|---|---|
| Category | apna's category slug | back-office, delivery-person, telecalling-bpo |
| City | common name or apna slug | Mumbai, Bangalore, Delhi, bengaluru |
| Listing URL | https://apna.co/jobs/{category}-jobs[-in-{city}] | https://apna.co/jobs/back-office-jobs-in-mumbai |
| Direct job URL | https://apna.co/job/{city}/{slug}-{id} | https://apna.co/job/thane/back-office-coordinator-525613186 |
Use Cases
- Blue/grey-collar recruitment intelligence — who is hiring, for what shift, at what pay, in which pincode.
- Wage benchmarking — salary bands by category and city across thousands of live postings.
- Staffing and gig-platform sourcing — find employers hiring at volume in a specific area.
- Labour-market research — education and English-level requirements by role and region.
- Job aggregation — feed a candidate-facing app with fresh postings by category and city.
How It Works
- Input — pick categories and cities, paste listing or job URLs, or leave filters empty for apna's whole board
- Resolve — city names are mapped to the slugs apna serves; unknown values are reported rather than silently ignored
- Walk listings — pages
?page=Nat 25 postings per page, cycling between your category/city pairs a page at a time so no single one uses up the item budget - Read each posting — the detail page's
JobPostingstructured data plus the label-anchored requirement panels - Filter / monitor — optional keyword and posted-within windows; already-seen IDs are skipped when monitoring is on
- Output — one row per posting, as JSON or CSV
Input Configuration
| Field | Type | Required | Notes |
|---|---|---|---|
categories | string[] | no | apna category slugs. Empty = all 58 categories. |
cities | string[] | no | Empty = all-India. Common names are mapped (Bangalore → bengaluru, Delhi → new-delhi, Gurgaon → gurgaon-gurugram). |
startUrls | string[] | no | Job URLs and/or listing URLs (/jobs/{category}-jobs[-in-{city}]). URLs alone do not walk the rest of the board. |
keyword | string | no | Keep rows whose title or company contains this text. apna has no keyword search, so this is applied after the detail page is read. |
dateWithinDays | integer | no | Keep postings whose postedDate is within this many days. 0 = off. Rows with no date are dropped when set. |
enrichEmails | boolean | no | Experimental. Discovers an employer website from the company name. Lower hit rate here than on white-collar boards — see the FAQ. Default false. |
monitorMode | boolean | no | Only return (and bill) jobs not already delivered to this account. Default false. |
monitorStateName | string | no | Name a watch so several schedules keep separate seen-ID lists. |
emitBaseline | boolean | no | First monitoring run: true (default) emits current matches; false seeds silently. |
includeUnchanged | boolean | no | Monitoring: also re-emit already-seen jobs, tagged changeType. Billed. Default false. |
resetMonitoringState | boolean | no | One-shot: clear the seen-ID list at the start of this run. |
maxItems | integer | no | Hard cap on emitted rows. Skipped monitor IDs and filter misses do not consume it. Default 1000. Free-tier runs are capped at 100. |
maxConcurrency | integer | no | Parallel detail fetches. Default 10. |
proxy | object | no | Not needed. Off by default. |
Example input
{"categories": ["back-office", "delivery-person"],"cities": ["Mumbai", "Bangalore"],"maxItems": 1000}
Output Overview
One row per posting. 35 fields, all flat except skills, benefits and highlights.
Output Sample
{"type": "job","source": "apna","jobId": "525613186","jobUrl": "https://apna.co/job/thane/back-office-coordinator-525613186","title": "Back Office Coordinator","companyName": "Radiance","location": "Thane","region": "Maharashtra","address": "RADIANCE GROUP, shil, opp. Bharat gear company, Dawle Village, Kausa, Mumbra, Thane, Maharashtra, India","postalCode": "400076","country": "IN","salaryMin": 120000,"salaryMax": 149000,"salaryCurrency": "INR","salaryPeriod": "MONTH","employmentType": "FULL_TIME","department": "Admin / Back Office / Computer Operator","roleCategory": "Back Office","shift": "Day Shift","experienceRequired": "Any experience","education": "Graduate","englishLevel": "Basic English","workLocationType": "Work from Office","genderPreference": "Female","skills": [],"applicantCount": 93,"benefits": ["Flexible Working Hours"],"highlights": [],"postedDate": "2026-09-02T12:00:38.539Z","validThrough": "2026-09-17","directApply": true,"description": "Key Responsibilities: • Vendor identification & development • Procurement of civil/construction materials …","scrapedAt": "2026-09-08T21:12:44.011Z"}
Key Output Fields
| Field | Type | Notes |
|---|---|---|
jobId | string | apna's own numeric id. Unique site-wide — safe as a dedup key. |
salaryMin / salaryMax / salaryPeriod | number / string | Reported exactly as apna publishes them. salaryPeriod is almost always MONTH. See the FAQ before treating it as verified. |
education / englishLevel / experienceRequired | string | null | apna's stated screening bar. Read from the posting's own panels. |
genderPreference | string | null | Some apna employers state one. Reported as published — see the Disclaimer. |
shift | string | null | Day Shift / Night Shift. |
workLocationType | string | null | Work from Office, Work from Home, Field Job or Hybrid. |
applicantCount | number | null | How many have applied. null on postings too new to have any. |
postalCode / address | string | null | Full street address and pincode from apna's structured data. |
validThrough | string | null | When apna expires the posting. |
benefits / highlights | string[] | apna's own badges, e.g. Flexible Working Hours, Urgently hiring. |
FAQ
Do I need a login, cookie or proxy? No. apna serves every listing and posting page server-rendered to a plain request. The proxy input exists only for callers who need a specific egress IP.
The salary figures look too high for the role — is the scraper wrong?
No. apna labels these monthly in both its own interface and its structured data, and this actor passes them through unchanged. Some employers clearly enter an annual figure into a monthly field — one Thane back-office posting reads "₹1,20,000 - ₹1,49,000 monthly" on apna itself. Treat salaryPeriod as apna's label rather than a verified fact, and sanity-check outliers against the role. Re-basing the numbers here would invent a figure apna never published.
Why is applicantCount sometimes null?
apna only shows it once a posting has applicants, so brand-new postings have none.
Why did asking for two cities return only one?
Because maxItems was smaller than one listing page. apna serves 25 postings per page, so a cap below 25 fills from the first category/city pair before the next is reached. Above that, the crawl cycles between pairs a page at a time.
Why do Bangalore and Gurgaon need mapping?
apna 404s on bangalore, gurgaon and gurugram, and a bare delhi returns a page with no postings. The working slugs are bengaluru, gurgaon-gurugram and new-delhi. You can type either form.
How good is the email enrichment here? Lower than on white-collar boards, and deliberately opt-in. apna never publishes an employer website, so a domain has to be discovered from the company name — and many apna employers are small local businesses with no web presence at all. You are only billed for emails actually found.
Does monitoring charge for jobs I already have?
No. In monitorMode an ID already in your baseline is skipped before the detail fetch, so it is not billed. maxItems counts only rows that land in the dataset. The first run after you turn monitoring on returns the current matches and builds that baseline (set emitBaseline to false if you want the first run silent).
Can I run two watches from one account?
Yes — give each schedule its own monitorStateName (for example mumbai-office and pune-delivery) so their seen-ID lists stay separate.
Pricing
| Event | When | Price |
|---|---|---|
| Actor start | Once per run | $0.005 |
| Job row | Each posting written to the dataset | $0.0008 |
| Employer email | Only when enrichment finds an address | $0.05 per found email |
Skipped monitor IDs, keyword misses and date-filter misses are not billed.
What this has that the other Apna actors do not
| This actor | getascraper / themineworks / shahidirfan | |
|---|---|---|
| Education, English, shift, gender, applicant count, pincode | Always, from the posting page | Partial / card-level / optional flags |
| Only-new monitor + named watches | Yes — skipped IDs not billed | getascraper / themineworks yes; shahidirfan no |
Listing URLs in startUrls | Yes | getascraper yes; others mixed |
| Keyword filter | Title or company (apna has no search API) | themineworks title-only; getascraper generates searches |
| Employer email | Opt-in, billed only on a hit | No |
| Price per job | $0.0008 | $0.0009–$0.00137 |
We still fetch every posting page. That is slower than a card-only dump and is why the screening fields are on the row.
Support
Found a bug or need a field that isn't here? Open a ticket on the Issues tab.
Additional Services
Need this data pushed somewhere specific, or another India job board covered? Get in touch through the Apify Console.
Explore More Scrapers
Other India job boards in this family: Naukri, Instahyre, Internshala, CutShort, Foundit, Shine.
🤖 For AI Agents & LLM Apps
This actor returns flat, self-describing rows. Deduplicate on jobId, which is unique site-wide. For matching a candidate to a role, the highest-signal fields are education, englishLevel, experienceRequired and shift — apna's postings are screened on those far more than on free-text skills, and skills is frequently empty. Treat salaryPeriod as apna's own label rather than a verified unit before doing arithmetic on salaryMin/salaryMax; outliers where an employer entered an annual figure into a monthly field do occur. applicantCount is the best available proxy for how contested a posting is.
⚠️ Disclaimer
This actor collects only publicly available job-posting data from apna.co. It does not log in, bypass authentication, or access any private or personal candidate data. Some apna employers publish a stated gender preference; that field is reported exactly as the employer published it and is included so researchers can study the practice — using it to filter candidates may be unlawful in your jurisdiction, and that is your responsibility, not apna's or this actor's. Use the output in line with apna's terms of service and applicable data-protection and employment law.
SEO Keywords
apna scraper, apna.co scraper, apna jobs api, apna jobs scraper, apna listing url, apna monitor, india jobs scraper, blue collar jobs scraper india, entry level jobs scraper, delivery jobs scraper india, back office jobs scraper, india job board scraper, mumbai jobs scraper, bengaluru jobs scraper, telecalling jobs data, field sales jobs india, wage data india scraper, blue collar recruitment data, job posting api india, gig economy jobs india, hiring data india, 10th pass jobs scraper, 12th pass jobs scraper