JustDial Scraper | 14 Fields, Plaintext Phone, No Login avatar

JustDial Scraper | 14 Fields, Plaintext Phone, No Login

Pricing

from $2.00 / 1,000 businesses

Go to Apify Store
JustDial Scraper | 14 Fields, Plaintext Phone, No Login

JustDial Scraper | 14 Fields, Plaintext Phone, No Login

Scrape JustDial business listings by city + category: name, phone number, address, rating, reviews, geo-coords. India local lead generation at scale. No login, anti-block residential proxy. Works in Claude, ChatGPT & any MCP agent.

Pricing

from $2.00 / 1,000 businesses

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

1

Bookmarked

32

Total users

9

Monthly active users

2 hours ago

Last modified

Share

20 Bangalore dentists with phone numbers in 42 seconds

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.

Type a category and an Indian city, such as Dentists in Bangalore or Restaurants in Mumbai. The actor reads JustDial's own search results and returns one row per business with its name, phone number in plain digits, address, locality, rating, number of ratings, map coordinates and JustDial link.

Why choose this actor?

  • A phone number on every business, in plain digits. JustDial's pages hide numbers behind a "Show number" button; this actor reads the same search feed JustDial's mobile site uses, where the number is already there. In our 2 October test, all 20 Bangalore dentists came back in 42 seconds, each with a phone number such as +(91)-8105973211.
  • Pay per business delivered, never for a duplicate. Listings are deduplicated by JustDial's own business ID before they are charged. Empty searches, blocked pages and the summary rows at the end of a run are never billed.
  • No JustDial login, no cookies, no proxy bill. You need only an Apify account. The proxy the run uses is included in the per-business price, and when JustDial blocks an IP the actor moves to a fresh one, up to 6 times per page, at no extra cost to you.

Run it on Apify

Part of The Mine Works Leads and business directories family: B2B Leads Finder, Google Maps Email Scraper, Skip Trace Lookup, 2GIS Places Scraper, IndiaMART Scraper, Yandex Maps Scraper.

Try it in one minute

Paste this into the JSON tab of the input page and press Start. It returns 10 businesses, usually in well under a minute.

{
"searchQuery": "Dentists",
"city": "Bangalore",
"maxResults": 10
}

Give the input as two plain words: searchQuery is the category or search term you would type into JustDial (Restaurants, Gyms, Interior Designers, CA, Packers and Movers), and city is an Indian city (Mumbai, Delhi, Hyderabad, Pune, Chennai). Both are needed; a run without one of them returns a single summary row and charges nothing for businesses. maxResults sets how many businesses you want.

Apify's free plan includes $5 of credit every month, which covers about 1,600 businesses at this actor's price (Free tier $3.00 per 1,000 businesses, plus the $0.005 start fee on each run, in runs of 100).

Copy to your AI assistant

themineworks/justdial-business on Apify. Searches JustDial (India's local business directory) for one category in one city and returns one row per business with name, plaintext phone, address, area, city, JustDial category, rating, rating count, latitude, longitude, JustDial URL and business ID. Call ApifyClient("TOKEN").actor("themineworks/justdial-business").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required in practice: searchQuery (string, e.g. "Dentists") and city (string, e.g. "Bangalore"); without both the run returns only a summary row. Optional: maxResults (integer 1 to 1000, default 100; JustDial itself serves about 100 per search), proxyConfiguration (Console prefill is Apify residential proxy in India; leaving it out uses Apify's automatic datacenter proxy), monitorMode (default false; true delivers and charges only businesses not delivered by an earlier run with the same input). Rows with _type "summary" or "info" are run reports and are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~justdial-business/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • 14 fields per business when JustDial has them: name, phone, address, area, city, category, rating, rating_count, latitude, longitude, verified, url, docid and scraped_at. In 23 rows sampled across two runs, every row had all 13 core fields filled.
  • Plaintext phone numbers. The number comes from JustDial's search feed in the form +(91)-9980221085. If the main number is missing, the business's WhatsApp number is used instead.
  • Map coordinates on every row. latitude and longitude come straight from JustDial, ready for a map, a route plan or a distance filter.
  • Up to about 100 businesses per search. JustDial pages its results 10 at a time and, in both searches we recorded (Restaurants in Mumbai, Dentists in Bangalore), reported 100 results in total. The actor pages until it reaches your maxResults or JustDial's own total, whichever comes first.
  • Built to survive JustDial's bot protection. JustDial sits behind Akamai, which blocks an IP after very few requests. Every page is fetched on a fresh proxy session, with up to 6 fresh IPs per page before the actor gives up on that page.
  • Stops on its own when the results run dry. Two pages in a row with no new business end the run, so you do not wait on repeats.

How to use it

