Yelp Reviews Scraper — Owner Replies & Monitor avatar

Yelp Reviews Scraper — Owner Replies & Monitor

Pricing

from $0.20 / 1,000 yelp reviews

Go to Apify Store
Yelp Reviews Scraper — Owner Replies & Monitor

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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.

ActorRole
Yelp Reviews ScraperReviews + owner replies + monitor ◄── you are here
Trustpilot ScraperCompany reviews, TrustScore, incremental monitor
Glassdoor ScraperEmployer 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 (pizza in San 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

ModeWhat it does
reviewsReview rows (optional business profile row). Default.
monitorNamed KV watermarks + early-stop; emit only new reviews / rating deltas

Key features

  • Reviews + owner replieshasOwnerReply, 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 null unless includeReviewerProfile is on
  • Typed dataset rowsrecordType: review, business, monitor_event
  • Residential proxies — recommended (US); datacenter IPs are often blocked

Input parameters

ParameterDescription
modereviews / monitor
startUrls / businessAliases / businessIdsBusiness pages, slugs, or 22-char enc IDs
searchTerm + searchLocationOptional discovery, then reviews
maxReviewsPer-business review cap (0 = until maxPages)
sortOrdernewest (default), oldest, recommended, highest, lowest, elites
starRatings / publishedAfter / publishedBefore / reviewSearchQueryFilters
onlyUnanswered / onlyWithOwnerReplyOwner-reply filters
includeReviewerProfileOff by default (GDPR-friendly schema)
includeBusinessProfilePush a business row in reviews mode
yelpDomain / languageRegional host + review-feed language
monitorStoreName / monitorBaselineOnly / resetMonitorStateMonitor KV controls
webhookUrl / telegramToken / telegramChatIdAlerts
proxyConfigurationUse 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

recordTypeFields (highlights)
reviewreviewId, reviewUrl, reviewText, reviewRating, publishedDate, hasOwnerReply, ownerReplyText, photos, reactions, business context
businessbusinessId, businessAlias, businessName, businessRating, businessReviewCount, address, categories
monitor_eventchangeType (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 caseWhat you get
Restaurant / local ORMNew Yelp reviews + unanswered 1-star alerts on a schedule
Owner-reply coverageWhich locations reply, how fast, and which complaints sit unanswered
Competitor researchStructured review text, stars, photos, and public replies for rivals
Local SEO / NAPBusiness row with rating, review count, address, categories
AI assistant workflowsRun 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 ApifyClient
client = 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 monitor for production schedules; use reviews for historical dumps.
  • Keep concurrency moderate (2–4) on shared residential pools.
  • Always enable Residential proxies for Store QA and production.
  • newest sort + publishedAfter stops pagination once older reviews appear.