Find Clinics and Doctors in India with JustDial (2026)
Thirdwatch's JustDial Scraper returns Indian clinic and doctor listings at $0.002 per record — name, address, phone, specialty/category, rating, timing, photos. Built for healthcare-data researchers, telemedicine startups, and pharma sales teams who need structured Indian provider data without manual directory mining.
Why scrape JustDial for Indian clinics and doctors
Indian healthcare provider data is fragmented across the National Medical Commission registry, state medical councils, and various practitioner directories. JustDial complements official registries by surfacing operating-context data — actual clinic addresses, phone numbers, hours, and patient ratings — that the regulatory registries do not publish. According to JustDial's FY24 disclosures, healthcare is one of the platform's top three verticals, with hundreds of thousands of doctor and clinic listings across 1,000+ Indian cities. Indian patients searching for a specialist increasingly start at JustDial or Practo, which means the data on the platform reflects active patient-facing supply rather than just regulatory presence — and active supply is the relevant universe for almost every healthcare research and operations question.
The job-to-be-done is structured. A telemedicine startup mapping consultation supply across tier-2 Indian cities wants every general physician listing with rating and timing. A pharma sales team plans territory coverage for a new oncology drug and needs every oncologist's address and phone. A health-research nonprofit mapping rural-vs-urban specialty access wants city-level density of cardiologists, endocrinologists, dermatologists. A health-insurance startup building an empanelment network needs verified provider lists with operational metadata (hours, phone, rating) to assess whether to add a clinic to its panel. All of these reduce to the same shape — category-by-city pulls × specialty filtering, with rating and review_count as quality signals layered on top. The Thirdwatch actor returns this in clean JSON ready for a healthcare CRM, mapping tool, or analytical dashboard.
How does this compare to the alternatives?
Three options for Indian clinic/doctor directory data:
| Approach | Cost per 1,000 providers | Reliability | Setup time | Maintenance |
|---|---|---|---|---|
| Manual NMC + state council scraping | Free, but registries lack context | High for credentialing | Days–weeks | Multiple sources |
| Practo / Lybrate licensed feed | $10K–$50K/year flat | High | Weeks | Vendor lock-in |
| Thirdwatch JustDial Scraper | $2 ($0.002 × 1,000) | Production-tested, monopoly position on Apify | Half a day | Thirdwatch tracks JustDial changes |
Practo and Lybrate licence their data; raw operational data with phone numbers and hours is what JustDial publishes openly. The JustDial Scraper actor page gives the structured feed. For most healthcare-research and supply-mapping use cases, the JustDial dataset alone is sufficient; for use cases that need credentialing data (medical degrees, registration numbers), pair JustDial with the official National Medical Commission registry — the two together cover both operational reality and regulatory compliance.
How to find Indian clinics and doctors in 4 steps
Step 1: How do I authenticate against Apify?
Sign in at apify.com (free tier, no credit card), open Settings → Integrations, and copy your personal API token:
export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"
Step 2: How do I pull doctor listings by specialty and city?
Pass each specialty as a query in the city of interest. JustDial accepts specialty terms as standard category names.
import os, requests, pandas as pd
ACTOR = "thirdwatch~justdial-business-scraper"
TOKEN = os.environ["APIFY_TOKEN"]
SPECIALTIES = ["Cardiologists", "Dermatologists", "Pediatricians",
"Gynecologists", "Endocrinologists", "Orthopedic Doctors",
"Oncologists", "ENT Doctors"]
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json={"queries": SPECIALTIES, "city": "Bangalore",
"maxResultsPerQuery": 200},
timeout=900,
)
df = pd.DataFrame(resp.json())
print(f"{len(df)} listings across {df.category.nunique()} specialties")
Eight specialties × 200 results = up to 1,600 unique providers per city, costing $3.20.
Step 3: How do I filter to high-rated providers and group by specialty?
Apply a rating-and-review-count floor, then aggregate by specialty for density tracking.
df["rating_num"] = pd.to_numeric(df.rating, errors="coerce")
df["reviews_num"] = pd.to_numeric(df.review_count, errors="coerce")
QUALIFIED = df[
df.phone.notna() & (df.phone != "")
& (df.rating_num >= 3.5)
& (df.reviews_num >= 5)
].copy()
specialty_density = (
QUALIFIED.groupby("category")
.agg(n_providers=("business_name", "count"),
avg_rating=("rating_num", "mean"),
med_reviews=("reviews_num", "median"))
.sort_values("n_providers", ascending=False)
)
print(specialty_density)
Specialty density per city is the canonical input for telemedicine supply-mapping or pharma territory planning.
Step 4: How do I scale to multiple cities for nationwide coverage?
Spawn parallel runs across cities for rapid nationwide pulls.
import time
CITIES = ["Mumbai", "Delhi", "Bangalore", "Chennai", "Hyderabad",
"Pune", "Kolkata", "Ahmedabad", "Lucknow", "Jaipur"]
run_ids = []
for city in CITIES:
r = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/runs",
params={"token": TOKEN},
json={"queries": SPECIALTIES, "city": city, "maxResultsPerQuery": 200},
)
run_ids.append((city, r.json()["data"]["id"]))
time.sleep(0.5)
all_providers = []
for city, run_id in run_ids:
while True:
s = requests.get(f"https://api.apify.com/v2/actor-runs/{run_id}",
params={"token": TOKEN}).json()["data"]["status"]
if s in ("SUCCEEDED", "FAILED", "ABORTED"):
break
time.sleep(20)
if s == "SUCCEEDED":
all_providers.extend(requests.get(
f"https://api.apify.com/v2/actor-runs/{run_id}/dataset/items",
params={"token": TOKEN}).json())
print(f"Nationwide: {len(all_providers)} provider listings")
10 cities × 8 specialties × 200 = up to 16,000 records nationwide, costing $32 total. For tier-2 and tier-3 city coverage extend the city list — JustDial publishes provider data across more than 1,000 cities, with meaningful supply even in cities of 100,000 population. A full all-India healthcare provider census across the top 50 cities runs about $160 at FREE pricing.
Sample output
A single record for one Bangalore cardiologist looks like this. Five rows weigh ~3 KB.
{
"business_name": "Dr. Naresh Trehan - Cardiologist",
"category": "Cardiologists",
"location": "Bangalore, India",
"address": "Apollo Hospital, Bannerghatta Road, Bangalore 560076",
"phone": "+91-80-26304050",
"rating": 4.6,
"review_count": 482,
"timing": "10:00 AM - 8:00 PM",
"website": "https://apollohospitals.com",
"photos_count": 18,
"listing_url": "https://www.justdial.com/Bangalore/Dr-Naresh-Trehan/..."
}
category matches the specialty query. phone populates for ~75% of healthcare listings (slightly higher than other categories) because doctors actively publish contact for inbound. timing is critical for telemedicine planning — a clinic open evenings overlaps differently with telehealth users than morning-only. address includes the hospital affiliation when the doctor lists from a hospital, which lets you parse out hospital-vs-private-clinic practice settings without a separate query. photos_count is an underrated quality signal: clinics with 15+ photos are usually invested in JustDial as a patient-acquisition channel and tend to update their listings more frequently than zero-photo entries, making them more reliable data sources for downstream pipelines.
Common pitfalls
Three things go wrong in healthcare-provider pipelines on JustDial. Single-doctor vs multi-doctor clinics — business_name may be a clinic name (multi-doctor) or a single doctor's name; for individual-practitioner research filter on titles like "Dr." in business_name, for clinic mapping use the others. Specialty-name drift — JustDial uses both standard medical terms and colloquial names ("Eye Doctors" vs "Ophthalmologists"); pass both spellings if you want full coverage. Hospital-affiliated listings — many doctors have multiple JustDial listings, one per hospital they consult at; the address field disambiguates, but for single-doctor canonicalisation dedupe on business_name + phone rather than listing_url.
Thirdwatch's actor uses an Indian residential proxy at conservative concurrency; nationwide healthcare pulls run reliably without throttling. Pure-HTTP architecture means a 16K-listing nationwide pull completes in 20-30 minutes wall-clock and costs $32 total. A fourth subtle issue worth flagging: hospital-chain doctors sometimes have personal listings in addition to their hospital-listed entry, especially in tier-2 cities where doctors operate both a private clinic in mornings and a hospital consultation in evenings; for accurate doctor counts dedupe on business_name + phone, but for accurate location-of-practice counts keep both rows because they represent two distinct service points the patient can reach.
Related use cases
- Scrape JustDial for local business leads
- Build an India local services directory from JustDial
- Monitor JustDial reviews for reputation management
- The complete guide to scraping business data
- All Thirdwatch use-case guides
Frequently asked questions
What specialties does JustDial cover?
JustDial publishes listings for every standard medical specialty including general physicians, cardiologists, dermatologists, pediatricians, gynecologists, ENT, orthopedic, neurologists, oncologists, endocrinologists, dentists, ophthalmologists, and dozens more. Pass each specialty as a query — JustDial recognises both formal terms (Ophthalmologists) and colloquial ones (Eye Doctors).
How accurate are the doctor ratings on JustDial?
JustDial ratings are aggregated patient reviews. For listings with review_count >= 20, ratings are reasonably reliable. Below 20 reviews, single voices distort the average. The actor returns review_count on every record so a sample-size filter is a one-line pandas operation.
Can I get individual doctor credentials and education from JustDial?
Partially. JustDial sometimes publishes degrees (MBBS, MD, MS) in the listing description, but the structured fields don't include credential parsing. For reliable credential data, cross-reference with the National Medical Commission registry by doctor name and city.
How do I monitor newly-opened clinics over time?
Schedule the actor weekly across your watch cities and persist outputs by listing_url. New listing_urls in week N+1 vs week N are newly-listed clinics. Most new clinics list on JustDial within 4-8 weeks of opening.
Does the actor return hospital affiliations?
Indirectly. The address field includes the hospital name when a doctor lists from a hospital ("Apollo Hospital, Bannerghatta Road"). Parse the address for known hospital strings to attribute the doctor to a hospital.
How fresh is healthcare data on JustDial?
JustDial refreshes listings as providers update them. Most clinic listings (address, hours) change rarely — months between updates. Phone numbers and ratings refresh more frequently. For active provider monitoring, weekly cadence is sufficient; for static directory rebuilds, monthly is fine.
Run the JustDial Scraper on Apify Store — pay-per-business, free to try, no credit card to test.