# Apartments.com Detail Scraper — Rental Dossier API by URL/ID (`sian.agency/apartments-com-detail-scraper`) Actor

Paste an apartments.com URL, listing ID, or address and get one clean rental dossier per property: rent range, floorplans and unit prices, amenities, fees, pet policy, lease terms, schools, and transit. Optional Walk Score, photos, per-unit costs, reviews, and similar-property add-ons.

- **URL**: https://apify.com/sian.agency/apartments-com-detail-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.50 / 1,000 rental property dossiers

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Apartments.com Detail Scraper — Full Rental Dossiers by URL, ID or Address 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store Apartments.com Search](https://img.shields.io/badge/Store-Apartments.com%20Search-1AE392)](https://apify.com/sian.agency/apartments-com-property-scraper?fpr=sian) [![Store StreetEasy Scraper](https://img.shields.io/badge/Store-StreetEasy%20Scraper-FF4747)](https://apify.com/sian.agency/streeteasy-property-scraper?fpr=sian) [![Store Redfin Scraper](https://img.shields.io/badge/Store-Redfin%20Scraper-A02021)](https://apify.com/sian.agency/redfin-property-scraper?fpr=sian)

#### 🎉 One apartments.com URL, listing ID, or address → one complete rental dossier
##### Rent range, every floorplan and unit price, amenities, fees, pet policy, lease terms, schools, and transit — for renters, PropTech teams, and rental data pipelines

---

### 📋 Overview

**Need everything about ONE apartments.com rental, not a page of search cards?** This is the detail companion to a saturated field of search scrapers: paste a listing URL, listing ID, or street address and get a single, structured rental-decision dossier per property.

**Why professionals choose us:**
- ✅ **The full rental dossier in one call**: rent range, floorplans with unit-level pricing, amenities, fee schedule, pet policy, lease terms, office hours, management, assigned schools, and nearby transit — all in one row.
- ⚡ **Three ways to look up**: apartments.com URL, listing ID, or street address — perfect for whatever your data already has.
- 🎯 **Built to enrich search output**: feed the listing IDs any apartments.com search scraper returns and get a complete dossier for each.
- 💰 **Pay only for what resolves**: not-found lookups are never billed; add-ons are charged only when they return data.
- 💎 **Rental-decision fields the search scrapers skip**: per-floorplan rent, pet fees and weight limits, true fee load, lease terms, schools, and transit.
- ✨ **NEW**: opt-in Walk Score, photo gallery, numeric per-unit rental costs, resident reviews, and similar-property add-ons.

---

### ✨ Features

- 🏢 **Full Rental Dossier**: one clean row per property with 40+ curated fields.
- 🗂 **Floorplans & Units**: model name, beds, baths, area, rent range, deposit, and availability for every unit.
- ✨ **Amenities**: community and unit amenities grouped by category.
- 🧾 **Fee Schedule**: application, admin, deposit, and custom fees with amounts and refundable/recurring flags.
- 🐾 **Pet Policy**: allowed pets, fees, weight and pet limits, and breed restrictions.
- 📄 **Lease Terms**: min/max/standard lease lengths in months.
- 🏫 **Schools & Transit**: assigned schools with ratings and nearby transit stops with distance and commute times.
- 🚶 **Walk Score add-on**: walk, transit, and bike scores (0–100).
- 📸 **Photos add-on**: the full image gallery with captions.
- 💵 **Rental Costs add-on**: exact numeric min/max rent and one-time costs per unit.
- ⭐ **Reviews & Similar add-ons**: resident reviews and comparable nearby buildings.

---

### 🎬 Quick Start

Paste one or more apartments.com URLs, listing IDs, or addresses, click **Start**, and collect one rental dossier per property from the dataset. Toggle any add-on for extra detail. Run with no input to see a live demo dossier.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~apartments-com-detail-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"propertyIds": ["0smfmv0"]}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Provide properties

Paste apartments.com listing URLs, listing IDs, or street addresses — one per line, mixed freely.

#### Step 2: Choose add-ons (optional)

Toggle Walk Score, photos, per-unit rental costs, reviews, or similar properties for extra detail.

#### Step 3: Run and export

Click **Start**. Export your dossiers as JSON, CSV, or Excel from the dataset.

**That's it! In under a minute, you'll have:**

- One complete rental dossier per property
- Floorplan-level rent, amenities, fees, pet policy, and lease terms
- Clean structured data ready for your CRM, spreadsheet, or warehouse

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| propertyUrls | array | No | apartments.com listing URLs (one per line) |
| propertyIds | array | No | apartments.com listing IDs, e.g. `0smfmv0` |
| addresses | array | No | Full US street addresses |
| includeWalkScore | boolean | No | Add walk/transit/bike scores (add-on) |
| includePhotos | boolean | No | Add the full photo gallery (add-on) |
| includeRentalCosts | boolean | No | Add numeric per-unit rental costs (add-on) |
| includeReviews | boolean | No | Add resident reviews (add-on) |
| includeSimilar | boolean | No | Add similar nearby properties (add-on) |

