Yellow Pages Business Directory Scraper
Pricing
Pay per event
Yellow Pages Business Directory Scraper
Search Yellow Pages business listings by keyword and US city — name, phone, address, categories, rating, review count, and website for every result. We rotate fingerprints and proxies so blocks don't stop your dataset.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
🎯 What this scrapes
yellowpages.com carries US business listings spanning name, phone, address, categories, ratings, and websites for local-service and retail businesses across every US city. This Actor searches its public results pages by keyword and city, writing one structured row per listing — no login, no scraping the individual business detail pages, just the search-results feed, paginated to your maxResults cap.
Give it a searchTerm (category or free-text keyword) and a location ("City, ST") and it pages through results until it hits your maxResults cap, the site's own listing total, or the last page — whichever comes first.
🔥 What we handle for you
- 🛡️ We rotate browser fingerprints (curl-cffi impersonation — Chrome / Firefox / Safari) so the target sees real-browser traffic, not Python.
- 🔁 We retry with exponential backoff on
408 / 429 / 5xxand honourRetry-After— up to 5 attempts per page. - 🌐 We rotate proxy sessions on every block — fresh session, fresh exit IP, before the next attempt.
- 🧱 We back off when the target rate-limits. Partial successes surface clearly; we never silently return an empty dataset.
- 🧊 We keep the dataset clean — Pydantic-validated rows, ISO-8601 timestamps, stable field shapes.
- 💰 You pay only for results that land. No data → no charge (only the small
actor-startwarm-up fee).
💡 Use cases
- Lead-gen list building — pull every plumber, roofer, or dentist in a target city into a call/email list ready for outreach.
- Local-market research — compare business density and category mix across cities before opening a new location or launching an ad campaign.
- Sales prospecting tools — ingest directory data as a feed for a broader prospecting or CRM-enrichment pipeline.
- Competitive scans — see how many competitors of a given category operate in a city, and how they compare on ratings and review counts.
⚙️ How to use it
- Click Try for free at the top of the page.
- Enter a
searchTerm(e.g."plumbers") and alocation(e.g."Austin, TX"). - Optionally raise or lower
maxResults(default300, cap3000). - Click Start. Matched listings stream into the run's dataset as they're found.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searchTerm | string | yes | — | Category or free-text keyword, e.g. "plumbers". |
location | string | yes | — | US city + state, "City, ST" shape, e.g. "Austin, TX". |
maxResults | integer | no | 300 | Cap on total rows emitted, 1-3000. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy config. |
Example input
{"searchTerm": "plumbers","location": "Austin, TX","maxResults": 300,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one business listing from a search-results page.
| Field | Type | Notes |
|---|---|---|
business_name | string | Business name. |
phone | string | null | Primary phone number, verbatim. |
street_address | string | null | Street address; null when absent. |
city | string | null | City, parsed from the locality text. |
state | string | null | US state abbreviation. |
zip_code | string | null | ZIP code. |
categories | array | Business categories, DOM order — empty array (never null) when absent. |
website | string | null | Website link as listed by Yellow Pages, verbatim — may be a tracked redirect, not necessarily the business's own domain. |
rating | number | null | Star rating, 1.0-5.0 in 0.5 steps; null when unrated. |
review_count | integer | null | Number of reviews; null when unrated. |
listing_url | string | Absolute URL to the business's Yellow Pages listing page. |
search_term | string | Echo of the run's searchTerm input. |
location_query | string | Echo of the run's location input. |
scraped_at | string | ISO-8601 UTC timestamp when this row was recorded. |
Example output
{"business_name": "ARS / Rescue Rooter","phone": "(512) 837-9500","street_address": "1500 W Anderson Ln","city": "Austin","state": "TX","zip_code": "78757","categories": ["Plumbers", "Air Conditioning Contractors & Systems", "Heating Contractors & Specialties"],"website": "https://www.ars.com/austin","rating": 4.5,"review_count": 128,"listing_url": "https://www.yellowpages.com/austin-tx/mip/ars-rescue-rooter-473194899","search_term": "plumbers","location_query": "Austin, TX","scraped_at": "2026-07-30T12:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result | $0.0012 | Per business listing row written to the dataset |
Example: 1 000 rows ≈ $1.40 (1 000 × $0.0012 + one $0.20 start charge). No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
v1 covers yellowpages.com US search-results pages only — not individual business detail/profile pages, not Canada's yellowpages.ca or any other country's directory, and not geocoding/validation of the location input against a real city/state gazetteer (format-shape validation only). The website field is captured verbatim with no redirect-following. Each run is a full fresh scrape; there is no cross-run deduplication or incremental/resume crawling.
❓ FAQ
Does this scrape individual business detail pages?
Not in v1. This Actor scrapes yellowpages.com's search-results pages only (name, phone, address, categories, rating, review count, and website per listing); detail-page enrichment (hours, full photo set, additional phones) is a v2 candidate.
Is the website field the business's own domain?
Not always. It's captured verbatim as listed by Yellow Pages — sometimes a tracked redirect or a micro-site rather than the business's own domain. We don't silently "correct" it.
Do I need a Yellow Pages account?
No. This Actor reads yellowpages.com's public search-results pages directly — no login required.
What happens if a run gets blocked mid-way?
We rotate browser fingerprints and proxy sessions on every block and retry with backoff. If the target still stops us, the run reports exactly how many rows it collected before stopping — never a silent empty dataset with a green status.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.
