Yelp Reviews Scraper — Owner Replies & Monitor
Pricing
from $0.20 / 1,000 yelp reviews
Yelp Reviews Scraper — Owner Replies & Monitor
Scrape Yelp reviews into JSON: star ratings, full text, photos, reactions, and owner replies. Filter unanswered reviews and monitor new reviews with webhooks. A Yelp API alternative for Python, Node.js, and MCP.
Pricing
from $0.20 / 1,000 yelp reviews
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Yelp Reviews Scraper — Owner Replies & Reputation Monitor
Unofficial tool for publicly accessible Yelp data. Yelp and related trademarks belong to their respective owners. Not affiliated with, sponsored by, or endorsed by Yelp Inc. Provided for informational and reputation-monitoring use only; users must comply with applicable terms and laws.
| Actor | Role |
|---|---|
| Yelp Reviews Scraper | Reviews + owner replies + monitor ◄── you are here |
| Trustpilot Scraper | Company reviews, TrustScore, incremental monitor |
| Glassdoor Scraper | Employer reviews, interviews, salaries, jobs |
Yelp Reviews Scraper collects Yelp reviews and public owner responses into structured JSON on Apify — star ratings, full review text, photos, reactions, reviewer stats (optional), and business context. Use it as a practical Yelp API alternative for Python or Node.js pipelines, agency ORM workflows, and scheduled reputation monitoring. Filter unanswered 1-star reviews, cap history per location, or run monitor mode so daily cron jobs only emit new reviews instead of re-downloading full histories.
Best for: Yelp review mining, owner-reply coverage, competitor reputation tracking, local SEO / NAP snapshots, and JSON/CSV datasets for BI or AI assistants via Apify MCP.
When to use this Actor
- Yelp reviews scraper jobs for one or many
/biz/pages, aliases, or encrypted business IDs - Owner reply audits — keep only answered reviews, or only unanswered ones
- Incremental monitoring — scheduled runs that stop early once known reviews appear
- Star / date / keyword-filtered exports for sentiment and complaint themes
- Optional search (
pizzainSan Francisco, CA) that expands into review scrapes
When not to use this Actor
- Private Yelp for Business inbox, messaging, or ads manager — this Actor only reads public review pages
- Writing reviews, claiming profiles, or authenticated business-owner actions
- Full restaurant menus, deals, or email-enrichment lead gen (out of scope)
- Sites other than Yelp business / search pages
Modes
| Mode | What it does |
|---|---|
reviews | Review rows (optional business profile row). Default. |
monitor | Named KV watermarks + early-stop; emit only new reviews / rating deltas |
Key features
- Reviews + owner replies —
hasOwnerReply,ownerReplyText,ownerReplyDate, name/role when public - Filters the official Actor lacks — star ratings, sort (newest / elites / highest…), keyword search,
onlyUnanswered/onlyWithOwnerReply - Monitor-first ops — watermark + seen review IDs; webhook / Telegram for new 1–2★ or unanswered reviews
- Privacy default-off — reviewer name, location, and counts are
nullunlessincludeReviewerProfileis on - Typed dataset rows —
recordType:review,business,monitor_event - Residential proxies — recommended (US); datacenter IPs are often blocked
Input parameters
| Parameter | Description |
|---|---|
mode | reviews / monitor |
startUrls / businessAliases / businessIds | Business pages, slugs, or 22-char enc IDs |
searchTerm + searchLocation | Optional discovery, then reviews |
maxReviews | Per-business review cap (0 = until maxPages) |
sortOrder | newest (default), oldest, recommended, highest, lowest, elites |
starRatings / publishedAfter / publishedBefore / reviewSearchQuery | Filters |
onlyUnanswered / onlyWithOwnerReply | Owner-reply filters |
includeReviewerProfile | Off by default (GDPR-friendly schema) |
includeBusinessProfile | Push a business row in reviews mode |
yelpDomain / language | Regional host + review-feed language |
monitorStoreName / monitorBaselineOnly / resetMonitorState | Monitor KV controls |
webhookUrl / telegramToken / telegramChatId | Alerts |
proxyConfiguration | Use Apify Residential (US) |
Example — reviews + unanswered 1-star
{"mode": "reviews","startUrls": [{ "url": "https://www.yelp.com/biz/gary-danko-san-francisco" }],"maxReviews": 100,"sortOrder": "newest","starRatings": ["1", "2"],"onlyUnanswered": true,"includeBusinessProfile": true,"includeReviewerProfile": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Example — monitor baseline then schedule
{"mode": "monitor","businessAliases": ["gary-danko-san-francisco"],"monitorStoreName": "yelp-monitor-store","monitorBaselineOnly": true,"monitorMaxPages": 3,"earlyStopAfterKnown": 5,"notifyOnNegativeReviewsOnly": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
After the baseline run, set monitorBaselineOnly to false (or omit it). Schedule every 15–60 minutes — later runs emit only deltas and stop early.
Output
recordType | Fields (highlights) |
|---|---|
review | reviewId, reviewUrl, reviewText, reviewRating, publishedDate, hasOwnerReply, ownerReplyText, photos, reactions, business context |
business | businessId, businessAlias, businessName, businessRating, businessReviewCount, address, categories |
monitor_event | changeType (new_review, rating_drop, rating_rise, review_count_change, …) |
Output example — review
{"recordType": "review","reviewId": "revEncNew111111111111","reviewUrl": "https://www.yelp.com/biz/gary-danko-san-francisco?hrid=revEncNew111111111111","reviewText": "Incredible tasting menu.","reviewRating": 5,"reviewLanguage": "en","publishedDate": "2026-08-20T18:00:00.000Z","hasOwnerReply": true,"ownerReplyText": "Thank you for dining with us!","ownerReplyDate": "2026-08-21T09:00:00.000Z","ownerReplyName": "Gary Danko","photoUrls": ["https://s3-media0.fl.yelpcdn.com/example.jpg"],"reviewerName": null,"businessAlias": "gary-danko-san-francisco","businessName": "Gary Danko","businessRating": 4.6,"scrapedAt": "2026-08-25T17:40:00+00:00"}
Use cases
| Use case | What you get |
|---|---|
| Restaurant / local ORM | New Yelp reviews + unanswered 1-star alerts on a schedule |
| Owner-reply coverage | Which locations reply, how fast, and which complaints sit unanswered |
| Competitor research | Structured review text, stars, photos, and public replies for rivals |
| Local SEO / NAP | Business row with rating, review count, address, categories |
| AI assistant workflows | Run via Apify API, clients, or MCP and summarize complaint themes |
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/yelp-reviews-scraper').call({mode: 'reviews',startUrls: [{ url: 'https://www.yelp.com/biz/gary-danko-san-francisco' }],maxReviews: 100,sortOrder: 'newest',proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],apifyProxyCountry: 'US',},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/yelp-reviews-scraper").call(run_input={"mode": "monitor","businessAliases": ["gary-danko-san-francisco"],"monitorStoreName": "yelp-monitor-store","monitorBaselineOnly": False,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US",},})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())print(len(items), items[:3])
cURL
curl "https://api.apify.com/v2/acts/crawloop~yelp-reviews-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "reviews","startUrls": [{"url": "https://www.yelp.com/biz/gary-danko-san-francisco"}],"maxReviews": 50,"onlyUnanswered": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/yelp-reviews-scraper.
Example prompts:
- "Run the Yelp Reviews Scraper for https://www.yelp.com/biz/gary-danko-san-francisco, max 50 newest reviews, and return stars plus owner replies as JSON"
- "Scrape unanswered 1-star Yelp reviews for gary-danko-san-francisco and summarize the complaint themes"
- "Chain Yelp Reviews Scraper then Trustpilot Scraper for the same brand and compare reply coverage"
Suite next step
After you have Yelp location reviews, run Trustpilot Scraper for the same brand’s review-site reputation (TrustScore, company replies, incremental monitor). For employer-side reviews, continue with Glassdoor Scraper.
FAQ
Is this a Yelp Fusion API?
No Yelp Fusion API key is required. The Actor reads publicly available business review pages and returns structured dataset rows — a common Yelp API alternative for scraping / monitoring use cases. Fusion’s public review cap does not apply here.
Why do I need residential proxies?
Yelp rate-limits and challenges many datacenter IPs. Use Apify Residential proxies (US for yelp.com) for reliable runs.
How does monitor mode save cost?
It stores review watermarks in a named Key-Value Store. Later runs only emit new reviews / rating changes and stop pagination early when they hit already-seen content.
Can I get owner / manager replies?
Yes. Public owner responses are parsed onto each review (hasOwnerReply, ownerReplyText, ownerReplyDate). Use onlyUnanswered to find reviews that still need a response.
Does it include reviewer names?
Not by default. Turn on includeReviewerProfile if you need display name, location, and public counts. The field names stay in the schema either way (null when off).
Does it export JSON / CSV?
Yes. Results land in the Apify dataset. Download JSON, CSV, or Excel from the run, or pipe via API / integrations / MCP.
Tips
- Prefer
monitorfor production schedules; usereviewsfor historical dumps. - Keep
concurrencymoderate (2–4) on shared residential pools. - Always enable Residential proxies for Store QA and production.
newestsort +publishedAfterstops pagination once older reviews appear.