A client sends a screenshot: "we are at position 4 for this keyword". Your own tool says position 19. Neither of you is wrong, and the gap is not a tool bug.
Search results in India vary by city for a large share of commercial queries, and understanding how that variance works changes how you set targets, how you report, and what you buy.
What Google is actually doing
For any query it believes has local intent, Google localises the result set — reordering it, injecting a map pack, and sometimes substituting entirely different domains. Local intent is not just queries with a city name in them. "interior designer", "chartered accountant", "gym", "dentist", "digital marketing agency" are all treated as local by default, with no city mentioned at all.
So "digital marketing agency" returns Delhi firms to a searcher in Delhi and Bangalore firms to a searcher in Bangalore. There is no single national ranking for that query. A tool reporting one number is reporting one location's number, usually a default that may not be anywhere near your market.
Queries without local intent — "what is schema markup", "gst rate on laptops" — are substantially the same everywhere.
Why this bites Indian businesses specifically
Three reasons it matters more here than in most markets.
Metro concentration. A handful of cities carry most of the commercial search volume for most B2B and professional services, and the competitive set in each is different. Ranking well in Jaipur and badly in Mumbai is a completely different business outcome from the reverse, even though the average position looks identical.
City-name queries behave differently from city-located queries. "SEO expert in Mumbai" typed from Delhi is an explicit query — Google honours the city in the text. "SEO expert" typed from Mumbai is an implicit one. Both matter, both need different pages, and a rank tracker set to one location only measures one of them.
Search Console averages the two together. This is the part that misleads most reports. Search Console gives you one average position per query across every location it was searched from. A query at position 6 in your home city and position 40 everywhere else shows up as a mediocre average, and the report tells you nothing is working when in fact the thing that matters is working.
How to measure it properly
Use the country filter and then the region filter in Search Console. Performance report, filter by country India, then open the Countries tab and, where volumes allow, look at the regional breakdown. It is coarser than a rank tracker but it is real data from real searchers.
Track by location deliberately. If you serve three cities, track the same keyword set three times, once per city, and report three numbers. One blended number for a multi-city business is close to meaningless.
Check the live SERP from the target city, not from your desk. A search with the location parameter set to the target city will show you what a buyer there sees, including which competitors are in the set. Doing this once per quarter per city catches positioning shifts that no tool flags.
What it changes in practice
It changes what a city page has to do. A page for a city you are not physically in has to earn its place with substance — local case studies, local pricing context, named local work — because proximity is working against you. A page for your home city gets proximity for free and should be aimed at the implicit queries, where the map pack is the competition.
It also changes what "we want to rank nationally" means. For a locally-intented query, national ranking is not a thing that exists. The honest version of that goal is "rank in these five cities", and it is five times the work of one, which is a scope conversation rather than a technical one. The way that scope usually divides across levels of engagement is set out here: SEO packages in India.
A companion piece on the page-architecture side of the same problem: multi-location SEO for Mumbai businesses, one page per branch or one strong page.