<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ben Barazandeh</title>
    <description>The latest articles on DEV Community by Ben Barazandeh (@dedicated_crest).</description>
    <link>https://dev.to/dedicated_crest</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4207142%2F33dbbacd-8d9a-4b55-90a3-03ad7330b025.png</url>
      <title>DEV Community: Ben Barazandeh</title>
      <link>https://dev.to/dedicated_crest</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dedicated_crest"/>
    <language>en</language>
    <item>
      <title>Local Business Leads Without Scraping Google Maps: An OpenStreetMap + Overpass Guide</title>
      <dc:creator>Ben Barazandeh</dc:creator>
      <pubDate>Sun, 25 Oct 2026 19:34:25 +0000</pubDate>
      <link>https://dev.to/dedicated_crest/local-business-leads-without-scraping-google-maps-an-openstreetmap-overpass-guide-1igf</link>
      <guid>https://dev.to/dedicated_crest/local-business-leads-without-scraping-google-maps-an-openstreetmap-overpass-guide-1igf</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I'm Ben, and I built the Apify Actor mentioned later in this post. I charge per result for it. Everything in the tutorial part works with free tools too.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you sell to local businesses (web design, SEO, payments, insurance, supplies), you need lists like "every roofer in Denver with a phone number". Most people reach for a Google Maps scraper. That works, but Google's terms forbid scraping, and you aren't allowed to store or resell what you collect. That's a shaky foundation for a CRM you plan to keep for years.&lt;/p&gt;

&lt;p&gt;There's an open alternative a lot of people overlook: &lt;strong&gt;OpenStreetMap&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why OpenStreetMap?
&lt;/h2&gt;

&lt;p&gt;OpenStreetMap (OSM) is the community-built world map behind thousands of apps. Its data is licensed under the &lt;strong&gt;Open Database License (ODbL)&lt;/strong&gt;. You can store it, reuse it and even resell it, as long as you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;credit "© OpenStreetMap contributors" when you use it publicly, and&lt;/li&gt;
&lt;li&gt;keep any database you &lt;em&gt;publish&lt;/em&gt; from it under the ODbL too (share-alike).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OSM is full of businesses: shops, restaurants, clinics, offices and tradespeople, tagged with things like &lt;code&gt;amenity=dentist&lt;/code&gt;, &lt;code&gt;craft=plumber&lt;/code&gt; or &lt;code&gt;shop=bakery&lt;/code&gt;. Many have &lt;code&gt;phone&lt;/code&gt;, &lt;code&gt;website&lt;/code&gt;, &lt;code&gt;opening_hours&lt;/code&gt; and sometimes &lt;code&gt;email&lt;/code&gt; (or &lt;code&gt;contact:*&lt;/code&gt; variants).&lt;/p&gt;

