Sign up takes 30 seconds — $0.50 free on your account. Claim credit →
Examples

What people build with restoapi data

Real scenarios with code snippets. Each example uses the public API + your rk_live_* key.

1. Price tracker — track a chain across 50 locations daily

Scenario: you sell a B2B SaaS to McDonald's franchisees. They want to know if competitor Burger King raised prices in their city.

Solution: nightly cron → POST all BK URLs as batch → compare with yesterday's run.

import requests, json, datetime, pathlib

KEY = "rk_live_xxx"
H   = {"Authorization": f"Bearer {KEY}"}
URLS = pathlib.Path("bk_locations.txt").read_text().splitlines()

batch = requests.post("https://restoapi.org/v1/jobs/batch", headers=H, json={
    "source_urls": URLS,
    "platform": "wolt",
    "export_type": "full_data",     # cheaper, no photos
    "options": {"include_media": False},
}).json()

# Each job_id polled in parallel; aggregate batch_id endpoint for sweep
print(f"queued {batch['jobs_count']} jobs, total ${batch['total_charged_cents']/100:.2f}")

today = datetime.date.today().isoformat()
pathlib.Path(f"snapshots/{today}.json").write_text(json.dumps(batch))

Cost: 50 URLs × $0.07 (full_data with −30% no-media discount) = $3.50 per nightly run.

2. ML training set — labelled dish photos with allergens

You're training a model to classify food photos by allergen risk (contains-gluten, contains-dairy, vegan, etc).

restoapi gives you photos paired with prodinfo allergen tags — already labelled.

# Pick 1000 restaurants across categories, full_media tier
for url in top_1000_urls:
    job = requests.post("https://restoapi.org/v1/jobs", headers=H, json={
        "source_url": url,
        "platform": "wolt",
        "export_type": "full_media",
    }).json()

# After completion: unzip, walk photos/menu_photos/ + match by hash to items
# with .allergens_normalized = ['milk', 'wheat', 'egg', ...]
# → instant labelled dataset

Total: 1000 × $0.15 = $150 for a curated multilingual photo dataset with allergens, nutrition labels, and item names in 3-5 languages each. Bright Data alone would cost more, with worse structure.

3. Telegram bot — allergen-friendly restaurant finder

User has a peanut allergy. Bot accepts location + dietary preference → returns nearby restaurants with no peanut allergens.

# When user searches, we already have data harvested via batch jobs
def safe_for_peanut_allergy(restaurant_data):
    for item in restaurant_data["menu"]:
        allergens = item.get("computed", {}).get("derived", {}).get("allergens_normalized", [])
        if "peanut" in allergens:
            return False
    return True

Edge case handled: restaurants with no prodinfo data still have a bracket-fallback parser — we extract allergens from item descriptions like "Cake (Gluten, Eggs, Milk)".

4. Multilingual menu cards in your CRM

You run a tourism platform showing restaurants to visitors. A Russian tourist in Tbilisi should see menu in Russian; German tourist — in German.

def render_menu(restaurant_json, user_locale):
    items = []
    for item in restaurant_json["menu"]:
        tr = item.get("translations", {}).get(user_locale)
        if tr:
            items.append({
                "name": tr["name"],
                "desc": tr.get("description"),
                "price": item["pricing"]["formatted"],
                "photo": item["photo"]["local_url"],
            })
    return items

# Aroma Coffee Tbilisi serves menu in ka + en + ru + de + tr
# All five are inside the archive. Pick one.

RTL languages (Hebrew, Arabic) work out of the box — strings are preserved as-is, your frontend handles direction with CSS direction: rtl;.

5. Catalog for SEO / shopping site

Build a public catalog like "best Wolt restaurants in Vienna" with proper schema.org markup.

The computed.flat namespace gives you 47 ready-to-use scalars:

{
  "name": "Centrum Kitchen & Bar",
  "country": "ISL", "city": "Akureyri", "currency": "ISK",
  "primary_language": "is", "languages_count": 3,
  "is_open": true, "phone": "+3546666078",
  "items_count": 15, "items_popular": 5, "items_with_photo": 15,
  "price_min": 500, "price_max": 3850, "price_avg": 2433,
  "top_cuisines": ["other", "salad", "pasta"],
  "top_allergens": [],
  "tags": ["Burger", "Meat & fish", "Steak", "Mexican", "Salad"],
  "slogan": "Framandi & fjölbreyttur matseðill...",
  "logo_local_url": "photos/cover/abc123.jpg"
  // + 30 more scalars
}

Map this directly to <Restaurant>, <Menu>, <MenuItem> schema.org types for rich Google snippets.

Got an idea we should feature?

If you build something cool with restoapi, we'd love to highlight it here. Drop us a line at support@restoapi.org.