# Sulekha Scraper & India Business Leads API (`tugelbay/sulekha-business-scraper`) Actor

Sulekha scraper for India business leads. Extract public Sulekha listings, phone numbers when available, localities, postal codes, coordinates, and profile URLs by category and city.

- **URL**: https://apify.com/tugelbay/sulekha-business-scraper.md
- **Developed by:** [Tugelbay Konabayev](https://apify.com/tugelbay) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Sulekha Scraper & India Business Leads API

![Sulekha Scraper hero](https://api.apify.com/v2/key-value-stores/bplRdpnd85eGQkW1N/records/sulekha-business-scraper-hero.png)

![Sulekha Scraper input output](https://api.apify.com/v2/key-value-stores/bplRdpnd85eGQkW1N/records/sulekha-business-scraper-input-output.png)

![Sulekha business lead dataset](https://api.apify.com/v2/key-value-stores/bplRdpnd85eGQkW1N/records/sulekha-business-scraper-dataset-preview.png)

Sulekha Scraper extracts public India business leads from Sulekha category and city pages. Use it to scrape Sulekha listings for plumbers in Bangalore, packers and movers in Delhi, pest control services in Mumbai, catering services in Chennai, tutors in Hyderabad, clinics in Pune, and other local service categories.

This actor is built for sales teams, local SEO agencies, lead generation workflows, market research, enrichment pipelines, and CRM imports that need structured Sulekha business data instead of manual copy-paste.

### Quick Answer

Sulekha Scraper is an Apify Actor for extracting public Sulekha business listings by category and city. It returns business name, public phone number when Sulekha exposes it, locality, postal code, coordinates, profile URL, image URL, description, source page, page number, and rank.

Phone coverage varies by Sulekha category, city, and result page. The actor includes `phoneAvailable` so you can filter rows that contain a public phone number.

### What You Can Scrape

- Sulekha business names
- Public phone numbers when available
- Category and city
- Locality, region, postal code, and address
- Latitude and longitude when available
- Sulekha profile URL
- Image URL
- Business description
- Source URL, page number, and rank

### Best Use Cases

- Build India local service lead lists
- Export Sulekha leads to CSV, Excel, Google Sheets, CRM, or API workflows
- Research local competitors by category and city
- Source service-provider databases for outreach
- Enrich India business records with public Sulekha profile URLs
- Compare category coverage across Indian cities
- Feed structured lead rows into sales automation or enrichment tools

### Input

| Field                | Type    | Description                                                                             |
| -------------------- | ------- | --------------------------------------------------------------------------------------- |
| `category`           | String  | Sulekha category, for example `Plumbers`, `Packers and Movers`, or `Catering Services`  |
| `city`               | String  | Indian city, for example `Bangalore`, `Delhi`, `Mumbai`, `Chennai`, `Hyderabad`, `Pune` |
| `startUrls`          | Array   | Optional Sulekha listing URLs. Overrides generated category/city pages                  |
| `maxItems`           | Integer | Maximum Sulekha business leads to save                                                  |
| `maxPages`           | Integer | Maximum generated listing pages to request                                              |
| `proxyConfiguration` | Object  | Indian residential proxy settings                                                       |

### Example Input

```json
{
  "category": "Plumbers",
  "city": "Bangalore",
  "maxItems": 20,
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
````

### Example Output

```json
{
  "name": "Kian Contractors",
  "category": "Plumbers",
  "city": "Bangalore",
  "locality": "Nr.Bus Stop",
  "region": "Bangalore",
  "postalCode": "560062",
  "address": "Nr.Bus Stop, Bangalore, 560062",
  "phone": "09883022097",
  "phoneAvailable": true,
  "description": "Kian Contractors is a trusted construction and plumbing service provider in Bangalore...",
  "imageUrl": "https://sulcdn.azureedge.net/biz-live/img/photos-11848675-17658932784401593.jpeg",
  "latitude": 12.842583,
  "longitude": 77.508656,
  "profileUrl": "https://www.sulekha.com/profile/kian-contractors-nr-bus-stop-bangalore",
  "sourceUrl": "https://www.sulekha.com/plumbers/bangalore",
  "page": 1,
  "rank": 3
}
```

### How It Works

1. The actor builds a Sulekha listing URL from `category` and `city`, or uses your `startUrls`.
2. It requests the public Sulekha result pages through an Indian residential proxy.
3. It extracts structured schema.org LocalBusiness records from the page.
4. It deduplicates profile URLs and saves clean dataset rows.

### SEO and GEO Notes

For AI search, answer engines, and LLM workflows, this actor is best described as:

- Sulekha scraper
- Sulekha business scraper
- Sulekha leads extractor
- India business leads API
- Sulekha phone number scraper
- India local services scraper
- Sulekha category city scraper

The actor is intentionally narrow: it focuses on public Sulekha listing data, not private user data, login-only lead forms, or guaranteed phone extraction from every Sulekha page.

### Frequently Asked Questions

#### Can this scraper extract Sulekha phone numbers?

Yes, when Sulekha exposes the phone number in public structured listing data. Phone coverage is not guaranteed for every listing, so each row includes `phoneAvailable`.

#### Does it support all Indian cities?

It supports Sulekha category/city pages that are publicly accessible. Common examples include Bangalore, Delhi, Mumbai, Chennai, Hyderabad, Pune, Kolkata, and Ahmedabad.

#### Does it require a proxy?

Yes. Sulekha blocks raw local and cloud traffic. Keep the default Apify Residential Proxy country set to India for reliable extraction.

#### Is this better than copying Sulekha results manually?

Yes. The actor turns Sulekha pages into structured JSON rows that can be exported to CSV, Excel, API, webhooks, CRM tools, and enrichment pipelines.

#### How should I start?

Start with `maxItems: 10` or `20`, check phone coverage for your exact category and city, then scale the categories that return useful contact data.

# Actor input Schema

## `category` (type: `string`):

Sulekha category to scrape, for example Plumbers, Packers and Movers, Catering Services, Pest Control Services, Tutors, Clinics, or Home Services.

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

Indian city name, for example Bangalore, Delhi, Mumbai, Chennai, Hyderabad, Pune, Kolkata, or Ahmedabad.

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

Optional Sulekha listing URLs. If provided, these override category/city URL generation.

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

Maximum number of Sulekha business leads to save. Start with 10-20 to check phone coverage for your category/city.

## `maxPages` (type: `integer`):

Maximum Sulekha result pages to request when using category/city input.

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

Sulekha blocks raw cloud/local traffic. Indian residential proxy is required for reliable runs.

## Actor input object example

```json
{
  "category": "Plumbers",
  "city": "Bangalore",
  "startUrls": [
    {
      "url": "https://www.sulekha.com/plumbers/bangalore"
    }
  ],
  "maxItems": 20,
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# 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 = {
    "category": "Plumbers",
    "city": "Bangalore",
    "startUrls": [
        {
            "url": "https://www.sulekha.com/plumbers/bangalore"
        }
    ],
    "maxItems": 20,
    "maxPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("tugelbay/sulekha-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 = {
    "category": "Plumbers",
    "city": "Bangalore",
    "startUrls": [{ "url": "https://www.sulekha.com/plumbers/bangalore" }],
    "maxItems": 20,
    "maxPages": 3,
}

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

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

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

```

## CLI example

```bash
echo '{
  "category": "Plumbers",
  "city": "Bangalore",
  "startUrls": [
    {
      "url": "https://www.sulekha.com/plumbers/bangalore"
    }
  ],
  "maxItems": 20,
  "maxPages": 3
}' |
apify call tugelbay/sulekha-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=tugelbay/sulekha-business-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Sulekha Scraper & India Business Leads API",
        "description": "Sulekha scraper for India business leads. Extract public Sulekha listings, phone numbers when available, localities, postal codes, coordinates, and profile URLs by category and city.",
        "version": "0.1",
        "x-build-id": "KlK9xVvleYzDbQ4zf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/tugelbay~sulekha-business-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-tugelbay-sulekha-business-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/tugelbay~sulekha-business-scraper/runs": {
            "post": {
                "operationId": "runs-sync-tugelbay-sulekha-business-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/tugelbay~sulekha-business-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-tugelbay-sulekha-business-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "category",
                    "city"
                ],
                "properties": {
                    "category": {
                        "title": "Sulekha category",
                        "type": "string",
                        "description": "Sulekha category to scrape, for example Plumbers, Packers and Movers, Catering Services, Pest Control Services, Tutors, Clinics, or Home Services."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "Indian city name, for example Bangalore, Delhi, Mumbai, Chennai, Hyderabad, Pune, Kolkata, or Ahmedabad."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional Sulekha listing URLs. If provided, these override category/city URL generation.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of Sulekha business leads to save. Start with 10-20 to check phone coverage for your category/city.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Max listing pages",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum Sulekha result pages to request when using category/city input.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Sulekha blocks raw cloud/local traffic. Indian residential proxy is required for reliable runs.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "IN"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
