# Zillow Property Managers/Owners Scraper · Emails (`memo23/apify-zillow-property-managers-cheerio`) Actor

Effortlessly gather detailed insights on Zillow property managers – streamline your data collection and make informed decisions.

- **URL**: https://apify.com/memo23/apify-zillow-property-managers-cheerio.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Real estate, Automation
- **Stats:** 107 total users, 4 monthly users, 100.0% runs succeeded, 5 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Zillow Property Managers Scraper

### How it works

This actor scrapes property-management professionals from Zillow.com — the property management companies, teams, and managers listed in Zillow's professional directory — and extracts details such as name, business name, phone numbers, email, reviews, business address, and specialties. It's built to help you gather property-manager leads for outreach, property research, or performance analysis.

#### About the data source

Zillow lists property managers inside its unified professional directory, under the **Property Management** specialty. This actor targets that specialty automatically, so every result is a professional who provides property-management services in the location you choose. You still search by location exactly as before — just paste a Zillow professionals URL or a city/ZIP and the actor handles the rest.

### Features

Multiple Search Queries: Supports scraping based on multiple start URLs (just copy and paste the link/url from Zillow.com site). Any of these work — pick whichever is easiest:

- A Zillow property-manager location URL (still supported — the actor maps it to the property-management directory for you):
  - `https://www.zillow.com/professionals/property-manager-reviews/los-angeles-ca/`
  - `https://www.zillow.com/professionals/property-manager-reviews/90045/`
- A location-scoped professionals URL:
  - `https://www.zillow.com/professionals/real-estate-agent-reviews/los-angeles-ca/?specialties=property-management`

Both a `city-state` slug (e.g. `los-angeles-ca`) and a 5-digit ZIP (e.g. `90045`) are accepted.

### How to Use

1. **Set Up**: Ensure you have an Apify account and access to the Apify platform.
2. **Configure Proxy Settings**: (Optional) For enhanced reliability, configure proxy settings, as Zillow employs anti-scraping measures. `RESIDENTIAL` proxy is recommended.
3. **Provide Start URLs**: Paste a Zillow professionals URL for your target location (a property-manager or professionals directory page). Existing saved URLs keep working — no change needed.
4. **Run the Scraper**: Execute the scraper and obtain the extracted data in your preferred format, such as JSON, CSV, Excel, or others as supported by Apify.

### Input Data

Here's an example of how to set up a search for property managers:

```json
{
    "startUrls": [
        {
            "url": "https://www.zillow.com/professionals/property-manager-reviews/los-angeles-ca/"
        }
    ],
    "maxItems": 250,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
}
```

### Input Options

