# Rent.com Scraper 🏠 Floor Plans, Photos & Availability (`dz_omar/rent-com-scraper`) Actor

Scrape Rent.com rental listings from any search link or listing link: rent, beds, baths, availability, deals, location, real photo links, plus floor plans with unit rents, amenities, fees, pet policy and leasing phone. Filters in the link applied exactly.

- **URL**: https://apify.com/dz_omar/rent-com-scraper.md
- **Developed by:** [FlowExtract API](https://apify.com/dz_omar) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 listings

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

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**[Rent.com Scraper](https://apify.com/dz_omar/rent-com-scraper?fpr=smcx63)** collects **Rent.com rental listings** from any search link or listing link you copy from the website: rent, bedrooms, bathrooms, size, availability, move-in deals, address and map position, the leasing phone number and **real, de-duplicated photo links**. Every listing also carries its **floor plans with unit rents and move-in dates, all amenities, fees and deposits, pet and parking policy, office hours, walk scores, nearby schools and the full description**.

Built for **property managers and landlords** tracking competing rents, **rental market analysts and investors**, **proptech and data teams** and **researchers** who need current Rent.com stock in a spreadsheet or an API without copying listings by hand.

### What does Rent.com Scraper do?

- **Any Rent.com search link** — set your filters on the website (city, ZIP code, neighbourhood, county, college or military base; price, bedrooms, bathrooms, property type, pets, amenities, move-in date, deals) and paste the address. The words in the link are read with **Rent.com's own link dictionary** (taken from the site itself: every bedroom, bathroom, size, price, property-type, pet and amenity word it uses, about 70 in all), and sent to Rent.com's search as one request. The run log shows the exact filters sent and the number of listings Rent.com counts for them. Rent.com's curated *cheap* and *luxury* pages and rooms-for-rent pages are **refused with a message naming the word** instead of returning a wider list.
- **Single listings in the same box** — paste a property link (`…/apartment/…`) or a single unit or house link (`…/r/…`) next to your search links. Listing links are collected first, and a listing found by several links is delivered once.
- **The rent you asked for** — on a search with bedroom, bathroom, price or size filters, each row says which floor plans match and the lowest and highest matching rent, instead of only the building's overall minimum.
- **A fixed cap on every run** — you always set a maximum number of listings (1 to 100,000), and the run's cost limit in Apify Console applies too.
- **Runs that finish cleanly** — a listing that was taken down, a place that no longer exists, a link that cannot be used: each becomes one clearly marked, unpaid row, and the run still ends successfully with a plain summary of what was delivered, what was left out and why, and what was charged.

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

Every listing is one clean row, with its details whenever Rent.com has them.

| Part | What it holds |
|---|---|
| Identity and place | `id`, `listingType` (community or single unit), `name`, `url`, `propertyType`, street address, `city`, `state`, `zip`, `fullAddress`, `latitude`, `longitude` |
| Rent and size | `rentMin`, `rentMax`, `rentText`, `bedsMin`/`bedsMax`/`bedsText`, `bathsMin`/`bathsMax`/`bathsText`, `sqftMin`/`sqftMax`/`sqftText` |
| Availability | `availability` (*Available Now*, *3 Units Available*, *Available Dec 7*), `availableNow`, `unitsAvailable`, `earliestAvailableDate` |
| Deals | `deals` (category and text), `dealTags` (*1 Month Free*), `priceDrops`, `badges` |
| Contact | `phone` and `textPhone` (the leasing numbers Rent.com shows for the listing), `managementCompany`, and for listings fed by an MLS the `listingAgent` (broker and agent name) |
| Photos | `photos` (full-size links, no duplicates, in the site's order), `thumbnail`, `photoCount`, `videos`, `tours` |
| Search-match (filtered searches) | `matchingFloorPlans`, `matchingRentMin`, `matchingRentMax` |
| **Details** | `detailsStatus`, `description`, `highlights`, `amenities`, `amenitiesByCategory`, **`floorPlans`** (beds, baths, rent range, size, deposit, availability, offer, photos and **`units`** with unit id, rent, size and available date), `fees` (application, admin, broker, amenity and insurance fees, utilities included or tenant-paid), `petPolicies`, `parking`, `officeHours`, `leasingTerms`, `incomeRestrictions`, `walkScore`, `schools`, `totalUnits`, `companyDescription` |

The scraper adds one `_meta` block to every row (source link, search label, listing id, time).

**Photo sizes.** Each photo link is the full-size file. Insert `t_3x2_fixed_webp_lg/`, `t_3x2_fixed_webp_md/` or `t_3x2_fixed_webp_sm/` between `https://i.rent.com/` and the id for a smaller version (about 25, 13 and 7 KB). The `thumbnail` field already uses the medium one. Links only: no image files are downloaded or stored.

#### What is not returned

Said plainly, so there are no surprises:

- **Emails.** Rent.com does not publish an email address or a management-company website to visitors (none in 3,000 listings checked), so there is nothing to read. The optional **contact email** search only works for a listing that names a company website; it currently finds none, and **you are charged only when an address is found**.
- **A landlord's personal number.** `phone` is the call number Rent.com shows for the listing; it is empty when Rent.com shows none (about a quarter of the listings sampled) or the value is not a complete number.
- **Reviews, rent history, rent trends, neighbourhood articles, applications or tour booking.**
- **Photo files.** Links only.
- **Rooms-for-rent pages** and Rent.com's curated *cheap* and *luxury* pages, which are refused.
- **Hidden or logged-in data.** Nothing that needs an account is collected, and no account is needed.

#### Why use Rent.com Scraper on Apify?

Running it on Apify gives you **API access**, **scheduling**, **monitoring**, **integrations** (Make, Zapier, n8n, Google Sheets, webhooks) and **proxy rotation** without managing any infrastructure. Export results as JSON, CSV or Excel.

### How to scrape Rent.com listings

1. Open [Rent.com Scraper](https://apify.com/dz_omar/rent-com-scraper?fpr=smcx63) in Apify Console.
2. On rent.com, run your search with the filters you want and copy the page address. Paste it into **Search links**. Individual property addresses go in the same box.
3. Set **Maximum listings in total** (start small, for example `50`).
4. Click **Start**, then download the results as JSON, CSV or Excel, or fetch them over the API. Put the run on an Apify schedule to watch a market.

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

Pay only for what you get. Prices per event:

| Event | Price | When |
|---|---|---|
| Run start | $0.002 | once per run |
| Listing | $0.0005 | each listing delivered |
| Listing details | $0.0004 | add-on for each listing delivered with its details |
| Contact email | $0.01 | add-on for each distinct email address found in the run |

- **1,000 listings** cost about **$0.90** plus the run start (listing plus details).
- The details event is not charged for a listing for which Rent.com has none (that one costs $0.50 per 1,000), and a listing that was taken down is reported in an unpaid row.
- An email address is **charged once per run**, however many listings carry it.
- Set a **maximum cost per run** in Apify Console; the scraper reads it before collecting and stops at that limit. The whole run is also capped by **Maximum listings in total**.

### Input and output examples

#### Input

```json
{
  "searchUrls": [
    { "url": "https://www.rent.com/california/counties/el-dorado/apartments_townhouses_condos_houses_studio_1-bedroom_2-bedroom_min-price-200_max-price-1500_sort-price-low" },
    { "url": "https://www.rent.com/apartment/sugar-pine-village-south-lake-tahoe-ca-lc6244368" }
  ],
  "maxItems": 50,
  "findContactEmails": false
}
```

#### Output (a community listing, trimmed)

```json
{
  "id": "lc6244368",
  "listingType": "community",
  "name": "Sugar Pine Village",
  "url": "https://www.rent.com/apartment/sugar-pine-village-south-lake-tahoe-ca-lc6244368",
  "propertyType": "APARTMENTS",
  "city": "South Lake Tahoe",
  "state": "CA",
  "zip": "96150",
  "latitude": 38.9109237,
  "longitude": -120.0086724,
  "rentMin": 1263,
  "rentMax": 1968,
  "rentText": "$1,263+",
  "bedsText": "Studio–3 Beds",
  "bathsText": "1–2 Baths",
  "sqftText": "713–1072 Sqft",
  "availability": "Available Now",
  "availableNow": true,
  "deals": [{ "category": "Special Offer", "description": "Please ask us what our move in specials are." }],
  "thumbnail": "https://i.rent.com/t_3x2_fixed_webp_md/baba657f2ab7231db3b09579cde46d61",
  "photoCount": 25,
  "photos": [
    "https://i.rent.com/baba657f2ab7231db3b09579cde46d61",
    "https://i.rent.com/dfb0a06c033a76c0cc9b5014a4389cf6"
  ],
  "detailsStatus": "full",
  "amenities": ["Bicycle storage", "Bike-centric layout", "Cable", "Central mail"],
  "floorPlans": [
    { "id": "lc6244368_1mf47z1e5uvbu_2_1_0", "name": "2 Bedroom", "beds": 2, "baths": 1, "rentMin": 1713, "rentMax": 1713, "rentText": "$1,713/mo", "sqftMin": 713, "sqftMax": 713, "units": [] }
  ],
  "fees": { "application": "$30" },
  "petPolicies": [{ "type": "Dogs Allowed" }],
  "walkScore": { "walk": { "score": 62, "description": "Somewhat Walkable" }, "bike": { "score": 59, "description": "Bikeable" } },
  "_meta": { "_source": "rent-com-graphql", "listing_id": "lc6244368", "scraped_at": "2026-11-04T16:28:00.724Z" }
}
```

A listing that is no longer on Rent.com comes back as one unpaid row: `{ "_meta": { "type": "not_found", "message": "Rent.com has no listing for …", "source_url": "…" } }`.

### Actor recommendations

More real estate scrapers from FlowExtract API:

| Actor | What it adds |
|---|---|
| **[Zillow Scraper](https://apify.com/dz_omar/zillow-scraper?fpr=smcx63)** | US homes for sale and for rent from Zillow |
| **[Realtor.com Scraper](https://apify.com/dz_omar/realtor-scraper?fpr=smcx63)** | US listings from Realtor.com |
| **[Crexi Scraper](https://apify.com/dz_omar/crexi-scraper?fpr=smcx63)** | Commercial real estate with cap rate, NOI and brokers |

### FAQ

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

No. The scraper needs only the links, and it reads only listing data that Rent.com shows to any visitor: no login, no account and no cookies.

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

This is not legal advice. The scraper uses no login and bypasses no login or access control, and it collects listing information that is visible to anyone. **Rent.com's terms of service restrict automated access to its sites.** You are responsible for making sure your use complies with those terms, with the rights of whoever supplies a listing (many listings come from an MLS), and with data-protection law such as GDPR and CCPA. No affiliation with or endorsement by Rent.com is implied.

#### Does the output contain personal data?

It can. A listing carries business contact details published with it: the leasing phone number, a management-company name and, for MLS-fed listings, a broker and agent name (in `listingAgent`). Treat them as personal data where the law does: collect only what you need, keep it only as long as you need it, and honour opt-out and deletion requests. The scraper keeps no copy of it outside your own Apify account's run dataset.

#### Why does a filter in my link get my run refused?

Because the scraper would rather stop than return a wider list. Rent.com's *cheap* and *luxury* pages are curated lists with no equivalent filter, rooms-for-rent pages have no room filter, and a minimum price above the maximum price would otherwise drop both prices. The message names the problem; use a maximum price, bedroom or amenity filter instead.

#### How do the filters in my link work?

The place (city, ZIP, neighbourhood, county, college, base, point of interest or state) and the property type in the page name (`-apartments`, `-houses`, …) come from the address. Every filter word is read with Rent.com's own dictionary, exactly as the site reads it: price (`min-price-`, `max-price-`, $200 to $99,999), size (`sqft-min-100` to `sqft-min-1600`), bedrooms (`studio`, `1-bedroom` to `4-bedroom` = 4 or more), bathrooms (`1-bathroom`, `2-bathroom`, `3-bathroom` = 3 or more), property types, pets (`pet-friendly`, `dog-friendly`, `cat-friendly`, `no-pets`), amenities (`view`, `pool`, `waterfront`, `furnished`, `ev-charging`, … about 40), and the sort order; `moveInDate` and `withDeals` in the query string too. The map area (`bbox=`) is applied as Rent.com applies it. A word Rent.com does not know is named in the run log, as is any link parameter the scraper does not use.

#### What if my link has several filters?

They are combined: every filter type narrows the result (bedrooms AND bathrooms AND price AND size AND property type …), and several values of bedrooms, bathrooms or property type are alternatives (*studio* and *1-bedroom* means either), while several amenities must all be present (*pool* and *fitness center* means both). The scraper sends them to Rent.com's own search as one request and Rent.com does all the filtering; nothing is filtered afterwards. **A map area is kept too:** when you move or zoom the map on rent.com, the link gets a `bbox=` part, and only listings inside that area are collected. The run log prints the filters sent and Rent.com's count, so you can compare it with the page. On a filtered search each row also shows which floor plans match and their rent.

#### Why does a listing come back without details?

For a small share of listings Rent.com has no floor plans, amenities or description. They are delivered with `detailsStatus: "summary_only"` and you are not charged the details event.

#### How many listings can I collect?

Up to **Maximum listings in total**, at most 100,000 per run. A whole-state search can match tens of thousands.

#### Can I use it in Make, Zapier, n8n or my own code?

Yes. Use the Apify API or any client library, a webhook on run completion, or a no-code integration.

#### What happens if a run is interrupted?

It saves progress and resumes without delivering or charging the same listing twice.

#### Why did my run return fewer results than I asked for?

The search matches fewer listings than your maximum, links were refused or not found (each is reported), or the run reached its cost limit. The final status message says which.

#### Where can I get support?

See below, or open an issue on the Actor's Issues tab.

### Support

- 🌐 **Website:** [flowextractapi.com](https://flowextractapi.com)
- 📧 **Email:** <flowextractapi@outlook.com>
- 💬 **GitHub:** [FlowExtractAPI](https://github.com/FlowExtractAPI)
- 💼 **LinkedIn:** [flowextract-api](https://www.linkedin.com/in/flowextract-api/)
- 🐦 **X (Twitter):** [@FlowExtractAPI](https://x.com/FlowExtractAPI)
- 📱 **Facebook:** [flowextractapi](https://www.facebook.com/flowextractapi)
- 🎵 **TikTok:** [@flowextractapi](https://www.tiktok.com/@flowextractapi)

### Legal & compliance

- **Public listing data only** — only listing information that Rent.com shows to any visitor; no login, no account, no cookies, and nothing behind a login or access control.
- **Moderate request rates** — modest request volumes, with back-off when the service slows down.
- **Terms of use** — Rent.com's terms of service restrict automated access to its sites; you are responsible for making sure your use complies with them.
- **Personal data** — listings can carry business contact details and, for MLS listings, an agent's name; use them in line with GDPR, CCPA and the other laws that apply to you. The scraper keeps no copy of your results outside your own Apify account.
- **Commercial use** — suitable for market research and business intelligence, subject to the points above.
- No affiliation with or endorsement by Rent.com is implied.

***

*Rent.com Scraper — by FlowExtract API. Turn any website into structured data.*

# Actor input Schema

## `searchUrls` (type: `array`):

Paste <b>rent.com</b> links, one per line. <ul><li><b>Search results</b> — a city, ZIP code, neighbourhood, county, college or military-base page with the filters you set on the site, e.g. <code>https://www.rent.com/california/los-angeles-apartments</code> or <code>https://www.rent.com/california/counties/el-dorado/apartments_townhouses_condos_houses_studio_1-bedroom_2-bedroom_min-price-200_max-price-1000_sort-price-low</code>. Every filter word in the link (price, bedrooms, bathrooms, size, property type, pets, amenities, sort) is read with Rent.com's own link dictionary and applied by Rent.com's search; the run log shows the filters sent and Rent.com's count. Curated <i>cheap</i> / <i>luxury</i> pages and rooms-for-rent pages are refused, so the results are never silently widened.</li><li><b>One listing</b> — a property page such as <code>https://www.rent.com/apartment/sugar-pine-village-south-lake-tahoe-ca-lc6244368</code> or a single unit or house such as <code>https://www.rent.com/r/4125-holdrege-st-lincoln-ne-lv1231139509</code>. A listing that is no longer on Rent.com comes back as one unpaid row.</li></ul>Search and listing links can be mixed. A listing found by several links is delivered once. Links from other websites are rejected.

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

The run stops after this many listings, counted across all links. Always capped: 1 to 100,000. Rent.com lists tens of thousands of rentals for a whole state, so raise it deliberately. The run's <i>maximum cost</i> setting in Apify Console also applies.

## `findContactEmails` (type: `boolean`):

Reads the property management company's own public website named on the listing (home page and up to two contact or about pages, honouring robots.txt) for business emails, and lists the general addresses (leasing@, info@) or the ones that carry the community's name. Best effort: Rent.com rarely names a company website, so many runs find none, and addresses are not verified. Charged once for each distinct address found in the run, and nothing when none is found.

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.rent.com/california/counties/el-dorado/apartments_townhouses_condos_houses"
    }
  ],
  "maxItems": 100,
  "findContactEmails": 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 = {
    "searchUrls": [
        {
            "url": "https://www.rent.com/california/counties/el-dorado/apartments_townhouses_condos_houses"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dz_omar/rent-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 = { "searchUrls": [{ "url": "https://www.rent.com/california/counties/el-dorado/apartments_townhouses_condos_houses" }] }

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/rent-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 '{
  "searchUrls": [
    {
      "url": "https://www.rent.com/california/counties/el-dorado/apartments_townhouses_condos_houses"
    }
  ]
}' |
apify call dz_omar/rent-com-scraper --silent --output-dataset

```

## MCP server setup

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