Monitor JustDial Reviews for Reputation Management (2026)
Thirdwatch's JustDial Scraper makes Indian SMB reputation a tracked signal at $0.002 per record — daily snapshot every location of your chain, alert on rating drops or review-volume spikes, surface multi-location patterns. Built for chain ops teams, multi-location franchise operators, and reputation-management agencies who need structured Indian review data without manual JustDial monitoring.
Why monitor JustDial reviews for reputation
JustDial reviews drive call volume to listed Indian businesses. According to JustDial's FY24 user-engagement disclosures, the platform served 175 million unique users in fiscal 2024 with most calls and inquiries routed by listing prominence — and listing prominence is heavily weighted by rating and review count. A multi-location restaurant chain or clinic group that lets JustDial reputation drift downward sees inquiry-volume drops that compound over weeks. Reputation monitoring is operational, not a vanity metric.
The job-to-be-done is structured. A chain operations team running 60 hospitality locations across Mumbai, Delhi, and Bangalore wants daily rating tracking with alerts when any location drops below a threshold. A reputation-management agency serving Indian SMB clients wants per-location dashboards. A franchise operator wants to flag underperforming branches based on rating trajectory. All of these reduce to the same shape — daily JustDial snapshot × locations × time-series tracking on rating and review_count. The Thirdwatch actor returns it ready to ingest.
How does this compare to the alternatives?
Three options for monitoring Indian SMB reputation on JustDial:
| Approach | Cost per 1,000 records × daily | Reliability | Setup time | Maintenance |
|---|---|---|---|---|
| Manual JustDial browsing | Effectively unbounded analyst time | Low (sampling bias) | Continuous | Doesn't scale across locations |
| Reputation-management SaaS (Birdeye India, Reputation.com) | $20K–$200K/year flat | High | Days–weeks to onboard | Vendor lock-in |
| Thirdwatch JustDial Scraper | $2 × daily × 60 locations = $43.8K/year nominal, $0.6K via dedup | Production-tested, monopoly position on Apify | Half a day | Thirdwatch tracks JustDial changes |
Most reputation SaaS platforms layer Google Reviews + Facebook + JustDial; building your own JustDial-only monitoring on top of the actor is straightforward and an order of magnitude cheaper. The JustDial Scraper actor page gives you the structured raw feed.
How to monitor JustDial reviews 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. Every example below assumes the token is in APIFY_TOKEN:
export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"
Step 2: How do I take a daily snapshot of all my chain's locations?
Run the actor once per major city in your chain's footprint with the chain's category as a query, then filter for your chain by name.
import os, requests, datetime, json, pathlib
ACTOR = "thirdwatch~justdial-business-scraper"
TOKEN = os.environ["APIFY_TOKEN"]
CITIES = ["Mumbai", "Delhi", "Bangalore", "Pune",
"Chennai", "Hyderabad", "Kolkata"]
CATEGORY = "Restaurants" # change for your vertical
CHAIN_NAME = "Mainland China" # change for your chain
today = datetime.date.today().isoformat()
out = pathlib.Path(f"snapshots/justdial-{today}")
out.mkdir(parents=True, exist_ok=True)
for city in CITIES:
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json={"queries": [CATEGORY], "city": city, "maxResultsPerQuery": 200},
timeout=900,
)
listings = [r for r in resp.json()
if CHAIN_NAME.lower() in (r.get("business_name") or "").lower()]
(out / f"{city}.json").write_text(json.dumps(listings))
print(f"{city}: {len(listings)} {CHAIN_NAME} locations")
For a 60-location chain across 7 cities, this completes in 25-35 minutes wall-clock and costs under $20 per daily snapshot.
Step 3: How do I compute rating-drop and review-velocity alerts?
Aggregate snapshots, key on listing_url, compute day-over-day deltas.
import pandas as pd, glob, json as J
frames = []
for d in sorted(glob.glob("snapshots/justdial-*")):
date = pathlib.Path(d).name.replace("justdial-", "")
for f in glob.glob(f"{d}/*.json"):
for j in J.loads(pathlib.Path(f).read_text()):
frames.append({
"date": date,
"listing_url": j["listing_url"],
"business_name": j["business_name"],
"city": j.get("location", "").split(",")[0].strip(),
"rating": pd.to_numeric(j.get("rating"), errors="coerce"),
"reviews": pd.to_numeric(j.get("review_count"), errors="coerce"),
})
df = pd.DataFrame(frames)
df["date"] = pd.to_datetime(df["date"])
last_two = sorted(df.date.unique())[-2:]
yesterday, today = last_two
yest = df[df.date == yesterday].set_index("listing_url")
todays = df[df.date == today].copy()
todays["yest_rating"] = todays.listing_url.map(yest.rating)
todays["yest_reviews"] = todays.listing_url.map(yest.reviews)
todays["rating_drop"] = todays.yest_rating - todays.rating
todays["review_velocity"] = todays.reviews - todays.yest_reviews
flags = todays[
(todays.reviews >= 50)
& ((todays.rating_drop >= 0.2) | (todays.review_velocity >= 30))
].sort_values("rating_drop", ascending=False)
print(flags[["business_name", "city", "yest_rating", "rating",
"rating_drop", "yest_reviews", "reviews", "review_velocity"]])
A 0.2+ rating drop on a 50+ review location, or a 30+ review-count jump in a single day, is the alert threshold for most chain monitoring.
Step 4: How do I forward alerts to ops on Slack?
Forward each flagged location to a chain-ops Slack channel with rating context.
import requests as r
for _, row in flags.iterrows():
if pd.notna(row.rating_drop) and row.rating_drop >= 0.2:
msg = (f":warning: *{row.business_name}* ({row.city}): "
f"rating {row.yest_rating:.1f} → {row.rating:.1f} "
f"({row.reviews} reviews)\n{row.listing_url}")
else:
msg = (f":eyes: *{row.business_name}* ({row.city}): "
f"+{int(row.review_velocity)} reviews today "
f"(rating now {row.rating:.1f})\n{row.listing_url}")
r.post("https://hooks.slack.com/services/.../...",
json={"text": msg}, timeout=10)
print(f"{len(flags)} alerts forwarded")
Wired to Apify's scheduler at 0 7 * * * (daily, 7 AM), the chain-ops team sees every overnight reputation incident before they walk into the office.
Sample output
A single record from the dataset for one Mumbai chain location looks like this. The reputation-monitoring analysis stitches many such rows over time.
{
"business_name": "Mainland China - Bandra",
"category": "Restaurants",
"location": "Mumbai, India",
"address": "Linking Road, Bandra West, Mumbai",
"phone": "+91-2226405678",
"rating": 4.0,
"review_count": 1205,
"timing": "12:00 PM - 11:30 PM",
"website": "https://mainlandchinaonline.com",
"photos_count": 48,
"listing_url": "https://www.justdial.com/Mumbai/Mainland-China-Bandra-West/..."
}
A typical multi-location reputation dashboard row from a daily diff looks like:
| Location | Yesterday | Today | Δ Rating | Δ Reviews |
|---|---|---|---|---|
| Mainland China - Bandra | 4.1 (1199) | 4.0 (1205) | -0.1 | +6 |
| Mainland China - Andheri | 3.9 (840) | 3.7 (876) | -0.2 | +36 |
| Mainland China - Powai | 4.3 (520) | 4.3 (522) | 0.0 | +2 |
Andheri at -0.2 with +36 reviews in a single day is exactly the canonical "something happened" alert pattern.
Common pitfalls
Three things go wrong in JustDial reputation-monitoring pipelines. Listing-name drift — JustDial occasionally renames listings (rebranding, ownership change), which breaks naive name-based grouping for the chain you're tracking; key on listing_url instead, which is stable per listing. Coordinated negative campaigns — a sudden 30+ review jump with rating dropping is sometimes a competitor or disgruntled-customer attack rather than genuine reputation drift; cross-check against Google Maps for the same location before treating as a real operational issue. Cross-city duplicates — chains with similar location names across cities can collide when grouping by business_name; always include city in the grouping key.
Thirdwatch's actor uses an Indian residential proxy by default at conservative concurrency, so it stays well within polite-crawling norms even at the 60-location-per-day pull rate. The pure-HTTP architecture means a 7-city × 200-results pull completes in 25-35 minutes wall-clock and costs under $20 per daily snapshot.
Related use cases
- Scrape JustDial for local business leads
- Build an India local services directory from JustDial
- Find clinics and doctors in India with JustDial
- The complete guide to scraping business data
- All Thirdwatch use-case guides
Frequently asked questions
Why monitor JustDial reviews specifically?
JustDial is the dominant local-business directory in India with 30M+ listings, and customer reviews on JustDial directly drive call volume to listed businesses. A 0.3-point rating drop on a popular JustDial listing typically corresponds to a 15-25% drop in inbound inquiries within two to four weeks. For any India-focused multi-location business, JustDial reviews are operationally critical to monitor.
What's a meaningful rating-drop threshold for alerts?
A 0.2-point drop within a week, with at least 50 total reviews, is a useful default threshold. Smaller drops are noise from individual reviews; larger drops below 50 reviews are usually small-sample volatility. For chains with thousands of reviews per location, a 0.1-point drop within a week is already significant.
How often should I refresh review data?
Daily snapshots are standard for active reputation monitoring. JustDial refreshes ratings as new reviews come in, with most lag inside 12-24 hours. Hourly is overkill — review volume on individual listings is rarely high enough that intraday changes are meaningful. Weekly is fine for slower categories or non-critical monitoring.
Can I track reviews across multiple branches of one chain?
Yes. For a chain with N locations, run the actor once per major city in the chain's footprint with the chain's category as the query. JustDial returns each branch as a separate listing with its own listing_url, so you can group by chain name and track per-location reputation. This is the canonical multi-location pattern for restaurants, salons, gyms, and clinic chains.
What signals matter beyond rating?
Review count velocity matters as much as rating. A location whose review count jumped 300 in a week is getting attention — which can be positive or negative depending on the rating direction. Pair velocity with rating change: rising reviews + rising rating = healthy growth, rising reviews + falling rating = a quality issue or PR crisis going viral. Both signals together give a clearer picture.
How do I tell whether a rating drop is a real issue or a competitor smear campaign?
JustDial's review system has fewer integrity controls than Google Reviews, so coordinated negative review campaigns happen periodically. Two heuristics help: (1) a sudden drop with anomalously high review-count velocity (50+ new reviews in 48 hours on a small location) often signals a campaign; (2) cross-reference rating against Google Maps reviews for the same location — if Google holds steady while JustDial drops, suspect a JustDial-specific incident.
Run the JustDial Scraper on Apify Store — pay-per-business, free to try, no credit card to test.