# ApartmentFinder Listings Scraper (`piotrv1001/apartmentfinder-listings-scraper`) Actor

The ApartmentFinder Listings Scraper extracts US rental listings from ApartmentFinder.com (Apartments.com Network), capturing rent ranges, fees, phones, coordinates, ratings, specials, floor plans and unit-level availability — ideal for rental market analysis, price tracking and lead generation.

- **URL**: https://apify.com/piotrv1001/apartmentfinder-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🏢 Apartment Finder Scraper

Extract rental listings from **ApartmentFinder.com**, part of the **Apartments.com Network** — the largest apartment marketplace in the US. The **Apartment Finder Scraper** turns any city, ZIP code or neighborhood search into clean, structured data — **rent ranges, base rent vs. total monthly price, required fees, phone numbers, coordinates, ratings and specials** — and, on request, the full property profile with **every floor plan and the unit-by-unit availability grid** (unit number, price, square feet, move-in date).

Paste a search URL from [apartmentfinder.com](https://www.apartmentfinder.com) and run. Hosted on the Apify platform, it gives you **API access, scheduling, integrations, and exports to JSON, CSV, Excel and Google Sheets** out of the box.

### ✨ Features

- 🏠 **Complete property records** – name, street address, city, state, ZIP, latitude/longitude, total monthly price range, base rent range, required monthly fees, rent by bedroom count, star rating, phone, current special offer (price drops, free months), listing tier and main photo.
- 🧱 **Floor plans & unit-level availability** – flip on *Scrape property details* to get every floor plan (beds, baths, sq ft, rent) and each individual unit on the market: unit number, asking price, square feet and move-in date — the data that rollup scrapers leave out.
- 🛋️ **Amenities, fees & policies** – amenities grouped by category (community, floor plan, security, nearby universities and parks), the itemised fee schedule (admin, deposit, pest control, …), pet policy, lease terms, office hours, rent specials, review count and full description.
- 🔍 **Any search, any filter** – city, ZIP code and neighborhood pages, with bedroom, price, amenity and lifestyle filters applied on the site first. Individual property URLs work too.
- 💸 **Pay only for what you scrape** – transparent pay-per-result pricing with a built-in `Max items` cap to control cost.
- ⚡ **Fast & reliable** – handles pagination automatically and deduplicates results, with no proxy required.

### 🛠️ How to use the Apartment Finder Scraper

1. **Find your search** – Go to [apartmentfinder.com](https://www.apartmentfinder.com), search a city, ZIP code or neighborhood, apply any filters (bedrooms, max rent, pet-friendly, …) and copy the URL — for example `https://www.apartmentfinder.com/Texas/Houston-Apartments/2-Bedrooms`.
2. **Paste the URL** – Add one or more of these URLs to the **Start URLs** input field.
3. **Set your limits** – Choose **Max items** (default 50) and, optionally, enable **Scrape property details** for floor plans and unit availability.
4. **Run the Actor** – Start it and watch the structured results fill the dataset in real time.
5. **Export** – Download the dataset as JSON, CSV, Excel or HTML, or pull it via the Apify API.

### 🔧 Input

| Field                | Type    | Description                                                                                                     |
| -------------------- | ------- | --------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | ApartmentFinder search pages (city, ZIP, neighborhood, with filters) or property pages. Prefilled with Houston. |
| `maxItems`           | integer | Maximum number of properties to scrape across all URLs. Default `50`.                                           |
| `scrapeDetails`      | boolean | Open every property page for floor plans, unit availability, amenities, fees and policies. Default `false`.     |
| `proxyConfiguration` | object  | Optional proxy settings. Off by default — the Actor works without a proxy.                                      |

#### Example input

```json
{
    "startUrls": [{ "url": "https://www.apartmentfinder.com/Texas/Houston-Apartments" }],
    "maxItems": 50,
    "scrapeDetails": false
}
```

### 📊 Output

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**. Each property is one record.

#### Sample output (search level)

```json
{
    "id": "0bwzg31",
    "name": "The Grove",
    "url": "https://www.apartmentfinder.com/Texas/Houston-Apartments/The-Grove-Apartments-0bwzg31",
    "address": "8200 Sunbury Ln, Houston, TX 77095",
    "city": "Houston",
    "state": "TX",
    "zip": "77095",
    "latitude": 29.89919,
    "longitude": -95.62871,
    "priceRange": "$869 - $1,389",
    "priceMin": 869,
    "priceMax": 1389,
    "baseRentMin": 750,
    "baseRentMax": 1270,
    "requiredMonthlyFees": 119,
    "rents": [
        { "beds": "1 BED", "price": "$869+" },
        { "beds": "2 BEDS", "price": "$1,078+" }
    ],
    "rating": 4,
    "phone": "(832) 952-0998",
    "special": "Price Drop. $165 Off",
    "hasVirtualTour": true,
    "image": "https://image1.apartmentfinder.com/i2/.../the-grove-houston-tx-building-photo.jpg",
    "listingTier": "Diamond",
    "sourceUrl": "https://www.apartmentfinder.com/Texas/Houston-Apartments",
    "scrapedAt": "2026-08-28T12:01:44.512Z"
}
```

#### With property details enabled

Everything above, plus:

```json
{
    "reviewCount": 43,
    "description": "At The Grove, you have everything you need to lead an easy and fulfilling everyday life…",
    "rentSpecials": "Limited-Time Special: Get up to 8 weeks off rent, prorated across your lease term…",
    "leaseTerms": "6 - 15 Month Leases",
    "petPolicy": "0 lbs. Weight Limit",
    "officeHours": [{ "day": "Monday", "opens": "09:00:00", "closes": "18:00:00" }],
    "amenities": {
        "Community Features": ["Laundry Facilities", "Business Center", "Clubhouse", "Fitness Center", "Pool", "Playground"],
        "Floorplan Amenities": ["Washer/Dryer", "Air Conditioning", "Dishwasher", "Hardwood Floors", "Walk-In Closets"],
        "Security": ["Controlled Access", "Gated"]
    },
    "fees": [
        { "name": "Administrative Fee", "amount": "$150" },
        { "name": "Deposit", "amount": "$150 - $300" }
    ],
    "images": ["https://image1.apartmentfinder.com/i2/.../the-grove-houston-tx-primary-photo.jpg"],
    "floorPlans": [
        {
            "name": "A1",
            "rent": "$869 – $929",
            "beds": "1 bed",
            "baths": "1 bath",
            "sqft": 501,
            "units": [
                { "unit": "08S-816", "price": "$869", "priceValue": 869, "sqft": 501, "availableDate": "Sep 22", "collapsed": false, "note": "Rental rate is 33% less than similar apartments in the area." },
                { "unit": "08S-821", "price": "$879", "priceValue": 879, "sqft": 501, "availableDate": "Oct 31", "collapsed": false, "note": null }
            ]
        }
    ],
    "unitCount": 169
}
```

#### Data fields

| Field                                         | Description                                                                                   |
| --------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `id`, `name`, `url`                           | Listing key, property name and property page                                                  |
| `address`, `city`, `state`, `zip`             | Street address and its components                                                             |
| `latitude`, `longitude`                       | Property coordinates                                                                          |
| `priceRange`, `priceMin`, `priceMax`          | Advertised price range as text and as numbers (total monthly price where the site shows one)  |
| `baseRentMin`, `baseRentMax`                  | Base rent range before fees                                                                   |
| `requiredMonthlyFees`                         | Mandatory monthly fees added on top of base rent                                              |
| `rents`                                       | Starting price per bedroom count as shown on the card                                         |
| `rating`, `reviewCount`                       | Star rating out of 5 and number of reviews (count needs *Scrape property details*)           |
| `phone`                                       | Leasing office phone number                                                                   |
| `special`, `rentSpecials`                     | Current promotion badge and the full rent-special text                                        |
| `listingTier`                                 | Advertising tier of the listing (Diamond, Platinum, Gold, …)                                  |
| `hasVirtualTour`, `image`, `images`           | Virtual-tour flag, main photo and gallery photos                                              |
| `description`, `leaseTerms`, `petPolicy`      | Property description, available lease lengths and pet rules                                   |
| `officeHours`                                 | Leasing office opening hours per weekday                                                      |
| `amenities`                                   | Amenities grouped by category                                                                 |
| `fees`                                        | Itemised fee schedule with amounts                                                            |
| `floorPlans`                                  | Floor plans with beds, baths, sq ft, rent and their individual units                          |
| `floorPlans[].units[]`                        | Unit number, price, sq ft, move-in date, `collapsed` (hidden behind "show more" on the site) |
| `unitCount`                                   | Number of individual units listed across all floor plans                                      |
| `sourceUrl`, `scrapedAt`                      | The search page the record came from and the scrape timestamp                                 |

### 💰 How much does it cost to scrape ApartmentFinder?

This Actor uses **pay-per-result** pricing:

- **$2.00 per 1,000 properties** scraped at search level — including price ranges, fees, phone, coordinates and specials.
- **$5.00 per 1,000 properties** when *Scrape property details* is enabled — adding floor plans, the unit availability grid, amenities, fees and policies.

You only pay for the properties you actually scrape, and the **Max items** input keeps every run within budget. New Apify accounts include free monthly usage credits, so you can try it at no cost.

### 💡 Tips

- **Search level is usually enough.** Price ranges, base rent, fees, phone and coordinates are all on the search card — leave *Scrape property details* off unless you need floor plans or unit-level availability.
- **Slice large cities.** A search paginates up to roughly 750 properties. For big metros, add one URL per ZIP code, neighborhood or bedroom filter (`/Zip-Codes/77095-Apartments`, `/Texas/Houston-Apartments/2-Bedrooms`, `/Texas/Houston-Apartments/Under-1500`) to cover everything.
- **Track price drops.** The `special` field surfaces "Price Drop" and "1 Month Free" promotions the moment they appear; schedule daily runs to catch them.
- **Compare like with like.** `priceRange` is the total monthly price; `baseRentMin`/`baseRentMax` is rent before fees. Use the base rent when comparing across properties.
- **Automate it.** Use Apify **Schedules** to monitor a market daily and pipe results to Google Sheets, a webhook, or your own API.

### ❓ FAQ

**Is scraping ApartmentFinder legal?**
This Actor collects only publicly available listing data. As with any web scraping, you are responsible for how you use the data and for complying with applicable laws and the site's terms.

**Which locations are supported?**
Every US market on apartmentfinder.com — any city, ZIP code, neighborhood, county or college page, with or without filters.

**How many properties can one search return?**
A single search URL paginates to about 750 properties. To go deeper, split the market by ZIP code, neighborhood or filters and add several URLs.

**Why is `reviewCount` or `priceRange` empty?**
The review count is only on the property page (enable *Scrape property details*), and some properties advertise "Call for Rent" instead of a price. Missing values are returned as `null`.

**Can I get a custom version?**
Yes — open an issue on the Actor's **Issues** tab with your requirements.

### 🆘 Support

Found a bug or need an extra field? Head to the **Issues** tab on the Actor's page and let us know. Feedback is welcome and helps improve the scraper.

Start extracting **US rental market data** with the **Apartment Finder Scraper** today! 🏢

# Actor input Schema

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

ApartmentFinder pages to scrape: a city, ZIP code or neighborhood search (with any filters such as bedrooms or max price applied), or individual property pages. Example: https://www.apartmentfinder.com/Texas/Houston-Apartments

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

Maximum number of properties to scrape across all start URLs.

## `scrapeDetails` (type: `boolean`):

Open every property page to add floor plans, the unit-by-unit availability grid (unit number, price, square feet, move-in date), amenities, fees, pet policy, lease terms, office hours and the full description. Slower, because each property page has to be opened.

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

Proxy settings used for the run.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.apartmentfinder.com/Texas/Houston-Apartments"
    }
  ],
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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://www.apartmentfinder.com/Texas/Houston-Apartments"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/apartmentfinder-listings-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 = { "startUrls": [{ "url": "https://www.apartmentfinder.com/Texas/Houston-Apartments" }] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/apartmentfinder-listings-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 '{
  "startUrls": [
    {
      "url": "https://www.apartmentfinder.com/Texas/Houston-Apartments"
    }
  ]
}' |
apify call piotrv1001/apartmentfinder-listings-scraper --silent --output-dataset

```

## MCP server setup

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