Yelp Business Reviews Scraper avatar

Yelp Business Reviews Scraper

Pricing

Pay per event

Go to Apify Store
Yelp Business Reviews Scraper

Yelp Business Reviews Scraper

Extract public Yelp review text, ratings, dates, reviewer details, photos, and owner responses from supplied business URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Extract public Yelp business reviews from supplied business URLs into a clean dataset for reputation monitoring, customer-feedback analysis, spreadsheets, and data pipelines.

Each review record includes the review text, star rating, publication date, reviewer profile metadata, attached photo URLs, the business context, and a displayed owner response when available.

The Actor accepts real yelp.com/biz/... pages. It does not require a Yelp login, Yelp API key, or user-provided proxy configuration.

What does Yelp Business Reviews Scraper do?

The Actor turns public Yelp review pages into structured records.

It can:

  • process one or many Yelp business URLs;
  • return newest reviews for recurring monitoring;
  • use Yelp's relevance ordering for one-time analysis;
  • paginate beyond the first review page;
  • filter reviews by publication date;
  • filter reviews by star rating;
  • capture reviewer name, location, avatar, public ID, and Elite badges;
  • capture attached public photo or video-thumbnail URLs;
  • capture owner-response text when Yelp displays it;
  • deduplicate records by Yelp's stable review identifier;
  • stop at per-business and overall limits.

Results go to the run's default dataset, ready for JSON, CSV, Excel, XML, RSS, API, or webhook integrations.

Who is it for?

Reputation teams can schedule newest-first runs and compare stable reviewId values with an earlier export.

Restaurant and local-business operators can isolate low-star reviews and investigate repeated service or product complaints.

Agencies can process several client business pages in one run while keeping each record tied to its canonical businessUrl.

Analysts and researchers can collect review text, ratings, dates, and reviewer context for a bounded public-data study.

Data engineers can feed normalized rows into a warehouse, spreadsheet, BI tool, or sentiment-analysis pipeline.

Why use this Actor?

Yelp pages are designed for interactive browsing rather than repeatable exports.

This Actor provides:

  • URL-first input with strict validation;
  • typed, stable field names;
  • pagination and filtering in one run;
  • useful failure messages instead of silently returning an empty dataset;
  • no automatic residential proxy cost;
  • resource-blocked browser loading to avoid downloading review media;
  • pay-per-event billing only for the run start and useful saved reviews.

It intentionally focuses on reviews from supplied business pages. It does not claim to search Yelp for businesses or scrape private Yelp account data.

What data can you extract?

FieldMeaning
reviewIdStable public Yelp review identifier
reviewUrlCanonical URL targeting the review
businessNameBusiness name displayed on Yelp
businessAliasAlias from the Yelp /biz/ URL
businessUrlCanonical Yelp business URL
businessRatingCurrent aggregate business rating
businessReviewCountCurrent displayed business review count
ratingReview's one-to-five-star rating
textPublic review text
publishedDateDate normalized to YYYY-MM-DD
publishedDateRawDate as Yelp displayed it
reviewerIdPublic Yelp reviewer identifier
reviewerNamePublic reviewer display name
reviewerUrlPublic Yelp profile URL
reviewerLocationDisplayed reviewer location
reviewerAvatarUrlPublic avatar image URL
reviewerEliteStatusDisplayed Yelp Elite badges
photoUrlsAttached public photo or video-thumbnail URLs
ownerResponseDisplayed business-owner response, or null
ownerResponseDateRawDisplayed response date, or null
sourceUrlNormalized source URL
scrapedAtExtraction timestamp

Nullable fields remain null when Yelp does not display that information.

How to scrape Yelp business reviews

  1. Open the Actor input page.
  2. Add one or more public Yelp URLs containing /biz/<business-alias>.
  3. Choose Newest first for monitoring or Yelp relevance for representative reviews.
  4. Set overall and per-business limits.
  5. Optionally set date and star-rating filters.
  6. Click Start.
  7. Open the Yelp reviews dataset view.
  8. Export the data or connect the dataset API to your workflow.

Start with a small limit to confirm the target pages and output before scheduling a larger recurring run.

Input parameters

startUrls

Required array of Yelp business URLs.

Accepted shape:

[{ "url": "https://www.yelp.com/biz/gary-danko-san-francisco" }]

