Whitepages Scraper
Scrape Whitepages.com people search into structured data. Search a name (optionally in a state or city) and get every person on the result pages with their current address, phone numbers, age range, neighborhood, previous locations and relatives, then open person pages for associates and the rest. JSON or CSV.
pip install whitepages-scraper
export SCRAPEDO_TOKEN=your_token
whitepages-scraper --name "John Smith" --city Seattle --state WA --pages 2 -f csv -o people.csv
What is in the way
import requests
requests.get("https://www.whitepages.com/name/John-Smith/Seattle-WA")
# outside the US: the connection is dropped; from a datacenter IP: Cloudflare challenge
- US only. Visitors outside the United States, datacenter IPs and most VPNs are dropped without an error page.
- Cloudflare. Every page sits behind Cloudflare's bot checks, so a plain HTTP client gets a challenge instead of HTML.
This package fetches every page through Scrape.do with super=true&geoCode=us (a US residential IP): about 3 seconds and 10 credits per page.
Where the data is
Whitepages renders on the server and publishes the people on each page as schema.org JSON-LD:
- Search pages carry an
ItemListwith up to 25Personitems: full name, the current street address, phone numbers,Age Range,NeighborhoodandPrevious Locationproperties, relatives (relatedTo) and the person page URL. The visible cards mask phones ("(206) *** ****"); the JSON-LD has the full number. In a live test, one Seattle search page had 25 people, 25 addresses and 15 phone numbers in one request. - Person pages carry one
Personwith phones undercontactPoint, relatives and associates (knows). The address is often only in the HTML (.address-line1,.address-line2) and the age range in the text ("is in their 60s"); the parser reads both. - Pagination is
?page=2,?page=3, 25 people each.
Ages are ranges ("40s", "80+"), never exact. Free pages show the current phone at most; phone history, emails and background reports are behind Whitepages' paid tier and are not scraped.
Python
from whitepages_scraper import WhitepagesScraper
wp = WhitepagesScraper(token="YOUR_SCRAPEDO_TOKEN") # or set SCRAPEDO_TOKEN
people = wp.search("John Smith", city="Seattle", state="WA", pages=2)
for p in people[:3]:
print(p.name, p.age_range, p.address, p.city, p.phone, p.relatives)
person = wp.get_profile(people[0].url)
print(person.associates, person.phones)
print(wp.credits_used)
Command line
# Name search: 25 people per page, no extra requests
whitepages-scraper --name "Mary Johnson" --state TX --pages 2 -f csv -o mary.csv
# Open every person page found (one more request each)
whitepages-scraper --name "John Smith" --city Seattle --state WA --profiles --limit 10
# Person page URLs
whitepages-scraper "https://www.whitepages.com/name/<Name>/<City-ST>/<id>"
Fields
name, first_name, middle_name, last_name, age_range, address, city, state, zip_code, neighborhood, phones, aliases, relatives, associates, previous_locations, url.
Use it responsibly
This is personal data about real people. Whitepages is not a consumer reporting agency: don't use this data for decisions about employment, housing, credit or insurance (the FCRA regulates those in the US). Honor opt-out requests, follow the privacy laws that apply to you (CCPA, GDPR) and Whitepages' terms, and keep request rates modest.
Also available
- No-code: Whitepages Scraper on Apify
- Browser demo: Hugging Face Space
- Full guide: Whitepages.com Scraping: Bypass Cloudflare and Extract People Data
Tests
python -m unittest discover -s tests
The fixtures are fictional people (Jane Doe, 555 numbers); the tests never hit the network.
License
MIT
Metadata
Release files for whitepages-scraper 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| whitepages_scraper-0.1.0.tar.gz | 15.8 kB | Without provenance | Details for whitepages_scraper-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| whitepages_scraper-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for whitepages_scraper-0.1.0-py3-none-any.whl |
Total release size: 28.3 kB
Release files / whitepages_scraper-0.1.0.tar.gz
| Download URL | whitepages_scraper-0.1.0.tar.gz |
|---|---|
| Size | 15.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
33ced9d5d5f4e7b74f6cf3b3b52d72761935e13c1ca261efd6004ba9b494c7b6
|
|
BLAKE2b-256 checksum How to use checksums |
e50528fbb83c323aaa51541cf0c021ffdaaaa7549417b3aa9e9fc1f96d210130
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / whitepages_scraper-0.1.0-py3-none-any.whl
| Download URL | whitepages_scraper-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
30a7104674a9528eced2eb2927fa9e1a8ba569157bb2e10d458d32526f84e70c
|
|
BLAKE2b-256 checksum How to use checksums |
17baf4ddc292f682481f823d8f44f2434c7effd8b639adcd2c4950f4a0b57a06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for whitepages-scraper 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.