**Example:**

```json
{
  "propertyUrls": ["https://www.apartments.com/national-at-888-6th-ave-furnished-apartments-new-york-ny/0smfmv0/"],
  "includeWalkScore": true,
  "includePhotos": true
}
```

**Bulk / mixed input:**

```json
{
  "propertyIds": ["0smfmv0", "2nhf2x9"],
  "addresses": ["419 W 34th St, New York, NY 10001"]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **40+ fields** per property, including:

| Field | Type | Description |
|-------|------|-------------|
| listingKey | string | apartments.com listing ID |
| name | string | Building / community name |
| oneLineAddress | string | Full single-line address |
| rentRange | string | Advertised rent range |
| bedRange | string | Bed range (e.g. "Studio - 1 Bed") |
| rating | number | Building rating (1–5) |
| floorplans | array | Floorplans and available units with pricing |
| amenities | array | Amenity categories and items |
| fees | array | Fee schedule with amounts |
| petPolicies | array | Pet rules, fees, and limits |
| leaseTerms | string | Lease terms summary |
| schools | array | Assigned schools with ratings |
| transit | array | Nearby transit stops and commute times |
| walkScore | object | Walk/transit/bike scores (add-on) |
| reviews | array | Resident reviews (add-on) |

**Example:**

```json
{
  "listingKey": "0smfmv0",
  "name": "National at 888 6th Ave Furnished Apartments",
  "oneLineAddress": "888 6th Ave, New York, NY 10001",
  "rentRange": "$4,500 - 10,000",
  "bedRange": "Studio - 1 Bed",
  "rating": 4.0,
  "yearBuilt": 1904,
  "unitCount": 70,
  "floorplans": [{ "name": "All", "units": [{ "modelName": "Studio", "area": "350 - 475SF", "rentRange": "$4,500 - 8,000", "availabilityText": "Now" }] }],
  "petPolicies": [{ "petType": "Cats Allowed", "fee": "$500", "weightLimit": "75 lb", "petLimit": "2" }],
  "leaseTerms": "1 - 12 Month Leases"
}
```

***

### 💼 Use Cases & Examples

#### 1. Full Rental Research Dossier

**A renter or agent needs everything about one building before touring.**

**Input:** An apartments.com URL, listing ID, or address
**Output:** Rent range, floorplans, amenities, fees, pet policy, and lease terms in one row
**Use:** Compare buildings apples-to-apples without visiting a dozen pages.

#### 2. Enrich Search Results Into Dossiers

**A PropTech team has thousands of listing IDs from a search scraper.**

**Input:** A list of apartments.com listing IDs
**Output:** A complete per-property dossier for each ID
**Use:** Turn thin search rows into decision-ready records for a CRM or app.

#### 3. Submarket & Competitor Benchmarking

**A property manager wants to benchmark rents and offerings nearby.**

**Input:** A set of competing buildings
**Output:** Unit mix, rent by floorplan, amenities, and management company
**Use:** Position pricing and concessions against the local market.

#### 4. Data for a Rental App or Chatbot

**A developer is building a rental search or assistant.**

**Input:** Listing IDs or addresses from user queries
**Output:** Amenities, pet policy, Walk Score, schools, and transit
**Use:** Answer renter questions with structured, reliable data.

#### 5. Pet & Commute Screening for Relocation

**A relocation specialist screens buildings for corporate clients.**

**Input:** Candidate buildings by URL or address
**Output:** Pet rules, Walk Score, and transit commute times
**Use:** Shortlist only buildings that fit pet, walkability, and commute needs.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/apartments-com-detail-scraper').call({
  propertyIds: ['0smfmv0'],
  includeWalkScore: true
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/apartments-com-detail-scraper').call(
    run_input={'propertyIds': ['0smfmv0'], 'includeWalkScore': True}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~apartments-com-detail-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"propertyIds": ["0smfmv0"]}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule or webhook
2. **HTTP Request**: Call the actor API with your listing IDs or URLs
3. **Process**: Handle the JSON dossier per property
4. **Action**: Save to a database, sync to a CRM, or notify your team

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **Up to 5 properties** per run — full dossier, same quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** properties per run
- All enrichment add-ons unlocked
- Pay-per-result: only charged for properties that resolve, and add-ons only when they return data

💰 **Purpose-built detail pricing** — a dense rental dossier per property, not a bulk search row.

🔗 [View current pricing](https://apify.com/sian.agency/apartments-com-detail-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many properties can I look up?**
A: FREE tier: 5 per run. PAID tier: unlimited.

**Q: What can I look up by?**
A: An apartments.com listing URL, a listing ID (the short code at the end of a listing URL), or a full street address.

**Q: What are the add-ons?**
A: Walk Score, photo gallery, numeric per-unit rental costs, resident reviews, and similar properties. Each is optional and charged only when it returns data.

**Q: Am I charged for properties that aren't found?**
A: No — not-found lookups are never billed.

**Q: What output formats are available?**
A: JSON, CSV, and Excel — export directly from the Apify dataset.

**Q: Is this legal?**
A: Yes — we only extract publicly available data. See the legal section below.

***

### 🐛 Troubleshooting

**A URL isn't recognized**

- Use a single-listing page (the URL ends in a short code like `/0smfmv0/`), not a city or search page.
- City pages like `apartments.com/new-york-ny/` are searches — use our Apartments.com search actor for those.

**A property comes back "not found"**

- Double-check the listing ID or full street address (include city, state, and ZIP).
- Freshly delisted rentals can take time to disappear or appear.

**An add-on returned nothing**

- Some buildings have no reviews or similar properties — you are not charged when an add-on returns no data.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### ⚠️ Trademark Disclaimer

Apartments.com® is a registered trademark of CoStar Group, Inc. This actor is an independent tool and is **not** affiliated with, endorsed by, or sponsored by CoStar Group or Apartments.com. It is provided solely to help users access publicly available rental data for legitimate purposes. All product names, logos, and brands are the property of their respective owners.

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's Issues tab
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `propertyUrls` (type: `array`):

🏢 **LOOKUP BY URL:** Paste apartments.com listing links, one per line.

📋 **How to get a URL:**

1. Open any rental on apartments.com
2. Copy the browser address — it looks like `https://www.apartments.com/national-at-888-6th-ave-furnished-apartments-new-york-ny/0smfmv0/`
3. Paste it here (Bulk edit accepts one URL per line)

