Naukri Jobs Scraper - Clean India Job Data
Pricing
$1.25 / 1,000 naukri job results
Naukri Jobs Scraper - Clean India Job Data
Search Naukri India by keyword, location, date, and experience. Export clean unique jobs with salary, skills, descriptions, a firm row cap, and clear pricing.
Pricing
$1.25 / 1,000 naukri job results
Rating
0.0
(0)
Developer
Chronometrica
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Naukri Jobs Scraper
๐ What does Naukri Jobs Scraper do?
Naukri Jobs Scraper collects public job listings from the main Naukri India site. Enter job titles, skills, company names, and optional Indian locations. The Actor returns clean job rows with descriptions, skills, salary, experience, company data, posting data, and canonical Naukri job URLs.
The default dataset grain is one row per unique Naukri job listing observed
in one Actor run. The Actor uses the Naukri jobId to remove overlap between
keywords, locations, and pages.
The Actor uses logged-out public data. It does not need a Naukri account, cookies, or an API key. It does not access candidate profiles, submit job applications, or solve CAPTCHAs.
โ Clean data with clear controls
The Actor focuses on clean rows, easy input, useful fields, and less manual search work.
- Clear India scope: The Actor covers the main Naukri India site. It does not cover NaukriGulf.
- Direct search input: Enter keywords, locations, posting age, experience, and sort order. The Actor has no start URL input or hidden location IDs.
- Useful filters: Search by job title, skill, company, location, posting age, and experience. You can also exclude company names.
- Firm result cap: When you set
maxItems, the Actor never saves more than this number. It can save fewer rows.OUTPUTstates why. OmitmaxItemsfrom API input when you do not want a saved-row limit. - Clean structured rows: Each saved job uses 30 named public fields. The row includes a company rating and review count when Naukri makes them public. It does not include large company-review records that add cleanup work.
- Clear price: The price is exactly $0.00125 per saved unique job. Duplicate candidates, filtered candidates, and empty searches do not cause a result charge.
- Easy first run: Use the Apify form or API. You do not need a Naukri login, cookies, or a Naukri API key.
With Naukri Jobs Scraper, you can:
- ๐ Search jobs by title, skill, company, and Indian location.
- ๐ Collect public job descriptions and skills in the base row.
- ๐ฐ Extract source salary text and conservative numeric salary ranges.
- ๐ช Extract source experience text and numeric experience ranges.
- โป๏ธ Save one row per Naukri job ID.
- โ๏ธ Spread coverage across keyword and location search pairs.
- ๐ Check candidates, duplicates, filters, source states, and stop reasons.
- ๐ฆ Export rows as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
๐ฆ What Naukri job data can I extract?
Each default dataset row represents one unique public Naukri job listing observed in the run.
| Data group | Example fields |
|---|---|
| ๐ Job identity | jobId, jobUrl, schemaVersion |
| ๐ผ Job details | title, descriptionText, skills |
| ๐ข Company | companyName, companyLogoUrl, companyRating, companyReviewCount |
| ๐ Location | location |
| ๐ช Experience | experienceRaw, experienceMinYears, experienceMaxYears |
| ๐ฐ Salary | salaryRaw, salaryMin, salaryMax, salaryCurrency, salaryPeriod |
| ๐ Time | postedAt, postedAtRaw, observedAt |
| ๐ Search context | searchTerm, searchLocation, sourceUrl, pageNumber, rankOnPage |
| ๐ฆ Row state | status, statusReason, source |
Missing public values stay null. The Actor does not replace missing salary,
experience, rating, description, or posting data with zero.
๐งฑ Data model and row grain
The Actor keeps two output shapes separate.
| Output | Model shape | One record means | Identity or scope |
|---|---|---|---|
| Default dataset | Job observation fact | One Naukri job observed in one run | jobId within the run |
OUTPUT record | Run state | One completed Actor run | Current Actor run |
observedAt records when the run observed the job. The same jobId can appear
again in a later run. This behavior lets you build job snapshots over time.
The public row is flat for CSV, spreadsheets, APIs, and warehouse loads.
skills is the only multi-value field. If you load the data into a relational
warehouse, you can place skills in a job-to-skill bridge table. A bridge table
stores a many-to-many relationship without copying the job measures.
The internal sequence is:
buyer input-> keyword and location search pairs-> public search candidates-> normalized job observation-> company filter-> jobId duplicate check-> optional saved-row limit and charge limit-> dataset row and result charge-> OUTPUT run state
๐ Input to output seam
The input to output seam is the point where buyer settings and source evidence become stable public fields. It keeps selection settings separate from observed job facts.
| Public input | Internal meaning | Public output or run effect |
|---|---|---|
searchTerm | One keyword per line | The saved row keeps the matching value in searchTerm. |
location | One Indian place per line | Each keyword is paired with each location. Empty means India-wide. |
postedWithinDays | Source posting-age filter | It selects candidates. postedAt and postedAtRaw still come from the job. |
sortBy | Source result order | It changes result order and rankOnPage. It does not change job facts. |
experienceYears | Source experience filter | It selects candidates. The three experience fields still come from the job. |
excludeCompanies | One company filter per line | Excluded jobs are not saved. OUTPUT.rowsExcludedByCompany counts them. |
searchDepth | Coverage level for each keyword and location pair | searchDepthSearches and stopReason show when a search reaches the selected level. |
maxItems | Optional saved-row limit after filters and duplicate removal | requestedMaxItems, rowsSaved, and stopReason show the effect. An omitted API value gives null. |
Dataset rows and OUTPUT contain only the documented public fields.
Ordered public row contract
Every saved row uses these 30 fields in this order:
schemaVersionjobIdtitlecompanyNamelocationexperienceRawexperienceMinYearsexperienceMaxYearssalaryRawsalaryMinsalaryMaxsalaryCurrencysalaryPeriodskillsdescriptionTextpostedAtpostedAtRawjobUrlcompanyLogoUrlcompanyRatingcompanyReviewCountsearchTermsearchLocationsourceUrlpageNumberrankOnPagestatusstatusReasonsourceobservedAt
โ๏ธ Can I use this Actor through an API?
Yes. You can run Naukri Jobs Scraper in Apify Console or through:
- ๐ Apify API
- ๐ Python SDK
- ๐ฉ Node.js SDK
- ๐ช Webhooks
- โฐ Scheduled runs
- ๐งฉ Apify integrations
This makes the Actor useful for job alerts, recruiting pipelines, job boards, dashboards, warehouse loads, and labor-market research.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('chronometrica/naukri-jobs-scraper').call({searchTerm: 'data engineer',location: 'Bengaluru',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
The input form starts with maxItems: 500. To remove the saved-row limit in
an API run, omit maxItems from the JSON input. Search coverage, source
inventory, run timeout, and the Apify charge limit can still stop the run.
๐ฏ Why scrape Naukri jobs?
Naukri is a main source of job listings in India. Its public listings can help you measure hiring demand and find active roles across Indian markets.
| Use case | How the data helps |
|---|---|
| ๐ Track hiring demand | Compare job volume by role, skill, city, or company. |
| ๐ Build job alerts | Schedule recent searches and route new rows to another tool. |
| ๐ฐ Study salary signals | Compare the salary ranges that employers publish. |
| ๐ช Study experience demand | Measure requested experience by role and location. |
| ๐ข Watch company hiring | Track public hiring activity by company search terms. |
| ๐งฑ Build job data products | Load stable job IDs and clean rows into apps and databases. |
๐ต Pricing event
Naukri Jobs Scraper uses Pay per Event pricing. The price is $0.00125 per saved job, or $1.25 per 1,000 saved jobs. Platform usage is included.
One result charge occurs when the Actor saves one row to the default dataset. Failed requests, duplicate candidates, filtered candidates, and zero-row searches do not cause result charges.
| Saved rows | Actor charge |
|---|---|
| 100 | $0.125 |
| 1,000 | $1.25 |
| 10,000 | $12.50 |
Use maxItems to set one shared saved-row limit. The input form starts at 500.
An API run has no saved-row limit when its JSON input omits maxItems. Start
with 10 to 100 rows when you test a new search. Check the Pricing tab for
the active rate before a large run.
If the Apify result charge limit is near, the Actor stops before it writes a
row that cannot be charged. OUTPUT.stopReason then becomes
budget_cap_reached.
๐ How do I use Naukri Jobs Scraper?
- Create or log in to your Apify account.
- Open Naukri Jobs Scraper.
- Enter one or more job titles, skills, or company names.
- Add Indian cities or regions, or leave locations empty for India-wide results.
- Keep the 500-row limit or set another positive number.
- Keep the default settings for your first run.
- Click Start.
- Open the Output tab to inspect the dataset and run summary.
- Download the rows as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
โฌ๏ธ Input
This small example searches two role terms in Bengaluru. It uses one shared 25-row limit after filters and duplicate removal.
{"searchTerm": "data engineer\nanalytics engineer","location": "Bengaluru","postedWithinDays": "7","maxItems": 25}
๐ Search matrix
Enter one keyword or location per line. The Actor creates one search pair for
each keyword and location combination. Two keywords and three locations create
six search pairs. A run can contain up to 200 pairs. If location is empty,
each keyword creates one India-wide pair.
The Actor shares coverage across active search pairs. When set, maxItems is
one shared saved-row limit for the whole run.
๐๏ธ Settings
| Input | Allowed value | Default or blank behavior | Row, time, or cost effect |
|---|---|---|---|
searchTerm | 1 to 50 non-empty lines | Required | More terms can increase search coverage and run time. |
location | 0 to 20 Indian places, one per line | Empty means India-wide | More locations increase the search-pair count and run time. |
maxItems | Positive integer | Form: 500; API omission: no saved-row limit | Sets an optional shared saved-row limit. It is a maximum, not a promise. |
postedWithinDays | 0, 1, 3, 7, 15, or 30 | 7; 0 means any time | A shorter window can return fewer jobs. |
experienceYears | Integer from 0 to 30 | Not set | Narrows source results. 0 includes fresher jobs. |
sortBy | relevance or date | relevance | Changes result order, not row fields. |
excludeCompanies | Company names, one per line | Empty | Matching jobs are filtered and not charged. |
searchDepth | standard, extended, or deep | standard | A higher level can increase coverage and run time. |
The JSON API also accepts the earlier searchTerms and locations arrays.
Set failOnNoResults to true in JSON API input when an empty dataset must
fail the run.
The Actor always saves one row per jobId in each run. This rule keeps the row
grain stable and prevents duplicate result charges.
โฌ๏ธ Output sample
This sample shows all public fields in contract order. Live values depend on the job and observation time.
{"schemaVersion": "2026-08-15","jobId": "150826123456","title": "Senior Data Engineer","companyName": "Example India","location": "Bengaluru","experienceRaw": "3-7 Yrs","experienceMinYears": 3,"experienceMaxYears": 7,"salaryRaw": "12-18 Lacs PA","salaryMin": 1200000,"salaryMax": 1800000,"salaryCurrency": "INR","salaryPeriod": "year","skills": ["Python", "SQL", "Airflow"],"descriptionText": "Build trusted data systems.","postedAt": "2026-08-13T12:00:00.000Z","postedAtRaw": "2 Days Ago","jobUrl": "https://www.naukri.com/job-listings-senior-data-engineer-150826123456","companyLogoUrl": null,"companyRating": 4.2,"companyReviewCount": 321,"searchTerm": "data engineer","searchLocation": "Bengaluru","sourceUrl": "https://www.naukri.com/data-engineer-jobs-in-bengaluru?k=data%20engineer&l=Bengaluru","pageNumber": 1,"rankOnPage": 1,"status": "ok","statusReason": null,"source": "naukri.com","observedAt": "2026-08-15T12:00:00.000Z"}
๐ Run summary
The OUTPUT record has one run-level state. It is not a dataset row and does
not cause a result charge. It includes:
- Actor name, schema version, status, and run times.
- Requested saved-row limit, or
nullwhen omitted. - Searches queued and finished.
- Pages requested and candidates seen.
- Rows saved, duplicate candidates skipped, and companies filtered.
- Blocked and failed request counts.
- Source-state counts and unique warning messages.
- Per-search page, candidate, row, duplicate, filter, and end-reason counts.
- Final
stopReason.
Possible stop reasons are:
max_items_reachedsource_exhaustedsearch_depth_reachedfiltered_outblockedfailedbudget_cap_reached
๐ฏ Status, quality, and time fields
Saved job rows use status: "ok". Candidate failures, duplicate candidates,
filtered candidates, and empty searches stay out of the paid dataset. The
OUTPUT run state counts these outcomes.
salaryRawkeeps the source salary text. Numeric salary fields arenullwhen the text does not support a clear value.experienceRawkeeps the source experience text. Numeric experience fields arenullwhen the text cannot be parsed safely.postedAtRawkeeps the source posting label.postedAtis a normalized time when the source value can support it.observedAtis the time when the run started observing its job rows.pageNumberandrankOnPagedescribe the search appearance that supplied the saved row.
โ Release evidence
The private release gate on 2026-08-15 recorded:
- 250 saved rows with 250 descriptions and 250 result charges.
- 69 duplicate candidates skipped in that scale run.
- Zero blocked requests and zero failed requests in the final gates.
- Two 100-row repeat panels with the same 100 job IDs.
- Stable title, company name, and canonical job URL for all 100 repeated jobs.
- A duplicate test with 40 skipped duplicates.
- A filtered test with 20 excluded jobs and zero result charges.
- An empty-source test with zero rows and zero result charges.
This is dated release evidence. Live Naukri inventory and source behavior can change after this test.
๐ Source boundary
The Actor collects logged-out public job listing data from the main Naukri India site. It does not collect:
- NaukriGulf jobs.
- Candidate profiles or private account data.
- Job applications or account actions.
- Login sessions, user cookies, or user credentials.
- Data hidden behind a CAPTCHA or another access control.
โ ๏ธ Limits and interpretation
- When set,
maxItemsis a maximum. Filters, duplicate removal, search coverage, source inventory, a block, or a charge limit can return fewer rows. - When an API input omits
maxItems, the Actor has no saved-row limit. Search coverage, source inventory, run timeout, and the Apify charge limit still apply. - Naukri can hide salary, rating, description, or posting values. These values
stay
nullwhen they are not public or cannot be parsed safely. - Live result order and job inventory can change between runs.
- The Actor keeps the first observed search appearance for each
jobId. It does not save every rank for the same job. - A public request can be blocked or challenged. The run state reports the final source result without solving the challenge.
- The Actor returns fields that are available in public Naukri listings.
โ FAQ
Is Naukri the main India site?
Yes. This Actor covers the main Naukri India site. It does not cover NaukriGulf.
Does this Actor need login, cookies, or an API key?
No. It uses logged-out public job listing data.
Why did I get fewer jobs than maxItems?
maxItems is a shared maximum after filters and duplicate removal. Check
OUTPUT for candidate, duplicate, filter, page-limit, source-state, and stop
reason counts.
How do I remove the saved-row limit?
Use the JSON API and omit maxItems from the input. OUTPUT.requestedMaxItems
will be null. Other stop conditions still apply.
Why can salary or posting time be null?
Naukri does not publish every value for every job. The Actor keeps uncertain
values as null instead of making a value.
How do I avoid duplicate jobs?
The Actor saves each jobId once per run.
Why can some job fields be missing?
Naukri does not publish every field for every listing. Missing public values
stay null.
What happens when no jobs are saved?
The Actor writes OUTPUT with the stop reason. It completes with a zero-row
dataset by default. Set failOnNoResults to true if your automation must
fail on this state.
โ๏ธ Responsible use
Use the Actor only for lawful purposes. Follow applicable laws, Naukri terms, and data protection rules. Do not use the output for spam or unfair automated decisions.
Naukri is a trademark of its owner. This Actor is independent. Naukri does not endorse or sponsor it.
๐ Support
For support, include the Actor run ID, the input, the expected result, and one sample row when possible. State whether the issue affects one row or the full run. Do not send cookies or credentials.
๐ Related job scrapers
Compare public job and freelance demand across these sources.
Compare jobs across sources
- LinkedIn Jobs Scraper โ find public job listings, employers, locations, and company details.
- Indeed Jobs Scraper โ find public Indeed jobs, salaries, skills, and apply links.
- Google Jobs Scraper โ find public job listings, employers, locations, and apply links.
- Upwork Job Scraper โ find fresh freelance jobs, skills, budgets, and client signals.