# Propertyware rental monitor: inventory changes and leads (`getascraper/propertyware-rentals-monitor`) Actor

Collect anonymous public Propertyware rentals with source-aware rent, bedroom, bathroom, amenity, contact, and availability filters. Export factual listing records, public lead paths, rent signals, and new or changed inventory for recurring workflows at $0.00088 per result.

- **URL**: https://apify.com/getascraper/propertyware-rentals-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.66 / 1,000 rental listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 🏘️ Propertyware rental monitor: inventory changes and leads

<table width="100%"><tr><td style="background:#EAF2F8;border:1px solid #2F80ED;padding:18px;color:#172B4D"><strong style="color:#172B4D">See rental inventory changes before your next report is due.</strong><br><span style="color:#172B4D">Collect current public Propertyware rentals, apply source-aware filters, and keep factual rent, availability, and lead signals in one dataset.</span></td></tr></table>

<table width="100%"><tr><td style="background:#FFFFFF;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">🔎 Source-aware filters</strong><br><span style="color:#172B4D">Use only options a property manager publicly offers.</span></td><td style="background:#FFFFFF;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">📈 Useful signals</strong><br><span style="color:#172B4D">Compare rent per square foot and availability timing.</span></td><td style="background:#FFFFFF;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">🔄 Reliable changes</strong><br><span style="color:#172B4D">Separate new, changed, unchanged, and removed listings.</span></td><td style="background:#FFFFFF;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">☎️ Public lead paths</strong><br><span style="color:#172B4D">Keep only contacts and links shown publicly.</span></td></tr></table>

### 🔍 What does it do?

Propertyware rentals monitor collects anonymous public rental listings from Propertyware tenant pages. It is for teams that need a current inventory view and a dependable record of what changed between complete runs.

It checks what each source publicly supports before filtering. If a requested amenity, property type, or leasing contact is unavailable, that source returns no rows with a clear warning. Your filter is never silently weakened.

### 👥 Who is it for?

- Rental acquisitions teams that want fresh openings and public leasing routes.
- Market analysts who need rent changes and upcoming availability across selected managers.
- Operations teams that need a recurring rental snapshot with dependable change labels.

### ✨ What you get

- Current listings with address, rent, beds, baths, area, availability, and public links when exposed.
- Factual new, changed, unchanged, and removed labels.
- Rent per square foot and days-until-available signals when source values support them.
- Public-contact readiness and real contact channels when a source exposes them.
- Source capabilities and a run summary for transparent filtering.

### ⚙️ How it works

<table width="100%"><tr><td style="background:#EAF2F8;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">1. Add public rental pages</strong><br><span style="color:#172B4D">Paste public Propertyware listing or detail URLs.</span></td><td style="background:#EAF2F8;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">2. Choose filters</strong><br><span style="color:#172B4D">Set rental, availability, and public lead requirements.</span></td><td style="background:#EAF2F8;border:1px solid #2F80ED;padding:12px;color:#172B4D"><strong style="color:#172B4D">3. Monitor the dataset</strong><br><span style="color:#172B4D">Run again to see factual inventory and price movement.</span></td></tr></table>

### 🧰 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Public Propertyware rental pages | array of URLs | Yes | Public Propertyware listing or detail pages. |
| Address search | text | No | Public address filter. |
| Rental, bedroom, bathroom, property type, amenity, leasing contact, and sort filters | mixed | No | Source-aware public listing filters. |
| Available on or before | date | No | Local normalized availability filter. |
| Public contact and application or showing requirements | boolean | No | Local lead-readiness filters. |
| Detail, image, and amenity enrichment | boolean | No | Adds related public detail values. |
| Maximum listings | integer | No | Current listing limit from 1 to 500. |
| Proxy configuration | object | No | Optional connection configuration. No proxy is used by default. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| listingKey | text | Stable source and listing identifier. |
| monthlyRent | number | Parsed public monthly rent when valid. |
| availabilityDate | date | Normalized public availability date when safely parsed. |
| rentPerSquareFoot | number | Monthly rent divided by positive public area. |
| publicContactChannels | array | Public phone, email, application, or showing channels present. |
| changeType | text | New, changed, unchanged, or removed. |
| changedFields | array | Factual fields that changed since the last complete snapshot. |

### 🛡️ Public data and fair-use boundary

This Actor only uses anonymous public Propertyware rental pages. It does not accept credentials, access resident or manager portals, or use private data.

Free usage is protected by a 25-item cap, three runs per day, and a 30-minute cooldown. Development, tests, the owner account, and eligible paid runs are exempt.

### ❓ FAQ

#### Does it work with a Propertyware login?

No. Use public Propertyware rental pages only.

#### Why did a source return no rows?

The source may not support a requested option. Check SOURCE\_CAPABILITIES and RUN\_SUMMARY for the exact warning.

#### When is a listing marked removed?

Only after a complete source traversal. Capped, failed, and partial runs never infer removals.

#### Can I use it for recurring monitoring?

Yes. Current listings always emit with factual change metadata on later complete runs.

### ⭐ Enjoying Propertyware rentals monitor?

<table width="100%" style="display:table;width:100%"><tr><td style="background:#EAF2F8;border:1px solid #2F80ED;padding:14px;color:#172B4D"><strong style="color:#172B4D">Your feedback helps make public rental monitoring more useful.</strong><br><span style="color:#172B4D">Run the Actor, review the results, and share a rating when Apify invites you.</span></td></tr></table>

### 🔗 Other actors