- **Start URLs** (`startUrls`): URLs of property manager listings to start scraping from. This is an array of strings, where each string is a Zillow URL.
- **Max Items** (`maxItems`): Maximum number of listings/items that will be scraped. Default is `250`.
- **Max Concurrency** (`maxConcurrency`): Maximum number of pages that can be processed at the same time. Default is `50`.
- **Min Concurrency** (`minConcurrency`): Minimum number of pages that will be processed at the same time. Default is `1`.
- **Max Request Retries** (`maxRequestRetries`): Number of times the scraper will retry a failed request before giving up. Default is `100`.
- **Proxy Configuration** (`proxy`): Specifies proxy servers that will be used by the scraper to hide its origin, ensuring greater reliability and anonymity. For more details, see the [Proxy configuration](https://apify.com/apify/web-scraper#proxy-configuration).

### Output Structure

The output data typically includes:

```json
{
  "url": "https://www.zillow.com/profile/DebbieSherm",
  "encodedZuid": "X1-ZU10c3rhh7c6kg9_55f21",
  "screenName": "DebbieSherm",
  "inCanada": false,
  "name": "Debbie Sherman",
  "flag": 39802734,
  "profileTypeIds": [
    1,
    20
  ],
  "profileTypes": [
    "consumer",
    "propertyManager"
  ],
  "sidebarVideoUrl": null,
  "businessAddress": {
    "address1": "3634 E. 4th Street",
    "address2": null,
    "city": "Long Beach",
    "state": "CA",
    "postalCode": "90813"
  },
  "businessName": "Long Beach Investments",
  "isTopAgent": false,
  "ratings": {
    "count": 3,
    "average": 4.2
  },
  "phoneNumbers": {
    "cell": null,
    "brokerage": null,
    "business": "(562) 987-2004"
  },
  "email": "debsherman05@gmail.com",
  "professional": {
    "businessName": "Long Beach Investments",
    "encodedZuid": "X1-ZU10c3rhh7c6kg9_55f21",
    "fullName": "Debbie Sherman",
    "location": "Long Beach, CA",
    "phoneNumber": "(562) 987-2004",
    "profileLink": "/profile/DebbieSherm",
    "profilePhotoSrc": "https://www.zillowstatic.com/static/images/nophoto_h_g.png",
    "reviewLink": "/profile/DebbieSherm#reviews",
    "numTotalReviews": 3,
    "reviewStarsRating": 4.2,
    "isTeamLead": false,
    "isTopAgent": false
  },
  "getToKnowMe": {
    "specialties": [
      "Property Management",
      "Landlord"
    ],
    "languages": []
  },
  "forRentListings": {
    "listings": [],
    "listing_count": 0
  },
  "professionalInformation": [
    {
      "term": "Address",
      "lines": [
        "Long Beach Investments",
        "3634 E. 4th Street",
        "Long Beach, CA 90813"
      ]
    },
    {
      "term": "Office",
      "description": "(562) 987-2004"
    },
    {
      "term": "Screenname",
      "description": "DebbieSherm"
    },
    {
      "term": "Member since",
      "description": "03/02/2015"
    }
  ],
  "reviewsData": {
    "reviews": [
      {
        "reviewComment": "My roommate and I have lived here for a few years and we can't seem to move. Both our salaries have gone up and we can afford to upgrade, but every time we think we are going to move we change our minds, well, simply because we love our home! Besides having a darling apartment, the staff (both office and maintenance) are a pleasure to deal with. The people at the office are super friendly and they know us by name. And they give us homemade cookies and chocolate when we bring our rent into the office!! The maintenance guys are warm and welcoming and are quick to respond when we have something that needs to be fixed. The gardener keeps the grounds looking immaculate! . Long Beach Investments is a great place to rent from and I would highly recommend it!",
        "reviewId": 5302027,
        "subRatings": [
          {
            "description": "Responsiveness",
            "score": 5
          },
          {
            "description": "Price",
            "score": 5
          },
          {
            "description": "Work quality",
            "score": 5
          },
          {
            "description": "Punctuality",
            "score": 4
          }
        ],
        "reviewee": {
          "screenName": "DebbieSherm",
          "firstName": "Debbie",
          "lastName": "Sherman",
          "encodedZuid": "X1-ZU10c3rhh7c6kg9_55f21"
        },
        "reviewer": {
          "screenName": "Katherine90802",
          "firstName": "Karen",
          "lastName": "Ann Stachowitz",
          "encodedZuid": "X1-ZU119rhwc1qinex_29gz3"
        },
        "rating": 5,
        "createDate": "2019-09-20T12:15:00",
        "workDescription": "Helped me rent a Apartment home in Hellman, Long beach, CA."
      }
    ]
  },
  "teamDisplayInformation": {}
}
```

### Output Fields Explanation

- `url`: URL to the property manager's Zillow profile.
- `encodedZuid`: Encoded identifier for the property manager.
- `screenName`: Display name of the property manager on Zillow.
- `inCanada`: Boolean indicating if the property manager is based in Canada.
- `name`: Full name of the property manager.
- `flag`: Internal flag identifier for the property manager.
- `profileTypeIds`: Array of IDs representing the types of profiles (e.g., consumer, property_manager).
- `profileTypes`: Array of profile types (e.g., "consumer", "propertyManager").
- `sidebarVideoUrl`: URL of the sidebar video, if available.
- `businessAddress`: Object containing the business address details, including `address1`, `city`, `state`, and `postalCode`.
- `businessName`: Name of the property management business.
- `isTopAgent`: Boolean indicating if the property manager is a top agent.
- `ratings`: Object containing the total `count` of ratings and the `average` rating score.
- `phoneNumbers`: Object containing contact numbers for the property manager, including `cell`, `brokerage`, and `business`.
- `email`: Email address of the property manager.
- `professional`: Object containing detailed professional information, including `businessName`, `encodedZuid`, `fullName`, `location`, `phoneNumber`, `profileLink`, `profilePhotoSrc`, `reviewLink`, `numTotalReviews`, and `reviewStarsRating`.
- `getToKnowMe`: Object containing specialties and languages of the property manager.
- `forRentListings`: Object containing listings currently for rent by the property manager, including details such as `zpid`, `home_type`, `address`, `bedrooms`, `bathrooms`, `price`, `latitude`, and `longitude`.
- `professionalInformation`: Array containing detailed professional information about the property manager, such as office address, phone number, and membership information.
- `reviewsData`: Object containing reviews information, including individual reviews (`reviewComment`, `reviewId`, `rating`, `createDate`, and `workDescription`), and sub-ratings (`description` and `score`).
- `teamDisplayInformation`: Object containing information about the property manager's team, if applicable.

### Explore More Scrapers

If you found this Zillow Property Managers Scraper useful, be sure to check out our other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

👉 Especially our **[Zillow Agents Scraper — Cell, Email & 1.2M+ Database](https://apify.com/memo23/zillow-agents-leads-scraper-ppe)** — every US real-estate agent with a direct cell phone + email, served instantly from a 440,000+ database.

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/xksvTp8D2Xtz4AXy3/issues) section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>
- Email: muhamed.didovic@gmail.com

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/apify-zillow-property-managers-cheerio`).

**Purpose:** Collect property-management professionals from Zillow's professional directory — name, business, phones, email, address, ratings, reviews, and specialties — by US location.

**Minimal input:**

```json
{
  "dbState": "FL",
  "maxItems": 25
}
```

**Output:** one row per property manager — url, encodedZuid, screenName, name, businessName, businessAddress {address1, city, state, postalCode}, email, phoneNumbers {cell, brokerage, business}, ratings {count, average}, profileTypes, professional {fullName, location, phoneNumber, numTotalReviews, reviewStarsRating, isTeamLead, isTopAgent}, getToKnowMe {specialties, languages}, forRentListings, professionalInformation, reviewsData {reviews \[{reviewComment, rating, createDate, subRatings, reviewer}]}, teamDisplayInformation.

**Behaviors an agent should know:**

- Two modes. Instant Database: set `dbState` (2-letter US state, e.g. FL) for pre-collected, instant results that need no proxy; optionally narrow with `dbCity`, `dbCompany`, `dbHasCell`, `dbHasEmail`. Live scraping: leave `dbState` empty and put Zillow professionals URLs in `startUrls` (e.g. `.../property-manager-reviews/los-angeles-ca/` or a 5-digit ZIP).
- Billing is per result, so bound cost with `maxItems` and/or the run's "Maximum cost per run" limit (the default `maxItems` is 100000 to pull a whole state).
- `dbFullDetail` (default true) returns the complete record; set false for a flat contact list (name, company, email, phones, city).
- `enrichEmails` (default false) is opt-in and adds contactEmail + contactWebsite per manager, billed only per email found.
- `flattenOutput` (default false) flattens nested objects into dot-notation keys for CSV/Zapier exports.
- Pay-per-event billing (per result) — see the Pricing tab on the actor page.

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zillow Group, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Zillow professional-directory pages — no authenticated endpoints, paid features, or content behind the zillow.com login wall. Users are responsible for ensuring their use complies with zillow.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

### SEO Keywords

zillow scraper, scrape zillow, zillow property manager scraper, zillow professionals scraper, zillow api, Apify zillow, property management leads, property manager email scraper, real estate lead generation, property manager directory, zillow reviews scraper, rental management data, landlord leads, property manager phone numbers, us property managers data, property management contacts, zillow leads export, real estate outreach data, property manager database, real estate agent scraper

# Actor input Schema

## `dbState` (type: `string`):

The US state to pull property managers for — e.g. FL, TX. Setting this alone delivers instant database results.

## `dbCity` (type: `string`):

Narrow the results to a single city (case-insensitive). Leave empty to return the whole state.

## `dbCompany` (type: `string`):

Only return property managers whose company name contains this text (case-insensitive).

## `dbHasCell` (type: `boolean`):

Return only property managers that have a direct cell phone number on file.

## `dbHasEmail` (type: `boolean`):

Return only property managers that have an email address on file.

## `dbFullDetail` (type: `boolean`):

On by default: Instant Database returns the COMPLETE record — every field a live scrape produces (bio, specialties, websites, rental listings, reviews and more), not just the contact summary. Turn this OFF for a compact, flat contact list (name, company, email, phones, city) that's tidier to open as a CSV.

## `startUrls` (type: `array`):

Zillow professionals URLs to scrape, one per location. A property-manager location URL (e.g. .../property-manager-reviews/los-angeles-ca/ or .../90045/) works and is mapped to Zillow's property-management directory for you; existing saved URLs keep working unchanged.

## `flattenOutput` (type: `boolean`):

Flatten nested objects (e.g. address.address1, address.city) into top-level dot-notation keys. Useful for spreadsheet exports and Zapier integrations. Arrays are left as-is.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each property manager by reading its own website's contact/about pages (e.g. leasing@, info@). Adds contactEmail and contactWebsite columns plus a detailed emailEnrichment object. Best-effort, billed per contact email found; only charged when an email is returned, never for misses.

## `maxItems` (type: `integer`):

Maximum records to return. The default is high so a whole state comes back in full from the Instant Database. Your actual spend is still bounded by the run's "Maximum cost per run" limit — you are billed per result, so set that limit to control cost. Lower this only if you want fewer results.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up. Internally clamped to 10 so a hard-blocked URL fails fast instead of stalling the whole run.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in US residential proxy at no extra cost to you, and Instant Database pulls need no proxy at all. Only set this if you want to use your own proxies.<br><br>Heads-up: selecting Apify's RESIDENTIAL group here will make the run fail before it starts unless your account has that add-on enabled.

## `maxUnblockerRequests` (type: `integer`):

Per-run cap on paid PerimeterX-bypass (scrape.do) calls after the free proxy lanes fail. Paying users only. 0 disables.

## Actor input object example

```json
{
  "dbHasCell": false,
  "dbHasEmail": false,
  "dbFullDetail": true,
  "startUrls": [
    "https://www.zillow.com/professionals/property-manager-reviews/los-angeles-ca/"
  ],
  "flattenOutput": false,
  "enrichEmails": false,
  "maxItems": 100000,
  "maxConcurrency": 200,
  "minConcurrency": 1,
  "maxRequestRetries": 8,
  "maxUnblockerRequests": 60
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.zillow.com/professionals/property-manager-reviews/los-angeles-ca/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/apify-zillow-property-managers-cheerio").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.zillow.com/professionals/property-manager-reviews/los-angeles-ca/"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/apify-zillow-property-managers-cheerio").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.zillow.com/professionals/property-manager-reviews/los-angeles-ca/"
  ]
}' |
apify call memo23/apify-zillow-property-managers-cheerio --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/apify-zillow-property-managers-cheerio"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xksvTp8D2Xtz4AXy3/builds/sHIu7NvkJ1uCbAgvM/openapi.json