✅ **SUPPORTED:** apartments.com single-listing pages (the URL ends in a short code like `/0smfmv0/`)
🚫 **NOT supported:** city or search-result pages like `apartments.com/new-york-ny/` — use our search-focused actor for those

💡 **TIP:** Mix and match with listing IDs and addresses below — duplicates are removed automatically.

⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.

## `propertyIds` (type: `array`):

🔑 **LOOKUP BY LISTING ID:** The short alphanumeric code at the end of any apartments.com listing URL.

📋 **Example:** for `.../0smfmv0/` the listing ID is `0smfmv0`.

💡 **TIP:** Ideal for enriching the output of a search scraper — feed the listing IDs it returns and get a full dossier for each. The fastest, most exact lookup mode.

⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.

## `addresses` (type: `array`):

📍 **LOOKUP BY ADDRESS:** Full US street addresses, one per line.

📋 **Format:** `street, city, state ZIP` — e.g. `419 W 34th St, New York, NY 10001`.

💡 **TIP:** Perfect for enriching CSV lists that only contain addresses — the actor resolves each address to the matching building automatically.

⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.

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

🚶 **WALK SCORE ADD-ON:** Walk, transit, and bike scores (0–100) with descriptions for each property.

💰 Adds one enrichment charge per property (only when scores are returned).

⚡ Available on paid Apify plans.

## `includePhotos` (type: `boolean`):

📸 **PHOTOS ADD-ON:** The full photo gallery for each property — every image URL with its caption.

💰 Adds one enrichment charge per property (only when photos are returned).

⚡ Available on paid Apify plans.

## `includeRentalCosts` (type: `boolean`):

💵 **RENTAL COSTS ADD-ON:** Numeric per-unit pricing — min/max rent, one-time costs, beds, baths, and area for every available unit (the core dossier includes floorplans with rent ranges; this add-on adds exact numeric costs).

💰 Adds one enrichment charge per property (only when unit costs are returned).

⚡ Available on paid Apify plans.

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

⭐ **REVIEWS ADD-ON:** Resident reviews for each property — title, text, star rating, and date.

💰 Adds one enrichment charge per property (only when reviews are returned).

⚡ Available on paid Apify plans.

## `includeSimilar` (type: `boolean`):

🏘 **SIMILAR PROPERTIES ADD-ON:** Comparable / competing nearby buildings for each property — name, address, rent range, beds, rating, and location.

💰 Adds one enrichment charge per property (only when similar properties are returned).

⚡ Available on paid Apify plans.

## Actor input object example

```json
{
  "propertyUrls": [
    "https://www.apartments.com/national-at-888-6th-ave-furnished-apartments-new-york-ny/0smfmv0/"
  ],
  "propertyIds": [
    "0smfmv0"
  ],
  "addresses": [
    "419 W 34th St, New York, NY 10001"
  ],
  "includeWalkScore": false,
  "includePhotos": false,
  "includeRentalCosts": false,
  "includeReviews": false,
  "includeSimilar": false
}
```

