# Resy Scraper API - Restaurants & Open Reservation Times (`sweet_stickball/resy-scraper`) Actor

Scrape Resy restaurants for any city or search: name, cuisine, neighborhood, address, coordinates, rating, price level, phone and the open reservation times for your date and party size. Read-only restaurant availability data from resy.com, no login, nothing is booked.

- **URL**: https://apify.com/sweet_stickball/resy-scraper.md
- **Developed by:** [CrawlKit](https://apify.com/sweet_stickball) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 restaurants

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

## Resy Scraper API - Restaurants & Open Reservation Times

Scrape Resy restaurants for any city or search: name, cuisine, neighborhood, address, coordinates, rating, price level, phone and the open reservation times for your date and party size. Read-only restaurant availability data from resy.com, no login, nothing is booked.

### What it does

- Takes a Resy city (`location`) and an optional search (`query`: cuisine, dish or restaurant name), and returns one flat JSON item per restaurant.
- For each restaurant, adds the open reservation times on the requested `date` for the requested `partySize`: number of open slots, first and last time, the list of times and the seating types (Dining Room, Bar, Patio...).
- Uses the same JSON API as the resy.com website. No account, no booking, no reservation token is used.
- Without a query, restaurants are returned nearest to the city center first; with a query, by Resy's relevance.

Typical uses: restaurant availability tracking, market research on restaurants by neighborhood and cuisine, lead lists of restaurants with phone and address, input for travel or dining assistants.

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `location` | string | Yes | — | Resy city slug from `resy.com/cities/<slug>` (`new-york-ny`, `los-angeles-ca`, `miami-fl`) or city name (`Chicago`) |
| `query` | string | No | empty | Cuisine, dish or restaurant name (`pizza`, `sushi`, `Carbone`) |
| `date` | string | No | today + 7 days | Date of the reservation times, `YYYY-MM-DD`, not in the past |
| `partySize` | integer | No | 2 | Number of guests (1–20) |
| `onlyAvailable` | boolean | No | false | Skip restaurants with no open time for that date and party size |
| `maxItems` | integer | No | 20 | Maximum number of restaurants (one item each) |

Example:

```json
{
    "location": "new-york-ny",
    "query": "pizza",
    "date": "2026-12-12",
    "partySize": 4,
    "onlyAvailable": true,
    "maxItems": 20
}
```

### Output

One item per restaurant:

```json
{
    "venueId": 85342,
    "name": "Crazy Pizza",
    "cuisine": "Italian & Pizza",
    "neighborhood": "SoHo",
    "city": "New York",
    "region": "NY",
    "country": "United States",
    "latitude": 40.7221830576825,
    "longitude": -73.9977869741203,
    "rating": 4.2,
    "reviewCount": 516,
    "priceRange": "$$",
    "phone": "+16462981565",
    "url": "https://resy.com/cities/new-york-ny/venues/crazy-pizza",
    "imageUrl": "https://image.resy.com/3/003/2/85342/fad28cd7ad549bd07cf185f76827979920febf96/jpg/640x360",
    "address": "218 Lafayette St.",
    "postalCode": "10012",
    "date": "2026-11-01",
    "partySize": 2,
    "availableSlots": 29,
    "firstSlot": "12:00",
    "lastSlot": "21:30",
    "slotTimes": "12:00, 12:15, 12:30, 12:45, 13:00, 13:15, 13:30",
    "seatingTypes": "Dining Room, Weekend Lunch",
    "searchLocation": "new-york-ny",
    "searchQuery": "pizza",
    "scrapedAt": "2026-10-25T11:11:46+00:00"
}
```

`availableSlots` is 0 (and the time fields are `null`) when the restaurant is fully booked, closed that day, or does not take reservations for that party size. Times are local to the restaurant.

### Pricing

Pay-per-event, **no start fee**: **$4.20 per 1,000 restaurants** on the Apify Free plan, with lower prices on paid plans. Each restaurant pushed to the dataset is one event; its open reservation times are included at no extra charge.

| Event | Free | Starter | Scale | Business | Enterprise |
|-------|------|---------|-------|----------|------------|
| Restaurant (`RESTAURANT`) | $4.20 | $3.60 | $3.20 | $2.50 | $2.50 |

Prices in USD per 1,000 events.

#### Cost examples (Free plan)

| Scenario | Restaurants | Cost |
|----------|-------------|------|
| Quick look | 10 | $0.042 |
| One city | 200 | $0.84 |
| Several cities | 1,000 | $4.20 |

### Limitations

- Availability is a snapshot at run time; Resy tables open and close continuously.
- `slotTimes` lists the first 40 distinct times; `availableSlots` counts every open slot, including several seating types at the same time.
- Restaurants listed on Resy but not taking online reservations are returned with `availableSlots` 0.
- Coverage is limited to restaurants on Resy, mostly in the United States plus some cities abroad.
- The Actor reads public data only: it does not book, hold or cancel reservations.

### Related Actors

- [Grubhub Scraper API - Restaurants, Menus & Delivery Fees](https://apify.com/sweet_stickball/grubhub-scraper) — Scrape Grubhub restaurants for any US address: ratings, delivery fees and times, coordinates and full menus with prices. Food delivery data API, no login.
- [Yelp Scraper API - Reviews, Ratings & Coordinates](https://apify.com/sweet_stickball/yelp-scraper) — Scrape Yelp businesses and reviews: name, address, rating, review count, coordinates and review text. Yelp data API for local research, no login.
- [Booking.com Scraper API - Hotel Prices & Ratings, No Login](https://apify.com/sweet_stickball/booking-scraper) — Scrape Booking.com hotels for any city and dates: prices, ratings, reviews, stars, coordinates and free cancellation. Hotel data API, no login needed.

# Actor input Schema

## `location` (type: `string`):

Resy city: the slug from resy.com/cities/<slug> (e.g. 'new-york-ny', 'los-angeles-ca', 'miami-fl') or the city name ('New York', 'Chicago').

## `query` (type: `string`):

Optional restaurant name, cuisine or dish (e.g. 'pizza', 'sushi', 'Carbone'). Empty = all restaurants of the city, nearest to the city center first.

## `date` (type: `string`):

Date of the open reservation times, YYYY-MM-DD. Empty = 7 days from today. Must not be in the past.

## `partySize` (type: `integer`):

Number of guests the reservation times must fit.

## `onlyAvailable` (type: `boolean`):

Skip restaurants that have no open reservation time for this date and party size.

## `maxItems` (type: `integer`):

Maximum number of restaurants to return (one item per restaurant).

## Actor input object example

```json
{
  "location": "new-york-ny",
  "query": "pizza",
  "date": "2026-12-12",
  "partySize": 2,
  "onlyAvailable": false,
  "maxItems": 10
}
```

# Actor output Schema

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

Restaurants with their open reservation times (dataset items, 'results' view).

# 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 = {
    "location": "new-york-ny",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("sweet_stickball/resy-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 = {
    "location": "new-york-ny",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("sweet_stickball/resy-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 '{
  "location": "new-york-ny",
  "maxItems": 10
}' |
apify call sweet_stickball/resy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sweet_stickball/resy-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/LZtsRRenYldSqQiK9/builds/YVcVT4LmNwpPp3Lo4/openapi.json
