DEV Community

DataDaemon
DataDaemon

Posted on

What salary should you offer a data analyst in India? 104 Naukri posts (November 2026)

For a data-analyst vacancy open to candidates with two or three years of experience, the median advertised salary-band midpoint in this sample was ₹8 LPA. Across all 104 dated data-analyst posts, 34 disclosed a usable band, with a median midpoint of ₹9.25 LPA. The other 70 posts (67.3%) hid salary.

These are advertised annual bands from a small, recent Naukri sample, collected on 6 November 2026 at 01:53 UTC (07:23 IST). They give employers a starting point for comparing a vacancy with public offers. They do not establish a market rate: most posts hide pay, and the disclosed group may differ from the rest.

I built the Naukri Jobs Scraper used to collect the data. Here is what it returned, how I narrowed the titles, and code to repeat the search.

Data analyst salary in India: what the public bands say

The 34 disclosed bands had a median lower endpoint of ₹7 LPA and a median upper endpoint of ₹13.5 LPA. The middle half of individual band midpoints ran from ₹5.78 to ₹14.75 LPA.

For each job I calculate (salaryMinInr + salaryMaxInr) / 2, then take the median across jobs. The lower-endpoint and upper-endpoint medians are calculated separately, so their average need not equal the median midpoint. They are not a single employer's offer.

LPA means lakh rupees per annum: one lakh is ₹100,000. Dividing the overall median midpoint by twelve gives ₹77,083 per month as an arithmetic annual-to-monthly equivalent. It is not take-home pay; this study does not establish deductions, benefits or the fixed-versus-variable split.

Data analyst salary for freshers and 2, 3 or 5 years of experience

Median advertised data-analyst salary-band midpoint by eligible experience: 0, 2, 3 and 5 years. Groups overlap; disclosed bands only.

This table asks: which posts accept a candidate with exactly this many years of experience? A post advertising 2–5 years appears in the 2-, 3- and 5-year rows. The rows overlap and must not be added together. A fresher-eligible post can also accept experienced candidates; it is not necessarily a dedicated graduate vacancy.

All salary values below are LPA, and only disclosed bands contribute to the salary columns.

Candidate experience, years Eligible posts Disclosed bands Median floor Median ceiling Median band midpoint
0 (freshers eligible) 13 5 3 6.5 4.75
2 37 13 6 9.5 8
3 47 15 6 9.5 8
5 57 14 7.5 13 10.12

The fresher estimate rests on just 5 disclosed bands. The experienced rows are also small. Treat these as observations from this search window, rather than precise salary targets.

To separate junior and senior requirements without overlapping rows, here is the same sample grouped by the minimum experience requested:

Minimum requested experience, years Posts Disclosed bands Median band midpoint, LPA
0-1 28 9 5.5
2-3 27 10 8
4+ 49 15 14

For budgeting, this second table separates posts requiring at least four years from posts that merely allow a five-year candidate to apply. Review the actual responsibilities and band endpoints before choosing a range for your vacancy.

What about Bangalore and other cities?

City named in the post Posts Disclosed bands Median band midpoint, LPA
Bengaluru 48 17 9.5
Pune 12 4 Suppressed: fewer than 5 bands
Gurugram 12 4 Suppressed: fewer than 5 bands
Chennai 9 5 6.25
Mumbai 8 3 Suppressed: fewer than 5 bands
Hyderabad 6 1 Suppressed: fewer than 5 bands

Bengaluru is Bangalore. A multi-city post counts once in each city it names, so these rows overlap. I suppress salary medians below five disclosed bands. Chennai is exactly at that threshold. City differences also mix experience levels, employers and responsibilities; this is not a controlled comparison of city pay.

Why are so many Naukri salaries “not disclosed”?

In this sample, only 32.7% of posts disclosed a usable salary band. Hidden pay stays missing in the calculations; it is never replaced with zero or a salary estimate.

Naukri's recruiter job-posting guide explains that an employer can enter an annual salary range for matching while choosing to hide it from candidates. The public data cannot tell us why an individual employer chose that option, or what its hidden budget is.

For an employer using public posts to set a budget, the missing share matters as much as the median. The visible bands describe the employers who disclosed pay, not all employers hiring data analysts.

Method and limitations

  • Collection: one live Actor run, NzgcDAl8gHV8tIzh3, build 0.1.8. Input: queries: ["data analyst"], all cities, postedWithinDays: 3, newest first, keywordInTitle: true, descriptions off, and limits of 300 jobs per query and in total. The run returned 160 distinct job IDs, below the cap, with no failed searches or cost/timeout/source-outage stop. It finished at 2026-11-06T01:53:48.012Z.
  • Role definition: Naukri's keyword match is loose. The Actor rejected 1,704 returned search-card occurrences whose titles failed its keyword filter. In the retained rows I applied a stricter rule: normalize punctuation to spaces, then require the adjacent phrase data analyst or data analysts. That excluded 55 related titles such as database management analyst and data engineering analyst. These filters improve relevance but can miss equivalent roles with different titles.
  • Dated sample: one further post lacked postedAt and was excluded. That leaves 104 dated posts from 81 named employers. Their source timestamps range from 3 November 2026 at 03:39 UTC to 5 November 2026 at 19:32 UTC. Every retained timestamp falls inside the requested three-day window. The largest named employer contributed 6 posts.
  • Coverage: this is what one public search returned under these rules. It is not a whole-board export, a random sample, or proof that every Indian data-analyst vacancy was captured. A job ID is a post, not a count of vacancies; similar roles with different IDs remain separate.
  • New versus refreshed: the posting window uses Naukri's source timestamp. Naukri documents automatic job refresh. A single snapshot cannot distinguish genuinely new vacancies from refreshed or reposted jobs. These are recent search results, not a verified count of new hires or newly created roles.
  • Salary: search-card fields only, in nominal INR per year; no currency conversion and no inferred hidden pay. Only non-hidden, positive, ordered minimum/maximum pairs enter the salary statistics. Midpoint percentiles use linear interpolation. All bands receive equal weight, regardless of openings or company size. No median is shown for fewer than five bands.

