The Zillow Listing Scraper API lets you retrieve property listings from Zillow.com based on various search parameters.
HasData is an independent service and is not affiliated with, endorsed by, or sponsored by Zillow. Zillow is a trademark of its respective owner. This API works with publicly available data only.
Get Your API Key
Sign in at hasdata.com , go to your account settings, and copy your API key.
All requests must include your key in the x-api-key header.
Request Cost and API Credits
Each request to the Zillow Listing Scraper API consumes API Credits from your account balance.
Cost per request: 5 API Credits
Credits are deducted only for successful requests.
Your total available credits depend on your active plan.
You can use your credits across all HasData APIs. The same credit balance is shared platform-wide.
Unused credits do not roll over. Any remaining credits expire at the end of the current billing period.
To monitor your credit usage and remaining balance, sign in to your account dashboard at app.hasdata.com .
Make Your First Request
cURL
HasData CLI
Node.js
Python
PHP
Java
C#
Ruby
Rust
Go
curl --request GET -G \
--url 'https://api.hasdata.com/scrape/zillow/listing' \
--data-urlencode 'keyword=New York, NY' \
--data-urlencode 'type=forSale' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your-api-key>'
hasdata zillow-listing \
--keyword 'New York, NY' \
--type forSale
const axios = require ( 'axios' ). default ;
const options = {
method: 'GET' ,
url: 'https://api.hasdata.com/scrape/zillow/listing' ,
params: { keyword: 'New York, NY' , type: 'forSale' },
headers: { 'Content-Type' : 'application/json' , 'x-api-key' : '<your-api-key>' }
};
try {
const { data } = await axios . request ( options );
console . log ( data );
} catch ( error ) {
console . error ( error );
}
import requests
url = "https://api.hasdata.com/scrape/zillow/listing"
querystring = { "keyword" : "New York, NY" , "type" : "forSale" }
headers = {
"Content-Type" : "application/json" ,
"x-api-key" : "<your-api-key>"
}
response = requests.get(url, headers = headers, params = querystring)
print (response.json())
<? php
$params = [
"keyword" => "New York, NY" ,
"type" => "forSale" ,
];
$curl = curl_init ();
curl_setopt_array ( $curl , [
CURLOPT_URL => "https://api.hasdata.com/scrape/zillow/listing?" . http_build_query ( $params ),
CURLOPT_RETURNTRANSFER => true ,
CURLOPT_CUSTOMREQUEST => "GET" ,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json" ,
"x-api-key: <your-api-key>" ,
],
]);
$response = curl_exec ( $curl );
curl_close ( $curl );
echo $response ;
OkHttpClient client = new OkHttpClient ();
HttpUrl url = HttpUrl . parse ( "https://api.hasdata.com/scrape/zillow/listing" )
. newBuilder ()
. addQueryParameter ( "keyword" , "New York, NY" )
. addQueryParameter ( "type" , "forSale" )
. build ();
Request request = new Request. Builder ()
. url (url)
. get ()
. addHeader ( "Content-Type" , "application/json" )
. addHeader ( "x-api-key" , "<your-api-key>" )
. build ();
Response response = client . newCall (request). execute ();
using System . Net . Http ;
using System . Web ;
var client = new HttpClient ();
var query = HttpUtility . ParseQueryString ( string . Empty );
query [ "keyword" ] = "New York, NY" ;
query [ "type" ] = "forSale" ;
var url = $"https://api.hasdata.com/scrape/zillow/listing? { query } " ;
var request = new HttpRequestMessage ( new HttpMethod ( "GET" ), url );
request . Headers . Add ( "x-api-key" , "<your-api-key>" );
using var response = await client . SendAsync ( request );
response . EnsureSuccessStatusCode ();
var content = await response . Content . ReadAsStringAsync ();
Console . WriteLine ( content );
require 'net/http'
require 'uri'
uri = URI ( "https://api.hasdata.com/scrape/zillow/listing" )
params = {
"keyword" => "New York, NY" ,
"type" => "forSale" ,
}
uri. query = URI . encode_www_form (params)
http = Net :: HTTP . new (uri. host , uri. port )
http. use_ssl = true
request = Net :: HTTP :: Get . new (uri)
request[ "Content-Type" ] = 'application/json'
request[ "x-api-key" ] = '<your-api-key>'
response = http. request (request)
puts response. read_body
use reqwest :: blocking :: Client ;
fn main () -> Result <(), Box < dyn std :: error :: Error >> {
let client = Client :: new ();
let res = client
. get ( "https://api.hasdata.com/scrape/zillow/listing" )
. query ( & [( "keyword" , "New York, NY" )])
. query ( & [( "type" , "forSale" )])
. header ( "Content-Type" , "application/json" )
. header ( "x-api-key" , "<your-api-key>" )
. send () ?
. text () ? ;
println! ( "{}" , res );
Ok (())
}
package main
import (
" fmt "
" io "
" net/http "
" net/url "
)
func main () {
params := url . Values {}
params . Set ( "keyword" , "New York, NY" )
params . Set ( "type" , "forSale" )
u := "https://api.hasdata.com/scrape/zillow/listing?" + params . Encode ()
req , _ := http . NewRequest ( "GET" , u , nil )
req . Header . Add ( "Content-Type" , "application/json" )
req . Header . Add ( "x-api-key" , "<your-api-key>" )
res , _ := http . DefaultClient . Do ( req )
defer res . Body . Close ()
body , _ := io . ReadAll ( res . Body )
fmt . Println ( string ( body ))
}
API Parameters
Parameter Default Value Required Description keywordNew York, NY Yes The keyword used to search for listings. typeforSale Yes The type of listing. sort- No The sorting option for the search results. price[min]- No The minimum price of the listing. price[max]- No The maximum price of the listing. beds[min]- No The minimum number of bedrooms. beds[max]- No The maximum number of bedrooms. baths[min]- No The minimum number of bathrooms. baths[max]- No The maximum number of bathrooms. yearBuilt[min]- No The minimum year the property was built. yearBuilt[max]- No The maximum year the property was built. lotSize[min]- No The minimum lot size. lotSize[max]- No The maximum lot size. squareFeet[min]- No The minimum square footage. squareFeet[max]- No The maximum square footage. homeTypes[]- No An array of home types to filter the listings. listingType- No The category of the listing. listingPublishOptions[]- No An array of listing publish options. hoa- No The Homeowners Association (HOA) fee. propertyStatus[]- No An array of property statuses. tours[]- No An array of tour options. otherAmenities[]- No An array of other amenities. views[]- No An array of views. pets[]- No An array of pet options. basement[]- No An array of basement options. singleStoryOnly- No If set to true, only single-story properties will be included. hide55plusCommunities- No If set to true, 55+ communities will be excluded. daysOnZillow- No The number of days a listing has been on Zillow. moveInDate- No The desired move-in date. mustHaveGarage- No If set to true, only listings with a garage will be included. parkingSpotsMin- No The minimum number of parking spots. keywords- No Additional keywords to refine the search. page- No The page number of the results to retrieve.