<?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: Benjamin Flores Vega</title>
    <description>The latest articles on DEV Community by Benjamin Flores Vega (@bflores).</description>
    <link>https://dev.to/bflores</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%2F3889821%2F7aae0925-13e6-4252-a554-4704902d6f06.jpeg</url>
      <title>DEV Community: Benjamin Flores Vega</title>
      <link>https://dev.to/bflores</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bflores"/>
    <language>en</language>
    <item>
      <title>I Built a Restaurant Lead List for My Agency in 10 Minutes with UberEats Data</title>
      <dc:creator>Benjamin Flores Vega</dc:creator>
      <pubDate>Thu, 30 Jul 2026 04:06:08 +0000</pubDate>
      <link>https://dev.to/bflores/i-built-a-restaurant-lead-list-for-my-agency-in-10-minutes-with-ubereats-data-g78</link>
      <guid>https://dev.to/bflores/i-built-a-restaurant-lead-list-for-my-agency-in-10-minutes-with-ubereats-data-g78</guid>
      <description>&lt;p&gt;If you sell to restaurants — delivery tech, marketing services, POS systems, loyalty apps — you already know the annoying first step: &lt;strong&gt;finding the restaurants&lt;/strong&gt;. Not just any restaurants, but ones that actually match your ICP: a specific cuisine, in specific cities, on UberEats.&lt;/p&gt;

&lt;p&gt;The usual workflow looks like this: open UberEats, search "pizza" in a city, scroll, copy names and URLs into a spreadsheet, switch city, repeat. For a 20-city territory, that's an afternoon gone before you've sent a single email.&lt;/p&gt;

&lt;p&gt;I got tired of doing this by hand, so I automated it with the &lt;a href="https://apify.com/datacach/ubereats-stores-search-by-location-and-keyword" rel="noopener noreferrer"&gt;UberEats Stores Search by Location and Keyword&lt;/a&gt; actor on Apify — and turned it into a real lead-list pipeline in about 10 minutes.&lt;/p&gt;

&lt;h2&gt;The idea&lt;/h2&gt;

&lt;p&gt;The actor takes two simple inputs — a list of delivery addresses and a search keyword — and returns structured data for every matching store: name, UberEats URL, rating, rating count, estimated delivery time, city, and images. No browser, no manual scrolling, no HTML to parse.&lt;/p&gt;

&lt;p&gt;For lead gen, that means: pick your target cities, pick your keyword (a cuisine, or even a competitor's brand name to find restaurants that &lt;em&gt;don't&lt;/em&gt; have that tech yet), and get back a clean dataset you can filter and export straight into a CRM.&lt;/p&gt;

&lt;h2&gt;Walkthrough: Python + Apify client&lt;/h2&gt;

&lt;p&gt;Install the client:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pip install apify-client
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Call the actor for a batch of target cities:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "locations": [
        "85 Marsh St, Newark, NJ 07114, USA",
        "95th Ave, Ozone Park, NY 11416, USA",
        "1600 Pennsylvania Ave NW, Washington, DC 20500, USA",
    ],
    "search_keyword": "pizza",
    "max_search_results": 50,
}

run = client.actor("datacach/ubereats-stores-search-by-location-and-keyword").call(run_input=run_input)

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each item looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  "store_uuid": "35e7a890-3f2a-5948-815e-7a2a3cb77d1f",
  "name": "Pizza Near Me",
  "url": "https://www.ubereats.com/store/pizza-near-me/NeeokD8qWUiBXnoqPLd9Hw",
  "estimated_time_to_delivery": "20 min",
  "rating": 4.53,
  "rating_count": "14",
  "city": "Newark",
  "country_code": "US",
  "input": { "search_location": "85 Marsh St, Newark, NJ 07114, USA" }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Turning it into a lead list&lt;/h2&gt;

&lt;p&gt;Load it into a DataFrame and shape it into something a sales team can actually work:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import pandas as pd

df = pd.DataFrame(items)
df["rating_count"] = pd.to_numeric(df["rating_count"], errors="coerce")

# Underserved-but-loved: high rating, low review volume.
# These are restaurants doing well organically but with little
# marketing/tech investment behind them — prime outreach targets.
leads = df[(df["rating"] &amp;gt;= 4.3) &amp;amp; (df["rating_count"] &amp;lt; 50)]

leads = leads[["name", "city", "url", "rating", "rating_count", "estimated_time_to_delivery"]]
leads.to_csv("restaurant_leads.csv", index=False)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That filter is just a starting point — swap it for whatever signal matches your pitch. A few that work well in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slow delivery times&lt;/strong&gt; (&lt;code&gt;estimated_time_to_delivery&lt;/code&gt; &amp;gt; 40 min) → pitch for logistics/ops tooling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low rating count in a big city&lt;/strong&gt; → pitch for marketing/visibility services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search by a competitor's brand name&lt;/strong&gt; instead of a cuisine → surface every location running a specific POS or delivery-only concept, so you know exactly who's already converted and who isn't&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Either way, you end up with a CSV of named, URL'd, geolocated prospects — ready to import into whatever outreach tool you're running.&lt;/p&gt;

&lt;h2&gt;Why this beats scraping it yourself&lt;/h2&gt;

&lt;p&gt;You could write your own scraper against UberEats, but you'd be maintaining anti-bot handling, pagination, and markup changes forever just to get a list of restaurant names. The actor already does that part — you just plug in cities and a keyword and get JSON back. It's also trivially repeatable: rerun it monthly per territory and you've got a self-refreshing lead pipeline instead of a one-time list that goes stale.&lt;/p&gt;

&lt;p&gt;There's a free plan (1 location, 10 results per run) if you want to try the workflow above on your own city before scaling it across a whole territory.&lt;/p&gt;

&lt;h2&gt;Try it&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://apify.com/datacach/ubereats-stores-search-by-location-and-keyword" rel="noopener noreferrer"&gt;UberEats Stores Search by Location and Keyword&lt;/a&gt; — the actor used above&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apify.com/datacach/ubereats-listing-brands-by-country" rel="noopener noreferrer"&gt;UberEats Listing Brands By Country&lt;/a&gt; — for building out brand-level target lists&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apify.com/datacach/ubereats-stores-discovery-by-brand-url" rel="noopener noreferrer"&gt;UberEats Stores Discovery By Brand URL&lt;/a&gt; — for expanding a single brand into every location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build a lead pipeline with this, I'd love to hear what filters/signals you ended up using — drop them in the comments.&lt;/p&gt;

</description>
      <category>python</category>
      <category>webscraping</category>
      <category>marketing</category>
      <category>api</category>
    </item>
  </channel>
</rss>