Repeat the search with Python and the Apify API

The Naukri Jobs Scraper returns JSON with title, company, experience, salary endpoints in INR and LPA, disclosure status, cities, skills and posting time. It also supports full descriptions and job-page details. This study turned descriptions off because the search-card fields answer the salary question.

Install requests, set APIFY_TOKEN in your environment, then run:

import os
import re
from statistics import median

import requests

response = requests.post(
    'https://api.apify.com/v2/acts/data_daemon~naukri-jobs-scraper/run-sync-get-dataset-items',
    headers={'Authorization': 'Bearer ' + os.environ['APIFY_TOKEN']},
    params={'timeout': 300, 'maxTotalChargeUsd': 0.25},
    json={
        'queries': ['data analyst'], 'locations': [], 'postedWithinDays': 3,
        'sortBy': 'date', 'keywordInTitle': True, 'includeDescription': False,
        'maxJobsPerQuery': 300, 'maxJobs': 300, 'onlyNewSinceLastRun': False,
    },
    timeout=330,
)
response.raise_for_status()
jobs = {
    r['id']: r for r in response.json()
    if r.get('postedAt') and re.search(
        r'\bdata analysts?\b', re.sub(r'[^a-z0-9]+', ' ', r['title'].lower())
    )
}
midpoints = [
    (r['salaryMinInr'] + r['salaryMaxInr']) / 200_000 for r in jobs.values()
    if r.get('salaryHidden') is False
    and isinstance(r.get('salaryMinInr'), (int, float))
    and isinstance(r.get('salaryMaxInr'), (int, float))
    and 0 < r['salaryMinInr'] <= r['salaryMaxInr']
]
print(f'{len(jobs)} dated data-analyst posts; {len(midpoints)} show a salary band')
print(f'Median advertised band midpoint: {median(midpoints):.2f} LPA' if midpoints else 'No usable salary bands')
Enter fullscreen mode Exit fullscreen mode

On the retained 6 November snapshot, the calculation prints:

104 dated data-analyst posts; 34 show a salary band
Median advertised band midpoint: 9.25 LPA
Enter fullscreen mode Exit fullscreen mode

The live search was tested once on Apify; this exact code sample was tested with mocked HTTP transport and the real returned rows. A future live run will use a moving three-day window and can produce different numbers. The sample caps the run at $0.25 and 300 seconds, as well as 300 jobs; a larger result set can be truncated by those limits.

At the current list price, the Actor costs $0.0008 per returned job plus $0.001 per run. The 160 collected rows correspond to $0.129 at list price, including the related titles later excluded from analysis. This was an owner research run; list-price equivalents are not customer revenue.

For a ready-made no-code starting point, copy the daily feed of new data analyst jobs in Bangalore. That example uses its own city and posting-window settings, so it does not reproduce this all-India table. Its only-new mode remembers delivered IDs. For a comparable snapshot each week, leave only-new off; for a feed of previously unseen posts, turn it on and keep a stable saved-search name. This article creates no schedule.

FAQ

What is the data analyst salary in India per month?

Among 34 disclosed bands in this sample, the median annual band midpoint was ₹9.25 LPA, equivalent to about ₹77,083 a month when divided by twelve. That is an advertised annual-to-monthly equivalent, not take-home pay or a national average.

What is the data analyst salary for freshers in India?

Of 13 posts whose experience range accepted zero years, 5 showed a band. Their median band midpoint was ₹4.75 LPA. This is a small sample, and those posts may also accept experienced candidates.

What is the data analyst salary for 2 or 3 years of experience?

Posts accepting a two-year candidate had a median disclosed band midpoint of ₹8 LPA (13 bands). Those accepting a three-year candidate also had ₹8 LPA (15 bands). Some posts appear in both groups.

What is the data analyst salary for 5 years of experience?

Among 57 posts accepting a five-year candidate, 14 disclosed bands. Their median midpoint was ₹10.12 LPA. These include broad experience ranges; posts requiring at least four years had a different median, ₹14 LPA.

Why does Naukri show “salary not disclosed”?

Naukri allows employers to hide salary from candidates. In this sample 70 of 104 posts (67.3%) hid it. A hidden public field does not reveal the employer's budget or its reason for hiding it.

Top comments (0)