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 September 2026 benchmark it fetched Yellow Pages, Tripadvisor, Trustpilot and G2 on every attempt and Yelp on 4 of 5, and returned 97% of requests across 100 bot-protected sites, the most of 16 providers.
The first 5,000 requests are free. Set it up in one step with the quickstart.
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 the questions most teams care about:
Name, address, phone, website, category and opening hours.
Star rating, review count, the count at each star on Yelp, and review text.
Coordinates, neighborhood, and the service area for businesses that come to you.
Every business in a category across a set of cities, and which ones open or close.
The problem
Directories and review sites
The solution
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 /search endpoint with searchType: "places" returns Google's places, 20 businesses a page.
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 format to raw to get the page exactly as the site served it. For Yelp, use the site integration instead of parsing pages.
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.
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.
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.
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.
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 business action returns isClosed, opening hours and the newest review for up to 300 businesses a call.
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/v1/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
}
]
}
For Yelp, call the Yelp integration with a search term and a location, and it returns 10 organic results a page as JSON.
Tell us which businesses, categories or cities you need. We'll run String on them and email you a sample of the business data, free.
| 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 |
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 September 2026 benchmark, and 97% of requests across 100 bot-protected sites, the most of 16 providers.
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.
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 4 of 5 attempts on yelp.com. Scrapfly and ScraperAPI got 5 of 5, and Bright Data, Firecrawl, Apify and Browserbase got 0 of 5.
On the Starter plan ($20 a month), 1,000 Yellow Pages search pages at the standard rate cost $0.30. Yelp search pages were billed at the premium rate in our tests ($3.00 per 1,000). Google places searches are billed at the search rate ($1.50 per 1,000). Structured extraction adds a fee per request. See pricing. Failed requests aren't billed.
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?
Rarely from the directory. 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.
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.
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 5,000 free requests.