- [AppFolio Scraper: rental listings and property manager data](https://apify.com/getascraper/appfolio-scraper) ↗: Collect public rental listings and manager information.
- [Building Permit Lead Monitor](https://apify.com/getascraper/building-permit-lead-monitor) ↗: Monitor public building permits for early lead signals.
- [Landflip Scraper: US Land Listings & Broker Leads](https://apify.com/getascraper/landflip-scraper) ↗: Collect public land listings and broker leads.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/propertyware-rentals-monitor/changelog.md

# Actor input Schema

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

Public \*.propertyware.com listing or detail URLs. Unsupported hosts are rejected before requests.

## `addressQuery` (type: `string`):

Narrows results with the source's public address search.

## `minMonthlyRent` (type: `integer`):

Requests listings at or above this public monthly rent.

## `maxMonthlyRent` (type: `integer`):

Requests listings at or below this public monthly rent. Zero means no upper bound.

## `minBedrooms` (type: `number`):

Requests listings with at least this many public bedrooms.

## `minBathrooms` (type: `number`):

Requests listings with at least this many public bathrooms.

## `propertyType` (type: `string`):

Matches an exact property type exposed by each source.

## `amenities` (type: `array`):

Sends each selected amenity as a native filter. Unsupported options produce a warning and no rows for that source.

## `leasingContacts` (type: `array`):

Matches public leasing-contact names and resolves them to each source's public ID.

## `sortBy` (type: `string`):

Chooses the public Propertyware ordering for retrieved listings.

## `availableOnOrBefore` (type: `string`):

Keeps normalized listings available by this calendar date. Leave empty to disable this local filter.

## `requirePublicContact` (type: `boolean`):

Keeps only listings with a real public phone or email.

## `requireApplyOrShowingUrl` (type: `boolean`):

Keeps only listings with a real public application or showing path.

## `outputMode` (type: `string`):

Always emits current listings and factual change metadata across complete runs.

## `proxyConfiguration` (type: `object`):

Optional connection settings. No proxy is used by default, and residential proxy use remains opt-in.

## `includeDetails` (type: `boolean`):

Fetches related public detail fields such as descriptions, links, and contacts.

## `includeFullImages` (type: `boolean`):

Retains all public image URLs found on related detail records.

## `includeAmenities` (type: `boolean`):

Retains public amenity values found on related detail records.

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

Limits current listings emitted per run. Removed records are not counted.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://rentalmaintenance.propertyware.com/rentals.html"
    }
  ],
  "addressQuery": "",
  "minMonthlyRent": 0,
  "maxMonthlyRent": 0,
  "minBedrooms": 0,
  "minBathrooms": 0,
  "propertyType": "",
  "amenities": [],
  "leasingContacts": [],
  "sortBy": "rentDescending",
  "availableOnOrBefore": "",
  "requirePublicContact": false,
  "requireApplyOrShowingUrl": false,
  "outputMode": "snapshotAndChanges",
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "includeDetails": false,
  "includeFullImages": false,
  "includeAmenities": false,
  "maxItems": 20
}
```

# Actor output Schema

## `currentRentals` (type: `string`):

No description

## `sourceCapabilities` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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": [
        {
            "url": "https://rentalmaintenance.propertyware.com/rentals.html"
        }
    ],
    "addressQuery": "",
    "minMonthlyRent": 0,
    "maxMonthlyRent": 0,
    "minBedrooms": 0,
    "minBathrooms": 0,
    "propertyType": "",
    "amenities": [],
    "leasingContacts": [],
    "sortBy": "rentDescending",
    "availableOnOrBefore": "",
    "requirePublicContact": false,
    "requireApplyOrShowingUrl": false,
    "outputMode": "snapshotAndChanges",
    "proxyConfiguration": {
        "useApifyProxy": false
    },
    "includeDetails": false,
    "includeFullImages": false,
    "includeAmenities": false,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/propertyware-rentals-monitor").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": [{ "url": "https://rentalmaintenance.propertyware.com/rentals.html" }],
    "addressQuery": "",
    "minMonthlyRent": 0,
    "maxMonthlyRent": 0,
    "minBedrooms": 0,
    "minBathrooms": 0,
    "propertyType": "",
    "amenities": [],
    "leasingContacts": [],
    "sortBy": "rentDescending",
    "availableOnOrBefore": "",
    "requirePublicContact": False,
    "requireApplyOrShowingUrl": False,
    "outputMode": "snapshotAndChanges",
    "proxyConfiguration": { "useApifyProxy": False },
    "includeDetails": False,
    "includeFullImages": False,
    "includeAmenities": False,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/propertyware-rentals-monitor").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": [
    {
      "url": "https://rentalmaintenance.propertyware.com/rentals.html"
    }
  ],
  "addressQuery": "",
  "minMonthlyRent": 0,
  "maxMonthlyRent": 0,
  "minBedrooms": 0,
  "minBathrooms": 0,
  "propertyType": "",
  "amenities": [],
  "leasingContacts": [],
  "sortBy": "rentDescending",
  "availableOnOrBefore": "",
  "requirePublicContact": false,
  "requireApplyOrShowingUrl": false,
  "outputMode": "snapshotAndChanges",
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "includeDetails": false,
  "includeFullImages": false,
  "includeAmenities": false,
  "maxItems": 20
}' |
apify call getascraper/propertyware-rentals-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/propertyware-rentals-monitor"
        }
    }
}
```

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/qC9SgThKDt6IX0dpN/builds/cgu057X4NgU2lSNgX/openapi.json
