Appearance
Redfin Scraper API
Turn redfin.com into structured data. Search an area - a city, ZIP code, neighborhood or county - with Redfin's own filters and get up to 350 homes in one request: price, address and coordinates, beds, baths, size, lot, year built, status, days on market, photo and open house. Then send any property URL or id and get the property: status and price, Redfin Estimate with its range and Opendoor's estimate, public records, listing and agents, tax history, sale and listing history, amenities, photos with their room tags, schools, Walk/Transit/Bike Scores, climate risks, flood zones, zoning, comparable, similar and nearby homes, nearby places, transit stops, the Compete Score and the ZIP code's market trends. No proxy pool, bot-check handling or parser maintenance on your side.
It ships as two synchronous Scraper APIs and a no-code scraper:
| Product | Type | Product code | What it does |
|---|---|---|---|
| Redfin Search API | Scraper API (synchronous) | redfin_search | Give an area and filters, get up to 350 homes of the search. |
| Redfin Property API | Scraper API (synchronous) | redfin_property | Give one property URL or id, get the property detail. |
| Redfin Scraper | No-code scraper | redfin_property | Search an area (optionally with each home's page) or paste property URLs; export JSON, CSV, XML. |
Every field is snake_case, the same convention as the Web Scraping API. redfin.com covers the United States, so prices are US dollars. Requests run from US residential exits first; when redfin.com refuses them, the page is retried from Canada at no extra charge.
Redfin Search API
GET https://api.scrapeit.io/api/v1/scrape/redfin/search
x-api-key: YOUR_SCRAPEIT_API_KEYSend exactly one of location or url, then any of the filters.
| Parameter | Type | Example | Description |
|---|---|---|---|
location | string | Austin, TX | A ZIP code (94114), or a city with its state, a neighborhood or a county as you would type it into the redfin.com search box. Redfin's own suggestion is searched. |
url | string | https://www.redfin.com/city/30818/TX/Austin | A redfin.com search page: /city/…, /zipcode/…, /neighborhood/…, /county/… or /school-district/…, with or without its /filter/…. |
listing_status | string | sold | for_sale (default: active and Coming Soon), active, under_contract (contingent and pending) or sold. |
sold_within | string | 6_months | For a sold search: 1_week, 1_month, 3_months (default), 6_months, 1_year, 2_years, 3_years or 5_years. |
home_types | array | houses,townhomes | Any of houses, condos, townhomes, multi_family, lots_land, manufactured, other; comma-separated in a query string. Every type by default. |
min_price, max_price | number | 400000 | Price in USD: the list price, or the sale price of a sold search. |
min_bedrooms, max_bedrooms | number | 3 | Bedrooms; 0 is a studio. |
min_bathrooms | number | 1.5 | At least this many bathrooms, in halves. |
min_square_feet, max_square_feet | number | 1200 | Living area in square feet. |
min_lot_size, max_lot_size | number | 5000 | Lot size in square feet; 43560 is one acre. |
min_year_built, max_year_built | number | 1990 | Year built. |
max_hoa_fee | number | 300 | Highest monthly HOA fee in USD; 0 for homes without one. |
sort | string | newest | relevance (default, Redfin "Recommended"), newest, price_low_high, price_high_low, square_feet, price_per_square_foot, bedrooms, bathrooms, recently_sold. |
limit | number | 100 | Homes to return, 1-350. Every home of the search by default. |
include_html | boolean | true | Also return the fetched page HTML in html. Paid add-on: +4 credits per request. |
With a url, the filters you send override the URL's own; the ones you leave out keep the URL's value. redfin.com rounds amounts to its own steps (812500 is sent as 812.5k, 1234567 as 1.23M).
Example request
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/redfin/search' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'location=Austin, TX' \
--data-urlencode 'home_types=houses,townhomes' \
--data-urlencode 'max_price=900000'js
const response = await fetch(
'https://api.scrapeit.io/api/v1/scrape/redfin/search?' +
new URLSearchParams({ location: '94114', listing_status: 'sold', sold_within: '1_year' }),
{ headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
console.log(data.total_results, data.results.length, data.results[0]?.price);python
import requests
response = requests.get(
"https://api.scrapeit.io/api/v1/scrape/redfin/search",
headers={"x-api-key": "YOUR_SCRAPEIT_API_KEY"},
params={"location": "San Francisco, CA", "min_bedrooms": 2, "sort": "newest"},
timeout=120,
)
data = response.json()["data"]
print(data["total_results"], [home["street_address"] for home in data["results"][:5]])Search response
json
{
"data": {
"location": "San Francisco, CA",
"search_url": "https://www.redfin.com/city/17151/CA/San-Francisco",
"region": {
"type": "city",
"name": "San Francisco",
"state": "CA",
"url": "https://www.redfin.com/city/17151/CA/San-Francisco"
},
"total_results": 1021,
"median": {
"price": 1549000,
"sqft": 1650,
"price_per_sqft": 953,
"beds": 3,
"baths": 2,
"days_on_market": 12
},
"results": [
{
"position": 1,
"property_id": "1688513",
"listing_id": "226332212",
"mls_id": "426174495",
"url": "https://www.redfin.com/CA/San-Francisco/1040-Diamond-St-94114/home/1688513",
"status": "Active",
"price": 1995000,
"price_per_sqft": 1367,
"hoa_fee": null,
"street_address": "1040 Diamond St",
"unit": null,
"city": "San Francisco",
"state": "CA",
"zip_code": "94114",
"country_code": "US",
"neighborhood": "SF District 5",
"latitude": 37.7489385,
"longitude": -122.4363561,
"beds": 2,
"baths": 1,
"full_baths": 1,
"partial_baths": null,
"sqft": 1459,
"lot_sqft": 1838,
"year_built": 1918,
"stories": null,
"home_type": "houses",
"days_on_market": 1,
"sold_date": null,
"open_house": {
"start": "2026-11-06T00:00:00.000Z",
"end": "2026-11-06T01:00:00.000Z",
"label": "Open House - 4:00 - 5:00 PM"
},
"photo_url": "https://ssl.cdn-redfin.com/photo/9/islphoto/495/genIslnoResize.426174495_1.webp",
"photos_count": 30,
"badges": ["Open House"],
"key_facts": ["Built in shelving", "Spacious deck", "Updated kitchen"],
"listing_tags": ["WOOD BURNING FIREPLACE", "UPDATED KITCHEN", "SPACIOUS DECK"],
"remarks": "Charming Noe Valley Edwardian home, beautifully blending timeless architectural details…",
"listing_broker": null,
"listing_agent": null,
"is_redfin_listing": false,
"is_new_construction": false,
"has_virtual_tour": false,
"has_3d_tour": false,
"garage_spaces": 0,
"parking_spaces": 2
}
]
}
}| Field | Description |
|---|---|
search_url | The redfin.com search page that was read, filters included - open it to see the same search. |
region | The area: type (city, zip_code, neighborhood, county, state), name, state and its search page without filters. |
total_results | Homes matching the search in the whole area. Redfin shows at most 350 of them; narrow the search (filters, a smaller area) to reach the rest. |
median | Redfin's medians for the search: price, size, price per sq ft, beds, baths and days on market. |
results[].status | The MLS status: Active, Coming Soon, Pending, Contingent, Closed, … |
results[].price | The list price, or the sale price of a sold home. |
results[].sold_date | The date the home last sold, also on a listing that sold before. |
results[].home_type | houses, condos, townhomes, multi_family, lots_land, manufactured or other - the same values as the home_types filter. |
results[].photo_url, photos_count | The card photo in full size and how many photos the listing has; the Property API returns every photo. |
results[].badges, key_facts, listing_tags | The card's badges (Open House, Price Drop, 3D Walkthrough…), its key facts and its highlights. |
Send a home's property_id to the Redfin Property API for its estimates, records and history.
Redfin Property API
GET https://api.scrapeit.io/api/v1/scrape/redfin/property
x-api-key: YOUR_SCRAPEIT_API_KEY| Parameter | Type | Example | Description |
|---|---|---|---|
property_id | string | 1520766 | Redfin property id, the digits ending the property URL. Send either property_id or url. |
url | string | https://www.redfin.com/CA/Richmond/2337-Garvin-Ave-94804/home/1520766 | A https://www.redfin.com/…/home/<property_id> URL. Send either property_id or url. |
include_html | boolean | true | Also return the fetched page HTML in html. Paid add-on: +4 credits per request. |
A url is never fetched as given: ScrapeIt reads the property id out of it and asks redfin.com for that property.
Example request
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/redfin/property' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'url=https://www.redfin.com/CA/Richmond/2337-Garvin-Ave-94804/home/1520766'js
const response = await fetch(
'https://api.scrapeit.io/api/v1/scrape/redfin/property?' +
new URLSearchParams({ property_id: '1520766' }),
{ headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
console.log(data.status, data.price, data.estimate, data.price_history.length);python
import requests
response = requests.get(
"https://api.scrapeit.io/api/v1/scrape/redfin/property",
headers={"x-api-key": "YOUR_SCRAPEIT_API_KEY"},
params={"property_id": "1520766"},
timeout=120,
)
data = response.json()["data"]
print(data["status"], data["price"], data["estimate"], len(data["price_history"]))Property response
json
{
"data": {
"property_id": "1520766",
"url": "https://www.redfin.com/CA/Richmond/2337-Garvin-Ave-94804/home/1520766",
"status": "Closed",
"home_status": "Off Market",
"price": 260000,
"price_label": "Last Sold Price",
"estimate": 559521.38,
"estimate_low": 532000,
"estimate_high": 644000,
"opendoor_estimate": { "value": 501386, "low": 471302, "high": 531469 },
"street_address": "2337 Garvin Ave",
"city": "Richmond",
"state": "CA",
"zip_code": "94804",
"country_code": "US",
"latitude": 37.9438009,
"longitude": -122.346582,
"beds": 1,
"baths": 1,
"sqft": 1556,
"public_record_sqft": 458,
"lot_sqft": 5005,
"price_per_sqft": 360,
"year_built": 1912,
"year_renovated": 1950,
"stories": 1,
"property_type": "Single Family Residential",
"listing_property_type": "Multi-Family (2-4 Unit)",
"sold_date": "2015-11-25",
"apn": "5282400141",
"county": "Contra Costa County",
"description": "Great Price! Great opportunity! Two homes on 1 lot. …",
"mls_id": "40720381",
"listing_agent": "Stephen Poirier",
"listing_agent_license": "01071027",
"listing_broker": "Executive Brokers, sm",
"buyer_agent": "Benjamin Diaz-habben",
"buyer_agent_license": "01868149",
"buyer_broker": "Pinnacle Realtors",
"photos": [
{
"url": "https://ssl.cdn-redfin.com/photo/10/bigphoto/381/40720381_2.jpg",
"caption": null,
"tags": ["Exterior"]
}
],
"tax_year": 2025,
"taxes_due": 7487.52,
"assessed_land_value": 247527,
"assessed_improvement_value": 112829,
"tax_history": [
{
"year": 2025,
"taxes_due": 7487.52,
"assessed_land_value": 247527,
"assessed_improvement_value": 112829
}
],
"price_history": [
{
"date": "2016-01-06",
"event": "Sold (MLS)",
"price": 260000,
"source": "bridgeMLS, Bay East AOR, or Contra Costa AOR"
}
],
"amenities": [
{
"category": "Exterior",
"group": "Building Information",
"name": "Building Area Total",
"value": "1,556"
}
],
"schools": [
{
"name": "Grant Elementary School",
"rating": 1,
"parent_rating": 4,
"grades": "K-6",
"type": "Public",
"distance_miles": 0.1,
"serves_home": true,
"student_count": 551,
"students_per_teacher": 20,
"review_count": 5,
"address": "2400 Downer Ave, Richmond, CA 94804",
"url": "https://www.redfin.com/school/26279/CA/Richmond/Grant-Elementary-School"
}
],
"school_district": "West Contra Costa Unified School District",
"walk_score": 84,
"transit_score": 51,
"bike_score": 55,
"location_scores": [{ "category": "pedestrian_friendly", "score": 5.841692 }],
"climate_risks": [
{
"risk": "heat",
"score": 3,
"summary": "7 days above 87° expected this year, 15 days in 30 years",
"trend": "This property's heat risk is increasing as weather patterns change."
}
],
"flood_zones": ["X (unshaded)"],
"zoning": [
{
"code": "RM2",
"type": "BASE",
"category": "RESIDENTIAL",
"subcategory": "MULTI FAMILY RESIDENTIAL",
"description": "Medium-High Density Multi-Family Residential District",
"jurisdiction": "RICHMOND CITY"
}
],
"comparable_homes": [
{
"property_id": "1431583",
"url": "https://www.redfin.com/CA/Richmond/2850-Garvin-Ave-94804/home/1431583",
"street_address": "2850 Garvin Ave",
"city": "Richmond",
"state": "CA",
"zip_code": "94804",
"price": 500000,
"estimate": null,
"beds": 2,
"baths": 1,
"sqft": 1113,
"sold_date": "2026-10-14",
"days_on_market": null,
"latitude": 37.9434787,
"longitude": -122.3398094
}
],
"similar_homes": [
{
"property_id": "1915593",
"street_address": "1709 Sacramento St",
"price": 1250000,
"days_on_market": 9
}
],
"nearby_homes": [
{
"property_id": "1093873",
"street_address": "2354 Garvin Avenue",
"price": null,
"estimate": 478156
}
],
"new_listings_nearby": [
{
"property_id": "707184",
"street_address": "34 Seabreeze Dr",
"price": 1325000,
"days_on_market": 1
}
],
"nearby_places": [
{
"name": "Happy Brown Bears Pre-School & Day Care",
"categories": ["Child Care Service", "Preschool"],
"address": "2225 Gaynor Ave",
"distance_miles": 0.09,
"latitude": 37.94472885,
"longitude": -122.34777069
}
],
"transit_stops": [
{
"name": "23rd St:Garvin Av",
"latitude": 37.9439528,
"longitude": -122.3476092,
"agencies": ["AC Transit"],
"routes": [{ "short_name": "74", "name": "San Pablo Dam - 23rd St.", "type": "Bus" }]
}
],
"compete_score": {
"region_name": "North & East",
"score": 92,
"sale_to_list_ratio": 1.062,
"days_on_market": 18
},
"market_trends": [
{
"region": "94804, CA",
"metric": "Median Sale Price",
"date": "2026-09-30",
"value": 549838
}
]
}
}| Field | Description |
|---|---|
status | Listing status as shown: Active, Coming Soon, Pending, Closed…; home_status is the market label, e.g. Off Market. |
price, price_label | The headline price and what it is: Listed at Price for a listing, Last Sold Price for a sale. |
estimate, estimate_low, estimate_high | The Redfin Estimate of the home value and the sale price range Redfin estimates, when the page shows one. |
opendoor_estimate | Opendoor's value estimate the page shows, with its range. |
sqft, public_record_sqft | Living area of the listing, and the finished square feet on the county record - the two can differ. |
property_type, listing_property_type | Property type from public records, and the type of the latest listing. |
mls_id, listing_*, buyer_* | MLS number of the listing the page shows, its agent (with licence number) and broker, and the buyer's agent and broker of the last sale. |
photos | Every photo of the gallery in gallery order, as { url, caption, tags }: the full-size URL, the listing's caption and Redfin's room tags. |
tax_year, taxes_due, assessed_* | The latest tax roll year, the taxes due for it and its assessed values; tax_history has every year the county publishes, newest first. |
price_history | Sale, listing and price-change events, newest first, with their source (an MLS or public records). |
amenities | Facts and features as category / group / name / value rows. |
schools | Schools near the property with their GreatSchools rating (1–10), parent rating, grades, type, distance and size; serves_home marks the assigned ones. |
walk_score, transit_score, bike_score | Walk Score, Transit Score and Bike Score, 0–100; location_scores are neighbourhood scores 0–10 (pedestrian_friendly, groceries, quiet…). |
climate_risks | First Street risk factors 1 (minimal) to 10 (extreme) for flood, fire, heat, wind and air, with a summary and the trend. |
flood_zones, zoning | FEMA flood zones of the parcel, and the base and overlay zoning districts it lies in. |
comparable_homes | The sold homes Redfin bases its Estimate on. |
similar_homes, new_listings_nearby | Homes for sale like this one, and the newest listings near it. |
nearby_homes | Neighbouring homes with their Redfin Estimates. |
nearby_places, transit_stops | Shops, schools, parks and restaurants nearby, and the transit stops with their agencies and routes. |
compete_score | Redfin Compete Score of the neighbourhood, 0 (buyer's market) to 100, with the typical sale-to-list ratio and days to pending. |
market_trends | Monthly housing market metrics of the ZIP code (median sale price, homes sold, days on market, sale-to-list, homes sold above list, price drops); ratios are fractions. |
Home lists (comparable_homes, similar_homes, nearby_homes, new_listings_nearby) share one shape: property_id, url, address, price, estimate, beds, baths, sqft, sold_date, days_on_market and coordinates - the example abbreviates three of them.
A missing field is null or an empty list, never an error. One property is one redfin.com page; when a section of it does not come back, the property still answers with the header fields and empty records, history and lists.
No-code Redfin Scraper
Prefer a dashboard run and a file? Scrapers without code → Redfin Scraper searches an area with the Search API parameters and produces JSON, CSV and XML files with one record per home (the search fields). Turn on Include detail pages to nest each home's Property API answer under detail, or paste property URLs or ids instead of a search. The same job is available over HTTP with an API key (x-api-key; scope scrapers:run to start, scrapers:read to poll):
POST https://api.scrapeit.io/api/v1/scrapers/redfin/jobs
GET https://api.scrapeit.io/api/v1/scrapers/redfin/jobs/{jobId}| Parameter | Type | Example | Description |
|---|---|---|---|
location or url | string | Austin, TX | The area to search, as in the Search API; every Search API filter applies, limit caps the homes of the run. |
include_detail | boolean | true | Also fetch each home's property page and nest it under detail; billed per home like one Property API request. |
properties | array | ["https://www.redfin.com/CA/Richmond/2337-Garvin-Ave-94804/home/1520766"] | Instead of a search: up to 20 redfin.com property URLs or property ids; each record is the property detail. |
output_format | array | ["json", "csv"] | One or more of json, csv, xml. Defaults to ["json"]; an empty list is rejected. |
Send a search (location or url) or properties, not both. A search without detail pages, or a list of five properties or fewer, finishes inline and the POST already answers with the result-file ids; a larger job answers queued, so poll the GET endpoint until status is finished (or failed). A property listed twice is fetched once. A home whose page redfin.com does not know, or blocks on every attempt, keeps its search fields with detail_error (or becomes a row with its property_id and an error code) and that page costs nothing - the other homes still run.
Errors
| Code | HTTP | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Search: both or neither of location/url, a URL that is not a redfin.com area search page, sold_within without a sold search. Property: both or neither of property_id/url, a URL that is not a /home/ page. |
NOT_FOUND | 404 | redfin.com suggests no place for the location, or has no property with this id. |
TARGET_BLOCKED | 502 | Every proxy attempt drew redfin.com's bot check. Retry later; the request costs nothing. |
See Error codes for the shared error format.
Credits and billing
Each API bills one flat price per request under its own product code - the residential proxy and any browser work are part of it (billing & credits). Every request is scraped live - never served from the shared cache - so prices and status are current.
Price per request: 30 credits, flat, for a search (up to 350 homes) and for a property; the dashboard Pricing page always shows the current price. Finding the place of a location costs nothing extra; a location redfin.com suggests no place for answers 404 NOT_FOUND and is billed like a search - redfin.com answered it. A no-code job pays the Search API price per search and the Property API price per home page or listed property it fetched.
Limits and behavior
- One search shows at most 350 homes, the way redfin.com's own map and list do;
total_resultssays how many match. Narrow a wide search with filters or a smaller area (a ZIP code, a neighborhood) to reach the rest. - A
locationother than a ZIP code is first looked up in redfin.com's search box, which adds a few seconds; send a ZIP code or a searchurlfor the fastest answer. - redfin.com shows a signed-out visitor's view: agent-only and login-only fields are not part of the answer.
- redfin.com sits behind a bot check that a browser passes once per period; ScrapeIt keeps that clearance per organization and replays it, so most requests are plain, fast fetches.
Related pages
- Zillow Scraper API - for-sale, rental and sold listings and property detail from zillow.com.
- Apartments.com Scraper API - rental listings and property pages.
- Billing & credits - credit prices and plans.
- Files & artifacts - downloading the no-code result files.