Naukri Jobs Scraper - Clean India Job Data avatar

Naukri Jobs Scraper - Clean India Job Data

Pricing

$1.25 / 1,000 naukri job results

Go to Apify Store
Naukri Jobs Scraper - Clean India Job Data

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

Chronometrica

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

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. OUTPUT states why. Omit maxItems from 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 groupExample fields
๐Ÿ†” Job identityjobId, jobUrl, schemaVersion
๐Ÿ’ผ Job detailstitle, descriptionText, skills
๐Ÿข CompanycompanyName, companyLogoUrl, companyRating, companyReviewCount
๐Ÿ“ Locationlocation
๐Ÿชœ ExperienceexperienceRaw, experienceMinYears, experienceMaxYears
๐Ÿ’ฐ SalarysalaryRaw, salaryMin, salaryMax, salaryCurrency, salaryPeriod
๐Ÿ“… TimepostedAt, postedAtRaw, observedAt
๐Ÿ” Search contextsearchTerm, searchLocation, sourceUrl, pageNumber, rankOnPage
๐Ÿšฆ Row statestatus, 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.

OutputModel shapeOne record meansIdentity or scope
Default datasetJob observation factOne Naukri job observed in one runjobId within the run
OUTPUT recordRun stateOne completed Actor runCurrent 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 inputInternal meaningPublic output or run effect
searchTermOne keyword per lineThe saved row keeps the matching value in searchTerm.
locationOne Indian place per lineEach keyword is paired with each location. Empty means India-wide.
postedWithinDaysSource posting-age filterIt selects candidates. postedAt and postedAtRaw still come from the job.
sortBySource result orderIt changes result order and rankOnPage. It does not change job facts.
experienceYearsSource experience filterIt selects candidates. The three experience fields still come from the job.
excludeCompaniesOne company filter per lineExcluded jobs are not saved. OUTPUT.rowsExcludedByCompany counts them.
searchDepthCoverage level for each keyword and location pairsearchDepthSearches and stopReason show when a search reaches the selected level.
maxItemsOptional saved-row limit after filters and duplicate removalrequestedMaxItems, 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:

schemaVersion
jobId
title
companyName
location
experienceRaw
experienceMinYears
experienceMaxYears
salaryRaw
salaryMin
salaryMax
salaryCurrency
salaryPeriod
skills
descriptionText
postedAt
postedAtRaw
jobUrl
companyLogoUrl
companyRating
companyReviewCount
searchTerm
searchLocation
sourceUrl
pageNumber
rankOnPage
status
statusReason
source
observedAt

โš™๏ธ 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 caseHow the data helps
๐Ÿ“ˆ Track hiring demandCompare job volume by role, skill, city, or company.
๐Ÿ”” Build job alertsSchedule recent searches and route new rows to another tool.
๐Ÿ’ฐ Study salary signalsCompare the salary ranges that employers publish.
๐Ÿชœ Study experience demandMeasure requested experience by role and location.
๐Ÿข Watch company hiringTrack public hiring activity by company search terms.
๐Ÿงฑ Build job data productsLoad 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 rowsActor 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?

  1. Create or log in to your Apify account.
  2. Open Naukri Jobs Scraper.
  3. Enter one or more job titles, skills, or company names.
  4. Add Indian cities or regions, or leave locations empty for India-wide results.
  5. Keep the 500-row limit or set another positive number.
  6. Keep the default settings for your first run.
  7. Click Start.
  8. Open the Output tab to inspect the dataset and run summary.
  9. 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

InputAllowed valueDefault or blank behaviorRow, time, or cost effect
searchTerm1 to 50 non-empty linesRequiredMore terms can increase search coverage and run time.
location0 to 20 Indian places, one per lineEmpty means India-wideMore locations increase the search-pair count and run time.
maxItemsPositive integerForm: 500; API omission: no saved-row limitSets an optional shared saved-row limit. It is a maximum, not a promise.
postedWithinDays0, 1, 3, 7, 15, or 307; 0 means any timeA shorter window can return fewer jobs.
experienceYearsInteger from 0 to 30Not setNarrows source results. 0 includes fresher jobs.
sortByrelevance or daterelevanceChanges result order, not row fields.
excludeCompaniesCompany names, one per lineEmptyMatching jobs are filtered and not charged.
searchDepthstandard, extended, or deepstandardA 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 null when 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_reached
  • source_exhausted
  • search_depth_reached
  • filtered_out
  • blocked
  • failed
  • budget_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.

  • salaryRaw keeps the source salary text. Numeric salary fields are null when the text does not support a clear value.
  • experienceRaw keeps the source experience text. Numeric experience fields are null when the text cannot be parsed safely.
  • postedAtRaw keeps the source posting label. postedAt is a normalized time when the source value can support it.
  • observedAt is the time when the run started observing its job rows.
  • pageNumber and rankOnPage describe 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, maxItems is 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 null when 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.

Compare public job and freelance demand across these sources.

Compare jobs across sources