# Apartments Scraper API  🏡 - No platform costs, No Proxies (`epctex/apartments-scraper-api`) Actor

Scrape apartments and rental listings from Apartments.com. Extract property details, pricing, amenities, reviews, images, walk scores, and more. Pay-per-event pricing - only pay for what you use. Each listing page includes 20 properties free. Supports both listing URLs and individual property URLs.

- **URL**: https://apify.com/epctex/apartments-scraper-api.md
- **Developed by:** [epctex](https://apify.com/epctex) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 423 total users, 56 monthly users, 100.0% runs succeeded, 20 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $10.00 / 1,000 list page queries

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

## 🏠 Apartments Scraper API

***

✅ **No additional platform costs. No proxies needed. You only pay for the data you get.**

💡 You can also try it with your monthly free credits!

***

Since Apartments.com doesn't provide a proper free API, this actor helps you retrieve data from it with a transparent pay-per-event model.

### 🏢 Features

- **Scrape Listings** - Provide any listing URL and scrape all properties from it
- **Apply Any Filter** - Use any filter provided by the website through URL parameters
- **Property Details** - Scrape detailed property information including amenities, fees, schools, and more
- **Optional Extras** - Enable reviews, images, virtual tours, interior amenities, and walk scores
- **Limit Results** - Control the number of results by page count or total items

### 💰 Pricing Model

Our transparent event-based pricing ensures you only pay for what you use:

#### Event Costs

| Event | Cost | Description |
|-------|------|-------------|
| List Query | $0.01 | Each listing page request (includes first 20 dataset items free) |
| Detail Query | $0.005 | When you provide a property detail URL directly |
| Dataset Item | $0.0005 | Each property saved to output (after first 20 per list query) |
| Get Reviews | $0.0002 | Fetching reviews for a property |
| Get Visuals | $0.0002 | Fetching images and virtual tours |
| Get Interior Amenities | $0.0001 | Fetching interior amenity details |
| Get Walk Score | $0.0001 | Fetching walk/transit scores |

> **Note:** Each list query includes the first 20 dataset items for free. You only pay for items beyond that.

> **When you're charged:** You only pay for data you receive. A query is charged once when the source answers, including when it finds no results or the item doesn't exist. Failed requests, aborted runs and results beyond your maximum items or maximum cost are never charged. Free-plan runs that are rejected by plan limits, or that can't start within the plan's budget, are charged a small fee.

#### Cost Examples

1. **Scraping a Listing Page (20 properties)**:
   - 1 list query: $0.01
   - 20 dataset items: included
   - **Total: $0.01**

2. **Scraping a Listing Page (25 properties)**:
   - 1 list query: $0.01
   - First 20 dataset items: included
   - 5 dataset items: $0.0025
   - **Total: ~$0.0125**

3. **Scraping a Single Property URL**:
   - 1 detail query: $0.005
   - 1 dataset item: $0.0005
   - **Total: $0.0055**

4. **With All Options Enabled (25 properties from listing)**:
   - 1 list query: $0.01
   - First 20 dataset items: included
   - 5 dataset items: $0.0025
   - 25 reviews: $0.005
   - 25 visuals: $0.005
   - 25 interior amenities: $0.0025
   - 25 walk scores: $0.0025
   - **Total: ~$0.0275**

#### Cost Optimization Tips

1. Only enable extras (reviews, visuals, etc.) when you need them
2. Use `maxItems` to limit results if you don't need all properties

### Demo Mode

On Apify's Free plan this actor runs in demo mode. You get **5 runs each month**, and every run is limited to **10 items**. Upgrade to a paid plan for unlimited access: [Subscribe here](https://apify.com/pricing?fpr=yhdrb).

### 📥 Input Parameters

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| startUrls | Array | URLs to start with. Can be listing or property detail URLs | `[]` |
| search | String | Location keyword that you would like to search the properties in. | `""` |
| includeReviews | Boolean | Enable reviews from detail pages | `false` |
| includeVisuals | Boolean | Enable images and virtual tours from detail pages | `false` |
| includeInteriorAmenities | Boolean | Enable interior amenities from detail pages | `false` |
| includeWalkScore | Boolean | Enable walk score from detail pages | `false` |
| maxItems | Integer | Maximum number of items on output | `1000` |
| outputConnector | String | MCP connector to deliver the results to — pick one (see [Send Results to Notion, Todoist and More](#-send-results-to-notion-todoist-and-more)). | - |
| deliverTarget | String | Where the connector writes — paste the URL or ID (Notion example: `https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b`); some services need none. | - |
| deliverMode | String | `perPost` (one record per property) or `summary` (one roll-up per run). | `perPost` |
| deliverMaxItems | Integer | Optional cap on how many records `perPost` delivers (ignored in `summary`). | - |

#### Input Example

```json
{
    "startUrls": [
        "https://www.apartments.com/brooklyn-ny/",
        "https://www.apartments.com/sobe-apartment-rentals-miami-beach-fl/26xc7jb/"
    ],
	"search": "2424 W Caithness Place, Denver, CO 80211",
    "includeReviews": true,
    "includeVisuals": true,
    "includeInteriorAmenities": true,
    "includeWalkScore": true,
    "maxItems": 50
}
```

#### Tips

- You can mix property detail URLs and listing URLs in **startUrls**
- When you want to scrape a specific property, just copy and paste the property URL as one of the **startUrls**
- Apply any filters on Apartments.com website, then copy/paste the filtered URL as a **startUrl**

### 🔌 Send Results to Notion, Todoist and More

Skip the manual exports — the Apartments Scraper API can deliver its results directly into the tools you already work in, through [Apify MCP Connectors](https://apify.com/store/collections/mcp-connectors):

1. Authorize a connector (Notion, Todoist, or any service whose MCP server offers non-destructive write tools) once in [Console → Settings → API & Integrations → MCP connectors](https://console.apify.com/settings/integrations).
2. Pick it from the **Send results to Notion, Todoist, …** dropdown.
3. Fill in where and how to write:
   - **Destination target** — paste the URL or ID (Notion example: `https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b`); share it with your connector first via Notion's **••• → Connections** menu. For structured columns use a **page** URL (the Actor builds the database for you) or a database that **already has columns** — an empty database only receives titles. (Some services need no target.)
   - **Write mode** — `perPost` writes one record per property; `summary` writes a single roll-up for the run.
   - **Max records to deliver** *(optional)* — cap on how many records `perPost` delivers.

**Notion, structured like a spreadsheet:** for a table of typed columns, point the target at a Notion **page** — the Actor auto-creates a database from the data, one matching, correctly-typed column per field (URL, number, date, text). Pointing at an **existing database** fills the columns it already has (matched by name); an **empty database** receives only the title, and the rest of each record goes to the row body — the connector can't add columns to an existing database without destructive access it never requests. Nested fields are flattened into columns too — e.g. `location.city` and `rent.min` become their own columns — so everything is sortable and filterable in the grid. Fields that don't fit a column go to the row's page body, so nothing is lost.

Your credentials stay yours: the Actor talks to your services exclusively through your own authorized connector and only ever uses non-destructive write tools — it cannot delete or overwrite anything you already have. Delivery is best-effort and runs after the scrape: if a connector is misconfigured or a delivery fails, your run still finishes normally with all results intact — the failure is reported in the run log, never by failing the run. If the run is about to hit its timeout, delivery stops early so the run still succeeds, and the log tells you how many records were delivered.

### 📤 Output Example

```json
{
	"id": "ppks2dr",
	"propertyName": "Shorecrest Towers",
	"url": "https://www.apartments.com/shorecrest-towers/ppks2dr/",
	"lastUpdated": "2 weeks ago",
	"location": {
		"fullAddress": "2940-3000 Ocean Pky, Brooklyn, NY 11235",
		"state": "NY",
		"city": "Brooklyn",
		"neighborhood": "Coney Island",
		"postalCode": "11235",
		"streetAddress": "2940-3000 Ocean Pky"
	},
	"coordinates": {
		"latitude": 40.5795559,
		"longitude": -73.9684914
	},
	"rating": 4,
	"rent": {
		"min": 2800,
		"max": 4050
	},
	"beds": "1 bd - 2 bd",
	"baths": "1 ba",
	"sqft": "1,100 - 690,825 sq ft",
	"transportation": [
		{
			"name": "John F Kennedy International",
			"walk": "302 min",
			"drive": "22 min",
			"distance": "15.4 mi"
		},
		{
			"name": "Newark Liberty International",
			"walk": "421 min",
			"drive": "38 min",
			"distance": "24.0 mi"
		},
		{
			"name": "Grasmere",
			"walk": "230 min",
			"drive": "16 min",
			"distance": "8.9 mi"
		},
		{
			"name": "Old Town",
			"walk": "242 min",
			"drive": "17 min",
			"distance": "9.2 mi"
		},
		{
			"name": "Clifton",
			"walk": "200 min",
			"drive": "17 min",
			"distance": "9.3 mi"
		},
		{
			"name": "Stapleton",
			"walk": "191 min",
			"drive": "19 min",
			"distance": "10.0 mi"
		},
		{
			"name": "Dongan Hills",
			"walk": "253 min",
			"drive": "19 min",
			"distance": "10.1 mi"
		},
		{
			"name": "Ocean Parkway",
			"walk": "6 min",
			"drive": "0 min",
			"distance": "0.2 mi"
		},
		{
			"name": "Neptune Avenue",
			"walk": "8 min",
			"drive": "2 min",
			"distance": "0.7 mi"
		},
		{
			"name": "Brighton Beach",
			"walk": "11 min",
			"drive": "2 min",
			"distance": "0.6 mi"
		},
		{
			"name": "West 8 Street-New York Aquarium",
			"walk": "15 min",
			"drive": "3 min",
			"distance": "0.6 mi"
		},
		{
			"name": "Coney Island-Stillwell Avenue",
			"walk": "15 min",
			"drive": "3 min",
			"distance": "1.1 mi"
		}
	],
	"transitAndPOI": [
		{
			"name": "John F Kennedy International",
			"walk": "302 min",
			"drive": "22 min",
			"distance": "15.4 mi"
		},
		{
			"name": "Newark Liberty International",
			"walk": "421 min",
			"drive": "38 min",
			"distance": "24.0 mi"
		},
		{
			"name": "Grasmere",
			"walk": "230 min",
			"drive": "16 min",
			"distance": "8.9 mi"
		},
		{
			"name": "Old Town",
			"walk": "242 min",
			"drive": "17 min",
			"distance": "9.2 mi"
		},
		{
			"name": "Clifton",
			"walk": "200 min",
			"drive": "17 min",
			"distance": "9.3 mi"
		},
		{
			"name": "Stapleton",
			"walk": "191 min",
			"drive": "19 min",
			"distance": "10.0 mi"
		},
		{
			"name": "Dongan Hills",
			"walk": "253 min",
			"drive": "19 min",
			"distance": "10.1 mi"
		},
		{
			"name": "Ocean Parkway",
			"walk": "6 min",
			"drive": "0 min",
			"distance": "0.2 mi"
		},
		{
			"name": "Neptune Avenue",
			"walk": "8 min",
			"drive": "2 min",
			"distance": "0.7 mi"
		},
		{
			"name": "Brighton Beach",
			"walk": "11 min",
			"drive": "2 min",
			"distance": "0.6 mi"
		},
		{
			"name": "West 8 Street-New York Aquarium",
			"walk": "15 min",
			"drive": "3 min",
			"distance": "0.6 mi"
		},
		{
			"name": "Coney Island-Stillwell Avenue",
			"walk": "15 min",
			"drive": "3 min",
			"distance": "1.1 mi"
		}
	],
	"specials": null,
	"schools": {
		"public": [
			{
				"type": "PreK & Elementary",
				"name": "Ps 100 The Coney Island School",
				"grades": "PK-5",
				"numberOfStudents": "615"
			},
			{
				"type": "Elementary, Middle School & High School",
				"name": "Ps 370",
				"grades": "K-12",
				"numberOfStudents": "246"
			},
			{
				"type": "Middle School",
				"name": "Is 303 Herbert S Eisenberg",
				"grades": "6-8",
				"numberOfStudents": "383"
			},
			{
				"type": "High School",
				"name": "Abraham Lincoln High School",
				"grades": "9-12",
				"numberOfStudents": "2,129"
			}
		],
		"private": [
			{
				"type": "PreK, Elementary & Middle School",
				"name": "Mazel Day School (F.R.E.E.)",
				"grades": "PK-8",
				"numberOfStudents": "71"
			},
			{
				"type": "High School",
				"name": "Yda Elite High School",
				"grades": "9-12",
				"numberOfStudents": ""
			}
		]
	},
	"fees": [
		{
			"title": "Details",
			"policies": [
				{
					"header": "Lease Options",
					"values": [
						{
							"key": "12 - 24 mo",
							"value": ""
						}
					]
				},
				{
					"header": "Property Information",
					"values": [
						{
							"key": "Built in 1964",
							"value": ""
						},
						{
							"key": "439 units/23 stories",
							"value": ""
						},
						{
							"key": "Furnished Units Available",
							"value": ""
						}
					]
				}
			]
		},
		{
			"title": "Fees",
			"policies": [
				{
					"header": "Other Fees",
					"values": [
						{
							"key": "Administrative Fee",
							"value": "$20"
						},
						{
							"key": "Security Deposit",
							"value": "$2,800"
						}
					]
				},
				{
					"header": "Parking",
					"values": [
						{
							"key": "Street",
							"value": ""
						},
						{
							"key": "Parking",
							"value": ""
						}
					]
				}
			]
		}
	],
	"description": "Welcome to the new Shorecrest Towers in the heart of Brighton Beach. A reinvention of a South Brooklyn icon, this classic brick, two-building complex offers no fee, no security deposit studio-to-three-bedroom apartments with Atlantic Ocean views. Just two blocks from the beach and close to the B/Q trains, residents can enjoy more than just the view! Each apartment interior has been updated with condo style finishes to be as comforting and inviting inside as the ocean views outside. Select units feature private balconies with tranquil Coney Island beach and Atlantic Ocean views or spanning Brooklyn and Manhattan skyline vistas.\n\nPlease inquire about our competitive prices and incentives. \n\n**Pay Only $300.00 For parking**\nGYM $35",
	"amenities": [
		{
			"title": "Community Amenities",
			"value": [
				"Laundry Facilities",
				"Furnished Units Available",
				"Package Service",
				"Storage Space",
				"Elevator",
				"Lounge",
				"Fitness Center",
				"Playground",
				"Can Be Furnished",
				"One Or Two Year Lease Available",
				"Rent Includes Heat Hot Water And Cooking Gas",
				"Gym, Parking",
				"Renovated",
				"Stainless Steel Appliances",
				"Ample Closets",
				"Separate Kitchen",
				"Dining Area",
				"Oak Floors",
				"Windowed Kitchen",
				"Gym, Parking, Etc.",
				"Private Outdoor Space"
			]
		},
		{
			"title": "Interior Amenities",
			"value": [
				"Air Conditioning",
				"Cable Ready",
				"Fireplace",
				"Heating",
				"Dishwasher",
				"Microwave",
				"Kitchen",
				"Refrigerator",
				"Stainless Steel Appliances",
				"Instant Hot Water",
				"Hardwood Floors",
				"Views",
				"Dining Room",
				"Furnished",
				"Balcony"
			]
		}
	],
	"contact": {
		"phone": "(929) 552-5397",
		"name": "Cammeby's"
	},
	"score": {
		"walkScore": 94,
		"transitScore": 98
	},
	"photos": [
		"https://images1.apartments.com/i2/-nJoFKYtdXuDW70xtjzufJtoeb6m5EwEo6jo3UndS0A/102/image.jpg",
		"https://images1.apartments.com/i2/c2peT_HI8JI7vac8hE7iydd1MFtdS75WEqfVNE8IVII/102/image.jpg",
		"https://images1.apartments.com/i2/RxLwn88i58QZu7inulTFtdWva-WJ-7TdruUe5TZwdDY/119/image.jpg",
		"https://images1.apartments.com/i2/bkkoQr-49ynE_B6oYlE2i6-_VVqmHrv7sTJuy4ixjz8/102/image.jpg",
		"https://images1.apartments.com/i2/hu-KXQn1t1g6w7bzMNxQk2OSbGN0VnV3C9eW71rLa78/119/image.jpg",
		"https://images1.apartments.com/i2/9jqdstb8Qhu8ud3KTkJEHYBjyC5bXs3c7cOgTTgABLE/102/image.jpg",
		"https://images1.apartments.com/i2/DTzTqtlW0c765808aNEIvuGUlkExSeFiJNOW1EZRBWE/119/image.jpg",
		"https://images1.apartments.com/i2/TsanH68Y1U33HCOPv4dKEBN054XFgtkeNCS8f673OdQ/102/image.jpg",
		"https://images1.apartments.com/i2/EOqYNGg9GZPih0n-T4CHJspockaymzNT-0mwEJSUpQw/119/image.jpg",
		"https://images1.apartments.com/i2/10t-2hVMXS9iYqPrBdTUklOStGNUOiBOty7MByafBfs/102/image.jpg",
		"https://images1.apartments.com/i2/DjtV_TLTn9x47gOhAzxfumxMwl_L0RjQo2Tl53Am-YU/119/image.jpg",
		"https://images1.apartments.com/i2/jbyucrLeQColsIqYmtCaykt8Z7K43QnKkSIkNicxVzk/118/image.jpg",
		"https://images1.apartments.com/i2/NJHYwgkw0HI88JS5377590vrVZne4Pn9nfQZ-b3EERk/114/image.jpg",
		"https://images1.apartments.com/i2/29zsmxBkQryp8JMiX56bnpDT0lCJHiYZ67cKg5WB5pE/119/image.jpg",
		"https://images1.apartments.com/i2/2kXVuELR0MTm4_ATRS29mqChKXfxGmayfUGtkGicUKY/117/image.jpg",
		"https://images1.apartments.com/i2/tyfM10IKWk7Bbbv_AkoSshv7c0P03vOmcaBX6ezWs7g/102/image.jpg",
		"https://images1.apartments.com/i2/4Go4u2_q1GtdsBlhoek6MJpYDcnRHLZ9GbCofrlBvQU/102/image.jpg",
		"https://images1.apartments.com/i2/T_Lw6NtQWd7XuDNRSW8KQ__1jIJqV_hh81FxtgcVCCY/119/image.jpg",
		"https://images1.apartments.com/i2/74c9hRAqgKvNPznLuuHF0fvoAduj9cf3wH0bxmqWIsE/104/image.jpg",
		"https://images1.apartments.com/i2/17nV2--V9ESoSdMHwRpwX7rMzf54Efam9LOZzQKLLyA/119/image.jpg"
	],
	"floorPlans": [
		"https://images1.apartments.com/i2/floor-plan1.jpg",
		"https://images1.apartments.com/i2/floor-plan2.jpg",
		"https://images1.apartments.com/i2/floor-plan3.jpg",
		"https://images1.apartments.com/i2/floor-plan4.jpg"
	],
	"virtualTours": [],
	"virtualTourExtended": [],
	"reviews": [
		{
			"key": "83xgwf3",
			"title": "Trump Village 1",
			"text": "After three years of struggle in U.S. as a new immigrant I was finally able to rent the apartment that I always wanted. I loved because of nice neighborhood, view and location (very close to train, shopping are and the beach). It has been a year since I moved there and since then, they renovated all four elevators, lobby and laundry. All staff are friendly and supportive. I didn't have any major issue with the service but the minor problems were solved at no time!",
			"isOwner": false,
			"submissionDate": "2015-07-23T12:00:06-05:00",
			"rating": 5,
			"positiveFeedbackCount": 30
		},
		{
			"key": "fdcncjs",
			"title": "Shorecrest Towers",
			"text": "Shorecrest Towers (formerly knows as Trump Village) are great choice if you're looking for comfortable and nice home. This building is close to train, famous shopping areas and has everything you need from laundry to courtyard. The view of Atlantic Ocean is just indescribable. The staff is very helpful and will try to solve all of your needs in no time.",
			"isOwner": false,
			"submissionDate": "2015-09-01T14:45:07-05:00",
			"rating": 5,
			"positiveFeedbackCount": 48
		},
		{
			"key": "6g8jpgt",
			"title": "Anna's apartment",
			"text": "Apartment is great as well as management ! Building always clean ! I recommend to rent  but $$$!",
			"isOwner": false,
			"submissionDate": "2015-08-14T12:15:07-05:00",
			"rating": 5,
			"positiveFeedbackCount": 22
		},
		{
			"key": "9mnb5z6",
			"title": "Mediocre",
			"text": "Great location. Many apartments have nice views. Plenty of amenities that don't necessarily come with the cost of rent which is fine if they would tell you that up front. Parking is 330/mo on top of rent. Gym access is 30 some odd dollars a month, on top of rent. They advertise no security deposit but it's really just because they changed the name of the security deposit...you still pay 2 months rent up front. Which is cool...there's just no need for sneaky advertisements.\nStaffing is less than friendly/helpful as far as I've seen...when they're in the office (not often)",
			"isOwner": false,
			"submissionDate": "2016-02-08T13:45:07-05:00",
			"rating": 2,
			"positiveFeedbackCount": 87
		},
		{
			"key": "sdyvgj7",
			"title": "Deposit",
			"text": "Kept security deposit without a proper explanation. Stop returning calls a day email.",
			"isOwner": false,
			"submissionDate": "2017-06-29T12:45:45.967-05:00",
			"rating": 1,
			"positiveFeedbackCount": 26
		},
		{
			"key": "8l15qy2",
			"title": "Worst building ever ",
			"text": "Run run run don’t waste your money I wish I didn’t need to stay here and can’t wait to get out as far as possible the worst building and management ever! Plumbing and heating system is so old there are constant leaks and no heat entire winter having daily fights with management and they just cannot fix because it’s so old. Dog poop and urine is everywhere inside and outside the building it reeks. Roaches, bed bugs, mice infested you name it. Disgusting people Who don’t clean up after dogs and who throw burning cigarettes from their windows and balconies that fall on cars on my terrace a few times when my child was playing there, on me actually thank for it landed on my jacket and not on my face. Don’t be filled by the beautiful lobby and renovated apartments if you’re lucky.  ",
			"isOwner": false,
			"submissionDate": "2020-02-24T11:57:45.45-05:00",
			"rating": 1,
			"positiveFeedbackCount": 22
		},
		{
			"key": "jz554v6",
			"title": "Great Service!",
			"text": "Amazing job clearing snow after the recent Blizzard.\n\nI went down to clear off my car just as the final flakes were falling and was amazed to see that the parking lot had already been plowed down to clear blacktop and the sidewalks and steps were also cleared as well.\n\nAs soon as I backed out of my parking spot, the crew came by and plowed my spot clean! \n\nCouldn't imagine better service!",
			"isOwner": false,
			"submissionDate": "2022-02-25T09:56:45.477-05:00",
			"rating": 5,
			"positiveFeedbackCount": 1
		},
		{
			"key": "0e1xls2",
			"title": "RUN FOR YOUR OWN SANITY",
			"text": "These buildings are the luxury projects.\nEverything is made cheaply.\nManagement is complete BS, they will not address any concerns.\nIts a complete zoo.\nSurrounding the building its reeks of dog urine\nBarking all day\nNeighbors that look into your apartments\nOver priced parking\n\njust dont rent here",
			"isOwner": false,
			"submissionDate": "2022-08-23T12:23:26.18-05:00",
			"rating": 1,
			"positiveFeedbackCount": 6
		}
	]
}
```

### 🔧 Troubleshooting

- **Getting Few Results?** Check the `maxItems` field to ensure it's not too restrictive
- **Missing Data?** Some optional data (reviews, visuals, etc.) requires enabling the corresponding option
- **No Results?** Verify your startUrls are valid Apartments.com listing or property URLs

### 📞 Contact

Please visit us through [epctex.com](https://epctex.com) to see all the products that are available for you. If you are looking for any custom integration or so, please reach out to us through the chat box in [epctex.com](https://epctex.com). In need of support? <business@epctex.com> is at your service.

# Actor input Schema

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

URLs to start with. Can be listing or property detail URLs

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

Search query to use for the search. Can be a city, state, or zip code.

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

Include reviews for each property. Additional cost applies.

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

Include images and virtual tours for each property. Additional cost applies.

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

Include interior amenities for each property. Additional cost applies.

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

Include walk score for each property. Additional cost applies.

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

Maximum number of items that you want as output.

## `outputConnector` (type: `string`):

Pick an MCP connector you authorized in Console → Settings → API & Integrations → MCP connectors (e.g. Notion, Todoist — any service whose MCP server offers non-destructive write tools works best-effort). The scraped results are written through your own connector — the Actor never sees your third-party credentials. Only non-destructive write tools are used; it can never delete or overwrite your existing data.

## `deliverTarget` (type: `string`):

Where to write into the connector — paste the URL or ID. Notion example: https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b. Leave empty for services that need no target (e.g. Todoist Inbox, Slack). For Notion, share the page or database with your connector first (Notion's ••• → Connections menu), and point at a PAGE for structured columns (the Actor builds the database for you) — an empty database receives only the title (the rest of each record goes to the row's body).

## `deliverMode` (type: `string`):

perPost writes one record per scraped property; summary writes a single roll-up for the run.

## `deliverMaxItems` (type: `integer`):

Cap on how many records perPost mode writes to the connector; ignored in summary mode. Leave empty to deliver everything scraped.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.apartments.com/brooklyn-ny/"
  ],
  "search": "2424 W Caithness Place, Denver, CO 80211",
  "includeReviews": false,
  "includeVisuals": false,
  "includeInteriorAmenities": false,
  "includeWalkScore": false,
  "maxItems": 1000,
  "deliverMode": "perPost"
}
```

# Actor output Schema

## `overview` (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": [
        "https://www.apartments.com/brooklyn-ny/"
    ],
    "search": "2424 W Caithness Place, Denver, CO 80211",
    "maxItems": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("epctex/apartments-scraper-api").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": ["https://www.apartments.com/brooklyn-ny/"],
    "search": "2424 W Caithness Place, Denver, CO 80211",
    "maxItems": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("epctex/apartments-scraper-api").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": [
    "https://www.apartments.com/brooklyn-ny/"
  ],
  "search": "2424 W Caithness Place, Denver, CO 80211",
  "maxItems": 1000
}' |
apify call epctex/apartments-scraper-api --silent --output-dataset

```

## MCP server setup

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

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/RloufiEC7cXilEMhI/builds/iaKbyfGNIhmqBPVwL/openapi.json
