# Indonesia Business Lead Intelligence (`devan_ziho/indonesia-business-lead-intelligence`) Actor

Find, enrich, score, and prioritize Indonesian business leads from Google Maps. Get normalized +62 phone numbers, WhatsApp-ready contacts, Indonesian address intelligence, ratings, lead scores, opportunity scores, and AI-ready CRM data.

- **URL**: https://apify.com/devan\_ziho/indonesia-business-lead-intelligence.md
- **Developed by:** [Devan Primadita](https://apify.com/devan_ziho) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 qualified business leads

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Indonesia Business Lead Intelligence

Find, enrich, score, and prioritize Indonesian business leads from Google Maps.

Built specifically for AI agents, sales automation, CRM enrichment, local market research, and Indonesian business intelligence.

### Why use this Actor?

Most business lead scrapers return raw Google Maps data.

Indonesia Business Lead Intelligence adds an intelligence layer designed specifically for Indonesia:

- Normalize Indonesian phone numbers to +62
- Detect WhatsApp-ready contacts
- Generate direct WhatsApp URLs
- Normalize Indonesian addresses
- Identify city / regency
- Identify district / kecamatan
- Identify village / kelurahan when available
- Detect province and postal code
- Remove duplicate businesses
- Score lead quality
- Score sales opportunities
- Explain why a lead may be attractive
- Recommend the best contact channel
- Recommend the next outreach action
- Return AI-ready and CRM-ready JSON

### Example use cases

Use this Actor to find:

- Coffee shops in Surabaya
- Beauty clinics in Jakarta
- Dental clinics in Bandung
- Restaurants in Bali
- Car dealers in Malang
- Hotels in Yogyakarta
- Property agents in Jakarta
- Manufacturers in East Java
- Local suppliers
- B2B prospects
- Businesses with WhatsApp numbers
- Businesses with weak digital presence

### Example input

````json
{
  "search_queries": [
    "coffee shops"
  ],
  "location": "Surabaya, Indonesia",
  "max_results_per_query": 50,
  "normalize_indonesian_address": true,
  "normalize_phone": true,
  "deduplicate": true,
  "only_open": true,
  "enrich_contacts": false,
  "include_social_profiles": false
}
Example output
{
  "business_name": "Example Coffee",
  "category": "Coffee shop",
  "phone_normalized": "+6281234567890",
  "whatsapp_ready": true,
  "whatsapp_url": "https://wa.me/6281234567890",
  "email": null,
  "website": null,
  "normalized_address": "Jalan Example, Tegalsari, Kota Surabaya, Jawa Timur",
  "district": "Tegalsari",
  "city": "Kota Surabaya",
  "province": "Jawa Timur",
  "rating": 4.7,
  "review_count": 218,
  "lead_score": 67,
  "lead_quality": "high",
  "opportunity_score": 27,
  "opportunity_level": "low",
  "data_confidence": 100,
  "best_contact_channel": "whatsapp",
  "recommended_action": "WhatsApp outreach recommended",
  "source": "google_maps"
}
Lead intelligence
Lead score

lead_score measures how complete and useful the business lead is.

Signals include:

Phone availability
WhatsApp readiness
Email availability
Website availability
Google rating
Review count
Address completeness
Indonesian administrative location data

Typical interpretation:

80–100: Excellent
65–79: High
45–64: Medium
0–44: Low
Opportunity score

opportunity_score estimates whether a business may be an interesting sales or outreach opportunity.

Depending on enabled enrichment, signals may include:

Direct phone availability
Review volume
Rating
Missing website
Missing public email
Weak social presence

The Actor also returns:

opportunity_level
opportunity_reasons

This makes the score easier for AI agents and sales teams to understand.

Data confidence

data_confidence measures how much useful source data is available for each business.

Signals include:

Google Place ID
Phone
Address
City
Province
Rating

This score is separate from sales opportunity.

Best contact channel

The Actor can recommend:

whatsapp
email
phone
website
manual_research

This is useful for AI sales agents and automated CRM workflows.

Indonesian phone normalization

Numbers such as:

081234567890

can be normalized to:

+6281234567890

The Actor can also generate:

https://wa.me/6281234567890

for WhatsApp-ready Indonesian phone numbers.

Indonesian address intelligence

Addresses can be normalized into structured Indonesian administrative data:

Province
→ City / Regency
→ District / Kecamatan
→ Village / Kelurahan

when sufficient information is available.

This functionality is powered by Indonesia Address Parser & Normalizer.

Contact enrichment

Enable:

{
  "enrich_contacts": true
}

to request additional website contact enrichment.

This may help discover:

Email addresses
Website contact information
Social media profiles

Contact enrichment may increase upstream processing costs.

Social enrichment

Enable:

{
  "include_social_profiles": true
}

to request deeper social profile enrichment.

Possible profiles include:

Facebook
Instagram
YouTube
TikTok
X / Twitter

This feature may increase upstream processing costs.

AI agent example

An AI agent can use this Actor for requests such as:

Find 100 beauty clinics in Surabaya.
Return WhatsApp-ready contacts, normalized Indonesian addresses,
ratings, review counts, lead scores, opportunity scores,
and recommend which businesses should be contacted first.

The Actor returns structured data that can be passed directly into:

AI agents
CRM systems
Sales automation
Make
Zapier
n8n
Google Sheets workflows
Custom APIs
Lead qualification pipelines
Dataset views

The Actor includes multiple result views:

Business Leads

General enriched business data.

Sales Intelligence

Lead scores, opportunity scores, contact channels, and recommended actions.

Location Intelligence

Normalized Indonesian addresses and geographic information.

Filters

You can filter results using:

Minimum Google rating
Minimum review count
Require phone
Require website
Require email
Skip closed businesses
Maximum results per query
Data source

Business discovery is powered by:

compass/crawler-google-places

Indonesian address normalization is powered by:

devan_ziho/indonesia-address-parser

Pricing

The Actor uses pay-per-result pricing.

You pay for qualified business leads written to the output dataset.

Optional upstream enrichment features may increase underlying processing costs.

Responsible use

Use business and contact information responsibly.

Users are responsible for complying with applicable:

Privacy laws
Data protection regulations
Marketing regulations
Anti-spam rules
Platform terms

Do not use this Actor for unlawful harassment, spam, or prohibited outreach.

# Actor input Schema

## `search_queries` (type: `array`):

What businesses do you want to find? Example: coffee shops, dental clinics, beauty clinics, car dealers.
## `location` (type: `string`):

Indonesian city or area to search.
## `max_results_per_query` (type: `integer`):

Maximum Google Maps places to collect for each search query.
## `language` (type: `string`):

Language used for Google Maps result details.
## `min_rating` (type: `number`):

Optional minimum business rating.
## `min_reviews` (type: `integer`):

Only keep businesses with at least this many Google reviews.
## `require_phone` (type: `boolean`):

Only return businesses that have a phone number.
## `require_website` (type: `boolean`):

Only return businesses that have a website.
## `require_email` (type: `boolean`):

Only return businesses with an extracted email. Enabling this also activates upstream contact enrichment.
## `only_open` (type: `boolean`):

Skip businesses marked as temporarily or permanently closed.
## `normalize_phone` (type: `boolean`):

Convert Indonesian phone numbers such as 0812... into international +62 format.
## `normalize_indonesian_address` (type: `boolean`):

Use Indonesia Address Parser & Normalizer to resolve province, city/regency, district, and village where possible.
## `deduplicate` (type: `boolean`):

Automatically remove duplicate Google Maps businesses.
## `enrich_contacts` (type: `boolean`):

Ask the Google Maps upstream Actor to extract business emails and social links from websites. This may increase upstream processing cost.
## `include_social_profiles` (type: `boolean`):

Enrich discovered Facebook, Instagram, YouTube, TikTok and X profiles. This is an optional upstream paid add-on and may increase cost.

## Actor input object example

```json
{
  "search_queries": [
    "coffee shops"
  ],
  "location": "Surabaya, Indonesia",
  "max_results_per_query": 50,
  "language": "id",
  "min_rating": 0,
  "min_reviews": 0,
  "require_phone": false,
  "require_website": false,
  "require_email": false,
  "only_open": true,
  "normalize_phone": true,
  "normalize_indonesian_address": true,
  "deduplicate": true,
  "enrich_contacts": false,
  "include_social_profiles": false
}
````

# Actor output Schema

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

Open the dataset containing enriched and scored Indonesian business leads.

# 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 = {
    "search_queries": [
        "coffee shops"
    ],
    "location": "Surabaya, Indonesia"
};

// Run the Actor and wait for it to finish
const run = await client.actor("devan_ziho/indonesia-business-lead-intelligence").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 = {
    "search_queries": ["coffee shops"],
    "location": "Surabaya, Indonesia",
}

# Run the Actor and wait for it to finish
run = client.actor("devan_ziho/indonesia-business-lead-intelligence").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 '{
  "search_queries": [
    "coffee shops"
  ],
  "location": "Surabaya, Indonesia"
}' |
apify call devan_ziho/indonesia-business-lead-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devan_ziho/indonesia-business-lead-intelligence"
        }
    }
}
```

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/QCeNVy1lRQiAmicJ1/builds/jEiKVpy2fkBVKTK06/openapi.json
