Yellow Pages US Scraper
Pricing
from $2.50 / 1,000 listings
Yellow Pages US Scraper
Scrape Yellow Pages US listings: business name, phone, address, website, hours, categories, rating, and emails when the listing or its site has one. Keyword + city or yellowpages.com URLs in. Pure HTTP, no browser. JSON or CSV out. $2.50/1k listings; contact emails billed only when found.
Pricing
from $2.50 / 1,000 listings
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share

Turn a US Yellow Pages search into structured business leads: name, phone, address, website, hours, categories, rating, and email when the listing (or its own site) has one.
Keyword + city, or a yellowpages.com URL. JSON or CSV out.
Why Use This Scraper?
- Phone and address on almost every US listing
- Native emails from the Yellow Pages profile when Thryv has one
- Optional website scrape for inboxes that are not on the listing
- Hours, categories, rating, optional full review text, year established, claimed flag
- Keyword + city, term × city lists, or paste a search / MIP URL
- HTTP only — no browser, no Cloudflare grind
Overview
Built for lead-gen teams, agencies, and researchers who need US local-business rows from yellowpages.com.
Every start type becomes one dataset row per business. A city search, a category URL, and a /mip/ profile all emit the same listing shape. Email is sparse on Yellow Pages itself; phone is not.
Supported Inputs
Search terms and locations
| Field | Example |
|---|---|
searchTerms | ["pizza"], ["plumber", "dentist"] |
locations | ["Los Angeles, CA"], ["34.05,-118.24"] (ZIP alone does not geocode) |
Every term is searched in every location. ["pizza","plumber"] × ["Los Angeles, CA","Houston, TX"] is four searches. API callers can also send what + where or queries: [{ what, where }]; all three forms are merged and de-duplicated.
URL types
| URL type | Pattern | Example |
|---|---|---|
| Category search | /{city-st}/{term} | https://www.yellowpages.com/los-angeles-ca/pizza |
| Listing (MIP) | /{city-st}/mip/{slug}-{id} | https://www.yellowpages.com/los-angeles-ca/mip/pitfire-artisan-pizza-22248710 |
Copy-pasteable startUrls
{"startUrls": [{ "url": "https://www.yellowpages.com/los-angeles-ca/pizza" },{ "url": "https://www.yellowpages.com/los-angeles-ca/mip/pitfire-artisan-pizza-22248710" }]}
Unsupported: yell.com, yellowpages.ca, pagesjaunes.fr, and other country directories. This actor is US yellowpages.com only.
Use Cases
| Audience | What they take from a run |
|---|---|
| Lead gen | Phone, address, website, email when present |
| Agencies | Local category lists by city |
| Sales ops | Deduped listing ids + claimed / years-in-business |
| Researchers | Hours, ratings, category mix |
How It Works
- Geocode
where(or read lat/lon). - Call the mobile search JSON at that pin, then walk neighboring pins (each pin returns a short page).
- Deduplicate by listing id.
- Load the listing detail for extra phones and native emails.
- If
includeReviewsis on, keep review text from the profileratingslist. - If
enrichEmailsis on and the profile has no inbox, scrape the business website.

