Tabelog Restaurant Scraper (Japan)
Pricing
from $0.49 / 1,000 results
Tabelog Restaurant Scraper (Japan)
Scrapes restaurants from Tabelog — Japan's #1 restaurant review site. Search any Japanese area by prefecture, district or neighbourhood with 35 cuisine genres; returns name, rating, review count, nearest station, budget, feature tags, address, GPS coordinates and phone number.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Scrapes restaurants from Tabelog (食べログ) — Japan's #1 restaurant review site, run by the Kakaku.com group. Think Yelp, but the one Japan actually uses.
Public data only. No login, no cookies, no browser. No bot challenge of any kind — 8 of 8 TLS profiles returned clean 200s on both list and detail pages.
The one thing you need to know before using this
A wrong area CODE returns the parent area, silently.
Tabelog areas are hierarchical, and a code it does not recognise is not rejected — it just drops that level:
| Requested | What you actually get | Results |
|---|---|---|
tokyo/A1301/A130101 | Ginza | 2,669 |
tokyo/A1301/A999999 | Ginza & Shimbashi & Yurakucho | 6,260 |
tokyo/A9999/A999999 | all of Tokyo | 139,211 |
All three answer HTTP 200 with real restaurants. This actor reads Tabelog's
own breadcrumb — the one echo that reveals what it genuinely resolved — and
if a level was dropped it stops before paging, emitting one
SEARCH_SUMMARY with areaApplied: false plus upstreamHeading and
upstreamBreadcrumb showing what Tabelog actually searched.
A wrong prefecture (notaprefecture) is a clean 404, and a wrong genre
is refused before the run starts — so only the area codes need this defence.
What you get
Three record types share one dataset, told apart by recordType.
RESTAURANT — one row per restaurant
List rows carry name, rating, review count, nearest station with walking distance, genre, dinner and lunch budget bands, and feature tags (credit cards, non-smoking, Wi-Fi, private rooms…).
With Fetch full restaurant details on (the default), each row also gets
restaurantDetails — Tabelog's Schema.org record, verbatim: exact street
address with postal code, GPS coordinates, phone number, price range and
cuisine list.
SEARCH_SUMMARY — one row per area searched
Tabelog's own result total, how deep this run paged, the resolved area
(heading + breadcrumb), areaApplied, and whether the query hit the
1,200-row ceiling.
ERROR — one row per input that could not be processed
Every input maps to at least one row, so nothing disappears silently.
Input
| Field | What it does |
|---|---|
| Areas | tokyo, tokyo/A1301, tokyo/A1301/A130101, or a pasted list URL — one search each |
| Genre | one of 35 verified cuisine slugs, or any |
| Sort by rating | highest-rated first (the only sort Tabelog honours) |
| Restaurant URLs | scrape specific restaurants directly, skipping search |
| Max restaurants per area | 0 = unlimited, meaning up to Tabelog's own 1,200 cap |
| Min interval between requests | the speed control — 0.4s default ≈ 2.5 req/s |
Getting an area path
Browse to the area on tabelog.com and copy the address — that is the whole
trick. https://tabelog.com/en/tokyo/A1301/A130101/rstLst/ can be pasted in
as-is, or shortened to tokyo/A1301/A130101.
Example
{"areas": ["tokyo/A1301/A130101", "osaka/A2701/A270101"],"genre": "ramen","sortByRating": true,"maxItems": 200,"includeRestaurantDetails": true}
Notes on reliability
- No WAF. Both surfaces answered 200 on
chrome124,chrome120,chrome131,safari17_0,safari18_0,edge101,firefox133andchrome99_android. chrome99_androidis excluded anyway — it is served the mobile document (989 KB vs 282 KB), whose markup has no result counter, so it would quietly degrade every row it touched. Desktop profiles only.- Speed is controlled by request rate, not concurrency. The crawl is
paced to one request every 0.4s by default (≈2.5/second) across all
workers.
maxConcurrencyonly absorbs latency variance — raising it past about 5 will not make a run finish sooner, because the rate cap binds first. To go faster, lower Min interval between requests; a 20-row crawl takes ~9s at 0.4s and ~4.6s at 0.15s. - Politeness is deliberate. Tabelog's
robots.txtgives named crawlersCrawl-delay: 5and states no rule for generic clients, but a site with no bot challenge at all is one worth not provoking. - Residential proxy pinned to Japan is the cloud default — a JP exit sees the same regional content a real visitor does.
- Pagination ends honestly: page 61 is genuinely empty rather than looping.
Known limits
- 1,200 rows per query (60 pages × 20), whatever the total says. Use a deeper area code or a genre to reach the rest.
- Reviews are not included. Review text is a different data-type for a
different audience, it multiplies request count without bound, and
robots.txtdisallows the per-reviewer paths. It belongs in a sibling actor. - Only the rating sort is offered — review-count and budget sorts were tested and Tabelog silently ignores them.
- This scrapes the English site (
/en/). Some smaller restaurants have thinner English records than their Japanese ones.