Other Yelp pages, non-Yelp hosts, and malformed URLs fail closed.

maxItems

Maximum matching reviews saved across all businesses. Default: 100; maximum: 10000.

maxReviewsPerBusiness

Maximum matching reviews saved for each business. Default: 100; maximum: 5000.

sortBy

  • date: newest reviews first; recommended for monitoring.
  • relevance: Yelp relevance order; useful for one-time analysis.

dateFrom and dateTo

Optional inclusive YYYY-MM-DD boundaries.

When sortBy is date, the Actor stops paging after it passes dateFrom.

minRating and maxRating

Inclusive integer star boundaries from 1 to 5.

For complaint triage, set minRating: 1 and maxRating: 3.

Example input

{
"startUrls": [
{ "url": "https://www.yelp.com/biz/gary-danko-san-francisco" }
],
"maxItems": 10,
"maxReviewsPerBusiness": 10,
"sortBy": "date",
"dateFrom": "2026-07-01",
"minRating": 1,
"maxRating": 5
}

This input is suitable for a scheduled newest-review monitoring task.

Example output

{
"reviewId": "sampleReviewId123",
"reviewUrl": "https://www.yelp.com/biz/sample-cafe?hrid=sampleReviewId123",
"businessName": "Sample Cafe",
"businessAlias": "sample-cafe",
"businessUrl": "https://www.yelp.com/biz/sample-cafe",
"businessRating": 4.5,
"businessReviewCount": 248,
"rating": 5,
"text": "Friendly service and a thoughtful menu.",
"publishedDate": "2026-07-15",
"publishedDateRaw": "Jul 15, 2026",
"reviewerId": "sampleReviewerId",
"reviewerName": "Sample R.",
"reviewerUrl": "https://www.yelp.com/user_details?userid=sampleReviewerId",
"reviewerLocation": "San Francisco, CA",
"reviewerAvatarUrl": "https://s3-media0.fl.yelpcdn.com/photo/sample/60s.jpg",
"reviewerEliteStatus": ["Elite 26"],
"photoUrls": ["https://s3-media0.fl.yelpcdn.com/bphoto/sample/348s.jpg"],
"ownerResponse": "Thank you for visiting us.",
"ownerResponseDateRaw": "Jul 16, 2026",
"sourceUrl": "https://www.yelp.com/biz/sample-cafe",
"scrapedAt": "2026-08-08T06:30:00.000Z"
}

The example is anonymized. Actual runs contain public source values.

How much does it cost to extract Yelp business reviews?

The Actor uses pay-per-event pricing:

  • one start event per run;
  • one item event for each useful review saved.

The start price is $0.001 per run. The BRONZE item price is $0.00078431 per saved review, with lower per-review rates on higher pricing tiers.

At the BRONZE rate:

  • 10 reviews cost about $0.0088 including the start event;
  • 100 reviews cost about $0.0804 including the start event;
  • 1,000 reviews cost about $0.7853 including the start event.

Filtered-out, duplicate, empty, or failed records do not emit an item charge. Apify shows the active tier and maximum charge before a run starts.

Recurring reputation monitoring workflow

  1. Set sortBy to date.
  2. Set dateFrom to the beginning of the monitoring window.
  3. Schedule the Actor daily or weekly.
  4. Store reviewId in your destination system.
  5. Upsert on reviewId to avoid duplicate alerts.
  6. Route one-to-three-star rows to a support or operations queue.
  7. Track businessRating and businessReviewCount as contextual snapshots.

The Actor extracts current public data. It does not maintain historical state or send alerts by itself.

Spreadsheet, webhook, and data-pipeline integrations

Use an Apify integration to send the dataset to Google Sheets, Make, Zapier, Slack, a webhook, or cloud storage.

For a warehouse pipeline:

  • use reviewId as the source key;
  • parse publishedDate as a date;
  • parse scrapedAt as the observation timestamp;
  • retain businessUrl for entity grouping;
  • treat reviewer and response fields as nullable;
  • avoid downloading media unless your use case requires it.

For sentiment analysis, analyze text while preserving rating as a source-provided label.

Use the Yelp reviews API

