# Justdial Scraper — India Business Directory Leads (`haketa/justdial-scraper`) Actor

Scrape Justdial.com, India's #1 local business directory. Get businesses by category and city: name, phone, address, area, pincode, GPS, rating, review count, verified status and category. Great for lead generation. No login or API key. Export JSON, CSV, Excel.

- **URL**: https://apify.com/haketa/justdial-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Justdial Scraper 🇮🇳

Extract businesses from **Justdial.com — India's #1 local business directory** — at scale, without an account or API key. Search any category in any Indian city and get clean JSON, CSV or Excel: **business name, phone, address, area, pincode, GPS coordinates, rating, review count, verified status and category.**

Whether you build B2B lead lists, prospect local businesses, enrich a CRM, or research the Indian market, this scraper turns Justdial into a structured dataset in minutes.

***

### 🔑 What this scraper does

- 🔎 **Search by category & city** — `Restaurants` in `Mumbai`, `Dentists` in `Delhi`, `Plumbers` in `Bangalore`, anything.
- 🔗 **Or paste URLs** — copy a Justdial search page from your browser and scrape it directly.
- 📞 **Phone numbers** — the business contact number, ready for outreach.
- 📍 **Full location** — address, area, city, pincode and GPS (latitude/longitude).
- ⭐ **Ratings & reviews** — average rating and total review count.
- ✅ **Verified & category** — verified status plus the business category.

No login, no cookies to paste, no API key. Enter what you want, press start, export.

***

### 📋 Example output

```json
{
  "docid": "022PXX22.XX22.260109191222.E1Y4",
  "name": "Tasty Adda",
  "phone": "09972925947",
  "whatsapp": null,
  "address": "Tilak Nagar Off M G Road Goregaon West",
  "area": "Road No 5 Goregaon West",
  "city": "Mumbai",
  "pincode": "400062",
  "lat": 19.1615016,
  "lng": 72.839453,
  "rating": 4.3,
  "totalReviews": 14,
  "verified": true,
  "isPaid": true,
  "category": "Restaurants, Continental Restaurants",
  "openNow": true,
  "website": null,
  "thumbnail": "https://images.jdmagicbox.com/...",
  "url": "https://www.justdial.com/Mumbai/...",
  "searchTerm": "Restaurants",
  "scrapedAt": "2026-09-09T15:00:00.000Z"
}
```

***

### 🗂️ Fields you get

| Field | Description |
|---|---|
| `docid` | Unique Justdial business ID |
| `name` | Business name |
| `phone` | Contact phone number |
| `whatsapp` | WhatsApp number where available |
| `address` | Street address |
| `area` | Locality / area |
| `city` | City |
| `pincode` | Postal code |
| `lat`, `lng` | GPS coordinates |
| `rating` | Average rating (out of 5) |
| `totalReviews` | Number of ratings/reviews |
| `verified` | Whether the business is Justdial-verified |
| `isPaid` | Whether it is a paid/promoted listing |
| `category` | Business category |
| `openNow` | Whether it is currently open |
| `website` | Website URL where available |
| `thumbnail` | Business image |
| `url` | Link to the Justdial listing |
| `searchTerm` | The search that produced this result |
| `scrapedAt` | ISO timestamp of the scrape |

***

### 🚀 How to use

1. Click **Try for free**.
2. Enter one or more **Search Terms / Categories** (e.g. `Restaurants`, `Gyms`) and a **City** (e.g. `Mumbai`) — or paste Justdial URLs into **Start URLs**.
3. Set **Max Items** and **Max Pages per Search**, then click **Start**.
4. Export the results as **JSON, CSV, Excel, HTML, RSS**, or pull them through the **Apify API**.

No account and no technical setup required.

***

### 📝 Example inputs

#### 1. One category in one city

```json
{
  "searchTerms": ["Restaurants"],
  "city": "Mumbai",
  "maxItems": 200
}
```

#### 2. Lead list — several categories

```json
{
  "searchTerms": ["Interior Designers", "Architects", "Modular Kitchen Dealers"],
  "city": "Bangalore",
  "maxItems": 1000
}
```

#### 3. Multiple cities (run per city)

```json
{
  "searchTerms": ["Dentists"],
  "city": "Delhi",
  "maxItems": 500,
  "maxPagesPerSearch": 10
}
```

#### 4. Paste a Justdial URL directly

```json
{
  "startUrls": ["https://www.justdial.com/Chennai/Gyms"],
  "maxItems": 300
}
```

***

### 💡 Popular use cases

#### 🎯 B2B lead generation

Build targeted lists of Indian businesses in any category and city — with **phone number, address and category** ready for your sales team or CRM. Filter by city to focus your outreach where it matters.

#### 📞 Sales prospecting & telemarketing

Every record includes a contact phone number and full location, so you can prioritise verified, well-rated businesses and reach out directly.

#### 🗺️ Local market research

Map supply of any service across cities and areas using GPS coordinates, ratings and review counts. Spot gaps, benchmark competition and size a market.

#### 🏢 CRM & data enrichment

Enrich your existing records with fresh names, phones, addresses, ratings and categories. Clean JSON plugs straight into your pipeline.

#### ⭐ Reputation & competitor monitoring

Track ratings and review counts of businesses in your category and city over time.

#### 🤖 AI, LLM & data products

Feed structured Indian business data into your own models, dashboards or products.

***

### 👥 Who uses this