Basic: one category in one city

{
"searchQuery": "Interior Designers",
"city": "Hyderabad",
"maxResults": 100
}

You get up to 100 businesses (JustDial's own ceiling for one search), each with a phone number, address and map point.

Several categories or cities

Each run covers one category in one city. To cover more, start one run per pair from the API; the runs can go in parallel.

from apify_client import ApifyClient
client = ApifyClient("TOKEN")
jobs = [("Gyms", "Pune"), ("Gyms", "Bangalore"), ("Yoga Classes", "Pune")]
for category, city in jobs:
run = client.actor("themineworks/justdial-business").call(
run_input={"searchQuery": category, "city": city, "maxResults": 100})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if "_type" not in row:
print(city, row["name"], row.get("phone"), row.get("rating"))

A business that appears in two of your runs is charged in each run, because each run is billed on its own. If you merge the files, deduplicate on docid.

Calling list for a local sales team

{
"searchQuery": "Chartered Accountants",
"city": "Ahmedabad",
"maxResults": 100
}

Sort the rows by rating_count to call the busiest practices first, and use area to split the list between reps by locality. The phone field is ready to dial or to paste into a WhatsApp broadcast tool.

Market mapping: how crowded is a category, city by city?

{
"searchQuery": "Cloud Kitchens",
"city": "Mumbai",
"maxResults": 100
}

Run the same category for each city you care about, then plot latitude and longitude on a map and compare average rating and rating_count across cities. Remember that JustDial shows about 100 listings per search, so treat the count as JustDial's top results, not a census.

Weekly refresh of a lead list

Save the input above as a task and add a weekly schedule in Apify Console (Schedules, then Create new, for example 0 6 * * 1 for Monday 6 AM). Compare each week's docid values with the previous week's to spot businesses that have newly joined JustDial's top results. Each scheduled run is billed like a manual one, per business delivered. With "monitorMode": true each run delivers, and bills, only businesses you have not received before (see Run it on a schedule).

Input parameters

ParameterTypeDefaultWhat it does
searchQuerystringnone (form prefill: Restaurants)The category or search term, as you would type it into JustDial: Restaurants, Gyms, Dentists, Hotels, Interior Designers. Needed for a run to return businesses.
citystringnone (form prefill: Mumbai)The Indian city to search in: Mumbai, Delhi, Bangalore, Hyderabad, Pune, Chennai and so on. Needed for a run to return businesses.
maxResultsinteger (1 to 1,000)100 (form prefill: 25)Most businesses to return. JustDial itself serves about 100 per search, so values above 100 return what JustDial has.
proxyConfigurationobjectnone (form prefill: Apify residential proxy, country India)The proxy for JustDial's search feed. The Console form fills in Apify's residential proxy in India, which JustDial blocks least. An API call that leaves this out runs on Apify's automatic datacenter proxy, which also worked in our tests (see the FAQ).
monitorModebooleanfalseDeliver only businesses not delivered by an earlier run with the same search. Skipped businesses are not charged. Made for weekly schedules.

"Form prefill" values fill the Console form for you but are not defaults: an API call that leaves searchQuery or city out sends nothing for it, and the run returns only a summary row.

The input schema marks no field as required, but the actor needs both searchQuery and city. For compatibility, a field called category is also read as the search term when searchQuery is empty.

What data do you get?

One row per business. A field JustDial leaves empty for a listing is left out of that row rather than filled with an empty value.

Who and how to reach them: name, phone (plain digits in JustDial's format, such as +(91)-9980221085; the WhatsApp number is used when the main number is missing), url (the business's JustDial page).

Where: address (street address as JustDial writes it), area (road and locality), city (as JustDial stores it; the case can vary, for example bangalore and Bangalore in the same run), latitude, longitude.

What and how good: category (JustDial's own label for the business, such as Dental Clinics, Clinics or Hospitals; this can differ from the term you searched), rating (JustDial star rating, 1 to 5), rating_count (number of ratings), verified (true when JustDial marks the listing verified; absent otherwise).

Bookkeeping: docid (JustDial's business ID, the key used to remove duplicates), scraped_at (ISO timestamp).

Each run also ends with two report rows: a _type: "summary" row with businesses, charged_for, total_available (JustDial's own count of results for your search), pages_fetched, ended_on_deadline (true when the run stopped early for its time limit) and the request counters, and a _type: "info" row with a short message. Neither is a business and neither is ever charged. Skip rows that have a _type field when you load the data.

Stable fields for automations

These 13 fields were present in every business row we sampled (23 rows across a September platform run and an October test run):

FieldWhat it holds
nameBusiness name as listed on JustDial
phonePlaintext phone number, such as +(91)-9035756830
addressStreet address as JustDial writes it
areaRoad and locality within the city
cityCity as JustDial stores it (case may vary)
categoryJustDial's category for the business
ratingStar rating, a number such as 4.8
rating_countNumber of ratings, an integer
latitudeLatitude, a number
longitudeLongitude, a number
urlLink to the business's JustDial page
docidJustDial's business ID
scraped_atISO timestamp when the row was captured

We will not rename these fields. New fields may be added over time; existing ones keep their names.

Output examples

Real rows from our runs.

A dental clinic from the 2 October test (Dentists in Bangalore):

{
"name": "Emerald Dental",
"phone": "+(91)-8105973211",
"address": "Opposite To Apollo Pharmacy Hsr Layout",
"area": "Sector 6 5th Main Road HSR Layout",
"city": "bangalore",
"category": "Dental Clinics",
"rating": 5,
"rating_count": 129,
"latitude": 12.9127826,
"longitude": 77.6324135,
"verified": true,
"url": "https://www.justdial.com/DT-15JYK81HDQQ",
"docid": "080PXX80.XX80.230330172501.V7B6",
"scraped_at": "2026-10-02T07:50:55.529Z"
}

A restaurant from a September platform run (Restaurants in Mumbai), where category lists JustDial's cuisine tags:

{
"name": "Sanaya Dhaba",
"phone": "+(91)-8460396893",
"address": "Near Fountain Bridge Mira Road East",
"area": "NH-48 Mira Road East",
"city": "mumbai",
"category": "Multicuisine, Mughlai",
"rating": 4.7,
"rating_count": 95,
"latitude": 19.29596,
"longitude": 72.864812,
"verified": true,
"url": "https://www.justdial.com/DT-43B3I8FX2IN",
"docid": "022PXX22.XX22.241014222059.K7Q1",
"scraped_at": "2026-09-01T21:10:11.198Z"
}

The summary row that ends a run (never charged; from the same September run, where 3 businesses were asked for and JustDial reported 100 in total; two internal cost estimates trimmed):

{
"_type": "summary",
"businesses": 3,
"charged_for": 3,
"total_available": 100,
"charged": 3,
"charge_failures": 0,
"empty_streak": 0,
"total_empty": 0,
"yield_guard_tripped": false,
"requests": 1,
"delivered": 3,
"profit_guard_tripped": false,
"scraped_at": "2026-09-01T21:10:11.269Z"
}

A run without a city or searchQuery ends with only {"_type": "summary", "businesses": 0, "charged_for": 0} and a timestamp.

Pricing

Pay per event: you pay for each business delivered to your dataset, plus a small start fee per run.

EventFreeBronzeSilverGold and above
business-scraped, per business$0.003$0.0026$0.0023$0.002
business-scraped, per 1,000 businesses$3.00$2.60$2.30$2.00
apify-actor-start, per run$0.005 per GB of run memory, minimum one eventsamesamesame

The start fee, exactly. Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 512 MB by default, so a default run pays one event: $0.005. Raising the memory to 2 GB would make it $0.01; the actor does not need more than the default.

Worked examples. On the Gold tier, 100 businesses cost $0.20 plus $0.005. On the Free tier, the same 100 cost $0.30 plus $0.005, and a 10 business test costs $0.03 plus $0.005.

Never charged: a business that appears twice in the same run (charged once), listings without a name, pages JustDial blocked, retries on fresh IPs, the summary and info rows, and the proxy itself. A run that JustDial blocks from the first page, or a run missing city or searchQuery, pays only the start fee.

There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your own plan; if it and this table ever differ, the Pricing tab is right.

Run it on a schedule

Switch on monitorMode and the actor remembers which businesses it has delivered for this category and city. Each later run delivers only businesses you have not received before, and you pay only for those.

  1. Fill in the input, tick Monitor mode, and save it as a task.
  2. In Apify Console open Schedules, click Add schedule, and pick Weekly (or a cron such as 0 6 * * 1).
  3. Add the saved task to the schedule and click Save.
{
"searchQuery": "Interior Designers",
"city": "Bangalore",
"maxResults": 100,
"monitorMode": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "IN" }
}

The first run delivers every business it finds. Each later run reads the same top maxResults listings and delivers only businesses whose docid it has not delivered before. Skipped businesses are never charged; the start fee applies to every run as usual. JustDial reshuffles its top listings from one visit to the next: in our 9 October test, two runs a minute apart on the same search shared only 5 of their top 20 businesses. So the first few scheduled runs keep finding businesses that were simply not shown before, and the list grows toward JustDial's full set for the search. A run that finds very little that is new may stop a little early to keep its cost down; the summary row says why. The last row of each run (_type: "info") gives new_this_run and skipped_already_seen. The history belongs to the search: change searchQuery or city and a new history starts; change maxResults and it carries on.

FAQ

What is JustDial? JustDial (justdial.com) is India's largest local business directory, listing shops, clinics, restaurants, service providers and professionals across Indian cities with phone numbers, addresses and customer ratings. This actor reads its public search results, the same listings any visitor sees.

How many businesses can I get? Up to about 100 per search. JustDial serves 10 listings per page and, in both searches we recorded, reported 100 results in total; the actor stops when it reaches that total or your maxResults, whichever is lower. A page can also repeat a listing from an earlier page, which is skipped, so a 100 result search can deliver slightly fewer than 100 businesses. For more, run more categories (for example Dentists, Orthodontists and Dental Clinics) or more cities.

Are the phone numbers real or masked? Real. JustDial's search feed carries the full number, and the actor returns it as JustDial formats it, for example +(91)-9980221085. All 23 business rows we sampled had a phone number.

How fresh is the data? Every run queries JustDial live, so you get the listing as JustDial shows it at that moment. Ratings and rating counts change as customers review the business.

Do I need a JustDial account, cookies or an API key? No. You need only an Apify account. The actor does not log in to JustDial.

Which proxy does it use, and do I pay for it? The Console form comes prefilled with Apify's residential proxy in India, which JustDial blocks least. An API call without proxyConfiguration uses Apify's automatic datacenter proxy instead; our September platform run on it got through on the first request, and our 2 October datacenter test delivered 20 businesses, with some pages needing several fresh IPs. Either way the proxy is included in the per-business price.

What happens when JustDial blocks a request? JustDial's Akamai protection often blocks an IP after one request. The actor then retries the page on a fresh proxy IP, up to 6 times; an IP that has not answered within 30 seconds is replaced the same way. If page 1 cannot be reached after 6 tries, the run ends with a summary row that says it was blocked, and you pay only the start fee; running it again usually works because the IPs rotate. If a later page cannot be reached, you keep and pay for the businesses already delivered. The actor also stops early when its own proxy spend runs well ahead of the businesses delivered, so a heavily blocked run does not drag on.

What happens when a run reaches its time limit? The actor watches the run's timeout (300 seconds unless you change it in Run options). Shortly before it, it stops starting new pages and retries, keeps and charges only the businesses already delivered, and ends as Succeeded with a summary row that says ended_on_deadline: true. If that happens often, give the run a longer timeout.

Why is the category different from what I searched? category is JustDial's own label for each listing. A search for Dentists returns mostly Dental Clinics and Dentists, but JustDial also mixes in related listings such as Clinics or Hospitals. Filter on category if you need an exact match.

Why do some rows have no verified field? verified appears only when JustDial marks the listing as verified, with the value true. Fields JustDial leaves empty are dropped from the row rather than sent as blank.

Can I run it on a schedule? Yes. Save your input as a task, then in Apify Console open Schedules, click Create new, pick a time or a cron expression such as 0 6 * * 1, and add the task. Each scheduled run is billed per business delivered, exactly like a manual run. Nothing is charged for the schedule itself. Set monitorMode to true to get only businesses not delivered by an earlier run with the same input.

How do I export the data? From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. Remove rows that have a _type field if you want businesses only.

Can I use it from Claude, ChatGPT or another AI assistant?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/justdial-business.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http justdial-business "https://mcp.apify.com/?tools=themineworks/justdial-business".

Is it legal to scrape JustDial? The actor collects only public business listings that anyone can see on JustDial without logging in, and it does not get past any login wall or paywall. The data is about businesses, but some listings belong to sole traders whose business number is also a personal number. You are responsible for how you use the data, including JustDial's terms, India's Digital Personal Data Protection Act, telemarketing rules such as TRAI's Do Not Disturb registry, and laws such as GDPR and CCPA where they apply. This is general information, not legal advice.

Integrations

  • Google Sheets: export a run to a sheet, or use Apify's Google Sheets integration to append each scheduled run.
  • Make, Zapier and n8n: use the Apify app or node to start a run and send the businesses to a CRM, a dialer or a WhatsApp tool.
  • Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
  • API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
  • MCP clients: Claude, ChatGPT, Cursor, VS Code and Claude Code can call the actor through https://mcp.apify.com.

More from The Mine Works

Leads and business directories

Social media and video

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

Jobs and hiring

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

More tools

Support

Found a bug or need a field we do not return yet? Open an issue on the Issues tab of this page and we will reply there. To ask for a new directory or data source, email dmineworks@gmail.com. A guide and FAQ for this actor also live at themineworks.com.

JustDial Scraper turns a category and a city into a clean list of Indian businesses with plaintext phone numbers, addresses, ratings and map points, billed per business delivered.