# JustDial Business Scraper - India Listings, Reviews & Phones (`thirdwatch/justdial-business-scraper`) Actor

Extract JustDial business listings at scale — names, categories, ratings, review counts, phone numbers, addresses — for local lead generation, market research, and directory building across India's cities.

- **URL**: https://apify.com/thirdwatch/justdial-business-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Other
- **Stats:** 479 total users, 44 monthly users, 95.3% runs succeeded, 4 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## JustDial Scraper

> **Thirdwatch portfolio:** 8,800+ users across 140+ public Actors, 2M+ records delivered, >95% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).

Scrape public JustDial business listings from Indian cities and categories. Use it to build local business lead lists, map SMB density, monitor ratings, and seed India-focused directories.

### Value prop

JustDial is a major local business directory for India, especially useful for service businesses that may not have polished websites or complete global directory profiles. This actor turns JustDial category searches into structured rows with business name, address, phone, rating, reviews, timing, website, and listing URL when available.

Best fit:

- Sales teams prospecting Indian SMBs by city and category.
- Agencies researching local competitors and service providers.
- Directory products bootstrapping India business coverage.
- Reputation teams monitoring public ratings and review counts.

### What's new

- Conversion-focused inputs for city plus category searches.
- Structured business listing output for Apify datasets and CSV export.
- Support for multiple categories in one run.
- Tuned defaults for more reliable access to India public listing pages.

### What data you get

| Field | Description |
|-------|-------------|
| `business_name` | Business name |
| `category` | Business category |
| `location` | City and area |
| `address` | Full address when shown |
| `phone` | Public phone number when shown |
| `rating` | Star rating when shown |
| `review_count` | Number of reviews when shown |
| `timing` | Operating hours when shown |
| `website` | Business website when listed |
| `photos_count` | Number of photos when shown |
| `listing_url` | JustDial listing URL |

### Quick-start input examples

#### Restaurants in Mumbai

```json
{
  "queries": ["Restaurants"],
  "city": "Mumbai",
  "maxResultsPerQuery": 25
}
```

#### Multi-category local lead list

```json
{
  "queries": ["Dentists", "Plumbers", "Packers and Movers"],
  "city": "Bangalore",
  "maxResultsPerQuery": 50
}
```

#### Agency prospecting run

```json
{
  "queries": ["Gyms", "Salons", "Pet Clinics"],
  "city": "Pune",
  "maxResultsPerQuery": 100
}
```

### Input parameters

| Parameter | Required | Default | Description |
| --- | --- | --- | --- |
| `queries` | Yes | `["Restaurants"]` | Business categories to search, e.g. Restaurants, Plumbers, Hotels, Doctors. Each query is scraped for the chosen city. |
| `city` | Yes | `Mumbai` | Indian city to search in, e.g. Mumbai, Delhi, Bangalore, Chennai, Hyderabad, Pune, Kolkata. |
| `maxResultsPerQuery` | No | `25` | Maximum business listings to return per category query. |
| `maxIpAttempts` | No | `15` | Maximum retry attempts per query before the run gives up on that category. Higher values are more reliable but can take longer. |
| `proxyConfiguration` | No | Default proxy | Optional connection settings. The default works for most users. |

### Sample output snippet

```json
{
  "business_name": "Example Dental Clinic",
  "category": "Dentists",
  "location": "Bangalore, India",
  "address": "12 Example Road, Indiranagar, Bangalore 560038",
  "phone": "+91-80XXXXXX",
  "rating": 4.2,
  "review_count": 150,
  "timing": "10:00 AM - 8:00 PM",
  "website": "https://exampleclinic.in",
  "photos_count": 12,
  "listing_url": "https://www.justdial.com/Bangalore/Example-Dental-Clinic/..."
}
```

### Use cases

- **India SMB lead generation:** Build category and city-specific lead lists.
- **Local market research:** Estimate business density and rating distribution by locality.
- **Directory enrichment:** Add public JustDial listing URLs, addresses, and phone numbers.
- **Agency prospecting:** Find clinics, salons, restaurants, gyms, plumbers, hotels, and other service businesses.
- **Reputation monitoring:** Track ratings and review counts over repeated scheduled runs.
- **Expansion planning:** Compare service availability across Indian cities.

### Use cases & recipes

