Tutorial: find newly opened restaurants with the Ora API
This walkthrough takes about five minutes. By the end you will have a list of restaurants that opened recently in a territory you pick, enriched with the fields your reps actually use.
Two kinds of access are involved, and it helps to know that upfront:
- Enrichment is self-serve. You need an API key, sent as an
X-API-Keyheader. If you do not have one, grab it from your account page or request access. - New restaurant openings come from Advanced Search, which requires separate commercial access and an issued key sent as an
Authorization: Bearerheader. Contact us to enable it. Already have your own feed of openings? Skip Step 1 and bring your list.
Step 1: pull the newly opened restaurants
New openings live in the same search index as the rest of Ora's restaurant database. Filter and sort on opening_date using YYYY-MM values; our new-openings pipeline continuously seeds newly discovered restaurants into the index. This query pulls the most recent openings first:
curl -sS -X POST "https://ora.248.ai/v1/locations/search" \
-H "Authorization: Bearer $ORA_SEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "search",
"filters": [
{"field": "opening_date", "op": "gte", "value": "2026-07"},
{"field": "opening_date", "op": "lte", "value": "2026-09"}
],
"sort": [
{"field": "opening_date", "direction": "desc"}
],
"page": {"size": 100, "offset": 0}
}'
Add territory filters on top; the filterable fields are listed in the API docs. Each hit carries the restaurant's name and address, which is exactly what enrichment takes as input.
Step 2: check your credits
Every enrichment costs credits, and checking your balance is free. Confirm you have some before you start.
curl -sS "https://ora.248.ai/api/v1/account/credits" \
-H "X-API-Key: $ORA_API_KEY"
One prefix note before the next step: account and credits endpoints use /api/v1, enrichment and search endpoints use /v1.
Step 3: see what fields are available
Ora returns owners, operators, POS and tech providers, online ordering, reservations, menu signals, and more. List the current field catalog so you can pick what you need:
curl -sS "https://ora.248.ai/v1/enrichment/fields" \
-H "X-API-Key: $ORA_API_KEY"
Pick the fields that map to how your team sells. If your wedge is payments, you want the current POS and payments providers. If it is delivery, you want online ordering presence.
Step 4: create an enrichment job
Each job enriches one restaurant. The inputs are name and address, nothing else: Ora resolves the Google listing itself and returns the place ID and verified website with the result. Loop over the openings from Step 1, one job per location. Each accepted job costs 1 credit. Full request and response schemas are in the API docs.
curl -sS -X POST "https://ora.248.ai/v1/enrichment/jobs" \
-H "Content-Type: application/json" \
-H "X-API-Key: $ORA_API_KEY" \
-d '{
"name": "Boka",
"address": "1729 N Halsted St, Chicago, IL 60614",
"fields": ["pos", "online_ordering_delivery_providers", "online_reservations", "website"]
}'
The response includes a job_id. Hold on to it.
Step 5: poll and collect results
Jobs run asynchronously. Poll the job until its status is completed, failed, or cancelled:
curl -sS "https://ora.248.ai/v1/enrichment/jobs/$JOB_ID" \
-H "X-API-Key: $ORA_API_KEY"
Then fetch the result:
curl -sS "https://ora.248.ai/v1/enrichment/jobs/$JOB_ID/result" \
-H "X-API-Key: $ORA_API_KEY"
Each record comes back with evidence links, so a rep can verify any claim before a call.
Step 6: push to your CRM
The output is flat JSON. Most teams map it straight into Salesforce or HubSpot with an upsert keyed on place ID, so re-runs update records instead of duplicating them.
What good looks like
A SpotOn-style motion runs this daily: pull the current month's openings, dedupe against what you already worked, enrich the new rows, route them to the rep who owns the territory, and have the first touch out before the restaurant has picked its systems. New openings close faster than any other segment because there is no incumbent to displace.
Questions or stuck on a step? Email us. A founder reads every message.