Whitepages Addresses Scraper

An address in.
What's on record out.

Submit US street addresses and get each one back as a row - resolved to a normalised address and coordinates, with Whitepages' resident and property columns alongside. This is a people-search source, so the rules that govern it are on this page rather than buried in a policy, and so is what our own test runs actually returned.

one-time 500 free rows$0.002 per row afterup to 1,000 addresses per requestUS-centric coverage
Permitted use

What this must
not be used for.

This section sits before everything else on purpose. A service that resolves who lives at an address carries obligations most scraping does not, and these restrictions are not house rules we invented - they are law where most of our customers operate.

Not for eligibility decisions

Do not use this to decide employment, credit, insurance, housing or a tenant application. In the US those are regulated purposes that require a consumer reporting agency operating under the FCRA, and this is not one. No configuration of this service makes it one.

Not for locating or approaching a person

Do not use it to trace, doorstep, monitor or contact someone who has not asked to hear from you. Turning an address into a name is exactly the step that makes this category sensitive, and accounts doing it get closed.

Reasonable: cleaning addresses you already hold

Resolving a messy address column to a normalised address and coordinates is an ordinary data-quality task, and in our own runs it is the part that worked. If that is all you need, this service does it at 1,000 addresses a request.

Reasonable: checking an address against your own record

When an address on an account you already hold looks inconsistent with what is publicly listed, checking it is a defensive use rather than an investigative one. That is a different activity from building a household directory, and only the first is in scope.

Read this second

The resident columns
came back empty.

This is the single most important thing on the page, and burying it under a feature grid would be dishonest. Here is exactly what our own runs returned.

We hold four real exports of this service. Every one is a single row for a single address - the address the published reference uses as its own example, 321 California Ave, Palo Alto, CA 94306. In all four, the columns that carried a value were the address-resolution ones: address, lat, lon and matched_address, plus query and full_address in the wider shape. residents, residents_count, building_type and all twenty-three property_* columns were empty in every run.

The export told us why, in its own status column. Three runs returned “residents unavailable on free pool - needs residential proxy”; the fourth returned “no public residents”. Those are two different outcomes - one about how the request was routed, one about the address itself - and neither is a bug in your input. Read status on every row before you read anything else.

So the data dictionary below lists thirty-three column names taken byte-for-byte from the export header, and marks which six we have actually seen fill. The other twenty-seven are declared, not confirmed. We are not going to quote a hit rate for them, because one address is not a sample. Run a batch of your own on the free tier and look at the file before you plan anything around those columns.

livescraper.app · what's verified
Input is a street address - documented
Up to 1,000 addresses per request - documented
33 column names - from the export header
Only 6 columns have ever carried a value!
residents was empty in 4 of 4 runs!
Confirm on the free tier before you build.
How it works

Addresses in,
rows out.

A street address is the entire input. There are no filters to configure.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the Whitepages Addresses Scraper.
  3. STEP 3Paste your addresses, one per line.
  4. STEP 4Pick your output format.
  5. STEP 5Click Get Data, then read the status column first.

Write addresses the way you would type them into a search box - 321 California Ave, Palo Alto, CA 94306. The reference accepts arrays of up to 1,000 per request.

Data dictionary

Thirty-three columns
declared, six confirmed.

Every name below is copied byte-for-byte from the header row of our exports, in the order the spreadsheet emits them. The marking on each one says whether we have seen it carry a value.

address
The address exactly as you submitted it. Confirmed - filled in all four runs.
lat
Latitude of the resolved address, as a string. Confirmed - filled in all four runs.
lon
Longitude of the resolved address, as a string. Confirmed - filled in all four runs.
matched_address
The address normalised to a full postal form - street, neighbourhood, city, county, state, postcode, country. Confirmed - filled in all four runs.
residents
The people listed at the address. Declared only - empty in all four runs; see the status column for why.
status
What happened to this lookup. Confirmed - filled in all four runs. Values seen: no public residents and residents unavailable on free pool - needs residential proxy.
query
The address echoed back. Confirmed in the wide shape; absent from the narrow one.
building_type
The kind of building at the address. Declared only - empty in all runs we hold.
full_address
The same normalised address as matched_address. Confirmed in the wide shape - the two carried identical values in every wide run.
residents_count
How many people are listed. Declared only - empty in all runs we hold.
property_context
The @context of the property record - the vocabulary the property_* columns are expressed in. Declared only.
property_type
The @type of the property record. Declared only.
property_address_type
The type of the property's address object. Declared only.
property_address_street_address
Street line of the property address. Declared only.
property_address_postal_code
Postcode of the property address. Declared only.
property_address_address_locality
Town or city of the property address. Declared only.
property_address_address_country
Country of the property address. Declared only.
property_contained_in_place_type
Type of the larger place the property sits inside - the containing neighbourhood or municipality. Declared only.
property_contained_in_place_name
Name of that containing place. Declared only.
property_contained_in_place_address_type
Type of the containing place's address object. Declared only.
property_contained_in_place_address_address_region
Region or state of the containing place. Declared only.
property_contained_in_place_address_postal_code
Postcode of the containing place. Declared only.
property_contained_in_place_address_address_country
Country of the containing place. Declared only.
property_name
Name of the property record. Declared only.
property_geo_type
Type of the property's geo object. Declared only.
property_geo_latitude
Latitude from the property record - distinct from the top-level lat. Declared only.
property_geo_longitude
Longitude from the property record - distinct from the top-level lon. Declared only.
property_floor_size_type
Type of the floor-area measurement. Declared only.
property_floor_size_value
Floor area as a number. Declared only.
property_floor_size_unit_code
The unit that number is in - a UN/CEFACT code such as FTK for square foot or MTK for square metre. Read it before you compare two rows. Declared only.
property_year_built
Year of construction. Declared only.
property_identifier
The property record's own identifier. Declared only.
property_description
Free-text description of the property. Declared only.