Step-by-step guides on [thirdwatch.dev/blog](https://thirdwatch.dev/blog):

- [Build an India Local Services Directory from JustDial (2026)](https://thirdwatch.dev/blog/build-india-local-services-directory-from-justdial)
- [Find Clinics and Doctors in India with JustDial (2026)](https://thirdwatch.dev/blog/find-clinics-and-doctors-india-with-justdial)
- [Monitor JustDial Reviews for Reputation Management (2026)](https://thirdwatch.dev/blog/monitor-justdial-reviews-for-reputation)
- [Scrape JustDial for Local Business Leads in India (2026)](https://thirdwatch.dev/blog/scrape-justdial-for-local-business-leads)

### Limitations

- Only public JustDial listing data is returned.
- Phone numbers, websites, hours, reviews, and photo counts can be missing when JustDial does not show them.
- JustDial rate-limits its category listing service in waves. When that happens the actor falls back to
  JustDial's own search results so the run still returns real listings instead of failing, but that
  surface publishes fewer phone numbers and matches business names as well as categories, so results
  can be broader. Fields are left empty rather than guessed.
- JustDial search results can change by city, category, ranking, and time.
- Very broad categories may return mixed businesses; use specific category terms for cleaner datasets.
- Public directory data should be verified before high-stakes outreach, compliance, or onboarding decisions.

### Competitor and comparison notes

- **Compared with Google Maps:** JustDial can be especially useful for India-specific local service discovery. Google Maps is stronger when you need map coordinates, global coverage, and place IDs.
- **Compared with IndiaMart:** JustDial is stronger for service businesses and local storefronts. IndiaMart is stronger for suppliers, wholesalers, manufacturers, and product sourcing.
- **Compared with generic crawlers:** This actor gives normalized business fields instead of unstructured page text.
- **Compared with an official API:** JustDial does not offer a general public data API for this workflow, so this actor is designed around public listing pages.

### FAQ

**Do I need a JustDial account?**
No. The actor uses publicly visible listings.

**Which cities are supported?**
Any city available on JustDial. Common examples include Mumbai, Delhi, Bangalore, Chennai, Hyderabad, Pune, Kolkata, Ahmedabad, and Jaipur.

**Can I search multiple categories in one run?**
Yes. Pass multiple category strings in `queries`.

**Are phone numbers always available?**
No. The actor returns phone numbers when JustDial publicly shows them.

**How fresh is the data?**
The actor pulls live public results when the run executes.

### Support and custom builds

Need additional fields, scheduled monitoring, deduplication, enrichment, or another India directory scraper? Contact Thirdwatch at [thirdwatch.dev](https://thirdwatch.dev) or through the Apify actor support channel.

### Related Actors

- [Google Maps Scraper](https://apify.com/thirdwatch/google-maps-scraper) — Thirdwatch
- [Google Maps Lead Finder - Emails, Phones, Social Profiles](https://apify.com/thirdwatch/google-maps-lead-finder-scraper) — Thirdwatch
- [IndiaMart Supplier Scraper](https://apify.com/thirdwatch/indiamart-supplier-scraper) — Thirdwatch

Last verified: 2026-10

# Actor input Schema

## `queries` (type: `array`):

Business categories to search (e.g., 'Restaurants', 'Plumbers', 'Hotels', 'Doctors'). Each query scrapes listings for that category in the specified city.

## `city` (type: `string`):

Indian city to search in (e.g., 'Mumbai', 'Delhi', 'Bangalore', 'Chennai', 'Hyderabad', 'Pune', 'Kolkata').

## `maxResultsPerQuery` (type: `integer`):

Maximum business listings to extract per category query. JustDial shows ~10 per page, pagination is supported.

## `maxIpAttempts` (type: `integer`):

How many attempts to make per query before falling back to JustDial's search page. Higher values are more reliable but can take longer. Default 15.

## `proxyConfiguration` (type: `object`):

Proxy settings. Leave default for best results.

## Actor input object example

```json
{
  "queries": [
    "Restaurants"
  ],
  "city": "Mumbai",
  "maxResultsPerQuery": 10,
  "maxIpAttempts": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "Restaurants"
    ],
    "city": "Mumbai",
    "maxResultsPerQuery": 10,
    "maxIpAttempts": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/justdial-business-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["Restaurants"],
    "city": "Mumbai",
    "maxResultsPerQuery": 10,
    "maxIpAttempts": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/justdial-business-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "Restaurants"
  ],
  "city": "Mumbai",
  "maxResultsPerQuery": 10,
  "maxIpAttempts": 15
}' |
apify call thirdwatch/justdial-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thirdwatch/justdial-business-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Rnln0C6qaFWuidVl5/builds/Q5WSjyHgFt9yfbhOC/openapi.json
