# Restaurant Lead Finder - POS & Delivery Detection (`seibs.co/restaurant-lead-finder`) Actor

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.

- **URL**: https://apify.com/seibs.co/restaurant-lead-finder.md
- **Developed by:** [Seibs.co](https://apify.com/seibs.co) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 24 total users, 8 monthly users, 94.9% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $4.00 / 1,000 base lead records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 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

```python
## 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:

```bash
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`](./.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`.

```json
{
  "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`](./.actor/sample-output.json) â€" copy-paste-ready preview of real-looking records.

First record inline:

```json
{
  "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):

```json
{
  "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:

| Field | Value |
|---|---|
| **Name** | Corner Restaurant |
| **Service line** | full\_service\_restaurant |
| **Location** | Austin, Texas |
| **Phone** | (512) 608-4488 |
| **Website** | https://www.cornerrestaurantaustin.com/ |
| **Rating** | 4.8 (17931 reviews) |
| **Email** | socialmedia@cornerrestaurantaustin.com |
| **Tech stack detected** | chownow, opentable, google\_tag\_manager |
| **BBB** | {"rating": "A"} |
| **Social channels** | facebook, instagram |

***

### Pricing â€" Pay Per Event

| Event | Price | When charged |
|---|---|---|
| Base record | $0.004 | Always, per emitted record |
| Email enrichment | + $0.004 | When at least one email is found |
| Premium signals | + $0.007 | When 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

```json
{
  "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

**Related Actors from this portfolio:**

- [B2B Sales Triggers](https://apify.com/seibs.co/b2b-sales-triggers) â€" intent signals (hiring, expansion, funding) layered on top of each restaurant for outreach prioritization
- [Google Maps Reviews Pro](https://apify.com/seibs.co/google-maps-reviews-pro) â€" full review history per restaurant for sentiment, complaint themes, and competitor mentions
- [Hotels & Motels Lead Finder](https://apify.com/seibs.co/hotel-motel-lead-finder) â€" hospitality F\&B buyers overlap heavily with restaurant SaaS targets
- [Shopify Store Discovery](https://apify.com/seibs.co/shopify-store-discovery) â€" find DTC food/beverage brands for restaurant supplier and CPG sales
- [Salons & Spas Lead Finder](https://apify.com/seibs.co/salon-spa-lead-finder) â€" booking-platform buyers (OpenTable / Resy / Booksy / Vagaro overlap)

### 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

- Email: support@seibs.co
- GitHub issues: https://github.com/seibs-co/apify-portfolio/issues

### Changelog

See [CHANGELOG.md](./CHANGELOG.md).

### More from the SEIB portfolio

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

- ðŸ"§ [Home Services Lead Finder](https://apify.com/seibs.co/home-services-lead-finder)
- ðŸš- [Auto Dealerships Lead Finder](https://apify.com/seibs.co/auto-dealership-lead-finder)
- ðŸ¦· [Healthcare Practices Lead Finder](https://apify.com/seibs.co/healthcare-practice-lead-finder)
- ðŸ§˜ [Fitness Studios Lead Finder](https://apify.com/seibs.co/fitness-studio-lead-finder)
- ðŸ"Š [Accounting Firms Lead Finder](https://apify.com/seibs.co/accounting-firm-lead-finder)
- ðŸ"© [Auto Repair Shops Lead Finder](https://apify.com/seibs.co/auto-repair-lead-finder)
- ðŸ-ï¸ [Construction Contractors Lead Finder](https://apify.com/seibs.co/contract-heavy-smb-lead-finder)
- ðŸ¨ [Hotels & Motels Lead Finder](https://apify.com/seibs.co/hotel-motel-lead-finder)
- âš-ï¸ [Law Firms Lead Finder](https://apify.com/seibs.co/law-firm-lead-finder)
- ðŸ¢ [Real Estate Brokerages Lead Finder](https://apify.com/seibs.co/real-estate-brokerage-lead-finder)
- ðŸ'‡ [Salons & Spas Lead Finder](https://apify.com/seibs.co/salon-spa-lead-finder)

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](https://apify.com/seibs.co).

### 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

# Actor input Schema

## `search_terms` (type: `array`):

Google Maps search queries. Combined with each location to form (term × location) tuples. Example: \['restaurants', 'cafe', 'pizza']. Up to 10 terms per run.

## `locations` (type: `array`):

US locations to search in. Format: 'City, ST', neighborhood, or ZIP. Example: \['Austin, TX', 'East Austin', '78701']. Up to 25 locations per run.

## `max_results_per_query` (type: `integer`):

Cap on records returned per (term × location) tuple. Hard ceiling 500. Hard max 100 to protect compute budget.

## `enrichment_tier` (type: `string`):

Determines which signals are extracted and which Pay-Per-Event charges apply. base = Maps profile only ($0.004/record). email = + scraped email ($0.008/record). premium = + POS/delivery platform detection + reservation system + service area ($0.015/record). Default 'base' avoids per-record website-visit compute. Set 'premium' to enable deep tech-stack detection (incurs additional compute time).

## `service_lines` (type: `array`):

Restrict output to these restaurant types. Records that don't classify into one of these are dropped before enrichment. Leave empty to allow all.

## `exclude_chains` (type: `boolean`):

Drop records matching a built-in chain blocklist (McDonald's, Starbucks, Subway, Applebee's, Cheesecake Factory, etc. — 60+ major chains). Useful when targeting independents for SaaS sales.

## `max_concurrent_enrichments` (type: `integer`):

Parallel HTTP fetches against restaurant websites. Lower if you hit rate limits. 8 is safe.

## `collection` (type: `string`):

Name a persistent collection (e.g. 'texas-db') to build ONE growing, de-duplicated lead database across many runs. When set, the actor skips restaurants already in this collection (deduped by Google place ID, BEFORE enrichment - so you don't pay to re-scrape them) and appends only NEW leads to a named dataset of the same name. Re-run with the same collection name across cities and search terms to keep growing it with no duplicates. Leave blank for a normal one-off run. Note: accumulate mode adds a per-run surcharge.

## Actor input object example

```json
{
  "search_terms": [
    "restaurants"
  ],
  "locations": [
    "Austin, TX"
  ],
  "max_results_per_query": 50,
  "enrichment_tier": "base",
  "service_lines": [],
  "exclude_chains": true,
  "max_concurrent_enrichments": 4
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Narrow, token-efficient slice of every record. Consumer: LLM agents (Claude, GPT, LangChain tools), MCP hosts, dashboards. SDR-skim fields: name, vertical, service line, city, state, phone, email, website, confidence\_score.

## `datasetItemsDetailed` (type: `string`):

All fields for every record. Consumer: humans browsing the dataset in the Apify UI, RAG ingest pipelines, and full backups. Larger payload — not recommended as a direct LLM tool response.

## `datasetItemsUnwind` (type: `string`):

Same records, but each element of the `technologies` array is promoted to its own row. Consumer: Zapier / Make / n8n / Google Sheets users who want one row per item, and LLM agents that prefer flat rows over nested arrays.

## `datasetItemsMcp` (type: `string`):

First 50 overview records as a clean JSON array. Wrap on the agent side in an MCP tool-call response envelope, e.g. `{ "ok": true, "data": <this array>, "meta": { "actor": "restaurants", "count": <len>, "view": "overview" } }`. Consumer: MCP servers, Claude Desktop, Cursor, OpenAI Assistants tool calls.

## `datasetItemsCsv` (type: `string`):

Spreadsheet-friendly export of the overview view. Consumer: humans, sales-ops teams, Excel / Google Sheets users.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "search_terms": [
        "restaurants"
    ],
    "locations": [
        "Austin, TX"
    ],
    "max_results_per_query": 50,
    "enrichment_tier": "base",
    "max_concurrent_enrichments": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("seibs.co/restaurant-lead-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "search_terms": ["restaurants"],
    "locations": ["Austin, TX"],
    "max_results_per_query": 50,
    "enrichment_tier": "base",
    "max_concurrent_enrichments": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("seibs.co/restaurant-lead-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "search_terms": [
    "restaurants"
  ],
  "locations": [
    "Austin, TX"
  ],
  "max_results_per_query": 50,
  "enrichment_tier": "base",
  "max_concurrent_enrichments": 4
}' |
apify call seibs.co/restaurant-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=seibs.co/restaurant-lead-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/3jo2FUgpy3OvMXJ87/builds/yturrucF5msxB0hxm/openapi.json
