Find businesses

Three steps: pick a city and a trade, open Google Maps, and click the “Read businesses” bookmark on the results. The businesses worth writing to are researched and added to Businesses on their own.

Read Google Maps for a city and a trade.

Read a directory in your browser

Google Maps — the one directory this reads for now.

Not ready yet — give the page a second, then drag it.

  1. 1. Press Ctrl+Shift+B — a strip of bookmarks appears at the top of the browser.
  2. 2. Drag the green button above onto that strip. Once, ever.
  3. 3. Press Open ↗ below. The directory opens, already searched.
  4. 4. On that tab, click ⬗ Read businesses here in the strip. A small window says how many it read.
  5. 5. Come back here. They are below, scored.

It contains no platform knowledge — it reads the links on whatever page you click it on, and this console works out what they mean — so a platform redesign is fixed by a deploy here and the bookmark never changes. There are three of them, and they differ by one word: this one asks for which businesses are listed. A LinkedIn page has jobs and people on it at once, which is why you say which rather than the console guessing.

Open ↗, scroll the results so the page has drawn them, then click ⬗ Read businesses here.

Open ↗Google Mapsevery listing in the results pane — name, rating, how many reviews, the trade and the phone when the card shows it. Scroll the list first: it only draws what it has scrolled to.

How the scraper actually works

  1. 01The city becomes a point on the map
    Pick from the list and its coordinates are already known. Type something freehand and it is geocoded by Nominatim, OpenStreetMap's free address lookup.
  2. 02The radius becomes a box, not a circle
    A box query uses the map's spatial index and answers in seconds; a radius query scans every business in the world with that tag first and times out. So 15 miles means a box 15 miles either side of the centre.
  3. 03Each niche becomes a map tag
    "plumber" is craft=plumber, "dentist" is amenity=dentist. Type something that is not in the list and it guesses across the seven tag families. You can also type a raw tag like craft=chimney_sweeper.
  4. 04Overpass answers, three mirrors deep
    Overpass is the free query engine over OpenStreetMap data. It is donated infrastructure, so if the first mirror is busy the run falls through to the second and third rather than failing.
  5. 05MerchantCircle is scraped in parallel
    A business directory that still serves readable HTML. Yelp, YellowPages, Manta and Hotfrog all answer 403 to a server — they sell their data. Where MerchantCircle blocks this server's datacenter IP, the request is retried through Jina's free reader.
  6. 06Rows are filtered and de-duplicated
    Your 'Looking for' choice decides whether a business with a website is kept. Duplicates across niches and sources collapse on phone number. A Facebook-only page still counts as having no website.
  7. 07Then the email hunt crawls their own sites
    For every row with a website, it fetches the homepage, then the contact page if the homepage was quiet. It undoes 'info [at] acme [dot] com', decodes Cloudflare's hidden addresses, and renders JavaScript-built sites through Jina when the raw HTML comes back empty. An address on their own domain beats a stray one; info@ beats a random personal address.

What a row does not prove. “No website in OSM” means the map does not record one — not that the business has none. Use the Google link on the row before anyone spends a call on it. Yield varies wildly by city, and it tracks how well-mapped a place is rather than how big it is: small cities often out-produce big metros.

Cost: nothing. No API key, no billing account, no rate limit you can hit by hand. In return the console waits 1.2 seconds between requests and identifies itself honestly to every source it asks — which is what their fair-use policies ask for, and the reason they keep answering.