&lt;p&gt;Here are the trade-offs up front:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;OpenStreetMap&lt;/th&gt;
&lt;th&gt;Google Maps scrapers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Licence&lt;/td&gt;
&lt;td&gt;ODbL: store and reuse with attribution&lt;/td&gt;
&lt;td&gt;Google ToS forbid scraping and storing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ratings and reviews&lt;/td&gt;
&lt;td&gt;Not in OSM&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage&lt;/td&gt;
&lt;td&gt;Very good in Europe and big cities, uneven for trades in small towns&lt;/td&gt;
&lt;td&gt;Most complete&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you need star ratings, OSM can't help. If you need a contactable list you can actually keep, it's worth a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Query OSM yourself with Overpass
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Overpass API&lt;/strong&gt; is a read-only query engine over OSM data. The basic pattern for a lead list is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;find the city's &lt;strong&gt;administrative boundary&lt;/strong&gt; and turn it into an area&lt;/li&gt;
&lt;li&gt;ask for every node, way and relation (&lt;code&gt;nwr&lt;/code&gt;) with your tag inside that area&lt;/li&gt;
&lt;li&gt;get back tags plus a centre point&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A minimal Overpass QL query looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[out:json][timeout:60];
area["boundary"="administrative"]["name"="Denver"]-&amp;gt;.city;
nwr["craft"="plumber"](area.city);
out center tags;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste it into &lt;a href="https://overpass-turbo.eu" rel="noopener noreferrer"&gt;overpass-turbo.eu&lt;/a&gt; to see results on a map. In a real pipeline you'll quickly hit the annoying parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ambiguous names.&lt;/strong&gt; Lots of places are called "Denver" or "Manchester", so you need to pin down the right boundary (country, state, &lt;code&gt;admin_level&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Busy public servers.&lt;/strong&gt; Public Overpass instances often reply "try again later". You need retries with backoff, and ideally failover between servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usage policies.&lt;/strong&gt; Public instances are run by volunteers and companies, each with its own policy. overpass-api.de, for example, asks commercial users to self-host or pay. Read the policy before you point a business workload at a server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Messy tags.&lt;/strong&gt; &lt;code&gt;phone&lt;/code&gt; vs &lt;code&gt;contact:phone&lt;/code&gt;, several values separated by &lt;code&gt;;&lt;/code&gt;, websites without &lt;code&gt;https://&lt;/code&gt;, and addresses split across &lt;code&gt;addr:*&lt;/code&gt; tags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplication&lt;/strong&gt; when you combine several categories or cities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is hard, but it adds up to a weekend of work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Or use the packaged version
&lt;/h2&gt;

&lt;p&gt;I packaged all of that into an Apify Actor, &lt;a href="https://apify.com/dedicated_crest/osm-local-business-leads" rel="noopener noreferrer"&gt;Local Business Leads&lt;/a&gt;. The input is plain English:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"categories"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plumber"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electrician"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hvac"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"roofer"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"locations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Denver, CO"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"enrichWebsites"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItems"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;95 built-in categories&lt;/strong&gt; (dentist, hvac, hair salon, lawyer, accountant, gym, veterinarian, hotel…), plus any raw OSM tag such as &lt;code&gt;shop=bakery&lt;/code&gt;, &lt;code&gt;craft=*&lt;/code&gt; or &lt;code&gt;cuisine~pizza&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resolves "Denver, CO" to Denver's &lt;strong&gt;official city boundary&lt;/strong&gt; in OSM, so it doesn't spill into the next town. It can also search a radius around a lat/lng.&lt;/li&gt;
&lt;li&gt;Resolves locations with Overpass itself, without calling the public Nominatim geocoder&lt;/li&gt;
&lt;li&gt;Uses only public Overpass instances whose published policy allows use in any project: &lt;strong&gt;VK Maps&lt;/strong&gt; and &lt;strong&gt;Private.coffee&lt;/strong&gt;. It doesn't use overpass-api.de. Queries run one at a time, with exponential backoff and failover. For big or frequent jobs you can plug in your own Overpass endpoint.&lt;/li&gt;
&lt;li&gt;Puts contact-rich leads first, and can filter to businesses that have a phone, website, email or any contact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's one real lead from a Denver roofers run (trimmed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Assurance Contractors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"roofer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1660 South Albion Street Suite 339, Denver, CO 80222"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1-720-837-1630"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"service@assurancecontractors.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"website"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://assurancecontractors.com/roofing-denver-co/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"openingHours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mo-Fr 09:00-17:00; Sa-Su closed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"latitude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;39.6863292&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"longitude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-104.9391307&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"osmId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node/9053239725"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"osmUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.openstreetmap.org/node/9053239725"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lastEditedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2023-09-20T05:33:48Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websiteEmails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"info@assurancecontractors.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websitePagesFetched"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"attribution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"© OpenStreetMap contributors, ODbL 1.0 – https://www.openstreetmap.org/copyright"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each row also has address parts, socials (Facebook, Instagram, LinkedIn, X, YouTube, TikTok), brand, operator, cuisine, wheelchair access and a Wikidata ID where they're mapped. Every row carries an &lt;code&gt;attribution&lt;/code&gt; field, an OSM link and a last-edited date, so you can see how fresh the entry is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Be honest about coverage
&lt;/h2&gt;

