# Apartments.com Scraper - Rentals, Floor Plans, Fees & Reviews (`topapi/apartments-com-scraper`) Actor

Scrape Apartments.com rentals by city, ZIP, neighborhood, address or search URL: rent by bed type, phone, address, coordinates, plus floor plans, available units with prices and dates, fees, pet policy, amenities, reviews and schools. US + Canada. Monitor mode. $0.89 per 1,000 properties.

- **URL**: https://apify.com/topapi/apartments-com-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** Real estate, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.89 / 1,000 properties

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

### What does Apartments.com Scraper do?

**Apartments.com Scraper** extracts rental listings from [Apartments.com](https://www.apartments.com) and turns a city, ZIP code, neighborhood, address, search link or property link into structured rows: one property per row with its rent by bed type, address, coordinates and leasing phone. Turn on **Property details** and each row also carries the floor plans, every available unit with its price and move-in date, the fees, pet policy, parking, amenities, schools and office hours. Built for rental market analysts, property managers, relocation teams and proptech developers who need current rent data without copying listings by hand.

Apartments.com scraper · Apartments.com API · rental listings scraper · rent data extractor

<a href="https://console.apify.com/actors/AjSf4Uc1V68IlV7tU"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/apartments-com-scraper-source.png" alt="Apartments.com search results page that Apartments.com Scraper turns into rows" style="width:70%"></a>

- **Every search, in your words:** a city ("Austin, TX"), a ZIP ("78704"), a neighborhood ("Capitol Hill, Seattle"), a university, an address, or any Apartments.com search link with its filters
- **Rent the way renters see it:** starting rent per bed type, the total monthly price with required fees when the site shows it, and the base rent next to it
- **Property details in the same row:** floor plans, available units with unit number, price, size and move-in date, fees, pet policy, parking, amenities, schools, office hours, year built
- **Reviews, photos, interior amenities and walk scores** at no extra charge once details are on
- **Past the 700-property cap:** one Apartments.com search lists at most 700 properties; rent bands read the rest
- **US and Canada**, rents in USD or CAD
- **Monitor mode:** only new properties and the ones whose rent, specials or available units changed since your last run
- **No login, cookies or API key.** Export JSON, CSV or Excel, or connect it to Make, Zapier, n8n, Google Sheets, an API client or an AI agent

### What data can you get from Apartments.com?

<table>
<tr><td>🏢 Property name and link (<code>propertyName</code>, <code>url</code>)</td><td>📍 Full address, city, state, ZIP, county, neighborhood</td><td>🧭 Latitude and longitude</td></tr>
<tr><td>💲 Rent range and rent per bed type (<code>rentByBedType</code>)</td><td>🧾 Total monthly price and base rent</td><td>🛏️ Beds, baths and square feet</td></tr>
<tr><td>☎️ Leasing phone and property website</td><td>🏷️ Management company and logo</td><td>🎁 Move-in specials with end date</td></tr>
<tr><td>📐 Floor plans (<code>models</code>)</td><td>🚪 Available units with price and date (<code>units</code>)</td><td>💵 Every published fee (<code>fees</code>)</td></tr>
<tr><td>🐾 Pet policy and pet fees</td><td>🚗 Parking types and fees</td><td>✨ Community and interior amenities</td></tr>
<tr><td>🏫 Assigned and nearby schools with ratings</td><td>🕘 Office hours and languages</td><td>🏗️ Year built, units, stories</td></tr>
<tr><td>⭐ Renter rating and review count</td><td>💬 Reviews with the property's response</td><td>📷 Photo gallery with captions</td></tr>
<tr><td>🚶 Walk, transit, drive, bike and sound scores</td><td>🚇 Nearby transit, airports and points of interest</td><td>🔁 Change type and previous rent (monitor mode)</td></tr>
</table>

On a 100-property test run in Denver with details on, 100% of rows had a phone, coordinates, rent, floor plans, office hours and schools; 98% a property website and a pet policy; 97% at least one available unit (2,997 units in total).

### How to scrape Apartments.com with Apartments.com Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up): $5 of monthly credit, no card needed.
2. Open [Apartments.com Scraper](https://apify.com/TopApi/apartments-com-scraper) and click **Try for free**.
3. Type a location into **Location** (or paste Apartments.com links) and set **Max properties**.
4. Add filters if you need them, and turn on **Property details** for floor plans, units and fees.
5. Click **Start**. Rows stream into the dataset as they are found.
6. Open the **Storage** tab and **Export** as JSON, CSV or Excel, or let a schedule run it for you.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | Use any combination; nothing given = a 20-property sample for Austin, TX |
| `search` | String | A city, ZIP, neighborhood, university, address or property name, e.g. `"Austin, TX"`, `"78704"`, `"Toronto, ON"` |
| `locations` | List | More locations, one per line; each gets the same filters |
| `startUrls` | List | Apartments.com search links (their filters are kept) or property links |
| `listingKeys` | List | The 7-character key at the end of a property URL, e.g. `303djxe` |
| `latitude`, `longitude`, `radiusMiles` | Number | Search a square around a point (radius default 2 miles) |
| **🎯 Filters** (applied by Apartments.com) | | |
| `minPrice`, `maxPrice` | Integer | Monthly rent range |
| `minBeds`, `maxBeds`, `minBaths` | Integer | 0 = studio |
| `minSqft`, `maxSqft` | Integer | Unit size |
| `propertyTypes` | Select | Apartments, houses, condos, townhomes |
| `petPolicy` | Select | Pet friendly, dog friendly, cat friendly, dogs and cats |
| `amenities` | Select | 33 of the site's amenity filters (washer & dryer, pool, parking, EV charging…) |
| `keywords` | String | Free text the site matches, e.g. `"rooftop pool"` |
| `minRating` | Select | 4+ or 5 stars |
| `lifestyle` | Select | Student, senior, military, corporate |
| `shortTerm`, `moveInDate` | Select / Date | Short-term lease length; available by a date |
| `listingOptions` | Select | New listings, for rent by owner, rooms for rent, online applications, 3D tour… |
| `hasMoveInSpecials`, `incomeRestricted` | Boolean | Specials only; income-restricted housing only |
| `sortBy` | Select | Best match, rent low/high, last updated, virtual tour, video |
| **✂️ Refine results** | | |
| `withPhoneOnly`, `withSpecialsOnly` | Boolean | Keep only rows with a phone / a special |
| `minReviewRating` | Number | Exact rating floor, e.g. 4.3 |
| `updatedWithinDays` | Integer | Only listings updated in the last N days |
| `excludeKeywords` | List | Skip names, addresses or descriptions containing these words |
| **➕ Extra data** | | |
| `includeDetails` | Boolean | The property record (floor plans, units, fees, pets, parking, amenities, schools, hours) - charged as **property-details** at $0.0009 per row that gets it |
| `includeReviews`, `maxReviewsPerProperty` | Boolean / Integer | Reviews with the property's response (needs details, free) |
| `includeVisuals`, `maxPhotos` | Boolean / Integer | Photo gallery (needs details, free) |
| `includeInteriorAmenities` | Boolean | Interior amenities per floor plan and unit (needs details, free) |
| `includeWalkScore` | Boolean | Walk, transit, drive, bike and sound scores, transit and nearby places (needs details, free) |
| **🔁 Monitoring** | | |
| `monitorMode`, `monitorStoreName`, `includeUnchanged` | Boolean / String | Only new and changed properties since the last run; pairs with a daily schedule |
| **📦 Output** | | |
| `maxItems` | Integer | Default `100`, prefill `20`; `0` = no limit |
| `maxResultsPerSearch` | Integer | Cap per location or link |
| `maximizeCoverage` | Boolean | Split searches above the site's 700-property cap into rent bands |
| `removeDuplicates`, `compact`, `includeRawData` | Boolean | One row per property; core fields only for AI agents; the raw property record |
| **⚙️ Advanced** | | |
| `maxConcurrency`, `proxyConfiguration` | Integer / Object | Parallel property reads (6); Apify proxy by default |

#### Input JSON

```json
{
  "search": "Denver, CO",
  "maxPrice": 2500,
  "minBeds": 1,
  "petPolicy": "dogs",
  "includeDetails": true,
  "includeReviews": true,
  "maxItems": 100
}
```

#### Put the place in Location and the rest in filters

Apartments.com reads the location box like its own search bar: `"78704"`, `"Capitol Hill, Seattle"` and `"University of Texas at Austin"` all resolve. An exact street address of a property returns that one property. Plain-English requests such as `"2 bedroom pet friendly austin under 2000"` also work, but the filter fields are exact, so prefer **Location:** `Austin, TX` + **Min bedrooms** `2` + **Max rent** `2000`.

#### Paste a search link to keep the site's own filters

Set the filters on apartments.com, copy the address bar (for example `https://www.apartments.com/houses/seattle-wa/2-bedrooms-under-3000/`) and paste it into **Apartments.com links**. Filters you also set in the form are added on top.

#### Turn on details only when you need units and fees

Search rows already carry name, address, coordinates, rent by bed type, beds, baths, phone, specials and amenity highlights. **Property details** reads each property's record (two extra requests per property): 100 properties took 92 seconds instead of 10.

### ⬆️ Output

Every property becomes one dataset item. Here is the table view of a run for `Denver, CO` with details on:

<a href="https://console.apify.com/actors/AjSf4Uc1V68IlV7tU"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/apartments-com-scraper-output.png" alt="Apartments.com Scraper output table with property, address, rent, beds, phone, units and rating" style="width:70%"></a>

The same row as JSON (shortened):

```json
{
  "id": "wglzxkk",
  "propertyName": "Gardens at Cherry Creek",
  "url": "https://www.apartments.com/gardens-at-cherry-creek-denver-co/wglzxkk/",
  "lastUpdated": "2026-10-20T20:56:51.173Z",
  "propertyType": "Apartment",
  "location": { "fullAddress": "225 S Harrison St, Denver, CO 80209", "county": "Denver", "neighborhood": "Cherry Creek" },
  "coordinates": { "latitude": 39.71253, "longitude": -104.94211 },
  "rating": 4.7,
  "reviewCount": 33,
  "rent": { "min": 1795, "max": 2995, "currency": "USD" },
  "rentByBedType": [{ "beds": "1 Bed", "price": "$1,910+", "priceMin": 1910, "isStartingAt": true }],
  "beds": "1 - 3 bd", "baths": "1 - 2 ba", "sqft": "611 - 1,375 sq ft",
  "contact": { "name": "The Connor Group", "phone": "(720) 881-0721", "website": "https://gardensatcherrycreek.com/?utm_source=apartments" },
  "yearBuilt": 2013, "unitCount": 191, "availableUnitCount": 17,
  "units": [{ "unitNumber": "B124", "modelName": "Sunflower", "beds": 1, "baths": 1, "sqft": 778, "rent": 1795, "availableDate": "2026-09-11" }],
  "fees": [{ "category": "One-time", "name": "Application", "value": "$28", "required": true }],
  "detailStatus": "ok"
}
```

#### Fields

Fill measured on two runs: 100 search rows (Chicago, details off) and 100 rows with details (Denver).

| Field | Type | What it is | Fill |
|---|---|---|---|
| `id`, `propertyName`, `url` | string | Listing key, name (the address for a house), page link | 100% |
| `location` | object | fullAddress, streetAddress, city, state, postalCode, county, neighborhood, countryCode | 100% (neighborhood 85%, county with details) |
| `coordinates` | object | latitude, longitude | 100% |
| `rent`, `rentText`, `rentByBedType` | object / string / array | Rent range, the text shown, starting rent per bed type | 99-100% |
| `baseRentByBedType`, `requiredMonthlyFees` | array / number | Base rent when the shown price includes fees | 67% (where the site shows total monthly price) |
| `beds`, `baths` (+ numeric min / max) | string | Bed and bath ranges | 100% |
| `contact` | object | name (management company), phone, phones, website, logo, languages | phone 100%; website 98% with details |
| `specials`, `hasSpecials` | object / boolean | Move-in special: title, description, end date | 42% of search rows |
| `amenityHighlights`, `photo`, `photoCount`, `has3DTour`, `hasVideo`, `tier`, `position` | mixed | What the search row shows | 83-100% |
| `lastUpdated`, `propertyType`, `rating`, `ratings`, `reviewCount` | mixed | From the property record | 100% with details |
| `description`, `leaseTerms`, `yearBuilt`, `unitCount`, `stories`, `sqft` | mixed | Property facts | 76-100% with details |
| `models` | array | Floor plans: name, beds, baths, sqft, rent range, total monthly price, available and total units | 100% with details |
| `units` | array | Available units: unit number, floor plan, beds, baths, sqft, rent, deposit, move-in date, lease terms | 97% with details |
| `fees`, `petPolicy`, `parking` | array | Every published fee; pets with their fees; parking types and fees | 99% / 98% / 79% with details |
| `amenities`, `uniqueFeatures` | object / array | Community and interior amenities, grouped as the site groups them | 97-100% with details |
| `schools`, `officeHours`, `managementCompany` | array / object | Schools with rating and district; hours per weekday; manager | 100% with details |
| `reviews`, `photos` | array | With the Reviews / Photos options | 100% of properties that have reviews (25 of 30); photos 30 of 30 |
| `scores`, `soundScore`, `transit`, `pointsOfInterest`, `faq` | mixed | With the scores option | sound score 30 of 30; walk/transit/drive/bike, transit, places, FAQ 18 of 30 (see Limits) |
| `detailStatus` | string | ok, not requested, not found, blocked, unreachable | 100% |
| `changeType`, `previousRent`, `rentDelta`, `rentDeltaPct`, `firstSeenAt` | mixed | Monitor mode only | - |

### How can I use Apartments.com data?

- 📊 **Rental market analysts:** track asking rents per bed type, specials and vacancy (available units) across cities and ZIP codes
- 🏢 **Property managers and owners:** benchmark your property's rent, fees and amenities against every competitor within a mile
- 🧳 **Relocation and corporate housing teams:** shortlist pet-friendly, furnished or short-term units with move-in dates and phones
- 🏦 **Investors and lenders:** feed unit-level rent rolls, year built and unit counts into underwriting models
- 🧑‍💻 **Proptech and listing apps:** keep a property database fresh with coordinates, floor plans and photos
- 🤖 **AI and research teams:** give an agent current rents with `compact` rows, or train models on descriptions and reviews
- 📈 **Everyone above:** run it daily in monitor mode and get only new listings and rent changes

### How much does it cost to scrape Apartments.com?

Apartments.com Scraper is pay-per-result with no start fee: **$0.89 per 1,000 properties**, plus **$0.90 per 1,000 properties that get Property details**. A property with details costs $0.00179. Rows that are filtered out, duplicates, unchanged monitor rows and listings that could not be read are not charged.

| Properties | Search rows | With Property details |
|---:|---:|---:|
| 10 | $0.0089 | $0.0179 |
| 100 | $0.089 | $0.179 |
| 1,000 | $0.89 | $1.79 |
| 10,000 | $8.90 | $17.90 |

There is nothing else to pay: Apify platform usage is included in these prices. A 100-property search took 10 seconds; 100 properties with details took 92 seconds on 256 MB.

### Integrations, API, scheduling & MCP

- **Schedules:** run Apartments.com Scraper daily or weekly from the **Schedules** tab; with **Monitor mode** each run returns only new properties and rent or specials changes.
- **Webhooks:** call a URL when a run finishes, to load the rows into your database or CRM.
- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable and Slack through [Apify integrations](https://docs.apify.com/integrations).
- **API:** start runs and read datasets from Node.js or Python with `apify-client`: code on the [API tab](https://apify.com/TopApi/apartments-com-scraper/api/python) and in the [Apify API reference](https://docs.apify.com/api/v2).
- **MCP / AI agents:** connect Claude, Cursor or any MCP client through the [MCP tab](https://apify.com/TopApi/apartments-com-scraper/api/mcp) and ask for rentals in plain language; `compact: true` keeps answers short.

### More real estate and local data scrapers

<table>
<tr>
<td>🏠 <a href="https://apify.com/TopApi/zillow-scraper">Zillow Scraper</a>: homes for sale and rent, Zestimate, price history</td>
<td>🏡 <a href="https://apify.com/TopApi/realtor-listings-scraper">Realtor.com Scraper</a>: listings, sold homes and rentals</td>
<td>📍 <a href="https://apify.com/TopApi/apple-maps-scraper">Apple Maps Scraper</a>: places, phones, hours, ratings</td>
</tr>
<tr>
<td>⭐ <a href="https://apify.com/TopApi/google-maps-reviews-scraper">Google Maps Reviews Scraper</a>: reviews of any property or business</td>
<td>🗺️ <a href="https://apify.com/TopApi/google-geocoding-scraper">Google Geocoding Scraper</a>: addresses to coordinates and back</td>
<td>🧭 <a href="https://apify.com/TopApi">All TopApi actors</a></td>
</tr>
</table>

### Limits & empty runs

- **700 properties per search:** Apartments.com lists at most 700 properties for one search (17 full pages and 20). Turn on **Go past 700 per search** to split a big city into rent bands, or add filters or nearby locations.
- **Speed:** a 100-property search took 10 seconds; 100 properties with details took 92 seconds (six read in parallel).
- **Scores:** walk, transit, drive and bike scores, transit and nearby places come from the property page, which Apartments.com protects more strictly than its data; on a 30-property test 18 rows got them, the other 12 show `walkScoreStatus`. Sound scores came back for 30 of 30.
- **Empty dataset:** the location was not recognised (the run summary says so), the filters match nothing, or monitor mode found nothing new. Nothing is charged for an empty run.
- **Not available:** owner or agent personal contact details and email addresses (the site does not publish them), and rents of units that are not listed as available.

### FAQ

#### How many properties can Apartments.com Scraper collect in one run?

One search returns up to 700 properties, the site's own cap. With **Go past 700 per search** the actor splits the search into rent bands and keeps going; list several locations to cover a metro area. **Max properties** caps the run.

#### Can I run Apartments.com Scraper on a schedule to track rent changes?

Yes. Save your input as a task, add a schedule, and turn on **Monitor mode**. Each run returns only new properties and the ones whose rent, specials or available units changed, with `changeType`, `previousRent` and the change in dollars and percent. Unchanged properties are not delivered and not charged.

#### Does Apartments.com Scraper return floor plans and available units?

Yes, with **Property details** on: every floor plan with its rent range and unit counts, and every available unit with unit number, size, rent, deposit and move-in date. On a 100-property Denver run that was 1,628 floor plans and 2,997 units.

#### Can I use Apartments.com Scraper with the Apify API?

Yes. Start runs, read the dataset and manage schedules through the API with `apify-client` for [Node.js](https://apify.com/TopApi/apartments-com-scraper/api/javascript) or [Python](https://apify.com/TopApi/apartments-com-scraper/api/python).

#### Can I use Apartments.com Scraper through an MCP server?

Yes. Open the [MCP tab](https://apify.com/TopApi/apartments-com-scraper/api/mcp), connect Claude Desktop, Cursor or another MCP client, and ask for apartments in plain language. Set `compact: true` for short rows.

#### Do I need an Apartments.com account, cookies or an API key?

No. Apartments.com Scraper reads what Apartments.com shows any visitor. You give a location, a link or a listing key, nothing else.

#### Does Apartments.com Scraper work in Canada?

Yes. Canadian cities such as `"Toronto, ON"` work the same way; rents come in CAD (`rent.currency`).

#### Why did my run return no results?

The location was not recognised (check the run summary's `searches` list), the filters exclude everything (try fewer), monitor mode found nothing new since the last run, or a property link points to a listing that has been removed (`lookups.notFound` in the summary). None of these is charged.

#### How is Apartments.com Scraper different from other Apartments.com scrapers?

Reviews, photos, interior amenities and walk scores are included with Property details at no extra event; floor plans and available units are in the same row; search links keep their filters; searches above 700 properties can be split; monitor mode reports rent changes; and there is no start fee.

#### Is it legal to scrape Apartments.com?

Apartments.com Scraper collects publicly available listing data and does not log in. Results can include names of reviewers or management companies; make sure your use of the data is lawful where you work. This actor is an independent tool and is not affiliated with Apartments.com or CoStar Group.

#### Your feedback

We keep improving Apartments.com Scraper. Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/TopApi/apartments-com-scraper/issues/open).

# Actor input Schema

## `search` (type: `string`):

A city, ZIP, neighbourhood, university, address or property name, as typed on Apartments.com, e.g. "Austin, TX", "78704", "Capitol Hill, Seattle", "Toronto, ON".

## `locations` (type: `array`):

Several locations in one run, one per line, e.g. "Denver, CO", "Brooklyn, NY", "90210". Each one is searched with the filters below.

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

Search pages with the site's own filters (e.g. https://www.apartments.com/austin-tx/2-bedrooms-under-2000/) or property pages (https://www.apartments.com/<name>/<key>/).

## `listingKeys` (type: `array`):

The 7-character key at the end of a property URL, e.g. "303djxe". Each key is read as one property.

## `latitude` (type: `number`):

Optional. Search around a point instead of a named location, e.g. 30.2672. Use with Longitude and Radius.

## `longitude` (type: `number`):

Used with Latitude, e.g. -97.7431.

## `radiusMiles` (type: `number`):

Used with Latitude/Longitude: half-width of the square area searched. Default 2.

## `minPrice` (type: `integer`):

Lowest monthly rent, in the site's currency (USD; CAD in Canada), e.g. 1200. Empty = no minimum.

## `maxPrice` (type: `integer`):

Highest monthly rent, e.g. 2500. Empty = no maximum.

## `minBeds` (type: `integer`):

0 = studio and up, 1, 2, 3 ...

## `maxBeds` (type: `integer`):

0 = studios only, 1, 2, 3 ...

## `minBaths` (type: `integer`):

1, 2, 3 ... Empty = any.

## `minSqft` (type: `integer`):

e.g. 700.

## `maxSqft` (type: `integer`):

e.g. 1500.

## `propertyTypes` (type: `array`):

Leave empty for all types.

## `petPolicy` (type: `string`):

Only properties that accept these pets.

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

Every amenity picked must be present (the site's own amenity filter).

## `keywords` (type: `string`):

Free text the site matches in listings, e.g. "rooftop pool", "utilities included".

## `minRating` (type: `string`):

The site's rating filter: 4 stars and up, or 5 stars.

## `lifestyle` (type: `string`):

Housing for a group of renters.

## `shortTerm` (type: `string`):

Only short-term rentals of this length.

## `moveInDate` (type: `string`):

Only rentals available by this date, e.g. 2026-12-01.

## `listingOptions` (type: `array`):

More of the site's own filters; every option picked must match.

## `hasMoveInSpecials` (type: `boolean`):

Only properties advertising a move-in special (the site's own filter).

## `incomeRestricted` (type: `boolean`):

Only low-income / income-restricted housing.

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

The site's sort order.

## `withPhoneOnly` (type: `boolean`):

Keep only properties that show a leasing phone number.

## `withSpecialsOnly` (type: `boolean`):

Keep only properties whose row shows a move-in special.

## `minReviewRating` (type: `number`):

Keep only properties rated at least this (1-5, e.g. 4.3). Reads each property's record.

## `updatedWithinDays` (type: `integer`):

Keep only properties whose listing was updated in the last N days. Pairs with a daily schedule. Reads each property's record.

## `excludeKeywords` (type: `array`):

Skip properties whose name, address or description contains one of these words, e.g. "senior".

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

Read each property's record: floor plans, available units with prices and dates, fees, pet policy, parking, amenities, schools, office hours. Charged as property-details per row that gets it.

## `includeReviews` (type: `boolean`):

Add the renter reviews (rating, text, date, the property's response). Needs Property details; no extra charge.

## `maxReviewsPerProperty` (type: `integer`):

0 = all the site shows.

## `includeVisuals` (type: `boolean`):

Add the photo gallery (URL + caption). Needs Property details; no extra charge.

## `maxPhotos` (type: `integer`):

0 = all.

## `includeInteriorAmenities` (type: `boolean`):

Add each floor plan's and unit's interior amenity list. Needs Property details; no extra charge.

## `includeWalkScore` (type: `boolean`):

Add walk, transit, drive, bike and sound scores, nearby transit and points of interest (read from the property page). Needs Property details; no extra charge.

## `monitorMode` (type: `boolean`):

Return only properties that are new or whose rent, specials or available units changed since earlier monitor runs. Pairs with a daily schedule.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers delivered properties; use one name per watch list. Default apartments-com-monitor.

## `includeUnchanged` (type: `boolean`):

In monitor mode, also deliver properties that did not change (marked UNCHANGED).

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

Total properties per run. One search lists up to 700 (turn on rent bands for more). 0 = no limit.

## `maxResultsPerSearch` (type: `integer`):

Properties per location or search link. 0 = up to Max properties.

## `maximizeCoverage` (type: `boolean`):

When a search lists more than the site's 700 properties, split it into rent bands and read each band.

## `removeDuplicates` (type: `boolean`):

Deliver each property once per run, even when several locations list it.

## `compact` (type: `boolean`):

Core fields only (name, address, coordinates, rent, beds, baths, phone, rating), sized for AI agents and MCP.

## `includeRawData` (type: `boolean`):

Add the site's raw property record (as JSON) to rows read with details.

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

Properties read in parallel when details are on.

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

Apify datacenter proxy by default; the run moves to direct requests, then residential (budgeted) when an exit is blocked.

## Actor input object example

```json
{
  "search": "Austin, TX",
  "petPolicy": "none",
  "minRating": "",
  "lifestyle": "none",
  "shortTerm": "none",
  "hasMoveInSpecials": false,
  "incomeRestricted": false,
  "sortBy": "default",
  "withPhoneOnly": false,
  "withSpecialsOnly": false,
  "includeDetails": false,
  "includeReviews": false,
  "includeVisuals": false,
  "includeInteriorAmenities": false,
  "includeWalkScore": false,
  "monitorMode": false,
  "includeUnchanged": false,
  "maxItems": 20,
  "maximizeCoverage": false,
  "removeDuplicates": true,
  "compact": false,
  "includeRawData": false,
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One item per Apartments.com property: name, address, coordinates, rent by bed type, phone, plus floor plans, units, fees, pets, amenities, reviews and schools with details on.

## `summary` (type: `string`):

Per search: rentals and properties Apartments.com counted, pages read, properties delivered, status; filters, monitor counts, routes used.

# 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 = {
    "search": "Austin, TX",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/apartments-com-scraper").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 = {
    "search": "Austin, TX",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/apartments-com-scraper").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 '{
  "search": "Austin, TX",
  "maxItems": 20
}' |
apify call topapi/apartments-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,topapi/apartments-com-scraper"
        }
    }
}
```

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/AjSf4Uc1V68IlV7tU/builds/crpLh93ZA3ccjMSjN/openapi.json
