9 min read
How to scrape local business listings and reviews
Get names, addresses, phone numbers, ratings and review counts from Yelp, Google and Tripadvisor.
| Directory | Business | Rating | Reviews |
|---|---|---|---|
| Yellow Pages | Clarke Kent Plumbing | 2.87 | 15 |
| Clarke Kent Plumbing | 4.5 | 619 | |
| Yellow Pages | Radiant Plumbing | 4.2 | 15 |
| Radiant Plumbing | 4.8 | 18,000 | |
| Yelp | Juan & Only Plumber | 4.6 | 42 |
| Juan & Only Plumber | 4.9 | 483 |
The String Web Access API is the best way to scrape local business data. It returns any directory page, or its listings as JSON with name, address, phone, rating and review count. In our October 2026 benchmark it fetched Yelp, Tripadvisor, Trustpilot and G2 on every attempt and Yellow Pages on 4 of 5, and returned 98.6% of requests across 100 bot-protected sites, the most of 17 providers.
Quickstart
Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent a directory search URL. It calls the web_access_fetch tool and reads the listings.
https://mcp.usestring.ai/v3/mcp
One call returns the businesses on a Yellow Pages search page as JSON. Ads can be among them, so drop them as in step 3. If extraction can't fill the required fields, you get "extracted": false back instead of a guess.
curl https://request.usestring.ai/v1/fetch \
-H "Authorization: Bearer $STRING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.yellowpages.com/search?search_terms=plumbers&geo_location_terms=Austin%2C+TX",
"countryCode": "US",
"jsonSchema": {
"type": "object",
"properties": {
"businesses": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"phone": { "type": "string" },
"address": { "type": ["string", "null"] },
"rating": { "type": ["number", "null"] },
"reviewCount": { "type": ["integer", "null"] }
},
"required": ["name", "phone"]
}
}
},
"required": ["businesses"]
}
}'Response (first 3 of 30 businesses)
{
"businesses": [
{
"name": "Custom Plumbing Services",
"phone": "(512) 837-0437",
"rating": null,
"reviewCount": null
},
{
"name": "Biggs Plumbing Co",
"phone": "(512) 837-5955",
"rating": null,
"reviewCount": null
},
{
"name": "Clarke Kent Plumbing",
"phone": "(512) 766-0970",
"rating": 2.87,
"reviewCount": 15
}
]
}Why scrape local business data?
Directories like Google, Yelp, Yellow Pages and Tripadvisor are the public record of which businesses operate in a place, how to reach them and what customers think of them. A local business scraper collects those listings for a category and a set of cities, and keeps them current. It answers these questions:
- Which businesses are in my market? Sales teams build lead lists by category and city. Franchise and expansion teams count the competition in a city before they open there.
- How do customers rate them? Ratings and review counts show who leads a category in a city, and how that changes month to month.
- Is the listing still right? Businesses move, change phone numbers and close. Data vendors and local SEO teams compare directories to find listings that are out of date.
What you can collect
Business listings
Name, address, phone, website, category and opening hours.
Ratings and reviews
Star rating, review count, the count at each star on Yelp, and review text.
Location
Coordinates, neighborhood, and the service area for businesses that come to you.
Market coverage
Every business in a category across a set of cities, and which ones open or close.
Why does local business scraping break?
- Directories block scrapers. In our October 2026 benchmark, 12 of the 16 other scraping APIs couldn't fetch yelp.com on every attempt, including Firecrawl, Zyte and Oxylabs (0 of 5 each) and Nimble (1 of 5). On g2.com, 9 of 16 fell short. Browserbase got 0 of 5 on all six review and local sites, and on tripadvisor.com. String got 5 of 5 on Yelp, G2, Trustpilot, Capterra and Crunchbase, and 4 of 5 on Yellow Pages, where 11 of the other 16 got all 5, including Scrape.do, Context.dev and Scrapfly.
- Ads look like listings. A Yellow Pages search for plumbers in Austin returned 30 listings and 16 ads, some for businesses in Conroe, San Antonio and New Braunfels. Yelp's page for the same search had 13 sponsored cards around its 10 results.
- One business has many versions. Clarke Kent Plumbing, at 1408 W Ben White Blvd, shows one phone number and a 2.87 rating from 15 reviews on Yellow Pages, and another number and 4.5 from 619 reviews on Google. Match on phone alone and you count it twice.
Why do teams choose String?
- It fetches the most pages. String returned 98.6% of requests across 100 bot-protected sites in our October 2026 benchmark, the most of 17 providers, and 29 of 30 attempts on the 6 review and local sites in it.
- Yelp comes back as typed rows. The Yelp site integration returns search results, business records and reviews as JSON, with fields like rating, review count, phone, hours and whether the business is closed.
- Google's local results come back as JSON. The search endpoint returns Google's places with name, category, rating, review count, address, phone and website.
- You pay only for pages that come back. Blocks and errors are free.
How do I scrape local business data?
Use more than one directory
Each directory lists a different set of businesses, and Tripadvisor adds restaurants, hotels and attractions. For plumbers in Austin, only 2 businesses were in both Google's top 20 and the 30 Yellow Pages listings.
With String: The
/searchendpoint withsearchType: "places"returns Google's places, 20 businesses a page.Read the page's own data first
Yellow Pages puts every organic listing on a search page into LocalBusiness JSON-LD, with name, address, phone, rating and review count. Ads are not in it. Read the JSON-LD before you parse the HTML.
With String: Set
formattorawto get the page exactly as the site served it. For Yelp, use the site integration instead of parsing pages.Drop ads and out-of-area results
Yellow Pages labels ads "Ad", and Yelp's sponsored cards link through
/adredir. On Yelp, 5 of the 10 plumbers in the results also ran as ads on the same page, so dedupe by the business ID. Check the city too. Some Yelp results for Austin served Cedar Park, Pflugerville and Round Rock.Keep the rating with its review count
A 5.0 from 1 review is not a 4.8 from 373. Save the rating, the review count and the directory together. The same business rates differently on each site. Juan & Only Plumber had 4.6 from 42 reviews on Yelp and 4.9 from 483 on Google. A business with no reviews has no rating, not a zero.
Treat a blank page as a failure
A search page with no listings was probably blocked or changed. Flag it and keep the last good run, so its businesses aren't marked closed because one page failed.
With String: Mark the list as required with at least one item, and a page with no listings comes back as
"extracted": false.Match the same business across directories
Names and phone numbers change between directories. Rooterman Plumbing on Yelp is Rooter-Man Plumbing Austin TX on Google, and Clarke Kent Plumbing has a different phone number on each. Match on the street address first, then the phone, then the name. Many service businesses show no street address, so fall back to the phone and the website domain.
Refresh on a schedule and confirm closures
Store the first and last date you saw each business. A business missing from two runs in a row may have closed, moved or renamed. Check its own listing before you drop it.
With String: The Yelp
businessaction returnsisClosed, opening hours and the newest review for up to 300 businesses a call.
Get a free sample of business data
Tell us which businesses, categories or cities you need. We'll run String on them and email you a free sample of the business data.
| Directory | Business | Rating | Reviews |
|---|---|---|---|
| Yellow Pages | Clarke Kent Plumbing | 2.87 | 15 |
| Clarke Kent Plumbing | 4.5 | 619 | |
| Yellow Pages | Radiant Plumbing | 4.2 | 15 |
| Radiant Plumbing | 4.8 | 18,000 | |
| Yelp | Juan & Only Plumber | 4.6 | 42 |
| Juan & Only Plumber | 4.9 | 483 |
Frequently asked questions
What's the best way to scrape local business data?
Pull search results by category and city from more than one directory, drop the ads, and match the same business across directories by address and phone. The hard part is getting the pages at all, because Yelp and the review sites block most scrapers. The String Web Access API returned 29 of 30 attempts on the 6 review and local sites in our October 2026 benchmark, and 98.6% of requests across 100 bot-protected sites, the most of 17 providers.
How do I scrape Google Maps business listings?
Use Google's places results. String's /search endpoint with searchType: "places" returns 20 businesses a page, up to page 15, each with name, category, rating, review count, address, phone, hours and website. A normal Google search for a business returns its local pack in places and its knowledge panel in entity. Set location to search from a city. More in our guide on how to scrape Google search results.
How do I scrape Yelp business data?
Use the Yelp integration. Its search action takes a term and a location and returns 10 organic results a page, up to 24 pages. Its business action returns the address, phone, hours, rating, review count at each star and whether the business is closed, for up to 300 businesses a call. Its reviews action returns 49 reviews a page. In our benchmark, String got all 5 attempts on yelp.com, as did Scrape.do, Context.dev, Scrapfly and Bright Data. Firecrawl, Zyte, Oxylabs and Browserbase got 0 of 5.
How much does it cost to scrape local business listings?
On the Starter plan ($19 a month), 1,000 Yellow Pages search pages at the standard rate cost $0.25. Yelp search pages were billed at the premium rate in our tests ($2.40 per 1,000). Google places searches are billed at the search rate ($1.20 per 1,000). Structured extraction adds a fee per request. See pricing. Failed requests aren't billed.
Is it legal to scrape local business data?
Business names, addresses, phone numbers, hours and ratings are facts that businesses publish to be found, and facts aren't copyrightable. The risk is in reviews. Review text is the writer's expression, and reviewer names and profiles are personal data under laws like GDPR. Collect public pages while logged out, leave reviewer identities out, keep your request rate reasonable, and check with your counsel. We go through the cases in Is web scraping legal?
Can I get email addresses for local businesses?
Directory listings rarely include email addresses. The Yellow Pages listings we fetched had name, address, phone, hours and rating, and no email. Google's places results include the business's website, so fetch its contact page for a business email. Personal email addresses are personal data, so keep to the business's own.
How do I avoid getting blocked when scraping directories?
Send each request to String instead of the site. Proxy rotation, browser fingerprints, captcha solving and retries happen behind the endpoint, and JavaScript rendering is switched on per request for pages that need it. Requests that still fail aren't billed.
Does String work on the directories I need?
Send us the URLs and we'll run them and show you what comes back before you commit. Ask for a free sample of business data, or test them yourself with your first 20,000 free standard fetches.