# Apartments.com Scraper - Rentals, Prices & Floor Plans (`automly/apartments-com-scraper`) Actor

Scrape Apartments.com rental listings by city, ZIP code or search link: rent, address, phone, beds, floor plans, available units, fees, amenities.

- **URL**: https://apify.com/automly/apartments-com-scraper.md
- **Developed by:** [Automly](https://apify.com/automly) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 listing from search results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Apartments.com Scraper - Rentals, Prices & Floor Plans

### What is Apartments.com Scraper?

**Apartments.com Scraper** is a tool that lets you **scrape rental listings from Apartments.com**: rent, address, phone number, bedrooms, specials, amenities, photos and map coordinates, and with one switch the full listing page with **floor plans, every available unit with its price and move-in date, fees, pet policy, walk score and renter rating**. Type a city or ZIP code or paste any Apartments.com search link, click **Start**, and download the listings as Excel, CSV or JSON.

- ⚡ **Fast:** 1,500 Austin listings in about 20 seconds, 200 listings with full details in about a minute (our tests)
- 🏙️ **Past the 720-result limit:** Apartments.com shows at most 720 listings per search; this scraper splits big cities by rent so you can get thousands
- 🏢 **Unit-level data:** every available unit with its number, rent, square feet and date, not just a price range
- 🔓 **No login:** no Apartments.com account needed

### What can Apartments.com Scraper do?

- **Scrape apartments for rent in any US city** from a city name like `Austin, TX`
- **Scrape rentals by ZIP code** like `78705` or `Austin, TX 78705`
- **Scrape any Apartments.com search link** with your filters: bedrooms, price, houses, condos, pet-friendly, student housing and more
- **Get floor plans and available units** with rent, size and availability date for each unit
- **Get fees and policies:** application fee, pet fees and pet rent, parking, required monthly fees
- **Scrape single listings** from their links for a full property profile
- **Collect thousands of listings in one run** across many cities, each with its own limit
- Export to Excel, CSV, JSON, HTML or XML, or send the data to Google Sheets, Make, Zapier and more

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

| | | |
|---|---|---|
| 🏢 Property name | 📍 Full address, ZIP, latitude and longitude | 📞 Leasing office phone |
| 💲 Rent from / to | 🛏️ Rent by bedroom count | 🎁 Rent specials (e.g. 2 Months Free) |
| 🧱 Floor plans (beds, baths, sq ft, rent) | 🔑 Available units with rent and move-in date | 🧾 Fees and pet policy |
| 🏊 Amenities by category | 🐾 Pets allowed | 🏗️ Year built, total units, stories |
| 🚶 Walk, transit, drive and bike scores | ⭐ Renter rating and review count | 🏘️ Neighborhood |
| 🧑‍💼 Property management company | 🖼️ Photos | 🕘 Office hours |
| 📝 Full description | 🏷️ Property type (apartment, house, condo) | 🔗 Listing link and ID |

### How to scrape Apartments.com

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **Apartments.com Scraper**.
3. Enter cities, ZIP codes or Apartments.com search links, one per line.
4. Set how many listings you want per location, and turn on **Include full listing details** if you need floor plans, units and fees.
5. Click **Start**, then download the listings as Excel, CSV, JSON or HTML.

### ⬇️ Input

| Setting | What it does |
|---|---|
| **Locations or search links** | Cities (`Austin, TX`), ZIP codes (`78705` or `Austin, TX 78705`) or Apartments.com search links such as `https://www.apartments.com/houses/austin-tx/` or `https://www.apartments.com/austin-tx/2-bedrooms-1500-to-2500/` |
| **Listing links** | Links to single listings, like `https://www.apartments.com/the-watson-austin-tx/s286zb6/` |
| **Max listings per location** | How many listings to save for each location (default 100). Set 0 for every listing |
| **Include full listing details** | Open each listing for floor plans, available units, fees, full amenities, description, scores and rating |

The first 100 listings in two cities:

```json
{
  "locations": ["Austin, TX", "Denver, CO"],
  "maxItems": 100
}
```

Two-bedroom apartments under $2,500 in a ZIP code, with floor plans and units:

```json
{
  "locations": ["https://www.apartments.com/austin-tx-78705/2-bedrooms-under-2500/"],
  "maxItems": 0,
  "includeDetails": true
}
```

Single listings:

```json
{
  "listingUrls": [
    "https://www.apartments.com/the-watson-austin-tx/s286zb6/",
    "https://www.apartments.com/markham-at-lakeline-austin-tx/2x385hb/"
  ]
}
```

### ⬆️ Output

Every listing is one row. Without details you get the search fields (address, coordinates, phone, rent, rent by beds, specials, amenities, manager, photo). With details you also get floor plans, units, fees and the rest (lists shortened here):

```json
{
  "listingId": "s9l6qp7",
  "url": "https://www.apartments.com/momentum-at-first-creek-denver-co/s9l6qp7/",
  "name": "Momentum at First Creek",
  "propertyType": "Apartment",
  "fullAddress": "5500 Telluride St, Denver, CO 80249",
  "zipCode": "80249",
  "latitude": 39.79734,
  "longitude": -104.78079,
  "neighborhood": "Gateway",
  "phone": "+1-720-800-9710",
  "rentMin": 1390,
  "rentMax": 2747,
  "rentByBeds": [
    {"beds": "1 Bed", "rent": "$1,390+"},
    {"beds": "2 Beds", "rent": "$2,082+"},
    {"beds": "3 Beds", "rent": "$2,664+"}
  ],
  "specials": ["Move-in Special"],
  "propertyManager": "Peak Capital Partners",
  "availableUnits": 14,
  "floorPlans": [
    {
      "name": "A1C",
      "beds": 1,
      "baths": 1,
      "rentMin": 1678,
      "rentMax": 1802,
      "totalMonthlyPriceMin": 1720,
      "sqftMin": 744,
      "availability": "Available Now",
      "units": [
        {"unit": "9202", "rent": 1740, "sqft": 744, "availableDate": "2026-08-01", "availability": "Now"}
      ]
    }
  ],
  "fees": [
    {"tab": "Required Fees", "group": "Utilities & Essentials", "name": "Utility Billing Fee", "value": "$10 / mo", "note": "Charged per unit."}
  ],
  "amenities": ["Package Service", "Wi-Fi", "Elevator", "Clubhouse"],
  "petsAllowed": true,
  "yearBuilt": 2022,
  "units": 200,
  "stories": 4,
  "walkScore": 30,
  "transitScore": 30,
  "rating": 4.0,
  "reviewCount": 4,
  "photos": ["https://images1.apartments.com/i2/.../momentum-at-first-creek-denver-co-primary-photo.png"],
  "searchSource": "Denver, CO",
  "scrapedAt": "2026-09-30T09:16:08Z"
}
```

The **Overview** tab shows the listings as a table with photos, the **Details** tab the property facts, and the **Location** tab the addresses and coordinates for mapping. The run report lists any page that could not be read, and why.

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

- **Rent market research:** compare rents by city, ZIP code, neighborhood and bedroom count
- **Real estate investment:** size up a market's supply, specials and vacancy before you buy
- **Competitor pricing for property managers:** track the rents, specials and fees of nearby communities
- **Lead generation:** build lists of apartment communities and their management companies and phone numbers
- **Relocation and housing services:** find available units with move-in dates for clients
- **Data science and maps:** plot listings with coordinates, walk scores and rents

### How many listings can I get?

Apartments.com shows at most 720 listings (18 pages) for one search. For a big city this scraper splits the search into rent ranges and reads each one, so you can get thousands of listings from a single city. A property whose rents fall in two ranges is saved once. Searches with filters that cannot be combined with a rent range (for example pet-friendly) return their first 720 listings; the run report says when that happens, and you can add rent or bedroom filters to the link to get the rest.

### ❓FAQ

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

You pay per listing saved, and listings with full details cost more than search listings because each one opens a listing page. See the **Pricing** tab for the current prices. Setting **Max listings per location** keeps the cost of a run under control, and you can also set a maximum cost per run.

#### Can I scrape houses, condos and townhomes, not just apartments?

Yes. Paste an Apartments.com search link for houses (`https://www.apartments.com/houses/austin-tx/`), condos or townhomes, and every listing type comes through with its own fields, such as bedrooms, bathrooms and square feet for single homes.

#### Can I use my filters from the Apartments.com website?

Yes. Set up your search on Apartments.com (city, price, bedrooms, pets, home type), copy the link from your browser and paste it into **Locations or search links**.

#### Do I need an Apartments.com account?

No. The scraper reads the same public listings anyone can see without signing in.

#### How fresh is the data?

Every run reads the live site, so rents, specials and available units are current as of the run. The `lastUpdated` field shows when Apartments.com last updated a listing.

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

This scraper collects publicly available listing information. Make sure your use follows applicable laws and Apartments.com's terms, and do not collect personal data you have no legitimate reason to use. This tool is not affiliated with or endorsed by Apartments.com or CoStar Group.

#### Something is not working, or I need another field

Open an issue in the **Issues** tab with your input and what you expected. We read every one and usually reply within a day.

# Actor input Schema

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

Enter cities ("Austin, TX"), ZIP codes ("78705" or "Austin, TX 78705") or paste Apartments.com search links, including links with filters such as bedrooms, price or pet-friendly.

## `listingUrls` (type: `array`):

Paste links to individual Apartments.com listings to get their full details.

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

How many listings to save for each location or search link. Set 0 for every listing the search has.

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

Open each listing's page for floor plans, every available unit with its price and date, fees and pet policy, full amenities, description, office hours, walk and transit scores, year built and rating.

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

Apify Proxy works out of the box.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "listingUrls": [],
  "maxItems": 40,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `details` (type: `string`):

No description

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

No description

## `report` (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 = {
    "locations": [
        "Austin, TX"
    ],
    "listingUrls": [],
    "maxItems": 40,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/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 = {
    "locations": ["Austin, TX"],
    "listingUrls": [],
    "maxItems": 40,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/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 '{
  "locations": [
    "Austin, TX"
  ],
  "listingUrls": [],
  "maxItems": 40,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/apartments-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automly/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/7hi89sw8HezZzEkjS/builds/UPhUkrt1VQeLEMqU9/openapi.json
