MenuMiner - Restaurant Menu Scraper avatar

MenuMiner - Restaurant Menu Scraper

Pricing

from $2.20 / 1,000 results

Go to Apify Store
MenuMiner - Restaurant Menu Scraper

MenuMiner - Restaurant Menu Scraper

Extract restaurant menu data from public HTML and JSON-LD pages: restaurant name, categories, menu items, prices, and source URLs. Fast Cheerio-based scraper with clean dataset output and clear status notes for unsupported, blocked, or JS-rendered sites.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

Techionik

Techionik

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

8 days ago

Last modified

Share

MenuMiner โ€“ Restaurant Menu Scraper ๐Ÿฝ๏ธ

Cheerio-only Supports No Browser Public Pages Output

๐Ÿฝ๏ธ Overview

MenuMiner โ€“ Restaurant Menu Scraper extracts structured restaurant menu data from public menu pages that expose menu items through server-rendered HTML or JSON-LD structured data.

It is designed to be fast, lightweight, and cost-efficient by using Cheerio-only scraping instead of browser automation.

Use MenuMiner to collect restaurant names, menu categories, item names, prices, and source URLs in a clean dataset format ready for restaurant research, food-tech platforms, pricing analysis, delivery catalog building, automation workflows, and data pipelines.


โœ… What This Actor Extracts

When a supported menu is found, each dataset row can include:

  • restaurantName โ€” detected restaurant name
  • category โ€” menu category such as Appetizers, Mains, Desserts, Drinks
  • itemName โ€” menu item name
  • price โ€” extracted menu item price
  • menuPageUrl โ€” source URL where the item was found

If a menu is not detected, blocked, or unsupported, the Actor returns a clear status row instead of leaving the result empty.


๐Ÿ“ฆ Output Fields

โœ… Successful Menu Item Output

FieldDescription
restaurantNameName of the restaurant
categoryMenu category, if available
itemNameName of the menu item
priceExtracted item price
menuPageUrlSource menu page URL

โš ๏ธ Unsupported / Failed Page Output

FieldDescription
restaurantNameDetected restaurant name or domain fallback
menuPageUrlURL that was checked
statusStatus such as no_menu_found, blocked_or_protected, or request_failed
noteClear explanation of why the menu was not extracted

๐Ÿš€ Best Use Cases

MenuMiner is ideal for:

  • Restaurant menu data collection
  • Menu item and price extraction
  • Food delivery catalog research
  • Restaurant directory enrichment
  • Menu price monitoring
  • Competitive restaurant analysis
  • Food-tech data pipelines
  • Local business intelligence
  • Market research
  • Google Sheets, Make, n8n, Zapier, API, and database workflows

โš™๏ธ How It Works

MenuMiner follows a clean and reliable extraction process:

  1. Loads each provided public menu URL
  2. Checks for JSON-LD structured menu data
  3. Scans server-rendered HTML for menu categories, items, and prices
  4. Detects the restaurant name from structured data, meta tags, page title, or domain
  5. Normalizes extracted prices
  6. Removes duplicate menu rows
  7. Filters promotional or non-menu text
  8. Saves clean menu items to the Apify dataset
  9. Returns a clear status note when a page is unsupported, blocked, or failed

๐Ÿ“ Input Example

{
"startUrls": [
{
"url": "https://example-restaurant.com/menu"
}
],
"maxPages": 5
}

๐Ÿ“Š Output Example

Successful Menu Item

{
"restaurantName": "Example Restaurant",
"category": "Appetizers",
"itemName": "Garlic Bread",
"price": "$6.99",
"menuPageUrl": "https://example-restaurant.com/menu"
}

Unsupported Page Example

{
"restaurantName": "Example Restaurant",
"menuPageUrl": "https://example-restaurant.com/menu",
"status": "no_menu_found",
"note": "No menu data was detected in static HTML or JSON-LD. This actor supports server-rendered HTML and structured JSON-LD only."
}