&lt;p&gt;This is the part most lead tools skip. Here are real fill rates from my live test runs on 17 Oct 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Search&lt;/th&gt;
&lt;th&gt;Leads&lt;/th&gt;
&lt;th&gt;Phone&lt;/th&gt;
&lt;th&gt;Website&lt;/th&gt;
&lt;th&gt;Email&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Restaurants + cafés, Manchester UK (only with phone or website)&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;
&lt;td&gt;87%&lt;/td&gt;
&lt;td&gt;17%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plumbers/electricians/HVAC/roofers, Denver CO + enrichment&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dentists, Austin TX + enrichment (capped at $0.05)&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;shop=bakery&lt;/code&gt; within 2 km of central Paris&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;td&gt;88%&lt;/td&gt;
&lt;td&gt;24%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is clear. Food, shops, healthcare and hotels in big cities are well mapped. &lt;strong&gt;Trades in US cities are thin.&lt;/strong&gt; 32 trade businesses across four categories in Denver is far fewer than Google would show. There are also no ratings or reviews. Use OSM where it's strong, and don't expect it to replace Google for every niche.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Fill in emails from each business's own website
&lt;/h2&gt;

&lt;p&gt;Email is the field OSM most often lacks. The fix is to visit each business's own website and read the contact details there.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;enrichWebsites: true&lt;/code&gt;, the Actor reads the homepage plus up to 4 contact/about/impressum pages. It stays on the business's own domain, respects robots.txt, sends at most 1 request per second per site and uses an identifiable User-Agent. In the Denver run, enrichment roughly doubled email coverage, from 12% (OSM tags alone) to 25%.&lt;/p&gt;

&lt;p&gt;If you're building this yourself, the same rules apply: be polite, stay on the business's own domain, and honour robots.txt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Export and automate
&lt;/h2&gt;

&lt;p&gt;Results land in an Apify dataset that you can download as CSV, Excel or JSON, or push to Google Sheets, HubSpot, Make, Zapier or n8n. To keep a list up to date, schedule a monthly run per city and dedupe on &lt;code&gt;osmId&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$0.003 per lead&lt;/strong&gt; ($3 per 1,000)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.002 per website enriched&lt;/strong&gt; ($2 per 1,000), charged only when enrichment is on and the site was reached&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You pay only for leads returned, and runs stop cleanly at your "maximum cost per run". The Austin dentist test stopped at 10 leads + 9 enrichments = $0.048. The free route (Overpass plus your own crawler) costs nothing but time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Play fair
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Credit "© OpenStreetMap contributors" when you use the data publicly, and remember the share-alike rule if you publish a derived database.&lt;/li&gt;
&lt;li&gt;Contact data comes with obligations. GDPR, CAN-SPAM, CASL and PECR rules apply to cold email. Honour opt-outs.&lt;/li&gt;
&lt;li&gt;Go easy on the public Overpass servers. Self-host or pay for an endpoint if you run big jobs.&lt;/li&gt;
&lt;li&gt;If a business's details in OSM are wrong, fix them on &lt;a href="https://www.openstreetmap.org" rel="noopener noreferrer"&gt;openstreetmap.org&lt;/a&gt;. The map gets better for everyone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Did a city come back thin, or do you have thoughts on the Overpass usage? Tell me in the comments. I'm especially keen to hear from OSM folks.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Map data © &lt;a href="https://www.openstreetmap.org/copyright" rel="noopener noreferrer"&gt;OpenStreetMap contributors&lt;/a&gt;, &lt;a href="https://opendatacommons.org/licenses/odbl/" rel="noopener noreferrer"&gt;ODbL 1.0&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>opensource</category>
      <category>leadgeneration</category>
      <category>api</category>
    </item>
  </channel>
</rss>
