Skip to content
Back to skills

dining-demand-research

ASecurity

Research public Resy and OpenTable restaurant discovery, profiles, and time-specific availability snapshots. Use for dining shortlists or reservation-demand comparisons, not booking or ordering.

  • 0 votes
  • 0 copies
  • 0 views
  • Added October 12, 2026
ai-agentsgit

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 12, 2026

npx -y skills add Crawlora-org/crawlora-skills --skill dining-demand-research --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of dining-demand-research?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for dining-demand-research
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/crawlora-org-dining-demand-research/badge)](https://www.skillsdirectory.com/skills/crawlora-org-dining-demand-research)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dining-demand-research
description: Research public Resy and OpenTable restaurant discovery, profiles, and time-specific availability snapshots. Use for dining shortlists or reservation-demand comparisons, not booking or ordering.
---

# Dining demand research

Research public restaurant discovery and the availability currently displayed by
Resy and OpenTable. Produce a dated snapshot and a shortlist; these surfaces
do not create, hold, modify, or cancel reservations, purchase event tickets, or
guarantee a table remains available.

## Resolve the restaurant and request context

1. Establish the requested place, party size, local dining date/time, and any
   cuisine, price, or accessibility preferences. Resolve ambiguous venues by
   provider ID first, then name plus street address/neighborhood; never mix a
   Resy `restaurant_id` with an OpenTable `restaurant_id`.
2. For Resy, discover a city with `GET /resy/locations` (`q`, `country`), then
   use returned location codes/IDs for `GET /resy/cuisines` (`location`) and
   `GET /resy/events` (`location`, optional `date`, `limit`, `offset`). Search
   venues with `GET /resy/search` (`latitude`, `longitude`, optional `term`,
   `date`, `party_size`, `size`); `date` adds current slots to the results.
3. For OpenTable, use `GET /opentable/search` with required `term`, `latitude`,
   and `longitude`, plus optional `date_time`, `party_size`, and `size`. Use a
   returned ID with `GET /opentable/restaurant` (`restaurant_id`, optional
   `date_time`, `party_size`) to refresh that venue's profile and slots.
4. Fetch provider-specific detail when it improves the decision: `GET
   /resy/restaurant` or `GET /resy/availability` (`restaurant_id`, `date`,
   optional `party_size`); `GET /opentable/restaurant/menus` or `GET
   /opentable/restaurant/reviews` (`restaurant_id`, optional `page`, `size`).
   Menu and review data support discovery; they do not prove a table is
   available.

## Time, availability, and pricing

- Resy dates are `YYYY-MM-DD`; OpenTable `date_time` is RFC3339-minute local
  format. Normalize the requested moment to the restaurant's verified local
  time zone before the call, retain the original local date/time and zone in
  the output, and do not label an offset-free local time as UTC.
- Capture `retrieved_at` immediately for every availability call, alongside
  source, provider ID, requested date/time, party size, and canonical URL when
  returned. Treat returned slots as an observed snapshot: they can change
  between calls and do not hold inventory.
- Party size defaults to 2 on availability/search/detail calls when omitted.
  Request the user's actual party size; a result for one party size cannot be
  generalized to another. Search result limits default to 10 for Resy and
  OpenTable; Resy's event list also defaults to 10, while OpenTable reviews
  default to page 1 with 20 reviews. Do not imply undocumented maximums.
- A venue price tier/band is an affordability signal, not a menu total. Use
  actual menu prices only where returned, preserve currency and scope, and do
  not infer taxes, fees, deposits, minimums, or reservation cost.

## Keep regular reservations distinct from events

Resy `GET /resy/events` lists ticketed, fixed-price/fixed-capacity dining
events, not ordinary reservation slots. For one event, call `GET /resy/event`
with the event result's `event_url_slug`, `restaurant_url_slug`, and the same
`location` (optional `party_size`) to inspect ticket packages and their live
availability. Report event availability, tier price, inclusions, and event-day
instructions separately from restaurant reservation availability. This is
read-only research, never a ticket purchase.

## Deliverable and bounds

Return a comparison with venue name, provider and provider ID, verified
address/neighborhood, cuisine, price signal, requested local date/time/zone,
party size, observed slots or explicit lack of slots, source URL, and
`retrieved_at`. State which facts are discovery/profile data versus a
time-specific availability snapshot. Compare only like-for-like party sizes
and local times; a missing slot is not proof of a sellout, closure, or lack of
demand. Keep sources separate unless venue identity is independently verified.

Files in this skill

  • SKILL.md4.2 KB
  • agents/openai.yaml224 B
  • reference/endpoints.md7.4 KB
  • scripts/crawlora.sh3.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.