# Invitation Homes Scraper: US Single-Family Rentals, Rent & Fees (`recordsdata/invitationhomes-scraper`) Actor

Scrape Invitation Homes (invitationhomes.com), US single-family rentals: homes for rent with rent, fees, lease terms, beds, baths, sq ft, coordinates, photos, availability and schools, plus markets and leasing offices. Filter by market, state, city, ZIP, rent. Export CSV, Excel, JSON, XML.

- **URL**: https://apify.com/recordsdata/invitationhomes-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Real estate, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $22.00 / 1,000 home for rents

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

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## Invitation Homes Scraper: US Single-Family Rental Homes, Rent, Fees and Lease Terms

> Invitation Homes Scraper is an Apify Actor that extracts the single-family homes for rent on invitationhomes.com, the largest US single-family rental landlord. On 2026-11-02 the site listed 4,554 homes in 20 markets. Each home comes with base rent, total monthly rent with required fees, every fee, lease terms from 12 to 24 months, bedrooms, bathrooms, square feet and square meters, coordinates, photos, availability, specials and nearby schools. It also returns the 20 market pages and 21 leasing offices. No login or proxy is needed. Pay per result.

Export the result as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

### What can you scrape from Invitation Homes?

- **Homes for rent (`listing`)**: one row per home, with base rent, total monthly rent with fees, the list of fees, all lease terms, address, coordinates, market, community, bedrooms, bathrooms, living area, amenities, pet policy, availability date, status, specials, new construction flag, self-tour and application links, nearby schools, floor plans, virtual tour link and photos.
- **Markets (`market`)**: one row per market with the live home count, the total homes, the cities served, highlights and featured collections.
- **Leasing offices (`office`)**: one row per office with address, brokerage licence number and the markets it serves. Business phone numbers and e-mail come back only if you switch them on.

### Why use this Invitation Homes scraper?

- **The real monthly cost of a home**: `totalMonthlyRent` is the rent plus the required monthly fees, and `fees` lists each fee with amount, required flag and frequency.
- **Every lease term**: most homes offer a rent for each length from 12 to 24 months, and `isBestValue` marks the term the site flags.
- **Whole inventory without a URL list**: the Actor starts from the site map, so it can read all 4,554 homes or only a market, state or ZIP code.
- **Cheap place filters**: the ZIP code is part of each home address on the site map, so homes of other places are never opened.
- **Only-new mode**: scheduled runs return just the homes that were not in the previous run of the same search.

### How to scrape Invitation Homes in four steps

1. Create a free account at console.apify.com and open this Actor.
2. Pick the filters you need: **Markets**, **States**, **Cities**, **ZIP codes**, bedrooms, bathrooms, rent and size. Leave them empty to read the whole inventory.
3. Set **Max Items** and press **Start**. A 3-home run finishes in a few seconds.
4. Download the dataset from the **Storage** tab.

To read one home, paste its URL in **Start URLs** or its address slug, for example `1082-clogger-ln-80817-8566`, in **Home addresses**. To read a market, paste a market URL or choose it in **Markets**. To get markets and leasing offices, choose them in **Record types**. A city filter without a state or market opens more pages, because most home addresses on the site map do not name the city.

### Input

| Field | Type | Default | Meaning |
|---|---|---|---|
| `recordTypes` | array | `["listings"]` | What to return: `listings`, `markets`, `offices` |
| `maxItems` | integer | none | Maximum rows of all types (free plan: 10) |
| `startUrls` | array | empty | Home pages, market pages or other invitationhomes.com pages |
| `listingIds` | array | empty | Home address slugs to read directly |
| `markets` / `states` | array | empty | Keep homes in these markets or states |
| `cities` / `zipCodes` | array | empty | Keep homes in these cities or 5-digit ZIP codes |
| `minBedrooms` / `minBathrooms` | integer / number | none | Minimum bedrooms and bathrooms (2.5 allowed) |
| `minRent` / `maxRent` | integer | none | Base monthly rent range in USD, before fees |
| `minSqft` / `maxSqft` | integer | none | Living area range in square feet |
| `availableBy` | string | none | Move-in on or before this date, `YYYY-MM-DD` |
| `onlyWithSpecial` / `onlyNewConstruction` | boolean | false | Keep homes with an active special, or new construction |
| `includeContactDetails` | boolean | false | Add business phone and e-mail of leasing offices |
| `maxPageReads` / `maxRunSeconds` | integer | 6000 / 3600 | Safety limits for wide searches |
| `onlyNew` / `stateKey` / `resetSeen` | boolean / string / boolean | false / empty / false | Monitor mode, monitor name, and a reset |
| `proxyConfiguration` | object | off | Not needed |

Input for 3 bedroom homes in Denver up to 2,500 dollars:

