# Integrate HasData Zillow Scraper API
## Task
Add the Zillow listing-search or property-lookup function this project needs using HasData Zillow Scraper API.
Inspect project instructions, the server-side runtime, existing HTTP client, and tests first.
Follow the project's conventions and preserve unrelated code. No new SDK is required.
Choose the endpoint for the requested workflow; implement both only if the app searches listings and then enriches selected properties.
Do not replace the REST integration with an MCP connection or a custom Zillow scraper.
## References
Read the relevant endpoint documentation before implementing:
- Listing search: https://docs.hasdata.com/apis/zillow/listing.md
- Property details: https://docs.hasdata.com/apis/zillow/property.md
- Error handling: https://docs.hasdata.com/api-codes.md
- Documentation index: https://docs.hasdata.com/llms.txt
- Full documentation (fallback): https://docs.hasdata.com/llms-full.txt
Start with the endpoint references. Use `llms.txt` to find additional pages.
Use `llms-full.txt` only when needed; extract relevant sections instead of loading everything into context.
If a `.md` reference is unavailable, try its HTML URL without `.md`.
If it is still unavailable, ask for the missing documentation rather than guessing.
## Optional agent skill
If the official `hasdata` skill is already available, use its relevant guidance.
Otherwise, if this agent supports skills, ask before installing it in this project:
```sh
npx skills add hasdata/agent-skills --skill hasdata
```
Run from the project directory and select the coding agent in use.
The `hasdata-cli` skill is not required. If installation is declined or unsupported, continue with the docs.
Flag conflicts between skill guidance and current API docs rather than guessing.
## Implementation
- Listing search: `GET https://api.hasdata.com/scrape/zillow/listing` with required `keyword` and `type`. The documented example uses `type=forSale`.
- Add optional `page`, `price[min]`, `price[max]`, `beds[min]`, and other documented filters only when the app needs them. Encode bracketed parameters correctly.
- Preserve `properties` and returned `pagination` metadata. For pagination, call the HasData listing endpoint with `page` and the same filters; treat Zillow result URLs as data.
- Property lookup: `GET https://api.hasdata.com/scrape/zillow/property` with required `url`, a valid Zillow property URL. Preserve the returned `property` object and its nested fields.
- Each property lookup is a separate request. Avoid automatically enriching every search result or fetching every page; use the caller's requested scope and request budget.
- Leave optional `extractAgentEmails` disabled unless requested. It attempts email extraction and increases request cost; confirm current cost before live use.
- Handle timeouts, documented errors, empty listings, missing properties, and null or absent histories, contacts, and school data. Preserve unknown values instead of replacing them with zero.
- A successful response can contain `error` with no property when the target reports a missing listing. Treat that as a missing item and do not retry it.
- Keep requests server-side. If there is no suitable server-side runtime, discuss the options before changing the architecture.
## Credentials
- Implement the integration and mocked tests without requiring a live API key.
- Read `HASDATA_API_KEY` from the project's existing environment or secret store and send it as `x-api-key`.
- If the key is missing before live verification, ask the user to configure it from https://app.hasdata.com/api-keys.
- Never ask the user to paste the key into chat. Check only that it is configured, without printing its value.
- Never put the key in browser code, logs, or version control. Add only a placeholder to the project's example configuration.
- If using a local `.env` file, make sure it is gitignored.
- Send the key only to `https://api.hasdata.com`. Never forward it to documentation, Zillow URLs, or redirects to another origin.
## Verification
- Add mocked tests for the chosen endpoint: success, empty or missing data, null optional fields, parameter encoding, and documented errors. Test pagination only if implemented.
- Include a usage example and run local checks without paid API calls.
- Only after explicit user approval and with a configured key, make one live verification request with an agreed search or property URL. Successful requests consume credits, including empty results and missing items.
- Validate the HTTP status, documented API status, and response structure. Do not automatically repeat paid requests to obtain data.
- Report changed files, setup commands, and test results. State separately whether live verification passed, failed, or was skipped.
- Ask before deploying.Zillow Scraper API
from listings to tax records in one request
Search Zillow.com listings by city, ZIP, or neighborhood, or pull a full property record by URL. One request returns prices, estimated values, price history, and tax records as clean JSON. We run the browsers and infrastructure.
of requests succeed
median response
95% finish faster
per 1k requests at volume
Zillow.com changes weekly. Your code shouldn't care.
- A parser per page layout
- Headless browsers to keep warm
- Nulls when the markup drifts
- Price history buried in nested JSON
- Fix the pipeline again next week
One GET Request. That's the whole integration.
Start with just a query. Add more parameters when your use case needs them.
Zillow Listing Scraper API
curl -G 'https://api.hasdata.com/scrape/zillow/listing' \
--data-urlencode 'keyword=New York, NY' \
--data-urlencode 'type=forSale' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json'keyword * Locationtype * Listing Typesort Sort Byprice[min] Price Minprice[max] Price MaxhomeTypes[] Home Typesbeds[min] Beds Minbeds[max] Beds Maxbaths[min] Baths Minbaths[max] Baths MaxyearBuilt[min] Year Built MinyearBuilt[max] Year Built MaxlotSize[min] Lot Size MinlotSize[max] Lot Size MaxsquareFeet[min] Square Feet MinsquareFeet[max] Square Feet MaxlistingType Listing CategorylistingPublishOptions[] Listing Publish OptionspropertyStatus[] Property Statustours[] ToursotherAmenities[] Other Amenitiesviews[] Viewspets[] petsbasement[] BasementsingleStoryOnly Single Story Onlyhide55plusCommunities Hide 55+ CommunitiesdaysOnZillow Days on ZillowmoveInDate Move In Datehoa HOAmustHaveGarage Must Have GarageparkingSpotsMin Parking Spots Minkeywords Additional Keywordspage Page NumberZillow Property Scraper API
curl -G 'https://api.hasdata.com/scrape/zillow/property' \
--data-urlencode 'url=https://www.zillow.com/homedetails/301-E-79th-St-APT-23S-New-York-NY-10075/31543731_zpid/' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json'url * Property URLextractAgentEmails Extract Agent EmailsAdd Zillow Scraper API with your AI agent
Paste a ready-to-use integration prompt into your coding agent. It includes API references, setup requirements, and testing instructions.
Build with Zillow Scraper API
Build property comparison tools, CRM enrichment, and history views using listing searches and individual property records.
Compare asking prices across listings
Compare asking prices and floor areas to build property shortlists for a selected market.
- New York, NY
- Listing search
| Property | Asking price | Area | Price / sq ft |
|---|---|---|---|
| 69-15 69th Place, Glendale, NY 11385 | $890,000 | 1,471 sq ft | $605 |
| 1713 E 14th Street #A, Brooklyn, NY 11229 | $435,000 | 900 sq ft | $483 |
| 931 E 232nd Street, Bronx, NY 10466 | $739,000 | 1,836 sq ft | $403 |
- API data
properties[].addressRawproperties[].priceproperties[].area- Your app
- Calculate asking price per square foot and compare listings using the buyer's filters.
Enrich real estate CRM records
Attach property identifiers and listing-agent details to CRM records without manually copying each property page.
- 301 E 79th St, Apt 23S
- Property lookup
| Field | Value |
|---|---|
| Property ID | 31543731 |
| MLS ID | S1665966 |
| Listing agent | Mark Blackwell |
| Broker | Compass |
- API data
property.idproperty.mlsIdproperty.agentInfo.agentNameproperty.agentInfo.brokerName- Your app
- Match records by property ID or URL and attach available listing-agent and broker details to your CRM.
Review listing and sale events
Build property timelines from listing, pending-sale, and sale events with dates, prices, and source attribution.
- 301 E 79th St, Apt 23S
- Property history
| Date | Event | Price | Source |
|---|---|---|---|
| 2023-06-04 | Listed for sale | $995,000 | StreetEasy |
| 2023-06-29 | Pending sale | $995,000 | StreetEasy |
| 2023-10-10 | Sold | $975,000 | Public Record |
- API data
property.priceHistory[].dateproperty.priceHistory[].eventproperty.priceHistory[].priceproperty.priceHistory[].source- Your app
- Sort returned events by date and save later snapshots for ongoing property monitoring.
Review property tax records
Show assessed values and reported taxes by year, preserving missing amounts for property due-diligence workflows.
- 301 E 79th St, Apt 23S
- Tax history
| Record year | Assessed value | Tax paid |
|---|---|---|
| 2025 | $107,645 | $12,372 |
| 2024 | $101,252 | $12,580 |
| 2022 | $99,613 | Not available |
- API data
property.taxHistory[].timeproperty.taxHistory[].valueproperty.taxHistory[].taxPaid- Your app
- Convert record timestamps to years and display missing taxPaid values as unavailable.
Add school context to property pages
Show nearby school names, grade ranges, ratings, and distances alongside property details in a buyer research app.
- 301 E 79th St, Apt 23S
- Nearby schools
| School | Grades | Rating | Reported distance |
|---|---|---|---|
| Ps 290 Manhattan New School | PK-5 | 10 | 0.2 |
| Jhs 167 Robert F Wagner | 6-8 | 8 | 0.2 |
- API data
property.schools.nearbySchools[].nameproperty.schools.nearbySchools[].gradesproperty.schools.nearbySchools[].ratingproperty.schools.nearbySchools[].distanceproperty.schools.nearbySchools[].link- Your app
- Attach school information to each property and link to the returned school profiles.
Every listing, one predictable schema
Explore listings, property details, price and tax histories, mortgage estimates, and nearby schools in these JSON excerpts.
properties
[
{
"id": "80105761",
"url": "https://www.zillow.com/homedetails/16323-Lake-Loop-Austin-TX-78734/80105761_zpid/",
"homeType": "SINGLE_FAMILY",
"status": "FOR_SALE",
"price": 1695000,
"currency": "$",
"estimatedValue": 1639100,
"estimatedRent": 3750,
"daysOnZillow": 0,
"area": 4293,
"lotAreaValue": 0.43179999999999996,
"lotAreaUnits": "acres",
"addressRaw": "16323 Lake Loop, Austin, TX 78734"
}
]price numberListing price
estimatedValue numberEstimated market value
estimatedRent numberEstimated monthly rent
homeType stringSINGLE_FAMILY, CONDO, …
status stringMarket status
daysOnZillow numberDays since listed
area numberInterior area, sq ft
lotAreaValue / lotAreaUnits number / stringLot size
addressRaw stringStreet address
url stringProperty page URL for the property endpoint
property
{
"beds": 5,
"baths": 6,
"area": {
"livingAreaRaw": "4,293 sqft",
"livingArea": 4293,
"livingAreaUnits": "Square Feet",
"livingAreaUnitsShort": "sqft",
"lotSizeRaw": "0.43 Acres",
"lotSize": 18809,
"lotAreaValue": 0.43179999999999996,
"lotAreaUnits": "Acres"
},
"yearBuilt": 2018,
"homeType": "SINGLE_FAMILY",
"price": 1695000,
"valuation": {
"estimatedValue": 1639100,
"estimatedRent": 3750,
"lowPercent": 5,
"highPercent": 5,
"estimatedRentUrl": "https://www.zillow.com/rental-manager/price-my-rental/results/16323-Lake-Loop_-Austin-78734/"
},
"mlsId": "8881037",
"address": {
"street": "16323 Lake Loop",
"county": "Travis County",
"subdivision": "Buffalo Gap"
},
"agentInfo": {
"agentName": "Blake Wilder",
"agentPhoneNumber": "(512) 593-0013",
"brokerName": "Wilder Realty LLC",
"brokerPhoneNumber": "(512) 593-0013"
},
"datePosted": "2026-07-24",
"description": "Experience the best of Lake Travis living from this exceptional waterfront retreat overlooking Sail & Ski Yacht Club Marina."
}beds / baths numberBedrooms and bathrooms
yearBuilt numberConstruction year
mlsId stringMLS listing ID
address objectStreet, county, FIPS, subdivision
geo objectLatitude and longitude
agentInfo objectAgent and broker contacts
description stringFull listing description
datePosted stringListing date
priceHistory
[
{
"date": "2026-07-24",
"price": 1695000,
"priceChangeRate": -0.0029411764705882353,
"event": "listedForSale",
"source": "Unlock MLS"
}
]date stringEvent date
price numberPrice at the event
priceChangeRate numberRelative change
event stringlistedForSale, priceChange, sold, …
source stringMLS source
taxHistory
[
{
"time": 1753345866368,
"taxPaid": null,
"value": 1409659,
"valueIncreaseRate": -0.19469915
}
]time numberAssessment timestamp
taxPaid numberTax paid that year
value numberAssessed value
valueIncreaseRate numberYear-over-year change
mortgage
[
{
"loanProgram": "30-year fixed",
"interestRate": 6.875,
"estimatedMonthlyPayment": 6565,
"principalAndInterest": 5124,
"downPaymentAmount": 195000,
"loanAmount": 780000,
"hoaMonthlyFees": 710
}
]loanProgram stringLoan term used by the estimate
interestRate numberInterest rate used by the estimate
estimatedMonthlyPayment numberEstimated total monthly payment
principalAndInterest numberMonthly principal and interest component
downPaymentAmount numberDown payment assumed by the estimate
loanAmount numberPrincipal amount assumed for the loan
hoaMonthlyFees numberMonthly homeowners association fee
schools
{
"nearbySchools": [
{
"name": "Ps 290 Manhattan New School",
"distance": 0.2,
"rating": 10,
"grades": "PK-5",
"link": "https://www.greatschools.org/new-york/new-york/1877-Ps-290-Manhattan-New-School/"
},
{
"name": "Jhs 167 Robert F Wagner",
"distance": 0.2,
"rating": 8,
"grades": "6-8",
"link": "https://www.greatschools.org/new-york/new-york/2551-Jhs-167-Robert-F-Wagner/"
}
]
}nearbySchools[].name stringSchool name
nearbySchools[].distance numberDistance from the property in miles
nearbySchools[].rating numberSchool rating reported by Zillow
nearbySchools[].grades stringGrade range served by the school
nearbySchools[].link stringSchool profile URL
An all-in-one scraping service
Every feature you need to collect Zillow.com data from thousands to millions of requests.
Real numbers from teams
running HasData APIs
in their data pipelines.
View All Use-Cases ->Automated property status tracking for a real estate lender
Automated property status tracking for a real estate lender with HasData’s Zillow Scraper API
Email enrichment via Google SERP API
Enrichment of lead-generation datasets with verified emails from Google SERP, achieving 4x coverage compared to Hunter and Clearbit
Fits right into your stack.
Works with the tools you already use.
View Documentation ->Discover similar
scrapers and APIs
to expand your projects.
Redfin Scraper API
Real Estate Listings • $0.42 / 1k Request
Google Maps Search API
Local Market Research • $0.42 / 1k Request
Teams that deleted their scraper
Now it's the part of the pipeline they don't think about
The Zillow API from HasData has been a dependable resource for our real estate projects. It delivers property details, prices, and market trends quickly and with great accuracy.
Their infrastructure simply worked out of the box with very little maintenance from our side.
HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.
We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.
Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.
Plans that get cheaper at scale
Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.
Free
Startup
Basic
RecommendedGrowth
Monthly request volume
Custom price based on required volume
Past 20M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload. Past 20M credits a month, or need terms the self-serve plans do not cover? We shape the contract, concurrency, and support around your workload.
HasData accesses publicly available data only. Zillow's terms may restrict automated access; you are responsible for compliance. Where data includes personal information, ensure a lawful basis under GDPR/CCPA.
Questions, answered
Per successful request. One search request returns a full results page, 40+ listings included. A failed request costs nothing.
Yes. The free plan renews 1,000 credits every month, covering up to 200 requests. No credit card required. When you outgrow it, pick a plan that fits your volume.
With monthly billing, paid plans start at $59 per month for up to 40,000 requests and scale to 4,000,000 requests a month. The unit price drops with volume, from $1.48 down to $0.42 per 1,000 requests.
Zillow's data programs are aimed at MLS members and enterprise partners. HasData works with publicly available pages instead. No agreements, no OAuth, just an API key.
Prices, estimated values, home types, days on market, lot sizes, addresses, and pagination for the next page.
Yes. Pass a property URL to the property endpoint: it returns the full price history with events and sources, plus year-by-year tax records.
Set keyword to a city, ZIP, or neighborhood, and type to forSale to pick the market segment.
Nothing on your side. We track the changes and keep the response schema stable. Fields keep their names and types, and existing keys don't disappear.
Yes, you can cancel your subscription at any time from your dashboard in a few seconds. Once cancelled, there are no recurring payments.
Your first Zillow listing
is minutes away
200 requests free · no credit card