Skip to content
Scrappa Get API key

Redfin Home Valuation (AVM)

Redfin valuation API

Home value estimates, comparable sales, and property specs in one JSON response

Use this endpoint after resolving a Redfin property_id to add valuation ranges, last sale context, and comparable-property data to real estate apps, underwriting tools, pricing workflows, and homeowner reports.

Get Redfin automated home valuation data for a specific US property. The endpoint is designed for AVM-style workflows where you already have a Redfin property_id from search results or a property details lookup and need a structured estimate, low/high value range, last sale context, and comparable-property signals.

What the Redfin valuation endpoint returns

The response can include the predicted home value, estimated low and high bounds, last sold price, last sold date, beds, baths, square footage, lot size, year built, and comparable sales. These fields are useful for building home equity calculators, pricing research tools, investment screening dashboards, portfolio monitoring, and homeowner-facing value estimate experiences.

How to get a property valuation

Start with Redfin Location Search when you need region IDs, then use Redfin Property Search to find candidate listings and extract the property_id. For a known property, call Redfin Property Details first when you need richer listing context before requesting this valuation endpoint.

When to use valuation instead of property search

Use property search when you need a list of homes in a city, ZIP code, county, or neighborhood. Use Redfin Home Valuation when your workflow centers on one property and needs an estimated value range, comparable sales, and property attributes for underwriting, pricing analysis, or automated real estate reports.

Run this endpoint

Redfin Home Valuation (AVM) 1 credit/request

Endpoint

GET https://scrappa.co/api/redfin/valuation?property_id=194191988
Request preview GET
https://scrappa.co/api/redfin/valuation?property_id=194191988
Auth header x-api-key
Cost 1 credit/request
property_id = 194191988
Response preview 200 OK
{
    "data": {
        "predictedValue": 850000,
        "predictedValueLow": 800000,
        "predictedValueHigh": 900000,
        "lastSoldPrice": 750000,
        "lastSoldDate": "2020-05-15",
        "numBeds": 3,
        "numBaths": 2,
        "sqFt": {
            "value": 1800
        },
        "lotSize": {
            "value": 4500
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

1 required parameter needed before sending a request.

1 optional filter available.

property_id integer Required

Redfin property ID (e.g., 194191988 from URL /home/194191988)

Example value 194191988
listing_id integer Optional

Redfin listing ID (optional)

Example value 1234567890

Request Examples

<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/redfin/valuation?property_id=194191988",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/redfin/valuation?property_id=194191988');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/redfin/valuation?property_id=194191988', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/redfin/valuation?property_id=194191988',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/redfin/valuation?property_id=194191988")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/redfin/valuation?property_id=194191988", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/redfin/valuation?property_id=194191988', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/redfin/valuation?property_id=194191988")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/redfin/valuation?property_id=194191988", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/redfin/valuation?property_id=194191988"
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/redfin/valuation?property_id=194191988"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/redfin/valuation?property_id=194191988',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/redfin/valuation?property_id=194191988")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

data
JSON Response
200 OK
{
    "data": {
        "predictedValue": 850000,
        "predictedValueLow": 800000,
        "predictedValueHigh": 900000,
        "lastSoldPrice": 750000,
        "lastSoldDate": "2020-05-15",
        "numBeds": 3,
        "numBaths": 2,
        "sqFt": {
            "value": 1800
        },
        "lotSize": {
            "value": 4500
        },
        "yearBuilt": 1920,
        "comparables": [
            {
                "address": "456 Oak Ave",
                "price": 875000,
                "beds": 3,
                "baths": 2,
                "sqFt": 1850
            }
        ]
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

400

HTTP 400

The request contains null bytes or unsupported control characters.

422

HTTP 422

One or more Redfin request parameters failed validation.

404

HTTP 404

Property not found

500

HTTP 500

Redfin upstream or proxy fetch attempts were exhausted.

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Redfin API FAQ

What do I need before calling the Redfin valuation API?

You need a Scrappa API key and a Redfin property_id. The property_id can come from Redfin Property Search results or from a property details lookup.

What valuation fields can the endpoint return?

The endpoint can return a predicted value, low and high estimate range, last sold price and date, comparable sales, beds, baths, square footage, lot size, and year built when Redfin exposes those fields for the property.

Should I use Redfin Property Search or Redfin Home Valuation?

Use Property Search to discover listings in a market. Use Home Valuation when you already have one property and need an estimated value range, comparable sales, and valuation context.

Try It Live

Test this endpoint in our interactive playground with real data.