```json
{
  "recordTypes": ["listings"],
  "markets": ["denver-colorado"],
  "minBedrooms": 3,
  "maxRent": 2500,
  "maxItems": 100
}
```

### What data do you get from Invitation Homes?

Every row has a `recordType`: `listing`, `market` or `office`. A listing row carries 49 to 63 of the 79 columns, depending on what the home page states. A value that is missing means the site does not state it; the Actor never pads a column.

#### Listing fields

| Field | Type | Example |
|---|---|---|
| `recordType` | string | `listing` |
| `listingId` | string | `10064600` |
| `url` | string | `https://www.invitationhomes.com/houses-for-rent/1082-clogger-ln-80817-8566` |
| `title` | string | `1082 Clogger Ln, Fountain, CO 80817` |
| `listingStatus` | string | `Vacant Unrented Ready` |
| `price` | number | `2175` |
| `currency` / `priceUnit` | string | `USD` / `month` |
| `totalMonthlyRent` | number | `2319.9` |
| `monthlyFees` | number | `144.9` |
| `leaseTerms` | array | `[{"months":12,"rent":2285,"isBestValue":false}]` |
| `fees` | array | `[{"name":"Air Filter Delivery Fee","amount":9.95,"required":true}]` |
| `address`, `city`, `region`, `postalCode` | string | `1082 Clogger Ln`, `Fountain`, `CO`, `80817` |
| `latitude` / `longitude` | number | `38.66705` / `-104.67946` |
| `marketName` / `marketSlug` | string | `Denver` / `denver-colorado` |
| `bedrooms` / `bathrooms` | number | `3` / `2` |
| `areaBuilt` / `areaBuiltSqft` | number | `147.9` / `1592` |
| `availableFrom` | string | `2026-10-02` |
| `isPreMarket` / `isOnSpecial` / `isNewConstruction` | boolean | `false` |
| `petsAllowed` | boolean | `true` |
| `schools` | array | `[{"name":"Jordahl Elementary School","distanceMiles":0.35}]` |
| `agencyName` / `brokerageLicenseNumber` | string | `Invitation Homes` / licence number |
| `sourceSite` / `scrapedAt` | string | `invitationhomes.com` / `2026-11-02T17:41:07.865Z` |

A real `listing` row, shortened (cloud run, 2026-11-02):

```json
{
  "recordType": "listing",
  "listingId": "10064600",
  "title": "1082 Clogger Ln, Fountain, CO 80817",
  "price": 2175,
  "totalMonthlyRent": 2319.9,
  "monthlyFees": 144.9,
  "bedrooms": 3,
  "bathrooms": 2,
  "areaBuiltSqft": 1592,
  "availableFrom": "2026-10-02",
  "marketName": "Denver"
}
```

`areaBuilt` is in square meters and `areaBuiltSqft` keeps the square feet the site publishes. Utilities are the resident's cost and are not part of `totalMonthlyRent`; optional and one-time fees are listed in `fees` but not added to the monthly total.

#### Market fields

| Field | Type | Example |
|---|---|---|
| `recordType` | string | `market` |
| `name` / `marketName` | string | `Atlanta` |
| `marketSlug` | string | `denver-colorado` |
| `activeListings` | integer | `808` |
| `totalHomes` | integer | total homes of the market |
| `cities` | array | cities served |

#### Office fields

| Field | Type | Example |
|---|---|---|
| `recordType` | string | `office` |
| `name` | string | office name |
| `address`, `city`, `region`, `postalCode` | string | office address |
| `marketNames` / `marketSlugs` | array | markets the office serves |
| `brokerageLicenseNumber` | string | licence number |
| `agencyPhone` / `agencyEmail` | string | only with `includeContactDetails` |

### How much does the Invitation Homes Scraper cost?

Pay per result, no monthly fee. Prices are USD per result on the Free tier.

| Event | Charged for | Per result | Per 1,000 |
|---|---|---|---|
| Listing record | One home for rent | $0.022 | $22.00 |
| Market record | One market | $0.01467 | $14.67 |
| Office record | One leasing office | $0.01467 | $14.67 |

Worked examples: 1,000 homes cost $22.00. All 20 markets cost 20 x $0.01467 = $0.29. All 21 leasing offices cost 21 x $0.01467 = $0.31. A full run over the 4,554 homes of 2026-11-02 costs about 4,554 x $0.022 = $100.19, so use a market, state or ZIP code filter when you need only a part. Rows skipped by monitor mode are not charged.

### How does it compare with other rental scrapers?

Read on 2026-11-03: no other Apify Actor built for invitationhomes.com was found in the Store. The closest options are general real estate scrapers for other sites.

