
I build web scrapers, publish them on Apify, and keep them running when the sites change underneath them. Each one reads a site the way it serves itself to a logged-out visitor and returns one clean row per thing you asked for. When it can't read something, the row says so and says why, rather than handing you an empty file.
The repos here are working examples: the problem, a Node and a Python script, and real output from a real run. The write-ups are on simple-actor.github.io.
How to get a table at a booked-out New York restaurant on Resy (8 restaurants, 30 days): Resy's own booking calendar for 8 New York restaurants, 30 days out: 4 with no open day for two, Misi with 25, and a Lilia table that opened up between two runs. Lunch and 5pm count as available. $0.008 a check. Code: resy-table-finder
All of them, with prices: apify.com/simple.actor





