Input Configuration
| Field | Type | Required | Notes |
|---|---|---|---|
searchTerms | array | one of the start types | Keywords, searched in every location |
locations | array | with searchTerms | US city + state, or lat,lon |
startUrls | array | one of the start types | yellowpages.com search or MIP URLs |
what + where | string | API only | Single pair, merged with the lists above |
queries | array | API only | [{ what, where }] pairs, merged with the lists above |
sortBy | string | no | default, rating, name, or distance. Sorts each map-pin page only — the API has no global sort. |
includeReviews | boolean | no | Default false. Adds reviews[] (author, rating, title, text, date). |
maxReviews | integer | no | Default 25. Cap per listing when reviews are on. |
maxItems | integer | no | Default 50. Free users capped at 50. |
scrapeDetails | boolean | no | Default true. Needed for native emails and extra phones. Forced on when reviews are on. |
enrichEmails | boolean | no | Default false. Billed only when an address is found. |
maxConcurrency | integer | no | Default 8. |
proxy | object | no | Optional. Default is no Apify proxy. |
Example input
{"searchTerms": ["pizza"],"locations": ["Los Angeles, CA"],"maxItems": 50,"scrapeDetails": true,"enrichEmails": false}
Output Overview
One flat row per business. Contact fields sit at the top level (phone, email, website). Nested pieces are hours and, when requested, reviews.
Output Samples
Search: pizza in Los Angeles, CA.
{"listingId": "22248710","name": "Pitfire Artisan Pizza","phone": "2138081200","phones": ["2138081200", "2138081201"],"email": null,"emails": [],"website": "http://www.pitfirepizza.com","yellowPagesUrl": "http://www.yellowpages.com/los-angeles-ca/mip/pitfire-artisan-pizza-22248710","address": "108 W 2nd St Apt 208","city": "Los Angeles","state": "CA","zip": "90012","latitude": 34.05107,"longitude": -118.24486,"categories": ["Caterers", "Pizza", "Restaurants"],"rating": 5,"reviewCount": 4,"yearEstablished": null,"isClaimed": null,"paymentText": null,"reviews": [],"contactEmail": ""}
A listing that publishes an inbox on the profile (same run):
{"listingId": "495657088","name": "Olio Pizzeria","phone": "2136800010","email": "info@oliogcm.com","website": "http://www.pizzeriaolio.com/downtown.php"}
With includeReviews: true the same listing also carries review bodies from the profile:
{"listingId": "22248710","reviewCount": 4,"reviews": [{"id": "a1","author": "Sam","rating": 5,"title": "Downtown","text": "Great crust","date": "2020-01-01"}]}
Key Output Fields
Identity: listingId, name, yellowPagesUrl, isClaimed, yearEstablished
Contact: phone, phones, email, emails, contactEmail, website
Place: address, city, state, zip, latitude, longitude
Listing: categories, rating, reviewCount, reviews, hours, paymentText
email is the native Yellow Pages address. contactEmail is that same address, or the website-scrape result when enrichEmails is on.
Pricing
| Event | When | Rate |
|---|---|---|
| Actor start | Once per run, per GB of memory | $0.005 |
| Listing | Each unique business in the dataset | $0.0025 ($2.50 / 1k) |
| Contact phone | Row has a phone | $0.002 |
| Contact email found | Only when an address is returned | $0.05 |
Missed emails are free. Phone is billed only when the listing has a number.
What makes this richer than the competition
| Capability | Typical Store actors | This actor |
|---|---|---|
| Transport | HTML / Playwright | Mobile JSON over HTTP |
| Website crawl, or none | Native profile emails + optional site scrape | |
| Reviews | Count only, or a huge HTML dump | Profile review text when includeReviews is on |
| City coverage | First SERP page, or a hard 6k cap | Geo-tiles around the city pin |
| Hours / claimed / year / payments | Often missing | On the detail row |
FAQ
Will every row have an email? No. Yellow Pages often lists a phone and no inbox. A mixed sample was about 30% native emails on the detail call. Turn on enrichEmails to look on the company site.
Why so few results for a huge city? Each map pin returns a short page. The actor walks neighboring pins and de-duplicates. Raise maxItems to keep walking.
Do I need a proxy? Usually not.
Does this scrape yell.com or Yellow Pages Canada? No.
Are reviews included? Rating and count always. Full text only when includeReviews is true. The profile usually carries a handful of reviews (Pitfire had 3 of 4), not a separate infinite review feed.
Support
- Issues: Actor Issues
- Author site: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
Additional Services
Custom fields, bulk city lists, or a private API wrapper: muhamed.didovic@gmail.com
Explore More Scrapers
French directory cousin: PagesJaunes Scraper. More actors on memo23 and didovic.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/yellow-pages-us-scraper).
Purpose: Extract US yellowpages.com business listings (phone, address, website, hours, native or scraped email).
Minimal input:
{"searchTerms": ["pizza"],"locations": ["Los Angeles, CA"],"maxItems": 10,"scrapeDetails": true,"enrichEmails": false}
Output: one dataset row per business — listingId, name, phone, phones, email, emails, contactEmail, website, yellowPagesUrl, address, city, state, zip, latitude, longitude, categories, rating, reviewCount, reviews, hours, yearEstablished, isClaimed, paymentText.
Behaviors an agent should know:
- Always set
maxItems. Free users are capped at 50. - Provide
searchTerms+locationsand/orstartUrls.what+whereandqueriesare also accepted. Empty input fails. scrapeDetails(default true) is required for native emails.includeReviewsaddsreviews[]from the listing profile and forces a detail fetch.sortByreorders each map-pin page (rating/name/distance). It is not a site-wide SERP sort.enrichEmailscosts $0.05 only when an address is returned.- Each listing is $0.0025. A phone on the row is $0.002. An email is $0.05. Start is $0.005 per GB.
- US yellowpages.com only. Email is often null.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Thryv, Inc. or Yellow Pages. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available Yellow Pages listing data — no authenticated endpoints, paid Yellow Pages features, or content behind a login wall. Users are responsible for ensuring their use complies with yellowpages.com Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), CAN-SPAM / TCPA if they send outreach, and any contractual obligations of their own organization.
SEO Keywords
yellow pages scraper, yellow pages US scraper, yellowpages.com scraper, scrape yellow pages, Yellow Pages API, Apify yellow pages, US business listings scraper, local leads scraper, phone number scraper, email enrichment scraper, lead generation data, hours of operation scraper, US directory scraper, local business intelligence