Guides

How to Scrape JustDial Business Listings and Leads

JustDial is India's largest local business directory, which makes it one of the richest public sources of B2B and local lead data: business name, category, area, phone, and rating across almost every city and trade. This guide covers what a listing actually holds, exactly where that data lives, why the site fights automated collection, and how to turn it into a clean lead list without babysitting a scraper. The worked example uses a real JustDial search, so you are seeing the actual structure.

DADataScrape TeamSeptember 2, 2026Updated September 24, 20267 min read

What data a JustDial listing holds

A single results page carries a row per business, and each row is dense. On a real search, Hair Cut Services in Pune, one listing read: the business name (The Blush Unisex Salon), its category (Salons, Unisex Salons), the area (Hadapsar, Pune), a star rating (4.9) with the number of ratings (34), a verified badge, the pincode (411028), latitude and longitude, a photo count, and a sponsored or paid-placement flag. Above the listings sits the aggregate for the category, in this case a 4.4 average across 366,421 ratings and reviews. The fields that matter for lead work, the name, category, area, phone, and rating, are all present on the results page itself, so you rarely need to open each profile one by one.

Where the data actually lives

JustDial runs on a JavaScript frontend that does not print the listings into the page HTML. Instead it fetches them from an internal JSON endpoint, justdial.com/api/resultsPageListing, which returns a compact columns-and-rows structure: a list of column names followed by an array of rows, where each row is one business. The profile pages pull from a matching api/detail endpoint. One detail worth knowing is that the phone number is present in the API response, in a field the frontend reads, even though the visible page hides it behind a tap-to-reveal button. Reading the API directly is cleaner than parsing rendered cards, but reaching it is the hard part, which is the next section.

Skip the build, get the feed

Send us your JustDial target and we will scrape a real sample and send it back, no signup.

Get a free sample

The anti-bot reality

JustDial sits behind Akamai plus its own protection, and it is aggressive. In our own capture, a proxied browser was served the JustDial homepage instead of the search results, the listings simply never loaded, and only a normal browser session returned the real data. That is the whole challenge in a sentence: the data is public and structured, but the site actively blocks automated and proxied access, so a naive script gets a homepage or a challenge page rather than leads. Reliable collection means handling that layer with the right session and request behaviour, and keeping it working as the protection changes. That maintenance, not the parsing, is the real job.

Turning it into a clean lead list

For lead work you want one row per business, deduplicated on the listing ID (JustDial calls it docid), captured per category and city, and paged through to the end using the nextdocid cursor the API returns. Keep the fields your outreach actually uses, the name, category, area, phone, rating, and website where present, and drop the rest so the sheet stays workable. Store each run with a date so you can watch new businesses appear over time rather than re-pulling the whole city every cycle.

Build it yourself or have it delivered

For one city and one category, a careful script and a real browser session can get you a sample. The trouble starts at scale and over time, where the Akamai layer, the paging, and the markup changes turn a weekend script into a standing maintenance job. Past a couple of categories, or once you need the list refreshed on a schedule, a done-for-you feed is usually cheaper than the upkeep. You tell us the categories and cities you want, and we deliver a clean, structured lead list and keep it running.

Where each field lives in the API response

Because JustDial ships its listings as a columns-and-rows JSON block, knowing the column names is what makes a parse reliable. On a real response, the useful columns are: name (the business name), type (the category text, for example Salons, Unisex Salons), area and NewAddress (the locality and street line), compRating (the star rating), totalReviews (the ratings count), verified (a one or zero trust flag), VNumber (the phone number in plain text), pincode, lat and lon, paidStatus (whether the listing is a sponsored placement), photocnt, and docid (the stable listing ID you deduplicate on). The category aggregate sits at the top level of the response, in avg_rate and avg_txt, and paging is driven by nextdocid, the cursor you pass to fetch the next block of businesses. The trick is that the phone in VNumber is already decoded in the API even though the visible page hides it behind a tap-to-reveal control, so an API read gets the contact the rendered page makes you click for.

Using JustDial leads responsibly

JustDial data is public business listing data, but the moment you use a phone number for outreach you are into rules that matter. In India, telemarketing and unsolicited commercial communication are governed by the DND registry and the regulator's commercial-communication rules, so a lead list is a starting point, not a licence to cold-call everyone on it. The responsible pattern is to collect only the public listing fields, scrub numbers against the DND registry before any calling campaign, keep a lawful basis and a clear opt-out for outreach, and stay away from anything that is not openly published. We build feeds to the field set you actually need and can include or strip the phone number depending on how you intend to use the list, which keeps the collection clean and the usage your decision.

Step by step: reading a JustDial results page

JustDial serves its listings from an internal JSON API that its own frontend calls, so the cleanest read is that response rather than the rendered cards. Here it is on a real search, Hair Cut Services in Pune, which returned 10 businesses on the first page against more than 100 in total. The catch, covered right after, is that reaching the endpoint at all means getting past the site's protection.

python
import requests

# JustDial's frontend loads its listings from this internal JSON endpoint.
url = "https://www.justdial.com/api/resultsPageListing"
params = {"city": "Pune", "search": "Hair Cut Services", "searchReferer": "gen|lst"}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}

data = requests.get(url, params=params, headers=headers).json()
cols = data["results"]["columns"]
for row in data["results"]["data"]:
    biz = dict(zip(cols, row))
    print(biz["name"], biz["compRating"], biz["area"], biz["type"])
Business nameThe Blush Unisex Salon
CategorySalons, Unisex Salons
AreaHadapsar, Pune
Rating4.9 (34 ratings)
VerifiedYes
Pincode411028
PhoneIn the API response (hidden in the page UI)

A sample of the clean data we deliver for one product.

That parse is the easy part. The hard part is that the request above, sent naively, does not reach the data. JustDial sits behind Akamai and its own protection, and in our capture a proxied browser was handed the homepage instead of the results. Getting a real, complete response means the right session and request behaviour, paging through every city and category with the docid cursor, and keeping it working as the protection shifts. That is what we run for you, and we hand back a clean, deduplicated lead list, with the phone number kept or stripped to match how you plan to use it.

Fields worth capturing from JustDial

  • Business name
  • Category
  • Area / locality
  • Full address
  • Star rating
  • Number of ratings
  • Verified badge
  • Phone number
  • Pincode
  • Latitude / longitude
  • Photo count
  • Sponsored / paid flag
  • JustDial listing ID (docid)
  • Website (where listed)

Frequently asked questions

Want a JustDial feed without the build?

Send us the products or pages you need, and we will deliver a clean feed and maintain it. Start with a free sample.

Get a Free Sample