| | Invitation Homes Scraper | Zillow Detail Scraper (maxcopell) |
|---|---|---|
| Site read | invitationhomes.com | zillow.com |
| Output columns | 79 across listing, market and office rows | 64 |
| Required fees with amount and frequency | Yes, `fees` and `monthlyFees` | Not in the published columns |
| Lease terms 12 to 24 months | Yes, `leaseTerms` | Not in the published columns |
| Whole inventory without a URL list | Yes, from the site map | Starts from URLs or addresses |
| Only-new mode | Yes | Not shown on its page |
| Event price read on 2026-11-02 | $0.022 per home | $0.0036 per result |

Zillow carries many landlords and sale listings, so use it for broad market coverage. Choose this Actor to read one landlord end to end with fees and lease terms. The other alternatives are a manual export from the site or a browser scraper you maintain yourself.

### Is it legal to scrape Invitation Homes? Limits and responsible use

The Actor reads public pages that invitationhomes.com shows to every visitor, without logging in, at a slow and steady pace. It reads the site map, home pages and market pages, which the robots.txt of the site leaves open, and never calls the paths that file disallows. Photos come back as links to the site's own files. The landlord is a company, and office phone numbers and e-mail are business data that come back only when you turn on **Include leasing office contact data**.

The terms of use of invitationhomes.com, read on 2026-11-02, grant a personal, non-commercial licence and mention crawlers and scrapers. Check the site terms before republishing commercially. Whether your use is allowed depends on your purpose, your country and the terms you accepted, and the decision is yours.

Limits:

- A full run opens one page per home, so plan it as a long job. The Actor reads two to three home pages a second.
- **Max home pages to open** and **Max run time (seconds)** bound a wide search.
- Free Apify plans are limited to 10 items per run.

### Use with AI agents (MCP)

Connect the Apify MCP server to Claude, Cursor or another MCP client and this Actor appears as a tool: `https://mcp.apify.com?tools=RecordsData/invitationhomes-scraper`.

Example prompt: "Use the Invitation Homes scraper to list the 3 bedroom homes in the Phoenix market under 2,300 dollars a month, return the 20 cheapest with address, total monthly rent with fees, best lease term and the home link, and tell me the average rent per square foot."

