Restaurant Lead Finder - POS & Delivery Detection avatar

Restaurant Lead Finder - POS & Delivery Detection

Pricing

from $4.00 / 1,000 base lead records

Go to Apify Store
Restaurant Lead Finder - POS & Delivery Detection

Restaurant Lead Finder - POS & Delivery Detection

Enriched Google Maps leads for US restaurants. Detects POS (Toast, Square, Clover, Lightspeed, TouchBistro, Revel), reservation platforms (OpenTable, Resy, Tock), delivery (DoorDash, UberEats, Grubhub) and direct-order (ChowNow, BentoBox). For restaurant SaaS sales teams and delivery partner growth.

Pricing

from $4.00 / 1,000 base lead records

Rating

0.0

(0)

Developer

Seibs.co

Seibs.co

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

7 days ago

Last modified

Share

Restaurant Lead Finder

TL;DR for B2B SaaS, food supply, and restaurant-tech sales reps selling INTO independent restaurants: Pulls US independent restaurants, cafes, food trucks, and bars from Google Maps with detected POS (Toast, Square, Clover, Lightspeed, Revel, TouchBistro, SpotOn, Aloha, Micros), online ordering (DoorDash, Uber Eats, Grubhub, ChowNow, Olo), reservation, and loyalty stack. Compared to compass/crawler-google-places, you get vertical POS detection plus chains and quick-service brands (McDonalds, Starbucks, Chipotle, Subway, Domino's, Yum Brands, Darden, BJs, Cheesecake Factory) pre-blocked. Free Apify plan returns about 1,000 leads per month on your $5 platform credit, then demo samples plus an upgrade message. Upgrade to Apify Starter ($49/mo) for unlimited volume.

Run it in 30 seconds

# Via the Apify Python SDK
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("seibs.co/restaurant-lead-finder").call(run_input={
"search_terms": [
"restaurant",
"cafe"
],
"locations": [
"Brooklyn, NY"
],
"enrichment_tier": "premium",
"max_results_per_query": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Or via curl:

curl -X POST "https://api.apify.com/v2/acts/seibs.co~restaurant-lead-finder/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"search_terms": ["restaurant", "cafe"], "locations": ["Brooklyn, NY"], "enrichment_tier": "premium", "max_results_per_query": 50}'

Or click "Try for free" on this page if you prefer the no-code UI.

What you get

Each run produces:

  • A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
  • An OUTPUT.html dashboard preview of your top records
  • A sample-output preview at ./.actor/sample-output.json

Per-archetype custom artifacts shipped with this actor:

  • top-leads.csv (HubSpot-ready columns, sorted by confidence_score)
  • cold-email-templates.html (per-POS pitch with copy-to-clipboard buttons)
  • stack-breakdown.csv (POS, ordering, reservation, loyalty per record)

What does Restaurant Lead Finder do?

Pulls US independent restaurants from Google Maps and enriches each record with website-derived signals: detected POS systems (Toast, Square, Clover, Lightspeed, TouchBistro, Revel, Aloha, Micros), online ordering (ChowNow, BentoBox, Olo), reservation platforms (OpenTable, Resy, Tock, Yelp Reservations), delivery integrations (DoorDash, UberEats, Grubhub, Postmates), emails, social profiles, owner names, and hiring signals. The single biggest filter restaurant SaaS sales teams want is "show me independents in this metro who DON'T already use Toast" or "show me Aloha/Micros holdouts who'd be easy migrations." That's exactly what this actor produces.

Features

  • POS, ordering, reservation, and delivery platforms detected per restaurant
  • Email + role-bucketed email extraction
  • Phone normalized to E.164 for direct CRM ingestion
  • Confidence score per record so you can filter for rich leads only
  • Major restaurant chains pre-blocked
  • Pay-Per-Event pricing â€" only charged for what was actually scraped

Input

See the input schema for the full list of fields. Minimum input is search_terms and locations.

{
"search_terms": ["restaurant", "pizza", "sushi", "burger"],
"locations": ["Austin, TX", "Houston, TX"],
"max_results_per_query": 100,
"enrichment_tier": "premium",
"exclude_chains": true
}

Output

Sample output: ./.actor/sample-output.json â€" copy-paste-ready preview of real-looking records.

First record inline:

{
"place_id": "ChIJ0Y6eCkIqOwU2a8gEmKsQyW4cAiG",
"name": "Cast Iron Kitchen & Bar",
"category": "Restaurant",
"vertical": "restaurants",
"service_line": "full_service_restaurant",
"address": {
"street": "5062 Elm Blvd",
"city": "New Orleans",
"state": "LA",
"zip": "70112",
"country": "US",
"lat": 29.9601,
"lng": -90.0795
},
"phone": "(504) 555-1024",
"phone_e164": "+15045550124",
"website": "https://castironkitchen.com/",
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ0Y6eCkIqOwU2a8gEmKsQyW4cAiG",
"rating": 4.9,
"reviews_count": 184,
"hours": {
"mon": "8:00 AM - 6:00 PM",
"tue": "8:00 AM - 6:00 PM",
"wed": "8:00 AM - 6:00 PM",
"thu": "8:00 AM - 6:00 PM",
"fri": "8:00 AM - 5:00 PM",
"sat": "Closed",
"sun": "Closed"
},
"claimed": true,
"scraped_at": "2026-05-10T10:23:10Z",
"confidence_score": 0.62,
"enrichment": {
"tier": "premium",
"emails": [
"info@castironkitchen.com",
"hello@castironkitchen.com"
],
"social": {
"facebook": "https://www.facebook.com/castironkitchen",
"instagram": "https://www.instagram.com/castironkitchen",
"linkedin": "https://www.linkedin.com/company/castironkitchen"
},
"tech_stack": [
"toast_pos",
"resy",
"square_for_restaurants",
"wordpress"
],
"license_numbers": [
"LA-101212"
],
"service_area_mentions": [
"New Orleans",
"Baton Rouge",
"Lafayette"
],
"year_founded": 2014,
"fleet_hints": [],
"homepage_title": "Cast Iron Kitchen & Bar | New Orleans, LA",
"homepage_status": 200,
"bbb": {
"accredited": true,
"rating": "A+"
},
"open_24_7": false,
"licensed_bonded_insured": false,
"locations_count": 2,
"spanish_speaking": false,
"linkedin_company": "https://www.linkedin.com/company/castironkitchen",
"yelp_url": "https://www.yelp.com/biz/castironkitchen-new-orleans",
"third_party_reviews": [],
"press_mentions": [],
"awards": [],
"team_size_hints": [
"5 team members"
],
"owner_names": [
"Maria Chen"
],
"employee_count": 8,
"role_emails": {
"executive": [
"mchen@castironkitchen.com"
],
"billing": [
"billing@castironkitchen.com"
],
"support": [
"support@castironkitchen.com"
],
"generic": [
"info@castironkitchen.com"
]
},
"financing_processors": [
"affirm",
"klarna"
],
"payment_processors": [
"square"
],
"hiring_signals": {
"actively_hiring": true,
"indicators": [
"careers page link",
"we're hiring banner"
]
},
"insurance_carriers_accepted": [],
"languages_offered": [],
"online_booking_platforms": [
"calendly"
],
"customer_count_signals": {
"customers_served": 1500,
"reviews_count": 184,
"projects_completed": null,
"locations_served": null,
"raw_matches": [
"Trusted by 1500+ clients"
]
},
"chatbot_platforms": [
"intercom"
],
"email_marketing_platforms": [
"mailchimp"
],
"lead_capture_ctas": {
"has_free_quote_cta": true,
"has_get_started_cta": true,
"has_appointment_booking": false,
"has_callback_request": true,
"has_contact_form": true,
"cta_count": 3
},
"mobile_app_links": {
"has_ios_app": false,
"has_android_app": false,
"ios_app_id": null,
"android_app_id": null
},
"certifications_credentials": [
"ServSafe Manager"
],
"financing_accepted": [
"credit_card",
"cash"
],
"growth_signals": {
"growth_score": 0.4,
"components": {
"hiring": 0.6,
"employee_scale": 0.4,
"multi_location": 0.5
},
"indicators_count": 2
},
"jsonld": {
"name": "Cast Iron Kitchen & Bar",
"phone": "(504) 555-1024",
"email": "info@castironkitchen.com",
"address": {
"street": "5062 Elm Blvd",
"city": "New Orleans",
"region": "LA",
"zip": "70112"
},
"opening_hours": [
"Mo-Fr 08:00-18:00"
],
"social_urls": [
"https://www.facebook.com/castironkitchen",
"https://www.instagram.com/castironkitchen"
],
"aggregate_rating": {
"rating": 4.9,
"count": 184
},
"employee_count": 8,
"founders": [
"Maria Chen"
]
}
}
}

Each item is one restaurant lead. See the Detailed dataset view for every field, or the Overview view for the columns most outbound teams use.

What you get

Real production output from a sample run on Corner Restaurant (Austin, Texas):

{
"name": "Corner Restaurant",
"service_line": "full_service_restaurant",
"address": {
"city": "Austin",
"state": "Texas",
"zip": "78701",
"lat": 30.2645703,
"lng": -97.7438317
},
"phone": "(512) 608-4488",
"website": "https://www.cornerrestaurantaustin.com/",
"rating": 4.8,
"reviews_count": 17931,
"enrichment": {
"tier": "premium",
"emails": [
"socialmedia@cornerrestaurantaustin.com"
],
"social": {
"facebook": "https://www.facebook.com/CornerATX",
"instagram": "https://www.instagram.com/corneratx"
},
"tech_stack": [
"chownow",
"opentable",
"google_tag_manager"
],
"homepage_title": "Corner Restaurant Austin | Official Site",
"homepage_status": 200,
"bbb": {
"rating": "A"
}
}
}

Preview (real production data)

Single-record snapshot from the same run, rendered as a table:

FieldValue
NameCorner Restaurant
Service linefull_service_restaurant
LocationAustin, Texas
Phone(512) 608-4488
Websitehttps://www.cornerrestaurantaustin.com/
Rating4.8 (17931 reviews)
Emailsocialmedia@cornerrestaurantaustin.com
Tech stack detectedchownow, opentable, google_tag_manager
BBB{"rating": "A"}
Social channelsfacebook, instagram

Pricing â€" Pay Per Event

EventPriceWhen charged
Base record$0.004Always, per emitted record
Email enrichment+ $0.004When at least one email is found
Premium signals+ $0.007When POS / ordering / delivery / reservation platform detected

Effective price per record: $0.004 base / $0.008 with email / $0.015 fully enriched.


Use cases

Restaurant SaaS sales (Toast, Square, Clover, Lightspeed competitors). Pull every full-service restaurant in a metro, filter to those that DO NOT have a detected POS â€" that's your no-stack list, the highest-conversion outbound segment. Or invert: pull the ones using a competitor and target them with migration offers.

Delivery platform expansion (DoorDash, UberEats, Grubhub partnerships). Find restaurants currently on a competitor's platform but not yours. Or restaurants with no detected delivery integration â€" the cold-pitch list.

Direct-order platforms (ChowNow, BentoBox, Square Online). Find independents stuck on Wix / generic websites with no online ordering. That's the highest-intent target for "your competitors are stealing 30% margin to DoorDash, switch to ChowNow direct."

Reservation SaaS (OpenTable, Resy, Tock partner growth). Find full-service restaurants without reservation platforms â€" opportunity list. Or filter to one platform's customers for poach campaigns.

Restaurant PE / multi-unit roll-up. Sort independents by review count and rating, exclude national chains, target city+cuisine combinations.


POS, ordering, delivery, and reservation platforms detected

POS: Toast, Square, Clover, Lightspeed, TouchBistro, Revel, Aloha (NCR), Micros (Oracle Simphony), Upserve, Tabit.

Direct ordering: ChowNow, BentoBox, Toast online, Square Online.

Delivery aggregators: DoorDash, UberEats, Grubhub, Postmates.

Reservations: OpenTable, Resy, Tock, Yelp Reservations.

Generic web: Shopify, WordPress, Google Tag Manager, Facebook Pixel, Instagram embed.


Restaurant types covered

full_service_restaurant | fast_casual | qsr | cafe_bakery | bar_brewery | pizzeria | food_truck | ghost_kitchen


Built-in chain blocklist

60+ national chains pre-blocked when exclude_chains: true (default). McDonald's, Starbucks, Subway, Chipotle, Panera, Chick-fil-A, Applebee's, Olive Garden, Cheesecake Factory, Texas Roadhouse, etc.


What this actor does NOT do (v1)

  • No menu scraping (separate actor coming)
  • No review text or sentiment NLP
  • No SMTP-level email validation
  • No phone validation
  • No screenshots
  • No non-US geographies
  • No Yelp / TripAdvisor data layer (separate actor)

Example: 1,500 independent full-service restaurants in Texas with no Toast

{
"search_terms": ["restaurants", "fine dining", "BBQ", "Mexican restaurant"],
"locations": [
"Austin, TX", "Dallas, TX", "Houston, TX", "San Antonio, TX",
"Fort Worth, TX", "Plano, TX", "Arlington, TX"
],
"max_results_per_query": 100,
"enrichment_tier": "premium",
"service_lines": ["full_service_restaurant"],
"exclude_chains": true
}

Cost ceiling: 7 cities Ã- 4 terms Ã- 100 = 2,800 raw â†' 1,800 after chain + type filters â†' at $0.015 fully enriched = **$27 to find every independent full-service restaurant in major Texas metros with their POS / delivery stack mapped**. Filter the output for "no toast in tech_stack" downstream and you have your Toast sales team's outbound list for the quarter.


FAQ

Q: Is this legal? A: Yes. Data is sourced from publicly listed Google Maps business profiles and the restaurants' own public websites â€" the same public scraping any directory or sales-intel tool relies on. No login walls bypassed; no private data scraped. You are responsible for CAN-SPAM, TCPA, and state privacy law compliance when contacting leads.

Q: Why might a run fail or return only a few records? A: The most common cause is hitting the Apify free plan's $5/month platform credit ceiling (~1,000 enriched leads). When that ceiling is hit, the actor soft-fails into a demo mode â€" it returns a small set of sample records plus a clear upgrade message instead of erroring out. Upgrading to Apify Starter ($49/mo) removes the ceiling. Other (rarer) causes: Google Maps temporarily blocking a region or an invalid locations string.

Q: How fresh is the data? A: Every record is scraped at run time. Google Maps records (name, address, phone, hours, reviews) are pulled live on each run. The website re-scrape that powers enrichment (POS, ordering, delivery, reservation platforms, emails) happens on the same run. The scraped_at ISO timestamp tells you exactly when each row was collected.

Q: Can I run this scheduled (daily or weekly)? A: Yes. Use Apify's scheduler â€" set a cron, save your input, and route the dataset to a webhook or storage. Docs: https://docs.apify.com/platform/schedules. Most restaurant SaaS teams run weekly and diff against the prior week to surface newly-opened restaurants and POS changes.

Q: How do I integrate the output with my CRM? A: Four options: (1) Zapier â€" trigger on "new dataset item" and map to HubSpot/Salesforce/Pipedrive/Apollo. (2) Make.com â€" same model with deeper branching. (3) Apify webhooks â€" POST the dataset to your endpoint on completion. (4) REST API â€" pull and push via small script. JSON, CSV, Excel, XML export built-in.

Q: How is pricing calculated? A: Pay-Per-Event: $0.004 base + $0.004 per email found + $0.007 per premium signal (POS / ordering / delivery / reservation platform detected). Fully enriched = $0.015 per record. You only pay for events that actually fire.

Q: Do you scrape menus? A: No. This actor returns business profile data plus tech stack â€" names, contacts, location, POS, online ordering, delivery, reservation platforms. Menu scraping is a separate concern (legal and structural) and is planned as a separate actor.

Q: Why are some enrichment fields empty? A: Not every restaurant has a usable website, and not every site exposes every signal. Use confidence_score to filter for the richest records.

Q: How do I find restaurants NOT using a specific POS? A: Filter the dataset where enrichment.tech_stack does not contain the platform identifier (e.g. exclude toast, square, clover).

Q: Can I get chain locations? A: Set exclude_chains: false in the input. By default major restaurant chains are blocked so you only get independents.

Related Actors from this portfolio:

Integrations

  • Zapier â€" push records into HubSpot / Salesforce / Pipedrive / Apollo / Outreach / Salesloft
  • Make.com (formerly Integromat) â€" automate multi-step workflows with branching and filters
  • n8n â€" self-hosted workflow automation for teams that don't want data leaving their stack
  • Apify webhooks â€" POST the dataset to your endpoint on run completion (ACTOR.RUN.SUCCEEDED / FAILED)
  • API integration â€" REST API with full dataset export in JSON, CSV, Excel, or XML
  • MCP / AI agents â€" call this actor from Claude, GPT, or LangChain agent workflows via the Apify MCP server

Save your input as an Apify Task

Apify Tasks let you save a configured input once and re-run it with a single click - no need to re-type search terms, locations, filters, or tier settings every time. Tasks are the foundation for everything that comes next: schedules, monitor mode, and webhook routing all attach to a saved Task, not to the raw actor.

Steps to save your current input as a Task:

  1. On this actor's Apify Store page, click Run with your input fully configured.
  2. Click the Save as task button at the top of the run page.
  3. Name the task something memorable (e.g. Restaurants in Austin, TX - weekly).
  4. Reload the task page and click Start anytime to re-run with the same inputs.

Tasks unlock the next two features below: scheduling and monitor mode.

Run this weekly with Apify Schedules

Apify Schedules cron-run any saved Task automatically. Pair this with the saved Task above and you get hands-off recurring runs with no manual clicks, no missed weeks, and a steady stream of fresh data into your CRM or warehouse.

Steps to schedule a Task:

  1. Save your input as a Task (see above).
  2. Go to https://console.apify.com/schedules and click Create new schedule.
  3. Pick your Task and set the cron expression. Common patterns:
    • Daily at 9am UTC: 0 9 * * *
    • Weekly on Mondays at 9am: 0 9 * * 1
    • Monthly on the 1st: 0 9 1 * *
  4. Save. Apify will run your Task on that schedule automatically, push the dataset to whatever integrations you have wired up, and fire run-completion webhooks for downstream automation.

Run weekly to keep your prospect list fresh and catch newly-opened restaurants before the local sales reps reach them.

Monitor mode (v2, beta)

Monitor mode is the v2 evolution of this actor and is currently in BETA. It turns a recurring schedule into a true change-feed instead of a firehose of duplicate records.

How it works:

  • When this actor runs under an Apify Schedule, monitor mode is enabled automatically.
  • Instead of emitting ALL records every run, it emits ONLY records that are NEW or CHANGED since the last scheduled run.
  • A digest record summarizes the delta (X new, Y changed, Z removed) at the top of every run.
  • Optional: provide a Slack or email webhook URL in the monitor_webhook_url input field and the digest fires there too, so your team gets the delta in their inbox or channel without polling the dataset.
  • Cost: a single scheduled_delta_run event ($0.05) per scheduled run, plus standard PPE on emitted delta records only. Predictable monthly cost, no surprise bills from re-charging for unchanged records.

Monitor mode is rolling out to the top 3 actors first (this one included if it's hotel-motel-lead-finder, google-maps-reviews-pro, or mcp-accounting-firm-leads). Full portfolio coverage by end of June.

Support

Changelog

See ./CHANGELOG.md.

More from the SEIB portfolio

Same data engine, different vertical â€" pick the one that matches your buyer:

All 12 actors share the same Pay-Per-Event pricing ($0.004 base / $0.008 with email / $0.015 with premium signals) and output schema. Mix-and-match across verticals without translation logic. Built by Seibs Management LLC.

Found this useful?

If this actor saved you time or money, please consider leaving a quick review on the Apify Store. Reviews help other buyers find work that solves their problem and let me prioritize the features paying customers actually use. Leave a review: https://apify.com/seibs.co/restaurant-lead-finder#reviews