Yellow Pages Scraper & API - Business Leads, Phones, Emails avatar

Yellow Pages Scraper & API - Business Leads, Phones, Emails

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Yellow Pages Scraper & API - Business Leads, Phones, Emails

Yellow Pages Scraper & API - Business Leads, Phones, Emails

Yellow Pages scraper for US business leads from YellowPages.com. Input: keywords (e.g. plumber) and cities or ZIPs, or search URLs. One result = one business: name, phone, address, website, categories, rating, hours, years in business; optional email and social links. $1.50 per 1,000 results.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Giovanni Rich

Giovanni Rich

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

18 hours ago

Last modified

Categories

Share

This Yellow Pages scraper turns any YellowPages.com search into a clean US business leads list: business name, phone number, full street address (split into street / city / state / ZIP), website, categories, ratings, opening hours and years in business. Turn on includeDetails to also get business emails (when listed), description, payment methods, services, social links and GPS coordinates - a simple YellowPages API for lead generation and local business data.

Search any keyword in any number of US cities in one run: ["plumber", "roofer"] x ["Charlotte, NC", "Austin, TX", "10001"]. It runs over plain HTTP with no headless browser, rotates proxy sessions automatically when YellowPages' Cloudflare edge pushes back, and fetches result pages in parallel - fast and cheap.

What you get

  • Contact: phone, website, full address, and with includeDetails the email address, extra phone/fax numbers and social links (Facebook, Instagram, ...).
  • CRM and dialer ready: phoneE164 (+17042519995 format) for dialers, SMS tools and CRM imports, and websiteDomain (bare domain) for enrichment and dedupe.
  • Address split for CRMs: street, city, state, zip as separate fields. Service-area businesses ("Serving the Charlotte area") are flagged with isServiceAreaOnly.
  • Reputation: YellowPages star rating and review count, TripAdvisor rating and review count (restaurants, hotels, attractions), price range.
  • Business profile: categories, opening hours (Mo-Fr 08:00-17:00 format), open-now status, years in business, years on YellowPages, claimed/unclaimed listing, review snippet, thumbnail.
  • IDs and links: YellowPages URL and ypid so you can dedupe and track the same business over time.
  • Pagination: 30 listings per page, pages fetched in parallel until maxResults. Duplicates are removed.

Sample output

From a real cloud run: "roofing contractors" in Charlotte, NC.

namephonecitywebsitecategoriesyearsInBusiness
Murr And Laney Inc(980) 501-6075Pineville, NChttps://www.murrlaney.comRoofing Contractors61
JW Services Inc of NC(980) 334-6603Concord, NChttp://jwservicesofnc.comRoofing Contractors22
D&W, Inc.(704) 598-9316Charlotte, NChttp://dwincnc.localsearch.comRoofing Contractors43

Use cases

  • Cold outreach and lead generation for agencies, SaaS and B2B sales (local service businesses: contractors, dentists, lawyers, restaurants, salons, ...)
  • Market sizing: how many plumbers / dentists / gyms are in a city, and how established they are
  • Enriching a CRM with phone, address, website and category
  • Finding businesses without a website or with an unclaimed listing (great prospects for web and marketing agencies)
  • Building local directories or territory lists by ZIP code for field sales teams

Pricing

$1.50 per 1,000 results (pay per result; failed requests are never charged). Most US Yellow Pages scrapers on the Store charge $3.00-$20.00 per 1,000.

FAQ

Is it legal to scrape YellowPages? This actor only collects publicly listed business information. Some listings include names or emails of sole proprietors; you're responsible for using the data in line with YellowPages' terms and privacy and anti-spam laws (e.g. CAN-SPAM, GDPR, CCPA). This is not legal advice - if you're unsure, check with a lawyer.

Does it need a login or a browser? No login, no API key, no browser. It makes plain HTTPS requests and reads the listing HTML and the schema.org data YellowPages embeds. That's why it's fast and cheap.