“Declared” means the export header names the column; it does not mean the column fills. Six of these thirty-three have carried a value in the runs we hold - address, lat, lon, matched_address, status and, in the wide shape, query and full_address. The rest were empty every time, across one address and four runs. That is far too little to express as a fill rate, so this table does not: it reports what we measured and stops there. Spend a few free-tier rows on addresses whose answers you already know before you build against any column marked declared.

Before you wire it up

Four notes for
whoever writes the importer.

Each of these came out of reading the exports rather than the reference, which is why they are worth the space.

There are two export shapes, not one

Three of our four runs returned thirty-three columns. The fourth, and the oldest, returned six: address, lat, lon, matched_address, residents and status. Write the importer against those six and treat the other twenty-seven as present-if-present. A reader that assumes a fixed header will break the first time it meets the narrow shape.

The JSON and the spreadsheet order the columns differently

Same thirty-three fields, two different orders. The spreadsheet opens with address, lat, lon, matched_address, residents, status and puts query seventh; the JSON puts those same six last, after every property_* field. Read columns by name. Anything that indexes by position will silently read the wrong field.

An empty row is not an error - read status

A lookup that finds no residents still returns a row, with the address resolved and the people columns blank. status is where the reason lives, and the two values we have seen mean different things: no public residents is about the address, while residents unavailable on free pool - needs residential proxy is about how the request was routed. Branch on that column rather than on whether residents is empty.

The property_* columns follow a public vocabulary

Their names are the Schema.org Accommodation and Place properties flattened with underscores - containedInPlace, floorSize with its value and unitCode, yearBuilt, geo with latitude and longitude. Useful to know when you map them: property_floor_size_unit_code carries a UN/CEFACT unit code, so floor areas are not necessarily in the same unit from row to row.

Common workflows

Where an address column
is the weak link.

The uses below are the ones this service is for. The ones it is not for are at the top of the page, and they are not negotiable.

Address hygiene

Normalise a messy address column

Addresses typed by humans arrive abbreviated, misspelled and inconsistently ordered. Submitting them here returns matched_address - one full postal form with street, neighbourhood, city, county, state, postcode and country - plus lat and lon. In our own runs this is the part that worked on every row.

Data engineering · Ops
Geocoding at volume

Turn a list of addresses into coordinates

Every resolved row carries latitude and longitude as strings, which is enough to plot a customer list, cluster a service area or join records to a territory. One request takes up to 1,000 addresses, so a large file is a handful of calls rather than a rate-limit problem.

Analytics · Field ops
Record verification

Check an address you already hold

When the address on an existing account looks inconsistent with what is publicly listed, resolving it tells you whether the discrepancy is a typo or something else. This is a defensive check on your own data - not a way to find out who lives somewhere, which is covered by the permitted uses above.

Risk · Support
Pricing

Pay only for the rows
you actually pull.

No subscription, no minimum, no per-seat licence. Your first 500 rows are on us - after that, pay-as-you-go.

Free tier

500 free rows - $0

Every new account, one-time. No credit card required. Given what the resident columns did in our runs, spending some of these on addresses you already know the answers for is the single most useful thing you can do first.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 addresses, one row per address - exact to budget, because an address that resolves to nothing still returns exactly one row.

Most popular
Enterprise

Custom · recurring checks

Volume pricing, SLAs, dedicated workers and bespoke onboarding for teams re-checking a large address file on a schedule. Tell us your numbers and we'll quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

The same record,
other angles.

Both of these sit in the same restricted category as this page, and the same permitted uses apply to them.

The legal bit

Public records,
about people.

Most pages in this catalogue describe facts about businesses or software. This one does not, and the difference is worth stating plainly rather than glossing.

Whitepages is a US directory that publishes contact and property information drawn from public records. The listings this service reads are the ones the site shows publicly - but the subject of those listings is a person, and that changes your obligations rather than ours. Under GDPR a household name and address is personal data whether or not it was easy to find, and in the US, using it for employment, credit, insurance or housing decisions is a regulated purpose this service is not licensed for.

The permitted uses at the top of this page are the short version. The longer version is that you need a lawful basis for holding these rows, a retention period you can defend, and an answer ready if the person asks you what you have. If any of those are missing, the right move is not to run the job.

