Restaurant Review Intelligence - Multi-Platform Reviews
Pricing
Pay per usage
Restaurant Review Intelligence - Multi-Platform Reviews
Aggregate restaurant reviews from Google Maps, Yelp, TripAdvisor, DoorDash, and UberEats into unified profiles. Cross-platform ratings, sentiment analysis, popular dishes, review highlights, and competitive intelligence for restaurant owners, investors, and food industry analysts.
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ricardo Akiyoshi
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Restaurant Review Intelligence — Multi-Platform Review Aggregator
Aggregate restaurant reviews and ratings from 5 major platforms into unified, actionable intelligence profiles. This premium meta-actor searches Google Maps, Yelp, TripAdvisor, DoorDash, and UberEats simultaneously to give you the most comprehensive view of any restaurant or dining scene.
What It Does
- Discovery — Search by restaurant name, cuisine type, or area. The actor finds matching restaurants across all 5 platforms.
- Aggregation — Collects ratings, review counts, hours, contact info, menus, and individual reviews from each platform.
- Deduplication — Uses address normalization and fuzzy name matching to merge the same restaurant across platforms into one unified profile.
- Sentiment Analysis — Keyword-based sentiment scoring of review text. Identifies common praise, complaints, and trending topics.
- Popular Dishes — Extracts frequently mentioned dishes and menu items from review text across all platforms.
- Cross-Platform Analytics — Weighted average rating, platform comparison, rating distribution, and confidence scoring.
Platforms Covered
| Platform | Data Extracted |
|---|---|
| Google Maps | Rating, review count, address, phone, hours, cuisine, price level, individual reviews with text and dates |
| Yelp | Rating, review count, address, phone, hours, categories, price range, photos count, individual reviews |
| TripAdvisor | Rating, review count, ranking, address, cuisine, price range, individual reviews with traveler type |
| DoorDash | Rating, review count, delivery fee, delivery time, menu items, popular items, individual reviews |
| UberEats | Rating, review count, delivery fee, delivery time, menu categories, popular picks, individual reviews |
Output Fields
Each restaurant profile includes:
{"name": "Joe's Pizza","address": "7 Carmine St, New York, NY 10014","normalizedAddress": "7 carmine st new york ny 10014","phone": "(212) 366-1182","website": "https://joespizzanyc.com","cuisine": ["Pizza", "Italian"],"priceRange": "$$","hours": { "monday": "10:00 AM - 4:00 AM", "..." : "..." },"crossPlatformRating": 4.42,"totalReviewCount": 8547,"ratingConfidence": "high","platforms": {"google": { "rating": 4.5, "reviewCount": 4200, "url": "..." },"yelp": { "rating": 4.0, "reviewCount": 2800, "url": "..." },"tripadvisor": { "rating": 4.5, "reviewCount": 1200, "url": "..." },"doordash": { "rating": 4.6, "reviewCount": 215, "url": "..." },"ubereats": { "rating": 4.5, "reviewCount": 132, "url": "..." }},"sentiment": {"overall": "positive","score": 0.78,"positiveCount": 412,"negativeCount": 67,"neutralCount": 145,"topPraise": ["authentic", "crispy crust", "fast service", "great value"],"topComplaints": ["long wait", "small portions", "cash only"],"trendingTopics": ["new location", "late night"]},"popularDishes": [{ "dish": "Pepperoni Slice", "mentions": 89, "sentiment": "positive" },{ "dish": "Fresh Mozzarella Slice", "mentions": 45, "sentiment": "positive" }],"reviews": [{"platform": "google","author": "John D.","rating": 5,"date": "2026-01-15","text": "Best pizza in NYC, hands down...","sentiment": "positive"}],"analytics": {"bestPlatformRating": { "platform": "doordash", "rating": 4.6 },"worstPlatformRating": { "platform": "yelp", "rating": 4.0 },"ratingSpread": 0.6,"platformPresence": 5,"reviewVelocity": "high"},"scrapedAt": "2026-03-02T12:00:00Z"}
Use Cases
Restaurant Owners & Operators
- Monitor your reputation across all review platforms in one place
- Identify recurring complaints before they become trends
- Track which dishes customers love (and which they don't)
- Compare your ratings against competitors in your area
Food Industry Investors & Analysts
- Due diligence on restaurant investments — see real customer sentiment
- Market analysis: find underserved cuisines or locations
- Track rating trends across a portfolio of restaurants
- Identify high-performing restaurants for acquisition targets
Restaurant Consultants
- Competitive landscape analysis for clients
- Benchmark a client's restaurant against local competitors
- Identify improvement areas from cross-platform review analysis
- Data-driven recommendations backed by thousands of reviews
Food Bloggers & Media
- Research restaurants before reviews with comprehensive data
- Find trending restaurants and emerging food scenes
- Identify the most-loved dishes at popular restaurants
- Data journalism on dining trends and patterns
Delivery Platform Optimization
- Compare delivery ratings vs dine-in ratings
- Identify restaurants with high delivery demand (DoorDash/UberEats reviews)
- Track delivery fee competitiveness across platforms
Pricing
$0.01 per restaurant analyzed (pay-per-event)
Each restaurant analyzed includes:
- Full profile data from up to 5 platforms
- Cross-platform rating aggregation
- Sentiment analysis of collected reviews
- Popular dish extraction
- Competitive analytics
Example costs:
- 50 restaurants in a city: $0.50
- 200 restaurants for market research: $2.00
- 500 restaurants for comprehensive analysis: $5.00
Input Examples
Single Restaurant Analysis
{"searchQuery": "Joe's Pizza","location": "New York, NY","maxRestaurants": 1,"includeReviews": true,"maxReviewsPerRestaurant": 50}
Cuisine Market Research
{"searchQuery": "Thai restaurants","location": "San Francisco, CA","maxRestaurants": 100,"includeReviews": true,"maxReviewsPerRestaurant": 20}
Quick Rating Comparison (No Reviews)
{"searchQuery": "pizza","location": "Chicago, IL","maxRestaurants": 200,"includeReviews": false}
Tips for Best Results
- Use specific locations — "Austin, TX" works better than "Texas"
- Restaurant names should be exact — For single-restaurant lookup, use the exact name as it appears on Google Maps
- Enable proxies — Google, Yelp, and TripAdvisor aggressively block scrapers. Residential proxies are strongly recommended.
- Start small — Test with 5-10 restaurants first, then scale up
- Reviews add value — Keep
includeReviewsenabled for sentiment analysis and dish extraction. Disable only for quick rating-only scans.
Technical Details
- Built with Apify SDK v3 and Crawlee CheerioCrawler
- Inline scraping for all 5 platforms (no external actor dependencies)
- 10+ rotating user agents with anti-bot measures
- Address normalization for cross-platform deduplication
- Keyword-based sentiment analysis (no external API calls)
- Graceful degradation: if one platform blocks, others still work
- Structured error handling with per-platform retry logic
Limitations
- Review text availability depends on each platform's current page structure
- DoorDash and UberEats data requires the restaurant to be listed on those delivery platforms
- Sentiment analysis is keyword-based (not ML-based) for speed and zero external dependencies
- Some platforms may serve different results based on proxy location
- Rate limiting may slow down very large runs (500+ restaurants)
Integration — Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("sovereigntaylor/restaurant-review-intelligence").call(run_input={"searchTerm": "example query","maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item.get('title', item.get('name', 'N/A'))}")
Integration — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('sovereigntaylor/restaurant-review-intelligence').call({searchTerm: 'example query',maxResults: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(item.title || item.name || 'N/A'));