How fast is it and how many results can I get? A 20-result test takes well under a minute. Each search returns up to ~3,000 businesses (about 100 pages of 30); for a whole metro area, split by suburb or ZIP code. includeDetails adds one extra request per business, so it is slower.

Which proxy should I use? Start with the default Apify Proxy. When a page stays blocked after a few datacenter attempts, the retry moves to the RESIDENTIAL (US) proxy group on its own (when your account has it). For big or includeDetails runs you can start on RESIDENTIAL (US) directly. Unknown locations, bad URLs or a search that stays blocked never fail the run: it finishes with what it got, and the status message and RUN_SUMMARY explain each search.

Can I schedule it or call it via API? Yes. Use Apify Schedules for daily/weekly runs, or start it from the Apify API, the JavaScript/Python clients, Make, Zapier, n8n or the Apify MCP server for AI agents.

Why did a search return fewer results than maxResults? YellowPages had fewer listings for that term and location, or a page gave up after all retries. The RUN_SUMMARY record in the key-value store shows, per search, how many results YellowPages reports, how many were collected and why it stopped.

Can I use my own filters or sorting? Yes: set them on yellowpages.com, copy the search URL and paste it into startUrls.

How to use

  1. Enter one or more search terms (e.g. plumber, dentist) and locations (e.g. Charlotte, NC or a ZIP code), or paste YellowPages search URLs. Set maxResults and tick includeDetails if you want emails.
  2. Click Start and wait for the run to finish (a 20-result test takes well under a minute).
  3. Download your leads as JSON, CSV, Excel or HTML from the Output tab, or fetch them via the Apify API.

Input

FieldDefaultDescription
searchTerms-What you'd type into the YellowPages "Find" box: "plumber", "dentist", "pizza"
locations-US city + state or ZIP: "Charlotte, NC", "Austin, TX", "10001". Every term is searched in every location.
startUrls-Optional: paste YellowPages search URLs directly (keeps any sorting/filters you set on the site)
maxResults100Businesses per term x location (0 = everything YellowPages has, up to ~3,000)
includeDetailsfalseAdds email, description, hours, payment methods, services, social links, founded year, coordinates. One extra request per business.
includeSponsoredfalseInclude the paid ad cards YellowPages shows above the results (often from other areas)
proxyConfigurationApify ProxySwitch to RESIDENTIAL (US) if you see many blocks

Input example

{
"searchTerms": ["plumber", "hvac contractor"],
"locations": ["Charlotte, NC", "Austin, TX"],
"maxResults": 200,
"includeDetails": true
}

Output example

One dataset item per business. This one is from a real cloud run: "roofing contractors" in Charlotte, NC with includeDetails: true (long text shortened).

{
"searchTerm": "roofing contractors",
"location": "Charlotte, NC",
"position": 5,
"name": "Roofing Contractors of America",
"ypid": "520015737",
"categories": ["Roofing Contractors", "General Contractors", "Fire & Water Damage Restoration"],
"rating": 5,
"reviewCount": 4,
"tripAdvisorRating": null,
"tripAdvisorReviewCount": null,
"priceRange": null,
"phone": "(844) 251-9995",
"address": "10130 Perimeter Pkwy, Charlotte, NC 28216",
"street": "10130 Perimeter Pkwy",
"city": "Charlotte",
"state": "NC",
"zip": "28216",
"website": "http://roofingcontractorsofamerica.localsearch.com",
"yellowPagesUrl": "https://www.yellowpages.com/charlotte-nc/mip/roofing-contractors-of-america-520015737?lid=1001643842969",
"openingHours": ["Mo-Su"],
"openStatus": "open 24 hours",
"yearsInBusiness": null,
"yearsWithYellowPages": null,
"snippet": "I just want to see that I had my hesitations about getting my roof done... RCA was amazing.",
"thumbnail": "https://i4.ypcdn.com/blob/fbe8d98e053d2241e122b33a51931e5458eef6e6_130x130_crop.jpg",
"isServiceAreaOnly": false,
"isSponsored": false,
"isClaimed": true,
"searchPage": 1,
"scrapedAt": "2026-09-24T05:30:26.958Z",
"email": "admin@rcacarolina.com",
"description": "What we Promise? One thing is for sure that when we will finish the restoration, you will be surprised to see your home or office...",
"paymentMethods": ["check", "financing available", "insurance", "amex", "visa", "discover", "mastercard", "debit"],
"foundedYear": null,
"latitude": 35.347534,
"longitude": -80.85175,
"services": ["Storm Damage, Fire Damage, Water Damage, Mold Remediation, Roof Repair, ..."],
"socialLinks": ["https://www.facebook.com/RCACarolina/", "https://twitter.com/RCACarolinas", "https://www.instagram.com/rcacarolina/"],
"extraPhones": ["Phone: (704) 251-9995"],
"aka": null,
"image": "https://i4.ypcdn.com/blob/fbe8d98e053d2241e122b33a51931e5458eef6e6",
"phoneE164": "+18442519995",
"websiteDomain": "roofingcontractorsofamerica.localsearch.com"
}

