· 14 min read
Thailand Yellow Pages Scraper: 24 Data Fields per Record (2026)
Extracting records costs $5.00 per 1,000 results on the free plan, returning structured data directly from yellowpages.co.th across Thailand's 77 official provinces. Each record carries 24 output fields, capturing commercial names, addresses, coordinates, opening hours, LINE IDs, and directory identifiers. The extractor operates across dedicated search, category browse, and direct profile enrichment modes. This tool is built for sales prospecting teams and data aggregators targeting Thai commercial listings. It is not suitable for practitioners who need verified personal email addresses, as yellowpages.co.th records do not provide them.
Try it: open Thailand Yellow Pages Scraper on Apify, sign in on the free plan and run the prefilled example.
Can you try Thailand Yellow Pages Scraper before paying?
Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Thailand Yellow Pages Scraper a month, before run-start charges and platform usage.
The example request further down caps maxItems at 30, so a first run returns at most 30 results and costs at most $0.15 in result charges. That is enough to see the real shape of the data before deciding anything.
Thailand Yellow Pages Scraper was last updated on 2026-08-07. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 692,561 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.
What does it cost to run Thailand Yellow Pages Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
The primary driver of result charges is the maxItems setting combined with the volume of queries or categories provided. You can test your query logic cheaply on Apify's free plan, where the default maxItems limit of 30 costs at most $0.15 in result charges before expanding extraction size. Remember that platform usage is billed separately on top of result and run-start fees.
How do you run Thailand Yellow Pages Scraper from the API?
The schema marks 1 of its 8 controls as required: mode. The payload below uses the schema's own prefilled values, so it runs as written once you substitute your API token.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~thailand-yellow-pages-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","query":"restaurant","province":"Bangkok","category":"Restaurants & Food Shops","profileUrls":["https://www.yellowpages.co.th/profile/หยินหยาง-คลินิกฝังเข็ม-93ITTdSAL"],"language":"th","includeContactDetails":true,"maxItems":30}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"query": "restaurant",
"province": "Bangkok",
"category": "Restaurants & Food Shops",
"profileUrls": [
"https://www.yellowpages.co.th/profile/หยินหยาง-คลินิกฝังเข็ม-93ITTdSAL"
],
"language": "th",
"includeContactDetails": True,
"maxItems": 30
}
run = client.actor("crawlerbros~thailand-yellow-pages-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search",
"query": "restaurant",
"province": "Bangkok",
"category": "Restaurants & Food Shops",
"profileUrls": [
"https://www.yellowpages.co.th/profile/หยินหยาง-คลินิกฝังเข็ม-93ITTdSAL"
],
"language": "th",
"includeContactDetails": true,
"maxItems": 30
}
const run = await client.actor('crawlerbros~thailand-yellow-pages-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
The synchronous endpoint holds the connection open until the run finishes, which is convenient for small batches and wrong for large ones. For anything long running, start the run asynchronously and poll, or attach a webhook, so a dropped connection does not cost you the results.
Which Thailand Yellow Pages Scraper inputs matter, and which can you skip?
The primary control is mode, which dictates whether you search by query, browse by official category taxonomy, or enrich a list of profileUrls. For most initial runs, keep language at th and leave includeContactDetails enabled to ensure phone numbers and operating hours are fetched alongside core listing data.
mode(string): What to fetch from Thailand Yellow Pages (yellowpages.co.th). Default:"search".query(string): Product, service, shop name, company, phone number, or location term to search for, e.g.restaurant,hotel,plumber. Matches yellowpages.co.th's own site search. Default:"restaurant".province(string): Restrict search results to one of Thailand's 77 official provinces. Leave as "(none)" to search all of Thailand. Default:"".category(string): Exact yellowpages.co.th category ("heading") name to browse, in ENGLISH, e.g.Restaurants & Food Shops,Hotels (Bangkok Metro),Automobile Repairing & Service,Acupuncture Clinic. Must match the official heading name exactly (case-insensitive) - browse the full taxonomy at yellowpages.co.th/en/category to find exact names. Results that don't exactly match the requested category are automatically filtered out, so an approximate name (e.g.Hotelsinstead ofHotels (Bangkok Metro)) yields 0 records rather than unrelated ones. Default:"Restaurants & Food Shops".profileUrls(array): Full yellowpages.co.th business profile URLs (containing/profile/), e.g.https://www.yellowpages.co.th/profile/some-business-93ITTdSAL. Also accepts the numericdata-businessidredirect formhttps://www.yellowpages.co.th/profile/523342900374001. Default:[].language(string): Which language edition of yellowpages.co.th to browse for mode=search (address text renders in this language). Business names/descriptions are stored as entered by the business (usually Thai) regardless of this setting. Not used by mode=byCategory, which always matches against the English heading name for reliable category filtering. Default:"th".includeContactDetails(boolean): For search/byCategory modes, visit each business's own yellowpages.co.th profile page to add phone number, business hours, and full street address. Only works for businesses that have a native yellowpages.co.th profile page (not ones that link straight out to their own website). Adds one extra request per result. Default:true.maxItems(integer): Hard cap on the number of business records returned. Default:30.
Fixed-choice controls: mode accepts search (Search businesses (keyword + province)), byCategory (Browse an official category / heading), byProfileUrls (Enrich specific business profile URLs); province accepts 78 values (default ""), including Bangkok, "" ((none - search all of Thailand)), Amnat Charoen, Ang Thong; language accepts th (Thai (default site)), en (English).
What does Thailand Yellow Pages Scraper return?
Output records provide standard directory metadata including businessId, address, postalCode, latitude, longitude, and direct phone numbers where available. The output explicitly lacks direct personal email contacts and verified owner identities, as these fields are not part of the underlying directory schema.
businessId- the directory's internal business identifiername- business namecategory,categoryUrl- the official directory category and its browse URLaddress- address as shown in the directory (district/sub-district/province/postal code, and full street address when enriched or fetched from mode=byProfileUrls)province- one of Thailand's 77 provinces, parsed from the addresspostalCode- 5-digit Thai postal codelatitude,longitude- coordinates parsed from the listing's Google Maps linkdescription- the business's own product/service descriptionphone- phone number (only when the business has a native directory profile page and contact enrichment was requested, or inbyProfileUrlsmode)fax- fax number (same conditions asphone, when the business lists one)businessHours- opening hours text (same conditions asphone)lineId- LINE messenger ID (same conditions asphone, when the business lists one)facebookUrl- Facebook page URL (same conditions asphone, when the business lists one)imageUrl- listing photo, when the business uploaded oneprofileUrl- the business's yellowpages.co.th profile page (when it has one)websiteUrl- the business's own external website (when the directory links out directly instead of hosting a profile page)sourceUrl- canonical URL for this record (profileUrlorwebsiteUrl, whichever applies)customerId,headingCode,addressId- additional directory identifiers (only present when a profile page was fetched)recordType-businessListingorbusinessProfilescrapedAt- UTC timestamp
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Thailand Yellow Pages Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Run mode set to search with a specific query like restaurant and province set to Bangkok while keeping maxItems at 5 to confirm the schema output.
- Verify that the resulting dataset contains expected fields such as businessId, name, and address.
- Check whether includeContactDetails is returning phone and businessHours for entries that contain a native profileUrl.
- Switch mode to byCategory with an exact English category string like Restaurants & Food Shops to test official directory taxonomy matching.
- Confirm that records returned from category browsing omit empty attributes cleanly rather than writing null string artifacts.
- Scale maxItems up to your target volume and deploy scheduled runs across your selected list of 77 official provinces.
How do you apply it? Three worked playbooks
These are Thailand Yellow Pages Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Lead generation
Outcome: Build a list of businesses in a given city/province and category
Configure: Set mode to search, query to restaurant, province to Bangkok, includeContactDetails to true, and maxItems to 50.
Working method: Start with a narrow query in one province to evaluate phone number fill rates, then iterate across required commercial verticals.
Deliverable: A structured dataset containing Thai business names, phone numbers, complete street addresses, and directory profile URLs.
Stop condition: Stop if returned records lack phone numbers across multiple batches due to listings only having external website links.
Use case 2: Market research
Outcome: Measure business density by category across Thailand's provinces
Configure: Set mode to byCategory, category to Hotels (Bangkok Metro), includeContactDetails to false, and maxItems to 500.
Working method: Run parallel extractions across multiple province selections to aggregate business density metrics without incurring extra detail page requests.
Deliverable: A tabular breakdown of business counts, postal codes, and geographical coordinates grouped by province and category.
Stop condition: Stop if the requested category string yields zero records, indicating a mismatch against the site's official taxonomy.
Use case 3: Directory aggregation
Outcome: Sync a category into your own local-search product
Configure: Set mode to byProfileUrls, profileUrls to ["https://www.yellowpages.co.th/profile/หยินหยาง-คลินิกฝังเข็ม-93ITTdSAL", "523342900374001"], and includeContactDetails to true.
Working method: Feed a batch of known directory profile URLs or numeric identifiers to extract enriched location and operational metadata.
Deliverable: Normalized JSON records featuring customerId, headingCode, businessHours, LINE IDs, and coordinate pairs ready for ingest.
Stop condition: Stop if profile URLs fail to resolve to valid business records or return malformed identifier payloads.
What breaks, and how do you design around it?
Yellowpages.co.th listings that redirect straight to an external domain do not host native profiles, which prevents contact detail enrichment for phone numbers and hours. When querying by category, you must use exact English heading taxonomy names to prevent the filter from discarding valid results. If coordinate parsing fails on listings lacking map links, fall back to geocoding using the postalCode and address strings.
When should you not use Thailand Yellow Pages Scraper?
Do not use this Actor if your target market is outside Thailand or requires comprehensive B2B registry data such as registered capital, tax IDs, and executive rosters. If you need corporate registry records for neighboring markets, use the Vietnam Business Directory Scraper instead. If your operations focus on the Middle East, deploy the Egypt Yellow Pages Scraper - Business Directory. Furthermore, if your workflow requires direct personal email addresses for outreach, this directory will not satisfy your requirements because yellowpages.co.th listings omit email fields entirely.
What should you check before trusting the output?
- Field phone is missing or null when a record contains a websiteUrl instead of an internal profileUrl.
- Field category returns an empty array or 0 records if the heading string does not match the official taxonomy exactly.
- Fields latitude and longitude fail to parse when the source directory listing lacks a valid Google Maps link.
- Stop runs if total dataset results equal 0 due to an invalid English category name or an unrecognized province name.
None of this proves a record is correct. It gives a scheduled Thailand Yellow Pages Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the cost per 1,000 results for this scraper?
On Apify's free plan, the Actor costs $5.00 per 1,000 results, which works out to $0.005 per result. A run-start fee applies to every run that starts regardless of dataset output, and Apify platform usage is billed separately on top of these result charges.
Why do some extracted listings lack phone numbers and opening hours?
Phone numbers and business hours are only available for businesses that host a native profile page on yellowpages.co.th. Listings that link directly out to an external website do not have directory profile pages, meaning secondary contact attributes cannot be fetched.
Can I search for businesses using Thai script keywords?
Yes. The query field accepts native Thai script terms alongside Latin text. However, when using the category browsing mode, you must specify the exact English heading name defined in the directory taxonomy to ensure the matching filter captures listings properly.
How does the province filter work?
The province selector passes your chosen province directly into the directory's internal search parameter. The directory matches the filter against province, district, sub-district, and postal code text across Thailand's 77 official administrative provinces.
Why are some Facebook page URLs failing to open in programmatic tools?
Facebook blocks automated and non-browser traffic by default, returning generic errors when accessed via programmatic methods. The facebookUrl value in the dataset is the exact link provided on yellowpages.co.th and functions normally when opened inside a standard web browser.
Where to go next
When you are ready to run it, open Thailand Yellow Pages Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Thailand Yellow Pages Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- Egypt Yellow Pages Scraper - Business Directory: Scrape yellowpages.com.eg, Egypt's official business directory.
- Yellow Pages Kenya Scraper - Kenya Business Directory: Scrape Yellow Pages Kenya (yellowpageskenya.com), Kenya's business directory.
- Gelbe Seiten Scraper - German Yellow Pages Business Directory: Scrape Gelbe Seiten (German Yellow Pages) business listings.
- Yellow Pages PK Scraper - Pakistan Business Directory: Scrape YellowPagesPK.com, Pakistan's business listing directory.
- Eniro Scraper - Swedish Business Directory: Scrape Eniro.se (Sweden's leading business directory) listings.
- Kiwi Directory Scraper - New Zealand Business Directory: Scrape kiwidirectory.co.nz, a New Zealand business directory.
- DasTelefonbuch Scraper - German Business Directory: Scrape DasTelefonbuch.de (Germany's business directory) listings.
- Vietnam Business Directory Scraper: Scrape Vietnam's largest B2B business directory (Trang Vàng Việt Nam / Yellow Pages Vietnam) - search 250,000+ companies by keyword, industry, or province, with contact details, tax ID, founding year, employee count, product catalog and images.
Related guides:
- Uganda Business Directory Scraper: 3 Operational Workflows
- French Business Directory Leads Scraper: 3 Practical Use Cases
- Yellow Pages Ghana Scraper: 34,000+ Businesses Extracted (2026)
- Jordan Business Directory Scraper: 300+ Categories Covered (2026)
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-28.
Actor last updated by its maintainers on 2026-08-07.
Run outcome figures cover the 30 day public window ending 2026-09-28.
Featured actors
Thailand Yellow Pages Scraper
Scrape yellowpages.co.th - Thailand's official business directory. Search by keyword and province, browse official business categories, or enrich specific listings with phone numbers, hours, and coordinates.
Run on Apify ↗