On our side: publicly available sources only, no third-party trackers on the data layer, and your exports auto-delete after 30 days. We do not keep a copy of your results, and we do not build a database out of them.

livescraper.app · principles
Publicly available sources only
Exports auto-delete (30 days)
No third-party trackers on the data layer
This is personal data - you need a lawful basis!
Not a consumer reporting agency - not for eligibility decisions!
Read the permitted uses before you sign up, not after.
Common questions

Things people
ask before signing up.

The questions we hear most. Anything else? Talk to us - humans, not bots, write the answers.

Will this tell me who lives at an address?+
Not in any run we hold. That is what the service is built to do and what its reference describes, but across four real exports the residents and residents_count columns came back empty every time - with status reading no public residents once and residents unavailable on free pool - needs residential proxy the other three times. We publish the column names because the export header declares them; we are not going to claim a result we have not seen. Spend a few free rows on addresses you already know before you plan around those columns.
What exactly comes back, then?+
Thirty-three columns in the current shape, of which six have carried a value in our runs: address as you submitted it, lat and lon, matched_address normalised to a full postal form, status, and - in the wider shape - query and full_address. The address resolution worked on every row. The resident and property columns did not fill.
Why does my export have six columns instead of thirty-three?+
Because there are two shapes. The older one returns address, lat, lon, matched_address, residents and status; the current one returns those plus twenty-seven more. Write your importer against the six and treat the rest as present-if-present rather than assuming a fixed header.
Can I read the columns by position?+
No - read them by name. The JSON and the spreadsheet order the same thirty-three fields differently: the spreadsheet opens with the six core columns and puts query seventh, while the JSON puts those same six last, after every property_* field. Anything that indexes by position will read the wrong field on one of the two formats.
How many addresses can I submit at once?+
The reference documents batching of up to 1,000 addresses per request, sent as an array. That is the documented limit and we quote it as such - our own runs were single-address tests, so we have not exercised it at that size.
Can I use this to screen a tenant or an applicant?+
No. Employment, credit, insurance, housing and tenant screening are regulated purposes in the US that require a consumer reporting agency operating under the FCRA, and this service is not one. That restriction is not a setting you can change, and it is the first item in the permitted uses at the top of this page.
How much does it cost?+
The first 500 rows on a new account are free and one-time; after that it's $0.002 per row - about $2 per 1,000 addresses - pay-as-you-go with no subscription. One row per address makes it exact to budget, including addresses that resolve to nothing. Credits don't expire and there's no monthly reset.

Resolve your
address file.

Paste your addresses and get each one back normalised, geocoded and carrying its own status. Your first 500 rows are free - enough to see for yourself which columns fill for the addresses you care about.

Activates instantly · no card required

Whitepages Addresses Scraper - address lookups and resident insights at scale

Whitepages is a long-running US directory that publishes contact and property information compiled from public records, and its address pages are the part this service reads. The published reference describes the endpoint as returning insights about addresses and their residents, takes street addresses as its input - its own worked example is 321 California Ave, Palo Alto, CA 94306 - and accepts arrays of up to 1,000 addresses in a single request. Each address comes back as one row, so an input file and an output file line up exactly, including for addresses that resolve to nothing.

What that row contains is where this page differs from most product pages, because we are reporting measurements rather than intentions. Across four real exports the export header declared thirty-three columns, and six of them carried a value: the address exactly as submitted, latitude and longitude, a normalised matched address running from street through neighbourhood, city, county and state to postcode and country, a status column, and in the wider export shape the echoed query and a duplicate full address. The columns describing people and property - residents, residents count, building type, and the twenty-three property fields covering address, containing place, geo coordinates, floor size, year built, identifier and description - were empty in every run. The status column said why: three runs reported that residents were unavailable on the free pool and needed a residential proxy, and one reported no public residents at that address. We publish the column names because the export header declares them, and we mark the rest as declared rather than confirmed, because a header states what an export intends to contain and is not evidence that a column ever fills.

Three details matter to whoever writes the importer. There are two export shapes: an older six-column form and the current thirty-three-column form, so code against the six and treat the rest as optional. The JSON and the spreadsheet order the same fields differently - the spreadsheet leads with the six core columns while the JSON places them last, after the property fields - so columns must be read by name and never by position. And the property columns follow a public vocabulary rather than an invented one: their names are Schema.org Accommodation and Place properties flattened with underscores, which is why floor size arrives as a value plus a UN/CEFACT unit code that has to be read before two rows are compared.

This is a people-search source, and the obligations that come with it are set out at the top of the page rather than buried in a policy. It must not be used for employment, credit, insurance, housing or tenant decisions, which in the US are regulated purposes requiring a consumer reporting agency; and it must not be used to locate, approach or monitor a private individual. Cleaning an address column you already hold, geocoding a customer list, and verifying an address against your own records are the uses it is for, and address resolution is the part that worked on every row we ran. Publicly available sources only, no third-party trackers on the data layer, and exports auto-delete after 30 days. Your first 500 rows are free and need no credit card - spend some of them on addresses whose answers you already know.