{"id":16154,"library":"node-zillow","title":"Zillow API Wrapper for Node.js","description":"The `node-zillow` package provides a straightforward Node.js wrapper for the Zillow API, abstracting away the complexities of HTTP requests and XML parsing to return data via promises. Its current stable version is 2.0.0, released in 2018, indicating an infrequent release cadence focused on stability rather than rapid feature additions. The library consolidates all Zillow API interactions through a single `get` method, taking the API call name and parameters, offering a consistent interface. It relies on a Zillow Web Service ID (ZWSID) for authentication. Developers must refer to the official Zillow API documentation for available endpoints and parameters, as this library primarily acts as a thin client. Key features include promise-based asynchronous operations (using the `Q` library) and handling various Zillow API endpoints like `GetZestimate` or `GetDeepSearchResults`. The library does not handle Zillow's API terms of use or branding requirements, which developers are explicitly reminded to follow.","status":"abandoned","version":"2.0.0","language":"javascript","source_language":"en","source_url":"https://github.com/ralucas/node-zillow","tags":["javascript","zillow","node"],"install":[{"cmd":"npm install node-zillow","lang":"bash","label":"npm"},{"cmd":"yarn add node-zillow","lang":"bash","label":"yarn"},{"cmd":"pnpm add node-zillow","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Used internally for promise implementation.","package":"q","optional":false}],"imports":[{"note":"The library exports the Zillow constructor as a CommonJS module. For ESM, it should be imported as a default export.","wrong":"import { Zillow } from 'node-zillow';","symbol":"Zillow","correct":"const Zillow = require('node-zillow');"},{"note":"The `Zillow` object must be instantiated using the `new` keyword, as it is a class constructor.","wrong":"const zillow = Zillow(process.env.ZWSID);","symbol":"new Zillow()","correct":"const zillow = new Zillow(process.env.ZWSID);"},{"note":"The `get` method is an instance method and must be called on an instantiated `Zillow` object, not directly on the `Zillow` class.","wrong":"Zillow.get('GetSearchResults', parameters);","symbol":"get","correct":"zillow.get('GetSearchResults', parameters);"}],"quickstart":{"code":"const Zillow = require('node-zillow');\n\n// It's highly recommended to use environment variables for sensitive IDs.\n// For demonstration, use a placeholder or actual ID if safe.\nconst zwsid = process.env.ZWSID ?? 'YOUR_ZWSID_HERE'; // Replace with a valid ZWSID for actual use\n\nif (!zwsid || zwsid === 'YOUR_ZWSID_HERE') {\n    console.error('Error: ZWSID not provided. Please set ZWSID environment variable or replace placeholder.');\n    process.exit(1);\n}\n\n// Instantiate the Zillow client, explicitly enabling HTTPS for secure communication.\nconst zillow = new Zillow(zwsid, { https: true });\n\n// Define parameters for the Zillow API call. Example for GetZestimate.\nconst parameters = {\n    zpid: 1111111 // Example Zillow Property ID\n};\n\nconsole.log(`Attempting to get Zestimate for ZPID: ${parameters.zpid}`);\n\nzillow.get('GetZestimate', parameters)\n    .then(function(results) {\n        // Zillow API responses can vary; 'response' property might not always be present.\n        if (results && results.response) {\n            console.log('Successfully retrieved Zestimate:');\n            console.log(JSON.stringify(results.response, null, 2));\n        } else if (results && results.message) {\n            console.error('Zillow API Message:', JSON.stringify(results.message, null, 2));\n        } else {\n            console.error('Unexpected Zillow API response structure:', JSON.stringify(results, null, 2));\n        }\n    })\n    .catch(function(error) {\n        console.error('An error occurred during Zillow API call:', error.message);\n        if (error.response && error.response.data) {\n            console.error('Detailed error response:', error.response.data);\n        }\n    });","lang":"javascript","description":"Demonstrates how to instantiate the Zillow client and make a call to the `GetZestimate` API endpoint using a Zillow Web Service ID (ZWSID), including error handling."},"warnings":[{"fix":"Refactor all API calls to use the `zillowInstance.get(\"MethodName\", parameters)` pattern.","message":"Version 1.0.0 removed all direct API method wrappers (e.g., `Zillow.getDeepSearchResults()`) in favor of a single, unified `get` method for all Zillow API calls.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Ensure your Node.js environment is a modern LTS version (v6.x or newer is generally recommended for packages from this era, though Node.js v0.12.x was likely the minimum target for v2.0.0).","message":"Version 2.0.0 dropped explicit support for Node.js v0.10.x and updated internal dependencies. Running this package in very old Node.js environments may lead to compatibility issues.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Implement conditional checks before accessing the `response` property, e.g., `if (results && results.response) { /* use response */ }`.","message":"The Zillow API's response object might not always include the `response` property, even for successful calls depending on the specific endpoint and data availability. Always check for its existence.","severity":"gotcha","affected_versions":"*"},{"fix":"Always explicitly set `{ https: true }` in the options object when instantiating the Zillow client to ensure secure communication: `new Zillow(zwsid, { https: true })`.","message":"The `https` option for API requests defaults to `false` if not explicitly set during instantiation (`new Zillow(zwsid, options)`). This means API requests could be made over insecure HTTP, exposing your ZWSID and potentially sensitive data.","severity":"gotcha","affected_versions":"<=2.0.0"},{"fix":"Thoroughly review and adhere to the official Zillow API documentation for terms of use and branding requirements before deploying any application.","message":"Usage of the Zillow API via this wrapper is subject to Zillow's API Terms of Use and Branding Requirements. Failure to comply can result in API key revocation or legal action.","severity":"gotcha","affected_versions":"*"},{"fix":"No direct fix is required, but be aware of this implementation detail. If mixing with modern `async/await` or other promise libraries, consider converting 'Q' promises to native promises if issues arise, e.g., `Promise.resolve(qPromise)`.","message":"The library internally uses the 'Q' promise library. While this doesn't directly affect the consumer if using standard promise `.then()` and `.catch()`, 'Q' is generally considered a legacy promise implementation superseded by native Promises in modern Node.js environments. This might affect advanced promise interop.","severity":"deprecated","affected_versions":"*"}],"env_vars":null,"last_verified":"2026-04-21T00:00:00.000Z","next_check":"2026-07-20T00:00:00.000Z","problems":[{"fix":"Provide your Zillow Web Service ID during instantiation: `new Zillow('YOUR_ZWSID', options)` or ensure `process.env.ZWSID` is correctly set.","cause":"The Zillow client was instantiated without a valid Zillow Web Service ID (ZWSID) or an empty string was passed.","error":"Error: ZWSID not provided"},{"fix":"Instantiate the `Zillow` class using `new`: `const zillow = new Zillow(zwsid);`","cause":"Attempted to call `Zillow` as a function without the `new` keyword after requiring it.","error":"TypeError: Zillow is not a constructor"},{"fix":"Verify your ZWSID on the Zillow developer portal. Ensure it is active, correctly entered, and authorized for the API calls you are making. Check your daily API usage limits.","cause":"The Zillow Web Service ID provided is either incorrect, revoked, has not been approved for the specific API endpoint, or has reached its daily request limit.","error":"Zillow API Error: 5003 - Invalid ZWSID"},{"fix":"Always check for the existence of the `response` property before attempting to access it, as it's not guaranteed in all Zillow API responses: `if (results && results.response) { /* process response */ }`.","cause":"The Zillow API call returned a result object that did not contain the expected `response` property, leading to an attempt to access `undefined.response`.","error":"TypeError: Cannot read properties of undefined (reading 'response')"}],"ecosystem":"npm"}