# RestaurantGuru Scraper \[$1/1K💰] | Restaurant Data (`ahmed_jasarevic/restaurantguru-scraper`) Actor

Scrape RestaurantGuru restaurant listings by city or cuisine: names, cuisines, price range, ratings, reviews, address, phone, hours, menu, photos, features and coordinates. $1 per 1,000 restaurants.

- **URL**: https://apify.com/ahmed_jasarevic/restaurantguru-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## RestaurantGuru Scraper – Restaurant Data & Contact Details

Scrape public **RestaurantGuru** restaurant listings by city, cuisine or country. Get names, cuisines, price range, ratings, review counts, addresses, phones, opening hours, menu links, photos, features, coordinates and websites in one structured dataset. **$1 per 1,000 restaurants**, or **$2 per 1,000** with full contact and detail fields.

### Restaurant Data For Marketing And Research

RestaurantGuru is a global restaurant directory with city, cuisine and country pages. This Actor turns public listings into clean records for restaurant marketing agencies, food-delivery and reservation platforms, franchise developers, hospitality investors and review-analytics teams.

- **Lead generation** — build restaurant lists with phone, website and address.
- **Competitor research** — compare ratings, review counts and price ranges.
- **Territory planning** — map restaurant density by city or cuisine.
- **Franchise and investment research** — screen markets and local operators.
- **Directory enrichment** — add cuisines, hours, photos and convenience features.

### How It Works

![How the RestaurantGuru Scraper works: from a city or cuisine page to structured restaurant records.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-restaurantguru-scraper.webp)

The Actor reads public RestaurantGuru city, cuisine and country listings and follows the available result pages. In the default detail mode it adds phone, address, hours, website, coordinates, menu, photos and feature flags. In listing-only mode it returns the card fields faster and leaves contact fields empty.

- One row per restaurant.
- City, cuisine, country and detail URLs are supported.
- Detail mode adds contact, hours, menu, photos and coordinates.
- Listing-only mode returns names, cuisines, prices, ratings, reviews, images and URLs.

### Search By City, Cuisine Or Country

Use `startUrls` for exact pages:

- **Cities** — Toronto, London, Paris, New York and other covered cities.
- **Cuisines** — pizza, sushi, vegan, Italian and other cuisine pages.
- **Countries** — country pages can expand into their city pages.
- **Restaurants** — pass a direct RestaurantGuru detail URL.
- **Limits** — cap the run with `maxResults`.

### Ratings, Hours, Contacts And Features

Each record can include the restaurant name, cuisines, tags, price range, price level, rating, review count, full and structured address, phone, opening hours, menu URL, photos, feature list, delivery, outdoor seating, vegetarian options, takeaway, wheelchair access, reservations, parking, Wi-Fi, latitude, longitude, website, social links, detail URL, listing page URL and timestamp.

RestaurantGuru does not publish every field for every venue. Missing postal codes, phones, hours or websites stay `null` or empty.

### Input – Configure A RestaurantGuru Run

| Field | Type | Default | Notes |
|---|---|---|---|
| `startUrls` | array | Toronto | City, cuisine, country or restaurant detail URLs |
| `maxResults` | integer | `100` | Maximum restaurants saved |
| `includeDetails` | boolean | `true` | Adds phone, address, hours, website, coordinates, menu, photos and features |
| `proxy` | object | Off | Optional connection settings for large runs |

### Output – Restaurant Fields

Each dataset item can contain:

- `name`, `cuisines`, `tags`
- `priceRange`, `priceLevel`
- `rating`, `reviewCount`
- `address`, `streetAddress`, `city`, `region`, `postalCode`, `country`
- `phone`
- `openingHours`, `openingHoursByDay`
- `menuUrl`
- `photos`, `image`
- `features`
- `delivery`, `outdoorSeating`, `vegetarianOptions`, `takeaway`, `wheelchairAccessible`, `reservations`, `parking`, `wifi`
- `latitude`, `longitude`
- `website`, `socialLinks`
- `url`, `listingPageUrl`
- `scrapedAt`

### Example Input – Toronto Restaurants With Details

```json
{
  "startUrls": [{ "url": "https://restaurantguru.com/Toronto" }],
  "maxResults": 100,
  "includeDetails": true
}
```

### Example Output – Toronto Restaurant

```json
{
  "name": "Example Kitchen",
  "cuisines": ["Lebanese", "Soups"],
  "tags": ["Vegetarian options"],
  "priceRange": "$$",
  "priceLevel": 2,
  "rating": 4.6,
  "reviewCount": 218,
  "address": "123 Queen St W, Toronto, ON, Canada",
  "streetAddress": "123 Queen St W",
  "city": "Toronto",
  "region": "Ontario",
  "postalCode": null,
  "country": "Canada",
  "phone": "+1 416-555-0123",
  "openingHours": ["Mo 11:00-01:00", "Tu 11:00-01:00"],
  "menuUrl": "https://restaurantguru.com/example-kitchen-Toronto/menu",
  "photos": ["https://restaurantguru.com/photo/example.jpg"],
  "features": ["Delivery", "Outdoor seating", "Vegetarian options"],
  "delivery": true,
  "outdoorSeating": true,
  "vegetarianOptions": true,
  "latitude": 43.6532,
  "longitude": -79.3832,
  "website": "https://example.com",
  "url": "https://restaurantguru.com/example-kitchen-Toronto",
  "listingPageUrl": "https://restaurantguru.com/Toronto",
  "scrapedAt": "2026-10-31T12:00:00.000Z"
}
```

### Export Restaurant Data To JSON, CSV Or Excel And Schedule Runs

