# Wongnai Scraper - Thailand Restaurants & Businesses (`haketa/wongnai-scraper`) Actor

Wongnai scraper & data API for Thailand restaurants & local businesses: search by area, cuisine or keyword and export name, category, rating, review count, price range, address, GPS, opening hours & photos. Thailand F\&B and local market data, lead generation & research — fast, no login.

- **URL**: https://apify.com/haketa/wongnai-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Lead generation, Travel
- **Stats:** 9 total users, 0 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/platform/actors/running/actors-in-store#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

## Wongnai Scraper — Thailand Restaurants, Cafés & Local Businesses

Extract **Thailand local business data** from Wongnai at scale — restaurants, cafés, bars, bakeries, and more. Search by keyword, cuisine, or region and export clean, structured data: **name, category, rating, review count, price range, full address, district, GPS, and photos**.

No login. No API key. Give it a keyword (Thai or English) and get back a ready-to-use dataset in JSON, CSV, Excel, or via API.

> Built for F\&B market research, Thailand local lead generation, and delivery/POS competitive intelligence. Thailand's largest restaurant directory — over 2 million businesses.

***

### 🧭 Table of contents

- [What this scraper does](#what-this-scraper-does)
- [Why use it](#why-use-it)
- [Who it's for](#who-its-for)
- [What data you get](#what-data-you-get)
- [Input options](#input-options)
- [Input examples](#input-examples)
- [Output example](#output-example)
- [How to use (step by step)](#how-to-use-step-by-step)
- [Tips for best results](#tips-for-best-results)
- [Use cases](#use-cases)
- [Integrations & export](#integrations--export)
- [Pricing](#pricing)
- [FAQ](#faq)

***

### What this scraper does

Wongnai is Thailand's leading restaurant and local-business discovery platform, with millions of listings and reviews. This actor turns its results into structured data you can analyze.

Give it a **keyword** (e.g. `cafe`, `sushi`, `ก๋วยเตี๋ยว`), optionally narrowed to a **region**, and it pages through the results — returning a rich record for every business, including rating, review count, price range, address, and coordinates. You can also paste Wongnai listing URLs directly.

***

### Why use it

- ⚡ **Fast & efficient** — reads embedded data directly, no slow browser rendering.
- 🇹🇭 **Thailand-native** — understands Thai categories, addresses, districts, and price ranges.
- ⭐ **Ratings & reviews** — average rating and review/rating counts per business.
- 🌐 **English-friendly** — category names in English alongside Thai.
- 🗺️ **Geo-ready** — every business includes latitude/longitude for mapping.
- 💸 **Price & popularity** — price range, bookmarks, and photo counts for demand signals.
- 📦 **Export anywhere** — JSON, CSV, Excel, HTML table, or RSS, plus a full REST API and integrations.

***

### Who it's for

- **F\&B market research** — analyze cuisines, ratings, and price tiers across Thailand.
- **Delivery, POS & restaurant-tech vendors** — build prospect lists of restaurants by area.
- **Lead generation** — collect business names, locations, and categories at scale.
- **Franchises & chains** — monitor competitors and locations by district.
- **Data & AI teams** — feed fresh, structured Thai local data into apps and assistants.

***

### What data you get

Each business includes (when available):

| Field | Description |
| --- | --- |
| `id` | Wongnai business ID |
| `publicId` | Public ID |
| `name` | Business name |
| `branch` | Branch name |
| `url` | Wongnai business URL |
| `domain` | Business domain (restaurant, hotel, beauty…) |
| `category` | Primary category (English) |
| `categories` | All categories |
| `rating` | Average rating |
| `numberOfReviews` | Number of reviews |
| `numberOfRatings` | Number of ratings |
| `numberOfBookmarks` | Number of bookmarks |
| `numberOfPhotos` | Number of photos |
| `priceRange` | Price range |
| `lat` / `lng` | GPS coordinates |
| `zipcode` | Postal code |
| `address` | Street address |
| `subDistrict` | Sub-district |
| `district` | District |
| `province` | Province |
| `official` | Official business account |
| `premium` | Premium listing |
| `verified` | Verification flag |
| `ranking` | Ranking info |
| `neighborhoods` | Neighborhoods |
| `photo` | Main photo URL |
| `scrapedAt` | When the record was scraped |

***

### Input options

| Option | Type | Description |
| --- | --- | --- |
| `queries` | array | Search keywords (Thai or English) — cuisine, dish, or business type. |
| `regionId` | integer | Optional Wongnai region ID to restrict results (e.g. 9 = Bangkok). |
| `searchUrls` | array | Wongnai listing URLs to scrape directly. |
| `maxPagesPerQuery` | integer | Result pages to paginate per query/URL (~12 businesses/page). |
| `maxItems` | integer | Maximum businesses to save (0 = no limit). |
| `maxConcurrency` | integer | Parallelism setting. |
| `proxyConfiguration` | object | Residential proxy recommended (Thailand residential works best). |

***

### Input examples

#### 1. Cafés in Bangkok

```json
{
  "queries": ["cafe"],
  "regionId": 9,
  "maxItems": 200,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

#### 2. Multiple cuisines across all of Thailand

```json
{
  "queries": ["sushi", "ramen", "ก๋วยเตี๋ยว"],
  "maxPagesPerQuery": 20,
  "maxItems": 1000,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

#### 3. From a Wongnai URL

```json
{
  "searchUrls": ["https://www.wongnai.com/restaurants?regionId=9"]
}
```

***

### Output example

```json
{
  "id": 146581,
  "name": "Kenji's Lab Thonglor",
  "url": "https://www.wongnai.com/restaurants/146581Om-kenji-s-lab",
  "domain": "restaurant",
  "category": "Japanese",
  "categories": ["Japanese"],
  "rating": 4.22,
  "numberOfReviews": 50,
  "numberOfRatings": 65,
  "priceRange": "501 - 1,000 baht",
  "lat": 13.736727,
  "lng": 100.5844,
  "district": "Watthana",
  "address": "808/13, Soi Thara Rom 2",
  "official": true,
  "photo": "https://static.wongnai.com/.../photo.jpg",
  "scrapedAt": "2026-06-09T10:00:00.000Z"
}
```

***

### How to use (step by step)

1. Open the actor and click **Try for free**.
2. In **Search keywords**, add terms like `cafe`, `sushi`, or a Thai keyword.
3. (Optional) Set a **Region ID** to focus on a city such as Bangkok (9).
4. Set **Max pages per query** and **Max items** to control dataset size.
5. Click **Save & Start**.
6. When the run finishes, open the **Dataset** tab and export to JSON, CSV, or Excel, or pull it via API.

***

### Tips for best results

- **Keywords can be Thai or English.** `cafe`, `sushi`, `ก๋วยเตี๋ยว` all work.
- **Use a region ID** to focus on a city and get more relevant results.
- **Keep the residential proxy** — Thailand residential works best for reliable access at scale.
- **Increase `maxPagesPerQuery`** to go deeper; there are millions of businesses available.
- **Combine multiple keywords** in one run to cover several cuisines or business types.

***

### Use cases

- 🍜 **F\&B market research** — map cuisines, ratings, and price tiers by district.
- 🧲 **Lead generation** — build restaurant and café prospect lists by area.
- 🚚 **Delivery & POS sales** — target restaurants for onboarding and partnerships.
- 📊 **Competitive intelligence** — track competitors' ratings, reviews, and locations.
- 🤖 **AI & data products** — feed fresh, structured Thai local data into apps and assistants.

***

### Integrations & export

Export as **JSON, CSV, Excel, HTML table, or RSS**, or fetch results through the **API**. Connect to **Make, Zapier, n8n, Google Sheets, Slack, GitHub**, and more, or schedule runs to keep your dataset fresh.

***

### Pricing

This actor runs on a simple pay-per-result model — you only pay for the businesses you collect. Start small with the free tier and scale up as needed.

***

### FAQ

**What keywords can I use?**
Any cuisine, dish, or business type in Thai or English — `cafe`, `sushi`, `ก๋วยเตี๋ยว`, `bakery`, and more.

**How do I focus on one city?**
Set a Region ID (e.g. 9 for Bangkok), or paste a region-specific Wongnai URL.

**Do I get ratings and reviews?**
Yes — each business includes its average rating and review/rating counts.

**Do I need an account or key?**
No login or API key is required.

**Is the category in English?**
Yes — category names are provided in English alongside the Thai originals.

**How many businesses can I scrape?**
As many as you need — there are over 2 million listings. Increase `maxPagesPerQuery` and `maxItems`.

**Why is a residential proxy recommended?**
Wongnai uses bot protection; a residential proxy (Thailand works best) ensures reliable access at scale.

***

Need another Thailand data source, full review text, or a custom field? Open an issue on the actor's **Issues** tab — feedback and feature requests are welcome.

### 📅 Changelog & Maintenance

**Last updated:** 2026-07-02 — Actor verified and maintained. Data pipeline tested for quality, structure and freshness; selectors/endpoints confirmed against the live site.

# Actor input Schema

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

What to look for on Wongnai — a cuisine, dish, or business type (Thai or English). Add one or more, e.g. cafe, sushi, buffet. Leave empty to get a ready-made mix of popular Thailand food & drink spots.

## `region` (type: `string`):

Limit results to one city or province. Choose a popular destination below, or leave on 'All Thailand' to search the whole country.

## `searchUrls` (type: `array`):

Optional. Paste one or more Wongnai listing pages (a search, cuisine or area page) to scrape them directly. Most users can leave this empty and use the search keywords and city picker above.

## `maxPagesPerQuery` (type: `integer`):

How deep to paginate each search (about 12 businesses per page). Higher = more results, longer run.

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

Maximum number of businesses to collect. Set 0 for no limit.

## `maxConcurrency` (type: `integer`):

Maximum parallel page requests.

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

For reliable results at scale, keep the recommended residential proxy (Thailand works best).

## Actor input object example

```json
{
  "queries": [
    "cafe",
    "sushi"
  ],
  "region": "",
  "maxPagesPerQuery": 10,
  "maxItems": 100,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `businesses` (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": [
        "cafe",
        "sushi"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/wongnai-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": [
        "cafe",
        "sushi",
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/wongnai-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 '{
  "queries": [
    "cafe",
    "sushi"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call haketa/wongnai-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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