Redfin Property Scraper — Schools, Risk & Parcels avatar

Redfin Property Scraper — Schools, Risk & Parcels

Pricing

from $5.10 / 1,000 property records

Go to Apify Store
Redfin Property Scraper — Schools, Risk & Parcels

Redfin Property Scraper — Schools, Risk & Parcels

Read any Redfin home in full from its page address. Twelve sections come back per home: the listing record, the long-form property history and public records, the agent and brokerage panel, assigned schools, flood, fire, heat and wind risk scores, the county parcel record and comparable sales.

Pricing

from $5.10 / 1,000 property records

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

Redfin Property Scraper

The full Redfin record for a home, read from its page address. Twelve named sections come back per property: the listing record, the long-form property history and public records, the agent and brokerage panel, assigned and nearby schools, flood, fire, heat and wind risk scores, the county parcel record, the history of Redfin's own value estimate, the listing's activity, the neighbourhood context, Redfin's comparable sales, nearby listings and nearby open houses.

Several of those exist nowhere else on a listing. A search row states the price, the size and the address; it states nothing about the flood risk, the assessed value on the county's parcel record, or which homes Redfin considers comparable.

Accepted input

propertyUrls is required and takes one or more Redfin property pages, one per line, given either as full links or as paths ending in /home/<number>. Both forms are accepted and may be mixed in one list. A link and a path for the same home count as one entry.

The address is the key and it cannot be assembled. A Redfin property path carries a street-address slug in the middle of it — /CA/San-Francisco/331-Bartlett-St-94110/home/801881 — and that slug is part of the address rather than decoration, so the page cannot be reached from the number at the end. Every row Redfin Search Scraper produces carries exactly this value in its url field, which is the intended way to obtain one.

{
"propertyUrls": [
"https://www.redfin.com/CA/San-Francisco/331-Bartlett-St-94110/home/801881"
]
}

Response fields

Each home is one row. Four fields identify it and twelve carry the record.

{
"property_id": "801881",
"url": "https://www.redfin.com/CA/San-Francisco/331-Bartlett-St-94110/home/801881",
"requested_url": "/CA/San-Francisco/331-Bartlett-St-94110/home/801881",
"sections_present": [
"above_the_fold",
"below_the_fold",
"main_house_info",
"schools",
"risk_factors",
"parcel_info",
"similar_listings"
],
"above_the_fold": { "…": "Redfin's own shape" },
"below_the_fold": { "…": "Redfin's own shape" },
"main_house_info": { "…": "Redfin's own shape" },
"schools": { "…": "Redfin's own shape" },
"risk_factors": { "…": "Redfin's own shape" },
"parcel_info": { "…": "Redfin's own shape" },
"avm_history": null,
"activity": null,
"around_this_home": null,
"similar_listings": { "…": "Redfin's own shape" },
"nearby_listings": null,
"nearby_open_houses": null
}

above_the_fold holds the price, address, beds, baths, area and listing status. below_the_fold holds the long-form record: property history, public records, listing details and amenities. main_house_info is the agent and brokerage attribution panel. schools carries assigned and nearby schools with their ratings and distances. risk_factors carries flood, fire, heat and wind scores. parcel_info is the county parcel record matched to the address, with lot, APN and assessment data. avm_history is the history of Redfin's own estimate of the home's value. activity is views, favourites and tour requests. around_this_home is the neighbourhood context. similar_listings, nearby_listings and nearby_open_houses are the surrounding market, and each entry in them carries a Redfin address of its own, which this Actor takes.

Every section is republished in Redfin's own shape under its own name rather than renamed into fields of this Actor's choosing. That is deliberate and it is the opposite of what a flat export usually does, so it is worth stating why: renaming fields that have not been observed populated would publish a column of permanent nulls and call it a schema.

sections_present lists the sections that actually arrived, counted from the response rather than from a list of what was asked for. It is the field that makes a null column readable: a home with eleven sections and no parcel_info is an address no county record was matched to, and a home with two is a page that came back thin. The count is also written to the run log for each home.

property_id is read off the address rather than lifted out of a section, because the sections are the part with no guaranteed shape and an identifier taken from one would be null exactly when that section was. requested_url echoes the path the row was read for, so a run given pasted links can be matched to the paths they resolved to.

Behaviour on partial results

A home that Redfin no longer serves — withdrawn between a search and this run — is skipped with a line in the log and the run continues. Twenty addresses taken from a search last week will not all still be listed, and losing nineteen good rows to one dead one is the wrong trade. An entry that is not a Redfin property address at all is refused before the request rather than after it, with a message naming the shape.

A section the page did not carry is null. Null means the page did not carry it, not that the home has none of what it describes.

Frequently asked questions

Why does this Actor take an address rather than a property identifier? Because on Redfin the address is the key. A property path contains a street-address slug that is not derivable from the numeric identifier at the end of it, so property_id alone cannot reach the page. That identifier is still published on every row, because it is what joins a row to anything else on the site — it is simply not what opens the page.

How many rows does one home produce? One. All twelve sections belong to the same home and are read in the same request, so splitting them across rows would produce a spreadsheet where the schools no longer line up with the house they are assigned to.

Why did some homes come back with far fewer sections than others? Because the page carried fewer. A new-construction listing with no sale history, an address with no matched county parcel record, and a home with no comparable sales nearby all return fewer sections than an established resale in a dense market, and every one of those is a complete answer. sections_present says which arrived.

Is there a way to read a whole market this way? Not economically. This Actor spends one request per home, which is why a row here costs several times what a listing row costs. The market read is Redfin Search Scraper, which returns an entire region in a single request and already carries the price, the size, the address, the MLS status and the listing agent's own description. The usual shape of a job is a region read there, filtered down, and then a shortlist read here.

Are sold homes covered? No. Redfin does not serve sold listings through the surface these Actors read, which is a measurement rather than a choice — a request built exactly as Redfin's own sold search builds it returns the for-sale listings unchanged. below_the_fold does carry a home's own past sales where Redfin publishes them, but that is one home's history rather than a way to enumerate a market's sales.

Is a Redfin account, cookie or API key required? No. No account, session cookie or key of any kind is supplied to the Actor or needed by it.

Redfin Search Scraper reads every home for sale in a city, ZIP code, neighbourhood, county, state or school district in one request, and every row it produces carries the exact address this Actor takes. It is where a job on this site starts.