Apify actor · whoareyouanas/naukri-jobs-scraper
Naukri Jobs Scraper - Salary, Skills & Job API
Export public Naukri job listings by keyword, location, search URL, or known job ID. Review job descriptions, disclosed salaries, skills, work mode, company context, and published application links.
Documentation checked 2026-10-29 · deployed build 0.1.15 · run through your Apify account
01 / Overview
Match the actor to the job.
Search or details
Start with role/location filters or retrieve specific known job IDs.
Hiring-market context
Keep skills, experience, work mode, employer identifiers, and disclosed salary context together.
Coverage reporting
Review detail status and run summaries before relying on a vacancy sample.
02 / Input
Start with a clear, bounded input.
Use a keyword search, searches array, supported startUrls, or details mode with jobIds. Set maxJobs, page and request limits, and whether full details are needed. Company IDs provide more precise filters than a name alone.
{
"keyword": "python developer",
"location": "Bengaluru",
"freshnessDays": 7,
"maxJobs": 10,
"fetchDetails": true
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| mode | string | "search" | Search jobs or fetch individual listings by job ID/URL. Options: search, details |
| keyword | string | Not specified | Skills, role or employer name. Use this OR advanced searches OR start URLs. Employer names are search terms, not verified identities. |
| location | string | Not specified | Source location search; remote listings may have no verified city. |
| sortBy | string | "date" | Sort Naukri results by posting date or source relevance. Defaults to date. Options: date, relevance |
| freshnessDays | integer | Not specified | Source posting-age filter in days. Known source-created dates are checked locally; unknown dates remain explicit. Minimum: 1 · Maximum: 30 |
| maxJobs | integer | 100 | Maximum unique delivered jobs across ALL queries. Increase for larger workloads; defaults to 100. Minimum: 1 · Maximum: 1000 |
| fetchDetails | boolean | true | Fetch full descriptions, locations, education and poster type. Summary mode preserves shorter source snippets. |
All other input controls (19)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| experienceYears | integer | Not specified | Candidate experience in years, from 0 to 30, passed as a source search filter. Zero searches for fresher roles. Minimum: 0 · Maximum: 30 |
| workModes | array | Not specified | Office, remote or hybrid source filter, also checked when work-mode evidence is available. |
| postedBy | string | "any" | Source poster filter. With details, also verified against the source consultant flag. Summary mode reports source filtering only. Options: any, company, consultant |
| salaryBands | array | Not specified | Source annual salary-band codes such as 10to15. Source filter only; use INR bounds for strict local enforcement. |
| searches | array | Not specified | Batch of up to 20 searches. Each entry supports keyword, location, sortBy, freshnessDays, workModes, postedBy, experienceYears and salaryBands. Each is paginated fairly under one global job cap. |
| startUrls | array | Not specified | Naukri India search URLs, or single-job URLs in details mode. Search URLs begin at page one. Unsupported filter parameters are rejected. |
| jobIds | array | Not specified | Twelve-digit Naukri job IDs. Select details mode. Use job IDs OR start URLs. |
| maxPagesPerSearch | integer | 25 | Finite discovery page limit. Reaching it is reported as partial coverage. Minimum: 1 · Maximum: 1000 |
| maxRequests | integer | 3000 | Hard ceiling on HTTP attempts, including retries and proxy fallback. This controls work even when filters reject many jobs. Minimum: 1 · Maximum: 20000 |
| maxConcurrency | integer | 4 | Maximum simultaneous HTTP workers, from 1 to 8. Defaults to 4; higher concurrency can increase source blocks. Minimum: 1 · Maximum: 8 |
| maxRequestRetries | integer | 2 | Retry limit per source request, from 0 to 3. Retried attempts consume maxRequests. Minimum: 0 · Maximum: 3 |
| onlyDirectEmployers | boolean | false | Verify consultant=false using full details. Requires fetchDetails=true; unknown poster type is excluded. |
| descriptionFormat | string | "text" | Return descriptions as plain text, HTML or Markdown. This changes the description field; dataset export format is selected separately. Options: text, html, markdown |
| proxyMode | string | "auto" | Auto makes bounded direct requests first and can retry blocked/network failures using Apify India residential proxy. None disables proxy. Proxy/platform usage can incur costs during development runs. Options: none, auto, residential |
| companyIds | array | Not specified | Keep only exact source company IDs. Separate from employer group IDs. |
| groupIds | array | Not specified | Keep only exact source group IDs. If companyIds is also supplied, both constraints must match. |
| minSalaryInr | number | Not specified | Strict annual disclosed INR salary lower bound; unknown/monthly salaries are excluded. Job salary interval must overlap your requested interval. Minimum: 0 |
| maxSalaryInr | number | Not specified | Strict annual disclosed INR salary upper bound. Job salary interval must overlap your requested interval. Minimum: 0 |
| requiredSkills | array | Not specified | ALL listed skills must match whole source skill tags, case-insensitively. No guessed skill expansion. |
03 / Output
Know what each returned row represents.
- Rows include job identity, title, employer, locations, skills, disclosed salary structure, description, application links, and detail-quality context.
- Missing salary or dates must remain unknown. descriptionCompleteness and detailStatus distinguish full content from partial retrieval.
{
"jobId": "141026000001",
"title": "Python Developer",
"companyName": "Example employer",
"companyId": "42",
"groupId": "43",
"locations": [
"Bengaluru"
],
"workMode": "hybrid",
"posterType": "company",
"skills": [
"Python",
"SQL"
],
"experienceMinYears": 2,
"experienceMaxYears": 5,
"salary": {
"text": "12-18 Lacs P.A.",
"min": 1200000,
"max": 1800000,
"currency": "INR",
"period": "year",
"isDisclosed": true,
"basis": "source_numeric"
},
"description": "Build Python services and maintain SQL data pipelines.",
"descriptionFormat": "text",
"descriptionCompleteness": "full",
"detailStatus": "succeeded",
"matchedQueryIds": [
"python-bengaluru"
],
"qualityFlags": []
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
title
Job title
companyName
Company name
locationText
Source location text
workMode
Work mode
salary
Disclosed salary
experienceText
Experience label
postedAt
Posted at (UTC)
jobId
Naukri job ID
url
Naukri job URL
applyUrl
Application URL
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (4)
- Naukri jobs (JSON)
- JSON array with one row per distinct job ID. Includes title, company IDs, salary with period/currency, work mode, skills, descriptions and application links. Check detailStatus and qualityFlags. Read summary before assuming complete coverage.
- Naukri jobs (CSV)
- CSV export of the same job records, with a UTF-8 BOM for spreadsheet compatibility. For structured nested salary data and arrays, prefer the JSON output.
- Naukri jobs (Excel)
- Excel workbook export of the same job dataset for spreadsheet analysis.
- Run coverage and quality (JSON)
- JSON OUTPUT record with delivered job count, running/complete/partial/failed coverage, per-search outcomes, detail failures, unknown data and source request metrics. A SUCCEEDED platform run can be partial because maxJobs or a page/budget cap was reached.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Actor Start apify-actor-start | $0.00005 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
result apify-default-dataset-item | $0.001 / event | Single result in the default dataset. $1.00 per 1,000 of this event. Other events and separate services are additional. |
- Delivered dataset-result events and the memory-based startup event are priced separately.
- Use maxJobs, maxPagesPerSearch, and maxRequests to bound the research scope, then inspect coverage rather than assuming every requested job was delivered.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~naukri-jobs-scraper/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- Job postings measure advertised vacancies, not actual hires or a company's complete hiring activity.
- This is an independent public-source scraper, not an official Naukri API or application-submission service.
Questions
Before you build an integration.
What do I need to provide?
Use a keyword search, searches array, supported startUrls, or details mode with jobIds. Set maxJobs, page and request limits, and whether full details are needed. Company IDs provide more precise filters than a name alone.
What should I check in the output?
- Rows include job identity, title, employer, locations, skills, disclosed salary structure, description, application links, and detail-quality context.
- Missing salary or dates must remain unknown. descriptionCompleteness and detailStatus distinguish full content from partial retrieval.
How do I budget the run?
- Delivered dataset-result events and the memory-based startup event are priced separately.
- Use maxJobs, maxPagesPerSearch, and maxRequests to bound the research scope, then inspect coverage rather than assuming every requested job was delivered.
Keep exploring