from typing import Dict import logging from agent.tools.data_providers.RapidDataProviderBase import RapidDataProviderBase, EndpointSchema logger = logging.getLogger(__name__) class ZillowProvider(RapidDataProviderBase): def __init__(self): endpoints: Dict[str, EndpointSchema] = { "search": { "route": "/search", "method": "GET", "name": "Zillow Property Search", "description": "Search for properties by neighborhood, city, or ZIP code with various filters.", "payload": { "location": "Location can be an address, neighborhood, city, or ZIP code (required)", "page": "Page number for pagination (optional, default: 0)", "output": "Output format: json, csv, xlsx (optional, default: json)", "status": "Status of properties: forSale, forRent, recentlySold (optional, default: forSale)", "sortSelection": "Sorting criteria (optional, default: priorityscore)", "listing_type": "Listing type: by_agent, by_owner_other (optional, default: by_agent)", "doz": "Days on Zillow: any, 1, 7, 14, 30, 90, 6m, 12m, 24m, 36m (optional, default: any)", "price_min": "Minimum price (optional)", "price_max": "Maximum price (optional)", "sqft_min": "Minimum square footage (optional)", "sqft_max": "Maximum square footage (optional)", "beds_min": "Minimum number of bedrooms (optional)", "beds_max": "Maximum number of bedrooms (optional)", "baths_min": "Minimum number of bathrooms (optional)", "baths_max": "Maximum number of bathrooms (optional)", "built_min": "Minimum year built (optional)", "built_max": "Maximum year built (optional)", "lotSize_min": "Minimum lot size in sqft (optional)", "lotSize_max": "Maximum lot size in sqft (optional)", "keywords": "Keywords to search for (optional)" } }, "search_address": { "route": "/search_address", "method": "GET", "name": "Zillow Address Search", "description": "Search for a specific property by its full address.", "payload": { "address": "Full property address (required)" } }, "propertyV2": { "route": "/propertyV2", "method": "GET", "name": "Zillow Property Details", "description": "Get detailed information about a specific property by zpid or URL.", "payload": { "zpid": "Zillow property ID (optional if URL is provided)", "url": "Property details URL (optional if zpid is provided)" } }, "zestimate_history": { "route": "/zestimate_history", "method": "GET", "name": "Zillow Zestimate History", "description": "Get historical Zestimate values for a specific property.", "payload": { "zpid": "Zillow property ID (optional if URL is provided)", "url": "Property details URL (optional if zpid is provided)" } }, "similar_properties": { "route": "/similar_properties", "method": "GET", "name": "Zillow Similar Properties", "description": "Find properties similar to a specific property.", "payload": { "zpid": "Zillow property ID (optional if URL or address is provided)", "url": "Property details URL (optional if zpid or address is provided)", "address": "Property address (optional if zpid or URL is provided)" } }, "mortgage_rates": { "route": "/mortgage/rates", "method": "GET", "name": "Zillow Mortgage Rates", "description": "Get current mortgage rates for different loan programs and conditions.", "payload": { "program": "Loan program (required): Fixed30Year, Fixed20Year, Fixed15Year, Fixed10Year, ARM3, ARM5, ARM7, etc.", "state": "State abbreviation (optional, default: US)", "refinance": "Whether this is for refinancing (optional, default: false)", "loanType": "Type of loan: Conventional, etc. (optional)", "loanAmount": "Loan amount category: Micro, SmallConforming, Conforming, SuperConforming, Jumbo (optional)", "loanToValue": "Loan to value ratio: Normal, High, VeryHigh (optional)", "creditScore": "Credit score category: Low, High, VeryHigh (optional)", "duration": "Duration in days (optional, default: 30)" } }, } base_url = "https://zillow56.p.rapidapi.com" super().__init__(base_url, endpoints) if __name__ == "__main__": from dotenv import load_dotenv from time import sleep load_dotenv() tool = ZillowProvider() # Example for searching properties in Houston search_result = tool.call_endpoint( route="search", payload={ "location": "houston, tx", "status": "forSale", "sortSelection": "priorityscore", "listing_type": "by_agent", "doz": "any" } ) logger.debug("Search Result: %s", search_result) logger.debug("***") logger.debug("***") logger.debug("***") sleep(1) # Example for searching by address address_result = tool.call_endpoint( route="search_address", payload={ "address": "1161 Natchez Dr College Station Texas 77845" } ) logger.debug("Address Search Result: %s", address_result) logger.debug("***") logger.debug("***") logger.debug("***") sleep(1) # Example for getting property details property_result = tool.call_endpoint( route="propertyV2", payload={ "zpid": "7594920" } ) logger.debug("Property Details Result: %s", property_result) sleep(1) logger.debug("***") logger.debug("***") logger.debug("***") # Example for getting zestimate history zestimate_result = tool.call_endpoint( route="zestimate_history", payload={ "zpid": "20476226" } ) logger.debug("Zestimate History Result: %s", zestimate_result) sleep(1) logger.debug("***") logger.debug("***") logger.debug("***") # Example for getting similar properties similar_result = tool.call_endpoint( route="similar_properties", payload={ "zpid": "28253016" } ) logger.debug("Similar Properties Result: %s", similar_result) sleep(1) logger.debug("***") logger.debug("***") logger.debug("***") # Example for getting mortgage rates mortgage_result = tool.call_endpoint( route="mortgage_rates", payload={ "program": "Fixed30Year", "state": "US", "refinance": "false", "loanType": "Conventional", "loanAmount": "Conforming", "loanToValue": "Normal", "creditScore": "Low", "duration": "30" } ) logger.debug("Mortgage Rates Result: %s", mortgage_result)