โœ… Supported Pages

MenuMiner works best with restaurant websites where menu data is visible in:

  • Public restaurant menu pages
  • Static HTML
  • Server-rendered HTML
  • JSON-LD structured data
  • Direct ordering menu category pages
  • Pages where menu item names and prices appear in the page source

โŒ Not Supported

This Actor does not bypass restrictions or extract menu data from pages where the menu is not available in public HTML or JSON-LD.

Unsupported cases may include:

  • JavaScript-rendered menus
  • React or Vue menus loaded after page load
  • API-only ordering widgets
  • Iframe-based menus
  • PDF menus
  • Image-only menus
  • Login-protected menus
  • Bot-protected websites
  • Pages returning HTTP 403
  • Websites where menu content is hidden from static HTML

๐Ÿ” Good Input URLs

For best results, use direct public menu pages.

Good examples include:

  • Restaurant menu pages
  • Public HTML menu pages
  • Ordering category pages with visible items and prices
  • Pages where menu data appears in the page source
  • Pages using JSON-LD menu schema

Avoid using:

  • Restaurant homepages without visible menu items
  • Pages that require button clicks to load the menu
  • PDF-only menus
  • Image-only menus
  • Protected ordering platforms
  • JavaScript-only menu widgets

For One Restaurant Menu

{
"startUrls": [
{
"url": "https://example-restaurant.com/menu"
}
],
"maxPages": 1
}

For Multiple Menu Pages

{
"startUrls": [
{
"url": "https://restaurant-one.com/menu"
},
{
"url": "https://restaurant-two.com/menu"
},
{
"url": "https://restaurant-three.com/menu"
}
],
"maxPages": 10
}

๐ŸŒŸ Key Features

  • Fast Cheerio-only scraping
  • No browser automation required
  • Lower runtime cost than browser-based scrapers
  • Extracts restaurant names
  • Extracts menu categories
  • Extracts menu item names
  • Extracts prices
  • Supports JSON-LD menu data
  • Supports server-rendered HTML menus
  • Normalizes prices
  • Removes duplicate rows
  • Filters promotional and non-menu text
  • Returns clear status notes for unsupported pages
  • Provides clean structured dataset output
  • Simple input configuration
  • Easy to connect with APIs and automation tools

๐Ÿง  Data Quality Approach

MenuMiner is designed to produce clean and practical menu datasets.

It uses:

  • JSON-LD menu extraction
  • HTML menu scanning
  • Restaurant name detection
  • Price normalization
  • Duplicate row removal
  • Promotional text filtering
  • Generic text filtering
  • Professional status notes for unsupported pages

This keeps the output useful for business, research, and automation workflows.


๐Ÿ”— Output Access

After the run finishes, you can access the extracted menu data from:

  • Apify Dataset
  • Dataset API
  • Overview table
  • JSON export
  • CSV export
  • Excel export
  • XML export
  • Apify integrations
  • Webhooks

โš ๏ธ Notes and Limitations

  • Only publicly accessible menu data is extracted.
  • The Actor does not bypass login walls, paywalls, API restrictions, or bot protections.
  • JavaScript-rendered menus may not be supported.
  • PDF, image, and iframe menus are not supported by this Cheerio-only version.
  • The quality of results depends on how the restaurant website exposes its menu data.
  • For best results, provide direct menu page URLs instead of restaurant homepages.

๐ŸŽฏ Why Use MenuMiner?

MenuMiner โ€“ Restaurant Menu Scraper is a fast and cost-efficient way to extract structured restaurant menu data from public HTML and JSON-LD pages.

It is ideal for users who need clean menu items, categories, prices, and source URLs without the cost and complexity of browser-based scraping.


๐Ÿ› ๏ธ Technology

Built with:

  • Apify SDK
  • Crawlee
  • CheerioCrawler
  • Cheerio

โœ… Status

Production-ready for public restaurant menu extraction from supported HTML and JSON-LD menu pages.