# Actor output Schema

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

One row per property: rent range, floorplans and unit prices, amenities, fees, pet policy, lease terms, office hours, management, schools, transit, and optional Walk Score / photos / rental-costs / reviews / similar-property add-ons

## `scrapingSummary` (type: `string`):

HTML summary showing extracted dossiers, not-found lookups, failures, and charged add-ons

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/apartments-com-detail-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/apartments-com-detail-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call sian.agency/apartments-com-detail-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/apartments-com-detail-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apartments.com Detail Scraper — Rental Dossier API by URL/ID",
        "description": "Paste an apartments.com URL, listing ID, or address and get one clean rental dossier per property: rent range, floorplans and unit prices, amenities, fees, pet policy, lease terms, schools, and transit. Optional Walk Score, photos, per-unit costs, reviews, and similar-property add-ons.",
        "version": "1.0",
        "x-build-id": "NE1UDA8exjeKeHAMf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~apartments-com-detail-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-apartments-com-detail-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~apartments-com-detail-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-apartments-com-detail-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~apartments-com-detail-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-apartments-com-detail-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "propertyUrls": {
                        "title": "🏢 Apartments.com Listing URLs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "🏢 **LOOKUP BY URL:** Paste apartments.com listing links, one per line.\n\n📋 **How to get a URL:**\n1. Open any rental on apartments.com\n2. Copy the browser address — it looks like `https://www.apartments.com/national-at-888-6th-ave-furnished-apartments-new-york-ny/0smfmv0/`\n3. Paste it here (Bulk edit accepts one URL per line)\n\n✅ **SUPPORTED:** apartments.com single-listing pages (the URL ends in a short code like `/0smfmv0/`)\n🚫 **NOT supported:** city or search-result pages like `apartments.com/new-york-ny/` — use our search-focused actor for those\n\n💡 **TIP:** Mix and match with listing IDs and addresses below — duplicates are removed automatically.\n\n⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "propertyIds": {
                        "title": "🔑 Listing IDs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "🔑 **LOOKUP BY LISTING ID:** The short alphanumeric code at the end of any apartments.com listing URL.\n\n📋 **Example:** for `.../0smfmv0/` the listing ID is `0smfmv0`.\n\n💡 **TIP:** Ideal for enriching the output of a search scraper — feed the listing IDs it returns and get a full dossier for each. The fastest, most exact lookup mode.\n\n⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "addresses": {
                        "title": "📍 Street Addresses",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "📍 **LOOKUP BY ADDRESS:** Full US street addresses, one per line.\n\n📋 **Format:** `street, city, state ZIP` — e.g. `419 W 34th St, New York, NY 10001`.\n\n💡 **TIP:** Perfect for enriching CSV lists that only contain addresses — the actor resolves each address to the matching building automatically.\n\n⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeWalkScore": {
                        "title": "🚶 Walk Score (add-on)",
                        "type": "boolean",
                        "description": "🚶 **WALK SCORE ADD-ON:** Walk, transit, and bike scores (0–100) with descriptions for each property.\n\n💰 Adds one enrichment charge per property (only when scores are returned).\n\n⚡ Available on paid Apify plans.",
                        "default": false
                    },
                    "includePhotos": {
                        "title": "📸 Photo gallery (add-on)",
                        "type": "boolean",
                        "description": "📸 **PHOTOS ADD-ON:** The full photo gallery for each property — every image URL with its caption.\n\n💰 Adds one enrichment charge per property (only when photos are returned).\n\n⚡ Available on paid Apify plans.",
                        "default": false
                    },
                    "includeRentalCosts": {
                        "title": "💵 Per-unit rental costs (add-on)",
                        "type": "boolean",
                        "description": "💵 **RENTAL COSTS ADD-ON:** Numeric per-unit pricing — min/max rent, one-time costs, beds, baths, and area for every available unit (the core dossier includes floorplans with rent ranges; this add-on adds exact numeric costs).\n\n💰 Adds one enrichment charge per property (only when unit costs are returned).\n\n⚡ Available on paid Apify plans.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "⭐ Resident reviews (add-on)",
                        "type": "boolean",
                        "description": "⭐ **REVIEWS ADD-ON:** Resident reviews for each property — title, text, star rating, and date.\n\n💰 Adds one enrichment charge per property (only when reviews are returned).\n\n⚡ Available on paid Apify plans.",
                        "default": false
                    },
                    "includeSimilar": {
                        "title": "🏘 Similar properties (add-on)",
                        "type": "boolean",
                        "description": "🏘 **SIMILAR PROPERTIES ADD-ON:** Comparable / competing nearby buildings for each property — name, address, rent range, beds, rating, and location.\n\n💰 Adds one enrichment charge per property (only when similar properties are returned).\n\n⚡ Available on paid Apify plans.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