Replace YOUR_TOKEN with an Apify API token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~yelp-business-reviews-scraper/runs?token=YOUR_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.yelp.com/biz/gary-danko-san-francisco"}],"maxItems":10,"sortBy":"date"}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/yelp-business-reviews-scraper').call({
startUrls: [{ url: 'https://www.yelp.com/biz/gary-danko-san-francisco' }],
maxItems: 10,
sortBy: 'date',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/yelp-business-reviews-scraper").call(run_input={
"startUrls": [{"url": "https://www.yelp.com/biz/gary-danko-san-francisco"}],
"maxItems": 10,
"sortBy": "date",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with Apify MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/yelp-business-reviews-scraper"

Claude Desktop

Add this server to Claude Desktop's MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/yelp-business-reviews-scraper"
}
}
}

Cursor

Use the same mcpServers.apify.url value in Cursor's MCP settings.

VS Code

Add the same HTTP MCP URL to your VS Code MCP server configuration, then select the Yelp Business Reviews Scraper tool.

Example prompts:

  • "Extract the five newest reviews from this Yelp business URL."
  • "Collect recent one-to-three-star reviews and summarize recurring complaints."
  • "Run the Yelp review monitor input and return only review IDs not in this list."

Limits and reliability

Yelp is a dynamic third-party source and can change markup, availability, or anti-automation behavior without notice.

The Actor uses a public translated Yelp surface because direct Yelp delivery is frequently challenged. A source change may temporarily cause retries or a non-zero failure.

Other limitations:

  • only public /biz/ URLs are supported;
  • no Yelp business search is provided;
  • no login-only or private account data is accessed;
  • Yelp may display different review order or counts by locale and time;
  • photo arrays can be empty when a review has no displayed photos;
  • owner-response fields are null when no response is displayed;
  • deleted or hidden reviews cannot be recovered;
  • very large businesses require more pages and runtime.

The Actor retries failed pages three times with fresh browser pages, then fails visibly rather than returning a misleading empty success.

Responsible use and legality

This Actor extracts publicly displayed information. You are responsible for ensuring that your use complies with applicable law, Yelp's terms, privacy obligations, and your organization's policies.

Use only the data you need. Avoid using reviewer data for harassment, discrimination, identity resolution, or unsolicited contact. Apply appropriate retention, access-control, and deletion policies to exported personal data.

This Actor is not affiliated with or endorsed by Yelp.

Troubleshooting

Why does the run reject my URL?

Use a full public Yelp business URL containing /biz/<alias>. Search pages, user pages, shortened links, and non-Yelp hosts are intentionally rejected.

Why are there no matching rows?

Check the date and rating boundaries. A valid business may have no reviews matching a narrow filter. Increase maxReviewsPerBusiness so the Actor can page far enough to find matches.

Why did the run fail after retries?

Open the run log and check the upstream status. Retry later if Yelp's public surface is temporarily unavailable. Do not add a proxy: this Actor owns its delivery strategy and does not expose an unmeasured residential fallback.

Why is ownerResponse null?

Yelp does not display an owner response for every review. Null means no response was found on the rendered card.

How do I avoid duplicate alerts?

Use reviewId as the stable source key and upsert or compare against prior IDs in your destination.

FAQ

Can I scrape multiple Yelp businesses?

Yes. Add multiple business URLs to startUrls; the Actor deduplicates identical canonical URLs.

Can I get only the newest reviews?

Yes. Use sortBy: "date", a recent dateFrom, and an appropriate limit.

Can I get only negative reviews?

Yes. Set minRating: 1 and maxRating: 3.

Does it download review photos?

No. It returns displayed public media URLs while blocking image downloads during extraction to reduce transfer and runtime cost.

Does it use the official Yelp API?

No. The official API does not provide the complete supplied-business review workflow implemented here.

Does it require a Yelp login or API key?

No.

Is every Yelp review guaranteed?

No. Output reflects reviews Yelp publicly displays through the source surface at run time. Yelp can reorder, hide, translate, or remove content.

Use Google Maps Reviews Scraper when your workflow starts from Google Maps rather than Yelp.

Use Trustpilot Reviews Scraper for public Trustpilot company-review monitoring.

Use Social Media Sentiment as a downstream text-analysis step when its supported input contract matches your workflow.

These are separate sources and products; their records should not be treated as equivalent Yelp reviews.