If you sell to restaurants — delivery tech, marketing services, POS systems, loyalty apps — you already know the annoying first step: finding the restaurants. Not just any restaurants, but ones that actually match your ICP: a specific cuisine, in specific cities, on UberEats.
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.
I got tired of doing this by hand, so I automated it with the UberEats Stores Search by Location and Keyword actor on Apify — and turned it into a real lead-list pipeline in about 10 minutes.
The idea
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.
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 don't have that tech yet), and get back a clean dataset you can filter and export straight into a CRM.
Walkthrough: Python + Apify client
Install the client:
pip install apify-client
Call the actor for a batch of target cities:
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())
Each item looks like this:
{
"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" }
}
Turning it into a lead list
Load it into a DataFrame and shape it into something a sales team can actually work:
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"] >= 4.3) & (df["rating_count"] < 50)]
leads = leads[["name", "city", "url", "rating", "rating_count", "estimated_time_to_delivery"]]
leads.to_csv("restaurant_leads.csv", index=False)
That filter is just a starting point — swap it for whatever signal matches your pitch. A few that work well in practice:
-
Slow delivery times (
estimated_time_to_delivery> 40 min) → pitch for logistics/ops tooling - Low rating count in a big city → pitch for marketing/visibility services
- Search by a competitor's brand name 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
Either way, you end up with a CSV of named, URL'd, geolocated prospects — ready to import into whatever outreach tool you're running.
Why this beats scraping it yourself
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.
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.
Try it
- UberEats Stores Search by Location and Keyword — the actor used above
- UberEats Listing Brands By Country — for building out brand-level target lists
- UberEats Stores Discovery By Brand URL — for expanding a single brand into every location
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.
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.