We maintain a dataset of hotels in China that will actually let a foreigner check in — right now 9,718 properties across 359 cities, plus 7,003 attractions, 34,504 restaurants and 9,120 shopping locations with English names and coordinates.

Two things turned out to be harder than collecting the data.

Images. Every hotel needs a photo that is hotlinkable, fast and cheap to serve. We moved all of them onto object storage behind our own domain, converted them to WebP, and hashed the bytes so identical photos collapse into a single object. A typical hotel page loads around thirty images.

Showing an address to a taxi driver. A hotel listing is only half the problem; the other half is saying "this one" to someone who does not read English. Every listing carries a Chinese-name card — Chinese name, Chinese address, city — generated from the same record that renders the page.

The third problem was not technical. Scrapers pulled every image we had: one tool alone fetched 1.98 million of them in a week, and another swept every internal cache-key path we exposed. We now allow real search engines and refuse everything else, including requests with no user agent at all.

The whole thing runs on Cloudflare Workers with D1 for the database and R2 for images — about 6,700 indexable URLs served from one 9,000-line worker file.

If you are working on travel data for China, the underlying set is free to browse — no signup, no email wall.

Full dataset and methodology: https://sinostay.com/journal/1.html