### Run it from code

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('RecordsData/invitationhomes-scraper').call({ markets: ['denver-colorado'], minBedrooms: 3, maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].title, items[0].totalMonthlyRent);
```

Python client, Make, Zapier, n8n, Google Sheets and Apify schedules also work.

### Frequently Asked Questions

#### Does the Invitation Homes scraper need a proxy or an account?

No. It uses plain requests, needs no login, no API key and solves no captcha. The proxy field exists but is off by default, and the Actor switches to the Apify datacenter proxy only if the site keeps refusing the connection. You only need an Apify account, and the free plan returns up to 10 rows per run.

#### How many homes does Invitation Homes have for rent?

On 2026-11-02 the site map listed 4,554 homes in 20 markets: for example 808 in Atlanta, 563 in Tampa, 491 in Phoenix, 415 in the Carolinas, 374 in Orlando, 329 in Dallas, 325 in South Florida and 4 in Austin. The numbers move every day, so schedule the Actor to follow them.

#### Does it return the full rent, with fees?

Yes. `price` is the base rent, `fees` lists every fee with its amount, whether it is required and how often it is charged, and `totalMonthlyRent` is the rent plus the required monthly fees. Utilities are the resident's cost and are not part of the total, as the site's disclosure on each home says.

#### What are the lease terms in the data?

Most homes offer a rent for every lease length from 12 to 24 months, and the rent is not the same for each. `leaseTerms` returns all of them with the rent and the total monthly rent per term, and `isBestValue` marks the term the site flags as best value.

#### How do I get only one city, ZIP code or metro area?

Choose the market or state in the input, or type a ZIP code. Homes outside it are skipped without being opened, so the run stays short. A city on its own works too, but it opens more pages, because the site map does not name the city for most homes.

#### How do I only get new homes on a schedule?

Turn on **Only new rows (monitor mode)** and name the search in **Monitor name**. The first run delivers the homes it finds and remembers their ids; the next runs deliver only homes that were not seen before and do not charge for the rest. Turn on **Forget previously seen rows** to start over.

#### Why are some columns empty in my export?

The site does not state the value for that home. Pre-market homes have no photos or description yet, only some homes belong to a community, have a leasing special, a virtual tour or a self-tour link, and not every home has floor plans. Sparse columns are normal; the Actor never invents values.

#### How much does a run cost?

The Actor is billed per result. A home costs $0.022, so 1,000 homes cost $22.00; a market or an office costs $0.01467. Free users get up to 10 rows per run as a preview, and paid users can set Max Items up to 1,000,000, far above the 4,554 homes the site lists.

### Support

Questions, a missing field or a feature request: contact.punkrecordsdata@gmail.com. Reviews on the actor page help other people find it.

This Actor is an independent tool and is not affiliated with Invitation Homes or invitationhomes.com.

Last updated: 2026-11-03

# Actor input Schema

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

Optional invitationhomes.com pages to read: a home page (invitationhomes.com/houses-for-rent/...), a market page (invitationhomes.com/markets/houses-for-rent/denver-colorado) or a market search page (invitationhomes.com/search/denver-colorado). Home pages are read as they are, with no filters. A market page returns every home of that market, narrowed by the filters below.

## `listingIds` (type: `array`):

Optional list of homes to read directly: the last part of a home URL, for example 1228-brook-farm-ln-charlotte-nc-28214, or the full URL. Filters are not applied to these homes.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000. Counts every row returned (homes, markets and offices together).

## `recordTypes` (type: `array`):

What to return. Listings: one row per home for rent (rent, fees, lease terms, bedrooms, bathrooms, size, coordinates, photos, availability, specials, schools). Markets: one row per market (20 US markets with live counts, cities served and highlights). Offices: one row per Invitation Homes leasing office with its address and brokerage licence.

## `markets` (type: `array`):

Only homes in these Invitation Homes markets. Leave empty for all 20 markets. For the markets, offices and homes of a single metro area this is the fastest filter.

## `states` (type: `array`):

Only homes in these states. Leave empty for all states.

## `cities` (type: `array`):

Only homes in these cities, for example Charlotte, Marietta or Oak Forest. Combine with a state or market to keep the run short, because the city is only known after a home page is opened for most homes.

## `zipCodes` (type: `array`):

Only homes in these 5-digit ZIP codes, for example 30315. The fastest way to look at one neighbourhood: homes of other ZIP codes are never opened.

## `minBedrooms` (type: `integer`):

Only homes with at least this many bedrooms.

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

Only homes with at least this many bathrooms (2.5 is allowed).

## `minRent` (type: `integer`):

Lowest base rent per month in US dollars, before the monthly fees.

## `maxRent` (type: `integer`):

Highest base rent per month in US dollars, before the monthly fees.

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

Smallest living area in square feet.

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

Largest living area in square feet.

## `availableBy` (type: `string`):

Only homes that can be moved into on or before this date, written YYYY-MM-DD, for example 2026-12-01.

## `onlyWithSpecial` (type: `boolean`):

Keep only homes with an active leasing special (for example a free month of rent).

## `onlyNewConstruction` (type: `boolean`):

Keep only homes marked as new construction.

## `includeContactDetails` (type: `boolean`):

Add the business phone numbers and e-mail of the Invitation Homes leasing offices (no personal data). Off by default.

## `maxPageReads` (type: `integer`):

Safety limit for searches that must open many home pages to find matches, for example a city or rent filter without a state. Homes skipped by address are not counted.

## `maxRunSeconds` (type: `integer`):

Stop collecting after this many seconds and return what was gathered, so a very wide search cannot run for hours.

## `onlyNew` (type: `boolean`):

Only new rows: skip every home, market or office this same search already returned in an earlier run. Schedule the run daily to get just the new rentals.

## `stateKey` (type: `string`):

Name of this monitor. Leave empty to derive it from your filters. Use a name to keep two monitors with the same filters apart.

## `resetSeen` (type: `boolean`):

Clear the saved list for this monitor before the run, so everything counts as new again.

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

Not needed: the actor reads invitationhomes.com directly at a polite pace (three requests at a time). It switches to the Apify datacenter proxy by itself only if the site keeps refusing the connection.

## Actor input object example

```json
{
  "startUrls": [],
  "listingIds": [],
  "maxItems": 10,
  "recordTypes": [
    "listings"
  ],
  "markets": [],
  "states": [],
  "cities": [],
  "zipCodes": [],
  "onlyWithSpecial": false,
  "onlyNewConstruction": false,
  "includeContactDetails": false,
  "maxPageReads": 6000,
  "maxRunSeconds": 3600,
  "onlyNew": false,
  "stateKey": "",
  "resetSeen": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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": [],
    "listingIds": [],
    "maxItems": 10,
    "recordTypes": [
        "listings"
    ],
    "markets": [],
    "states": [],
    "cities": [],
    "zipCodes": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/invitationhomes-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": [],
    "listingIds": [],
    "maxItems": 10,
    "recordTypes": ["listings"],
    "markets": [],
    "states": [],
    "cities": [],
    "zipCodes": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/invitationhomes-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": [],
  "listingIds": [],
  "maxItems": 10,
  "recordTypes": [
    "listings"
  ],
  "markets": [],
  "states": [],
  "cities": [],
  "zipCodes": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call recordsdata/invitationhomes-scraper --silent --output-dataset

```

## MCP server setup

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