HasData Zillow MCP Server
Listagens do Zillow para venda, aluguel e vendidas, além de detalhes completos do imóvel, em JSON estruturado.
Documentação
Servidor MCP do Zillow
Um servidor de Model Context Protocol (MCP) hospedado que oferece ao Claude, Cursor, Windsurf e qualquer outro cliente MCP duas ferramentas somente leitura do Zillow. Pesquise imóveis à venda, para alugar e vendidos com filtros avançados, e leia uma propriedade individual por completo, tudo como JSON estruturado, sem conta no Zillow e sem nada para hospedar.
Ele lê páginas públicas de listagens em Zillow.com que um visitante desconectado pode ver.
https://mcp.hasdata.com/api/mcp?apis=zillow
Conteúdo
- O que você precisa
- Início rápido
- Exemplos de prompts
- Ferramentas
- Erros e caminhos de falha
- Preços, plano gratuito e limites
- Seleção de ferramentas
- Como se compara
- Perguntas frequentes
- Links do HasData
- Desenvolvimento
- Contribuição
- Licença
O que você precisa
Um cliente MCP e uma chave de API do HasData do painel, gratuita para criar sem cartão, e o teste cobre cerca de 200 chamadas na taxa de 5 créditos. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem contêiner para executar e sem conta no Zillow em nenhum lugar do fluxo. Um cliente que só fala stdio o acessa por meio de um lançador leve, publicado como @hasdata/zillow-mcp no npm e hasdata-zillow-mcp no PyPI, mostrado abaixo.
Início rápido
A URL do servidor é a mesma para todos os clientes. Nós o executamos na prática no Claude Code e no Claude Desktop. Os outros blocos seguem o formato documentado de cada cliente para um servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/api/mcp?apis=zillow |
| Transporte | HTTP, transmissível |
| Cabeçalho de autenticação | x-api-key: HASDATA_API_KEY |
Clientes com suporte a OAuth podem adicionar a mesma URL como conector e entrar sem colocar uma chave em um arquivo de configuração.
Claude Code
claude mcp add --transport http zillow "https://mcp.hasdata.com/api/mcp?apis=zillow" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Configurações, depois Conectores, depois Adicionar conector personalizado, depois cole https://mcp.hasdata.com/api/mcp?apis=zillow e entre.
Para o caminho do arquivo de configuração, o Claude Desktop carrega apenas servidores locais (stdio), então ele acessa um servidor remoto por meio de um lançador stdio. O pacote @hasdata/zillow-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto a claude_desktop_config.json:
{
"mcpServers": {
"zillow": {
"command": "npx",
"args": ["-y", "@hasdata/zillow-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Para Python em vez de Node, troque o lançador pelo pacote PyPI, que uvx executa sem instalação manual:
{
"mcpServers": {
"zillow": {
"command": "uvx",
"args": ["hasdata-zillow-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
~/.cursor/mcp.json para todos os projetos, ou .cursor/mcp.json para um:
{
"mcpServers": {
"zillow": {
"url": "https://mcp.hasdata.com/api/mcp?apis=zillow",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json. O Windsurf chama o campo serverUrl, não url:
{
"mcpServers": {
"zillow": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=zillow",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
.vscode/mcp.json no espaço de trabalho:
{
"servers": {
"zillow": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=zillow",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Exemplos de prompts
Prompts, não código. Cole um e o agente escolhe a ferramenta por conta própria. Cada um é anotado com as chamadas que faz, porque cada chamada bem-sucedida custa 5 créditos.
Pesquise imóveis à venda em Austin, TX, com pelo menos três quartos abaixo de US$ 600 mil, ordenados dos mais recentes primeiro, e me dê os dez mais recentes com preço e dias no mercado.
Uma chamada, 5 créditos. Preço, quartos, área e dias no mercado voltam no resultado da pesquisa.
Pegue o primeiro resultado e extraia seus detalhes completos: histórico de preços, histórico de impostos, a estimativa de preço e as escolas designadas.
Uma chamada, 5 créditos. Esses dados estão na página da propriedade, que a ferramenta de detalhes lê pela URL.
Encontre condomínios para alugar em Austin que aceitam gatos e depois extraia a estimativa de aluguel dos três mais baratos.
Quatro chamadas, 20 créditos. Uma pesquisa e depois uma chamada de propriedade para cada um dos três.
Para esta URL de propriedade, me dê o preço de listagem, a estimativa de preço e as três últimas vendas no histórico de preços.
Uma chamada, 5 créditos.
Um resultado de pesquisa é suficiente para classificar e criar uma lista curta. Histórico de preços, histórico de impostos, a estimativa, escolas e o corretor vêm da chamada de propriedade, então um prompt que cria uma lista curta e depois inspeciona três imóveis é uma pesquisa mais três chamadas de propriedade.
Ferramentas
Duas ferramentas, somente leitura. As amostras abaixo são reduzidas de chamadas reais, e os números mudam conforme o mercado se move. Leia-as como formatos. Cada nome de ferramenta leva à referência do endpoint, que traz a lista completa de campos.
As amostras são o payload, não a resposta inteira. Um resultado tools/call carrega um bloco de texto, e esse texto é ele próprio JSON contendo url, status, text e json, com os dados extraídos sob json. De uma resposta JSON-RPC bruta, o caminho é result.content[0].text, analisado, e depois .json. Um cliente de chat desembrulha isso para você, e código que fala diretamente com o endpoint não faz.
Obter listagens de imóveis do Zillow
hasdata_zillow_listing_getRealEstateListings
Uma página de listagens por palavra-chave de localização, filtrada.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
keyword | string | sim | O local a pesquisar, como Austin, TX |
type | string | sim | forSale, forRent ou sold |
price_min_ / price_max_ | número | Faixa de preço | |
beds_min_ / beds_max_ / baths_min_ / baths_max_ | número | Faixas de quartos e banheiros | |
homeTypes__ | array | house, condo, townhome, multiFamily, apartment, lot, manufactured | |
daysOnZillow | número/string | 1, 7, 14, 30, 90, 6m, 12m e acima | |
sort | string | newest, priceLowToHigh, priceHighToLow, squareFeet e mais | |
page | número | Página de resultados |
A referência também documenta faixas de metragem quadrada, tamanho do lote, ano de construção e HOA, além de otherAmenities__, views__, pets__, listingType, propertyStatus__, listingPublishOptions__ e mais.
Retorna searchInformation com totalResults, um array properties e pagination cujo nextPage é a URL da página seguinte. Cada propriedade carrega id, url, homeType, status, price, currency, uma estimativa de aluguel rentZestimate, daysOnZillow, area em pés quadrados, addressRaw e um address estruturado, latitude, longitude, beds, baths, listingDetails, mediaDetails e photos.
{
"id": "60134551",
"url": "https://www.zillow.com/homedetails/6116-Speyside-Dr-Austin-TX-78754/60134551_zpid/",
"homeType": "SINGLE_FAMILY",
"status": "FOR_SALE",
"price": 320000,
"currency": "$",
"rentZestimate": 2286,
"daysOnZillow": 0,
"area": 2277,
"address": { "street": "6116 Speyside Dr", "city": "Austin", "state": "TX", "zipcode": "78754" },
"beds": 4,
"baths": 3
}
Obter detalhes de propriedade do Zillow
hasdata_zillow_property_getPropertyDetails
Uma propriedade por completo, pela URL.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
url | string | sim | Uma URL de propriedade do Zillow, o campo url de um resultado de listagem |
extractAgentEmails | booleano | Tenta extrair o e-mail do corretor da listagem. Adiciona 5 créditos, então a chamada de propriedade custa 10 em vez de 5 |
Retorna a página completa: price, currency, fees, beds, baths, area, yearBuilt, homeType, mlsId, um address e geo estruturados, o description e highlights, photos, schools, daysOnZillow, views, saves, um bloco agentInfo e arrays priceHistory, taxHistory e mortgage. A própria estimativa de preço do Zillow chega em um objeto zestimate contendo zestimate, um estimatedSaleRange e um rentZestimate. Leia como uma estimativa, não como um valor confirmado.
areaé um objeto aqui,{ livingArea, livingAreaUnits }, não o número simples que a ferramenta de pesquisa retorna. Leiaarea.livingAreapara a metragem quadrada em uma página de propriedade, ou uma comparação numérica comoarea > 2000falha silenciosamente contra um objeto.
{
"id": 60134551,
"status": "FOR_SALE",
"price": 320000,
"currency": "USD",
"yearBuilt": 2002,
"beds": 4,
"baths": 3,
"area": { "livingArea": 2277, "livingAreaUnits": "Square Feet" },
"fees": { "monthlyHoaFee": "$500 annually" },
"zestimate": { "zestimate": 318100, "estimatedSaleRange": "$302K - $334K", "rentZestimate": 2286 },
"address": { "street": "6116 Speyside Dr", "county": "Travis County" },
"agentInfo": { "agentName": "Marie Coleman", "brokerName": "eXp Realty" },
"priceHistory": [{ "date": "2026-08-24", "price": 320000, "event": "listedForSale" }],
"schools": { "elementarySchool": { "name": "Bluebonnet Trail", "district": "Manor ISD" } }
}
Erros e caminhos de falha
Seu cliente quase nunca vê um código de erro HTTP de uma chamada de ferramenta. A camada MCP responde 200 e coloca a falha dentro do resultado, com isError definido como true e o motivo como texto. O agente lê uma mensagem onde você poderia esperar uma linha de status.
Uma chave errada aparece como saída da ferramenta, não como uma conexão falha. tools/list aceita qualquer chave não vazia e retorna ambas as ferramentas, então o cliente completa o handshake e mostra verde. A primeira chamada de ferramenta então volta com isError: true e o texto HasData API error: 401 Unauthorized. Fique atento a essa string, porque nada antes no fluxo relata o problema.
Uma chave ausente é o único erro HTTP real. A autorização roda antes de qualquer ferramenta, e a própria conexão falha com 401. Os cabeçalhos CORS estão presentes, e um cliente de navegador lê o status e não uma falha de rede opaca.
Um argumento que quebra o esquema de uma ferramenta é rejeitado antes de virar uma extração. O servidor responde com isError: true e o texto MCP error -32602: Input validation error, nomeando o campo problemático. Nada é buscado e nada é cobrado.
Uma pesquisa sem correspondências retorna um resultado bem-sucedido com um array properties vazio, não um erro. Um local e filtros definidos sem inventário ainda voltam com requestMetadata.status definido como ok. Teste o comprimento do array antes de iterar.
Uma propriedade que foi removida da listagem retorna 400 com requestMetadata.status definido como error. Uma URL de uma pesquisa antiga pode apontar para uma listagem que não existe mais.
Resultados que carregam dados também carregam um requestMetadata.id que vale citar no suporte.
Preços, plano gratuito e limites
Cada ferramenta do Zillow custa 5 créditos por chamada bem-sucedida. Ativar extractAgentEmails adiciona 5 créditos à chamada de propriedade, 10 em vez de 5, então deixe desativado a menos que precise do e-mail. O tamanho da resposta não muda o preço.
O teste gratuito é 1.000 créditos por 30 dias sem cartão, o que dá 200 chamadas do Zillow na taxa base. Depois disso, uma conta ativa continua recebendo 100 créditos recarregados diariamente sempre que o saldo cair abaixo de 100, então um agente de baixo volume roda no plano gratuito indefinidamente.
Os planos pagos começam em US$ 49 por mês para 200.000 créditos, o que dá 40.000 chamadas. O preço unitário cai com o volume, de US$ 1,23 por 1.000 chamadas no plano inicial para US$ 0,50 no Business, US$ 0,42 no Growth e US$ 0,37 nos maiores planos de alto volume.
Seu plano também define a concorrência. O teste gratuito permite 1 requisição por vez, Startup 15, Business 30, Growth 50, e os planos de alto volume vão de 200 a 1.500. Trate o caso de estouro defensivamente em qualquer coisa não supervisionada.
Uma requisição que volta com status diferente de 200 não é cobrada. Uma chamada bem-sucedida que não encontra nada ainda é uma chamada.
Seleção de ferramentas
O parâmetro de consulta apis decide quais ferramentas seu agente vê. Menos ferramentas significa menos contexto gasto em definições de ferramentas e menos chances de o modelo alcançar a errada.
?apis=zillow the two tools in this repo
?apis=zillow,redfin add Redfin real estate
?apis=zillow,google_maps add Google Maps places
O parâmetro aceita nomes de provedores como zillow e nomes de APIs individuais como zillow_listing. Nomes com erro de digitação são ignorados. Se todos os nomes estiverem errados, a requisição falha com 400, e o corpo lista tanto o que não foi reconhecido quanto todos os valores válidos. Remova o parâmetro e o mesmo endpoint expõe todas as 57 ferramentas do HasData.
Como se compara
Os próprios programas de API da Zillow são para membros e parceiros que movimentam seu próprio inventário, como as APIs Bridge Interactive e Mortgage, e não uma forma autônoma de ler o mercado público. Para pesquisar listagens e ler propriedades arbitrárias, raspar as páginas públicas é o caminho, e este servidor faz isso por trás de um esquema estável.
| APIs parceiras da Zillow | Este servidor | |
|---|---|---|
| Propósito | Mover seu próprio inventário ou o do MLS | Ler o mercado público |
| Acesso | Aprovação de membro ou parceiro | Uma chave e uma URL |
| Pesquisa em todo o mercado | Restrita | Sim, com filtros avançados |
| Configuração | Onboarding empresarial | Nenhuma |
| Saída | Feeds de parceiros | JSON estruturado, preço e quartos pré-parseados |
O que este servidor não faz. Sem postagem, sem envio de leads, sem dados de conta. Ele lê o que um visitante desconectado pode ver no Zillow.com.
FAQ
Existe um servidor MCP oficial da Zillow?
A Zillow não publica um. Este é mantido pela HasData e lê páginas públicas, por isso não precisa de conta na Zillow.
O que é um servidor MCP da Zillow?
Um servidor que expõe dados de listagens da Zillow como ferramentas que um cliente de IA pode chamar. O cliente envia uma chamada de ferramenta pelo Model Context Protocol, o servidor busca os dados e retorna JSON estruturado, e o modelo trabalha com o resultado. Este expõe duas ferramentas e roda remotamente.
Preciso de uma conta ou chave de API da Zillow?
Não. A única credencial é a sua chave HasData. Não há associação à Zillow para solicitar, porque as ferramentas leem páginas públicas do Zillow.com.
Por que um resultado de busca não mostra histórico de preços ou escolas?
Porque a Zillow não os coloca no cartão de busca. Eles ficam na página da propriedade, que a ferramenta de detalhes lê por URL. Busque para filtrar e depois chame a ferramenta de propriedade para profundidade.
O que significa a estimativa de preço?
O objeto zestimate contém o valor estimado da própria Zillow, uma faixa em torno dele e uma estimativa de aluguel. É uma saída de modelo, não uma avaliação ou preço de venda confirmado. Trate como uma estimativa.
Posso usar isso junto com outras APIs da HasData?
Sim. O parâmetro apis aceita uma lista, e ?apis=zillow,redfin dá ao seu agente Zillow mais Redfin. Remova o parâmetro e você obtém tudo.
A HasData é afiliada à Zillow?
Não. A HasData é um serviço independente e não é afiliada, endossada ou patrocinada pela Zillow Group, Inc. Zillow é uma marca registrada de seu respectivo proprietário.
Conformidade e dados pessoais
A HasData acessa apenas dados publicamente disponíveis. Os termos de uma plataforma podem restringir o acesso automatizado, e você é responsável pela sua própria conformidade. Onde os dados coletados incluírem informações pessoais, como dados de contato de um corretor de listagem, certifique-se de ter uma base legal para isso sob o GDPR, CCPA ou as regras equivalentes na sua jurisdição.
Links da HasData
| Página do produto e construtor de solicitações | Zillow Scraper API |
| Documentação do servidor | Docs do servidor MCP |
| Todas as 57 ferramentas em um servidor | HasData/hasdata-mcp |
| Tutoriais de clientes | Clientes e integrações MCP |
| Tudo o mais que raspamos | Zillow Scraper API e mais 54 |
| Planos e custos de créditos | Planos e custos de créditos |
| Chaves e uso | Painel da HasData |
| Lançador Node no npm | @hasdata/zillow-mcp |
| Lançador Python no PyPI | hasdata-zillow-mcp |
Desenvolvimento
Este repositório é configuração e documentação para um servidor remoto. Não há etapa de build e nada para containerizar.
Os testes em test/ verificam o contrato das ferramentas, a parte que pode quebrar sem um commit aqui. Eles verificam que ?apis=zillow retorna exatamente duas ferramentas, que toda ferramenta ainda declara seus parâmetros obrigatórios, que nenhum nome mudou e que a chave em uso é realmente aceita. Esse último check chama uma ferramenta de verdade e custa 5 créditos, que é o preço de um canário que pode falhar pelo motivo certo.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
A mesma suíte roda no CI a cada push e uma vez por semana em agendamento, porque a lista de ferramentas upstream pode mudar sem ninguém tocar neste repositório. Uma falha significa que a lista de ferramentas mudou, a chave parou de funcionar ou o endpoint estava inacessível, e a mensagem de verificação diz qual.
Contribuindo
Correções nas tabelas de ferramentas e nas amostras de resposta são a contribuição mais útil, porque são as partes que se desatualizam. Inclua a chamada que você fez e a resposta que obteve. Pull requests de forks rodam a suíte sem chave, e os checks ao vivo pulam em vez de ficarem vermelhos.
Licença
MIT. Veja LICENSE.