Download results as JSON, CSV, Excel or XML from the run page or through the Apify API. Connect runs to Google Sheets, Make, Zapier or webhooks, or schedule weekly refreshes to track new restaurants, ratings and price changes.

### Related Actors

- [Google Maps Scraper](https://apify.com/apify/google-maps-scraper) — add neighborhood context and nearby places
- [Google Search Scraper](https://apify.com/ahmed_jasarevic/google-search-scraper) — research restaurant demand and local competition
- [Contact Details Scraper](https://apify.com/ahmed_jasarevic/contact-details-scraper) — enrich restaurant websites with emails and phones
- [Website Content Crawler](https://apify.com/apify/website-content-crawler) — collect public menu and restaurant content

### FAQ

#### What is RestaurantGuru?

RestaurantGuru is a restaurant directory with city, cuisine and country listings, ratings, reviews, photos and contact details.

#### Do I need a RestaurantGuru account?

No. The Actor reads public listings and never asks for your RestaurantGuru credentials.

#### What is the difference between detail and listing-only mode?

Detail mode adds phone, address, hours, website, coordinates, menu, photos and features. Listing-only mode is faster and returns names, cuisines, prices, ratings, reviews, images and URLs.

#### Why are some fields missing?

RestaurantGuru does not publish every field for every restaurant. Missing phones, postal codes, hours or websites stay `null` or empty.

#### Are reviews included?

No. The Actor returns the aggregate rating and review count, not individual review text.

#### Can I scrape a single restaurant?

Yes. Pass its RestaurantGuru detail URL in `startUrls`.

#### How much does it cost?

FREE and BRONZE users pay **$0.001 per restaurant** ($1 per 1,000), SILVER pays **$0.00095** and GOLD+ pays **$0.0009**, plus a small Actor Start event. Detail mode adds **$0.001 per restaurant** ($1 per 1,000), for **$2 per 1,000** full-detail records on FREE/BRONZE.

#### Does it cover my city?

Coverage depends on RestaurantGuru’s public city and cuisine pages. Pass the exact city URL to confirm coverage before a large run.

### For AI Agents & LLM Apps

Returns one row per RestaurantGuru restaurant with cuisines, price range, rating, reviews, address, phone, hours, menu, photos, features and coordinates.

Minimal working input:

```json
{ "startUrls": [{ "url": "https://restaurantguru.com/Toronto" }], "maxResults": 24, "includeDetails": true }
```

Output fields: `name, cuisines, tags, priceRange, priceLevel, rating, reviewCount, address, streetAddress, city, region, postalCode, country, phone, openingHours, openingHoursByDay, menuUrl, photos, image, features, delivery, outdoorSeating, vegetarianOptions, takeaway, wheelchairAccessible, reservations, parking, wifi, latitude, longitude, website, socialLinks, url, listingPageUrl, scrapedAt`.

Behaviors an agent should know:

- `includeDetails: true` adds contact, hours, menu, photos and coordinates; `false` returns card fields only.
- `maxResults` caps the number of saved restaurants.
- Missing phones, postal codes, hours or websites stay `null` or empty.
- Reviews are not scraped; only aggregate rating and count.
- Free users get a 10-restaurant preview.

Billing: **$0.001 per restaurant** on FREE/BRONZE ($1 per 1,000), $0.00095 on SILVER and $0.0009 on GOLD+, plus **$0.001 per restaurant** for detail mode and a small Actor Start event.

### Legal & Compliance Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by RestaurantGuru.

It collects publicly available restaurant information — no login and no private account. Ratings, hours, menus and contact details are self-reported and may change. Users are responsible for complying with RestaurantGuru’s terms and applicable privacy, consumer and marketing law. Nothing here is legal or financial advice.

### SEO Keywords

restaurantguru scraper, restaurant data, restaurant listings, restaurant contacts, restaurant ratings, restaurant reviews, restaurant opening hours, restaurant menu data, restaurant photos, restaurant coordinates, city restaurants, cuisine directory, food business leads, restaurant marketing data, restaurant api, restaurantguru api, hospitality data, restaurant market research

# Actor input Schema

## `startUrls` (type: `array`):

RestaurantGuru listing pages (city, cuisine or country, e.g. https://restaurantguru.com/Toronto or https://restaurantguru.com/pizza-Toronto) or restaurant detail pages (e.g. https://restaurantguru.com/Hawa-Beirut-Restaurant-and-Lounge-Toronto). Country pages are expanded into their city pages automatically.

## `maxResults` (type: `integer`):

Maximum number of restaurants to return. The crawler follows the internal listing pagination until this many unique restaurants are collected. Free users are capped at 10.

## `includeDetails` (type: `boolean`):

Fetch each restaurant's detail page for phone, address, opening hours, website, coordinates, menu, photos and features. Turn this off for a much faster listing-only run (name, cuisines, price, rating, reviews, image, URL). Detail mode makes one extra request per restaurant and charges one 'detail-page' event per successful detail when pay-per-event pricing is configured.

## `proxy` (type: `object`):

Optional. Force a specific Apify proxy group. If left off, the Actor requests directly and falls back to Apify Proxy automatically when the site throttles a request with 503/429.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://restaurantguru.com/Toronto"
    }
  ],
  "maxResults": 100,
  "includeDetails": true,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://restaurantguru.com/Toronto"
        }
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/restaurantguru-scraper").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 = {
    "startUrls": [{ "url": "https://restaurantguru.com/Toronto" }],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/restaurantguru-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://restaurantguru.com/Toronto"
    }
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/restaurantguru-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/restaurantguru-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QaLyocVgC70MDMwPE/builds/wGLV98TGIwB8eWdfu/openapi.json
