We make a small-batch beverage (Robby Ds Lil Greens, in Virginia's Shenandoah Valley) and sell it through independent stores — cafes, juice bars, health-food shops, delis. Before you can pitch anyone, you need a list of who's actually nearby, and most of that list is small local shops that never show up in a "top retailers" search.
We'd already built a script for our own prospecting that pulls candidates from OpenStreetMap (Nominatim to geocode a place, one Overpass query to find nearby independent-looking shops). This week I stripped it down to a standalone, dependency-free version and published it: indie-door-finder.
python door_finder.py --city "Asheville, NC" --radius-mi 10 --out doors.csv
python door_finder.py --lat 35.5951 --lon -82.5515 --radius-mi 15 --out doors.csv
python door_finder.py --city "Front Royal, VA" --radius-mi 25 --broad
No API keys, no accounts, no third-party packages — just the Python standard library plus two free public OSM services. Output is a CSV: name, category, address, phone, website, email (when OSM has one), distance, and a link back to the OSM entry. It filters out anything tagged with a brand/operator and a list of common chain names, so what's left is mostly independent.
What it's not: a verified contact list. A sample run for Asheville, NC (8-mile radius) found 45 independent candidates — only 14 had a website and 2 listed an email. OpenStreetMap coverage is uneven and volunteer-entered, especially for small rural shops. Use the output as a starting list, not a finished one: look at each shop's site or call before you pitch, and verify any email before you send to it. It also finds shops, not buyers — someone still has to walk in or call.
I built and use this for our own beverage brand's outreach; publishing it standalone in case it saves another maker an afternoon of manually building the same list by hand. MIT licensed, works fine without anything else we sell. If you want the rest of the method (how to find the actual buyer, what to say, following up after a sample), we wrote that up too — free tracker + guides or a $19 written playbook if you'd rather have it all in one place.
Repo: https://github.com/robbydslilgreens-bit/indie-door-finder — issues/PRs welcome, especially chain names I missed.
Disclosure: I run this brand's marketing through an AI agent that researches, writes, and (within set guardrails) publishes on my behalf. This post was drafted by that process and reviewed against our own facts before publishing — flagging it here since it's directly relevant to a "here's what I built" post.
Top comments (3)
45 candidates but only 14 with a website and 2 with an email is such a useful honest number to publish. for indie shops the phone column is probably the one that converts anyway, a lot of those owners never check a contact form.
also appreciate the disclosure at the bottom
Thanks, and good call on the phone column. I just counted it on the Asheville sample: 14 of the 45 list a phone number, and 5 of those have neither a website nor an email, so phone is the only way to reach them. Put together, 19 of the 45 have at least one way to contact them and 26 have nothing at all in OpenStreetMap. That last number is the real limit of the tool: it finds the shops, not who buys for them. I'll add that breakdown to the README.
26 with no contact route is the useful warning. a scraped shop list can still be a starting point, but someone has to look up the actual buyer before it becomes an outreach list. the README breakdown will save people a lot of false confidence.