- **Sales & growth teams** building Indian B2B lead lists.
- **Agencies & marketers** prospecting local businesses.
- **Market researchers & data teams** mapping Indian local commerce.
- **Developers & AI builders** who need reliable directory data via API.

***

### 🎛️ Filters & options

- **Search Terms / Categories** — categories or keywords, searched separately in the chosen city.
- **City** — the Indian city applied to every search term.
- **Start URLs** — paste any Justdial search URL to scrape it directly.
- **Max Items** — cap the total businesses collected (`0` = unlimited).
- **Max Pages per Search** — result pages per term / URL. Each page holds about 10 businesses.

***

### ⚙️ Tips & best practices

- **Be specific with categories.** `Orthopedic Doctors` returns tighter results than `Doctors`.
- **Use several related categories** in one run to build a broad lead list for a city.
- **Run one city at a time** for the cleanest, most complete coverage per city.
- **Start small.** Run with a low `maxItems` first to preview the data, then scale up.
- **Schedule runs** to keep your lead lists fresh.

***

### ❓ FAQ

**Do I need a Justdial account or API key?**
No. Just enter what you want and run — no login, no cookies, no key.

**Do I get phone numbers?**
Yes — each business record includes its contact phone number (and WhatsApp where available).

**Can I search any city and category?**
Yes. Enter any Indian city and any category or keyword. You can also paste a Justdial URL.

**Do I get ratings and reviews?**
Yes — average `rating` and `totalReviews` are included, along with a `verified` flag.

**Do I get GPS coordinates?**
Yes. Every business includes `lat` and `lng`, so you can map results.

**How many businesses can I get?**
As many as the search returns, up to your `maxItems` and `maxPagesPerSearch` limits. Set `maxItems: 0` for unlimited.

**What export formats are supported?**
JSON, CSV, Excel, HTML table, RSS, and the Apify API. Connect to Make, Zapier, Google Sheets, Slack, webhooks or an MCP server.

**Can I automate or schedule it?**
Yes. Use the Apify Scheduler to run it on any interval, or trigger it via API/webhook.

**Is the data structured and clean?**
Yes. Every business is normalized into a consistent, flat JSON object with typed fields, de-duplicated by its unique ID.

***

### 🔌 Integrations

- Export to **JSON, CSV, Excel, HTML, RSS**.
- Pull data via the **Apify API** or official client libraries (JavaScript, Python).
- Connect to **Make, Zapier, Google Sheets, Slack, webhooks** and hundreds more.
- Use it from an **MCP server** inside your AI agent / LLM workflow.
- Schedule recurring runs with the built-in **Apify Scheduler**.

***

### 📤 Output & export

Every run stores results in an Apify dataset. You can preview them in a table, download as JSON/CSV/Excel/HTML/RSS, fetch them through the dataset API, or push them to your warehouse, spreadsheet or app via integrations.

***

### ⚖️ Legal & responsible use

This scraper collects **publicly available** business listing information only — the same data any visitor can see on Justdial.com without logging in. It does not access private messages, contact details behind a login, or anything requiring authentication.

You are responsible for how you use the collected data. Please:

- Respect Justdial's Terms of Service and all applicable laws (including India's data-protection rules and telemarketing/DND regulations).
- Use any personal or company data lawfully and only for legitimate purposes.
- Avoid excessive request rates and scrape responsibly.

This tool is provided for lawful purposes such as lead generation, market analysis and business intelligence. It is not affiliated with, endorsed by, or connected to Justdial.

# Actor input Schema

## `searchTerms` (type: `array`):

What to search for in the chosen city, e.g. 'Restaurants', 'Gyms', 'Dentists', 'Plumbers'. Each term is searched separately. Leave empty if you use Start URLs.

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

Indian city to search in, e.g. 'Mumbai', 'Delhi', 'Bangalore', 'Chennai'. Applied to every Search Term.

## `startUrls` (type: `array`):

Optional. Paste full Justdial search URLs (e.g. https://www.justdial.com/Mumbai/Restaurants) to scrape them directly. When provided, Search Terms and City are ignored for these URLs.

## `maxItems` (type: `integer`):

Maximum number of businesses to collect across all searches. 0 = unlimited.

## `maxPagesPerSearch` (type: `integer`):

How many result pages to scrape per search term / URL. Each page has about 10 businesses.

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

Justdial requires an Indian Residential proxy — it blocks other IPs. The default works out of the box.

## Actor input object example

```json
{
  "searchTerms": [
    "Restaurants"
  ],
  "city": "Mumbai",
  "startUrls": [],
  "maxItems": 100,
  "maxPagesPerSearch": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open to view and export all scraped listings (JSON, CSV, Excel).

# 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 = {
    "searchTerms": [
        "Restaurants"
    ],
    "city": "Mumbai",
    "startUrls": [],
    "maxItems": 100,
    "maxPagesPerSearch": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/justdial-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 = {
    "searchTerms": ["Restaurants"],
    "city": "Mumbai",
    "startUrls": [],
    "maxItems": 100,
    "maxPagesPerSearch": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/justdial-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 '{
  "searchTerms": [
    "Restaurants"
  ],
  "city": "Mumbai",
  "startUrls": [],
  "maxItems": 100,
  "maxPagesPerSearch": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call haketa/justdial-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/justdial-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/FDkmaL1fTxT5X0q5J/builds/jwZSHniYa0sg8zgdR/openapi.json