Restaurants also get tripAdvisorRating / tripAdvisorReviewCount (e.g. a Chicago pizza place: 4.5 from 2,387 TripAdvisor reviews).

The dataset has two ready-made views: Overview (photo, name, phone, address, website, email, categories, rating) and Contacts (CRM export) (flat name / phone / email / website / street / city / state / ZIP).

Field fill rates (real cloud run: 235 businesses, dentists and plumbers in Denver and Austin)

FieldFill rate
name, phone, address, categories, YellowPages URL100%
city / state / ZIP98% (the rest are service-area businesses)
website94%
opening hours86%
review snippet83%
years in business57%
YellowPages rating + review count46% (only businesses that have YP reviews)
TripAdvisor rating0% for trades; ~60% for restaurants

With includeDetails (21 detail pages): email 57%, payment methods 86%, hours 95%, description / coordinates 81%, founded year 76%, social links 38%.

Integrations

  • Apify API: run the actor and read results over REST, or with the official JavaScript and Python API clients.
  • Make, Zapier, n8n: trigger runs and push new leads into your CRM, email tool or spreadsheet.
  • Google Sheets: export the dataset straight into a sheet.
  • Webhooks: get notified (or kick off your own pipeline) when a run finishes.
  • MCP for AI agents: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this scraper and use the leads directly.

Limits (read before large runs)

  • United States only. YellowPages.com covers US businesses. (Canada, Australia and other countries have separate Yellow Pages sites that this actor does not cover.)
  • Up to ~3,000 results per search (YellowPages serves at most ~100 pages of 30). For a whole metro area, split by suburb or ZIP code.
  • Email needs includeDetails and only exists when the business published one on YellowPages. Detail mode opens one extra page per business, so it's slower and uses more proxy traffic.
  • Cloudflare: YellowPages sits behind Cloudflare and challenges a large share of automated requests. The scraper uses the client profile that passes most often and retries challenged pages on a fresh proxy session automatically (in testing: every search page got through, typically after 1-4 retries). For includeDetails runs or big jobs, use the RESIDENTIAL proxy group: in testing it loaded 100% of pages, versus ~75% of detail pages on datacenter proxies. A detail page that still fails is saved without the extra fields (marked with detailsError), so you never lose the listing.
  • Review texts are not included in this version (only the snippet shown on the results page).

How it works (for developers)

Each search page is fetched over HTTP with a desktop browser fingerprint and parsed with Cheerio: the result cards give name, phone, address, categories, ratings and badges, and the page's schema.org LocalBusiness JSON-LD adds structured address parts and opening hours. The total result count on page 1 is used to fan out the remaining page URLs in parallel. Detail pages are read from their schema.org JSON-LD (email, geo, payment, services, hours) with HTML fallbacks, including decoding Cloudflare-obfuscated email links. Blocked responses (403/429/challenge pages) retire the session and retry on a new proxy IP.

Run it locally:

npm install
npm test # parser tests on saved fixtures
node src/main.js # input in storage/key_value_stores/default/INPUT.json