Overview
Creepy Gopher searches, filters, and manages property listings. It was built by a five-person team during the Quera Software Engineering Bootcamp, in Go.
Why Go for a crawler
Crawling is dominated by waiting — on network responses, on pages rendering, on rate limits. The work is not CPU-bound, it is concurrency-bound, and how cheaply a language lets you wait on thousands of things at once decides throughput.
The common approach is Python driving Selenium, where each browser instance is heavy and concurrency means either threads fighting the GIL or a process pool that eats memory. Go's goroutines make a few thousand concurrent operations unremarkable, and the scheduler handles blocking I/O without the caller structuring anything around it. The result was substantially faster than an equivalent Python and Selenium implementation.
Playwright handles pages that need real rendering, but only where required — most listing pages yield to plain HTTP requests and parsing, which is an order of magnitude cheaper than driving a browser.
Telegram as the interface
The user interface is a Telegram bot, and this was the right call for the audience: property hunting happens on a phone, in short bursts. A bot needs no installation, no account creation, and no notification system of its own, since Telegram already provides all three.
Storage and deployment
Listings are normalized into PostgreSQL as they are extracted, so filtering runs as SQL rather than in application memory. The whole service is containerized with Docker.