{
  "data": {
    "id": "p6YkqUxP9rFhfClUk",
    "actId": "uECeNxejUQFA2OJXF",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-29T07:50:08.022Z",
    "finishedAt": "2026-10-29T07:50:24.474Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 16337,
      "runTimeSecs": 16.337,
      "computeUnits": 0.018152222222222222,
      "imageSizeBytes": 359269888
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Apartments.com Scraper Input\",\n  \"description\": \"Find Apartments.com rentals by city or ZIP, paste property URLs, or look up listing keys. Filters and extra detail are optional.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"How to find listings: `search` uses a city or ZIP plus filters; `urls` uses the Apartments.com URLs you paste; `listingKeys` looks up the listing keys you paste.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"urls\",\n        \"listingKeys\"\n      ],\n      \"enumTitles\": [\n        \"Search by city or ZIP\",\n        \"Scrape pasted URLs\",\n        \"Look up listing keys\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\",\n      \"sectionCaption\": \"Mode\",\n      \"sectionDescription\": \"Choose how to discover listings.\"\n    },\n    \"searchLocation\": {\n      \"title\": \"Search location\",\n      \"type\": \"string\",\n      \"description\": \"US city and state (`New York, NY`) or 5-digit ZIP (`10001`). Used only in search mode.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"New York, NY\",\n      \"sectionCaption\": \"Search filters\",\n      \"sectionDescription\": \"Narrow the search by rent, size, type, pets and amenities. All filters are optional.\"\n    },\n    \"bedrooms\": {\n      \"title\": \"Bedrooms\",\n      \"type\": \"string\",\n      \"description\": \"Match listings with at least one floor plan of this bedroom count.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"studio\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5plus\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"Studio\",\n        \"1 bedroom\",\n        \"2 bedrooms\",\n        \"3 bedrooms\",\n        \"4 bedrooms\",\n        \"5+ bedrooms\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"bathrooms\": {\n      \"title\": \"Bathrooms\",\n      \"type\": \"string\",\n      \"description\": \"Match listings with a floor plan at or above this bathroom count.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"1plus\",\n        \"2plus\",\n        \"3plus\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"1+ bathrooms\",\n        \"2+ bathrooms\",\n        \"3+ bathrooms\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"priceMin\": {\n      \"title\": \"Minimum monthly rent ($)\",\n      \"type\": \"integer\",\n      \"description\": \"Lowest monthly rent to include. Leave unset for no minimum.\",\n      \"minimum\": 0,\n      \"maximum\": 50000\n    },\n    \"priceMax\": {\n      \"title\": \"Maximum monthly rent ($)\",\n      \"type\": \"integer\",\n      \"description\": \"Highest monthly rent to include. Leave unset for no maximum.\",\n      \"minimum\": 0,\n      \"maximum\": 50000\n    },\n    \"sqftMin\": {\n      \"title\": \"Minimum square feet\",\n      \"type\": \"integer\",\n      \"description\": \"Smallest floor plan to include. Leave unset for no minimum.\",\n      \"minimum\": 0,\n      \"maximum\": 20000\n    },\n    \"sqftMax\": {\n      \"title\": \"Maximum square feet\",\n      \"type\": \"integer\",\n      \"description\": \"Largest floor plan to include. Leave unset for no maximum.\",\n      \"minimum\": 0,\n      \"maximum\": 20000\n    },\n    \"propertyType\": {\n      \"title\": \"Property type\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to one property type.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"apartments\",\n        \"houses\",\n        \"condos\",\n        \"townhomes\"\n      ],\n      \"enumTitles\": [\n        \"Any type\",\n        \"Apartments\",\n        \"Houses\",\n        \"Condos\",\n        \"Townhomes\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"petPolicy\": {\n      \"title\": \"Pet policy\",\n      \"type\": \"string\",\n      \"description\": \"Require listings that allow dogs, cats, or both.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"dogs\",\n        \"cats\",\n        \"pets\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"Dogs allowed\",\n        \"Cats allowed\",\n        \"Dogs or cats allowed\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"amenities\": {\n      \"title\": \"Required amenities\",\n      \"type\": \"array\",\n      \"description\": \"Only return listings that publish every selected amenity.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"smoke-free\",\n          \"washer-dryer\",\n          \"dishwasher\",\n          \"central-heating\",\n          \"air-conditioning\",\n          \"balcony\",\n          \"fireplace\",\n          \"furnished\",\n          \"fitness-center\",\n          \"pool\",\n          \"tennis-court\",\n          \"rooftop-deck\",\n          \"basketball-court\",\n          \"playground\",\n          \"parking\",\n          \"wheelchair-accessible\",\n          \"high-speed-internet\",\n          \"elevator\",\n          \"washer-dryer-hookups\",\n          \"laundry-facilities\",\n          \"utilities-included\",\n          \"lofts\",\n          \"doorman\",\n          \"gated\",\n          \"concierge\",\n          \"clubhouse\",\n          \"controlled-access\",\n          \"business-center\",\n          \"garage\",\n          \"patio\",\n          \"hardwood-floors\",\n          \"den\",\n          \"office\",\n          \"yard\",\n          \"walk-in-closets\",\n          \"basement\",\n          \"ev-charging\",\n          \"storage-units\",\n          \"high-ceilings\",\n          \"dog-park\"\n        ],\n        \"enumTitles\": [\n          \"Smoke-free\",\n          \"In-unit washer/dryer\",\n          \"Dishwasher\",\n          \"Central heating\",\n          \"Air conditioning\",\n          \"Balcony\",\n          \"Fireplace\",\n          \"Furnished\",\n          \"Fitness center\",\n          \"Pool\",\n          \"Tennis court\",\n          \"Rooftop deck\",\n          \"Basketball court\",\n          \"Playground\",\n          \"Parking\",\n          \"Wheelchair accessible\",\n          \"High-speed internet\",\n          \"Elevator\",\n          \"Washer/dryer hookups\",\n          \"Laundry facilities\",\n          \"Utilities included\",\n          \"Lofts\",\n          \"Doorman\",\n          \"Gated\",\n          \"Concierge\",\n          \"Clubhouse\",\n          \"Controlled access\",\n          \"Business center\",\n          \"Garage\",\n          \"Patio\",\n          \"Hardwood floors\",\n          \"Den\",\n          \"Office\",\n          \"Yard\",\n          \"Walk-in closets\",\n          \"Basement\",\n          \"EV charging\",\n          \"Storage units\",\n          \"High ceilings\",\n          \"Dog park\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"rentSpecials\": {\n      \"title\": \"Rent specials only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return listings advertising a current move-in deal.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"minRating\": {\n      \"title\": \"Minimum rating\",\n      \"type\": \"string\",\n      \"description\": \"Only return listings rated at or above this score (1–5).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\"\n      ],\n      \"enumTitles\": [\n        \"Any rating\",\n        \"1+ stars\",\n        \"2+ stars\",\n        \"3+ stars\",\n        \"4+ stars\",\n        \"5 stars\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"moveInDate\": {\n      \"title\": \"Move-in by date\",\n      \"type\": \"string\",\n      \"description\": \"Only return listings with a unit available on or before this date (YYYY-MM-DD).\",\n      \"editor\": \"textfield\"\n    },\n    \"specialties\": {\n      \"title\": \"Lifestyle / housing type\",\n      \"type\": \"array\",\n      \"description\": \"Return listings matching at least one selected lifestyle or housing program. Student and senior housing are the most consistently published; other values are applied when the source exposes them.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"student\",\n          \"senior\",\n          \"military\",\n          \"corporate\",\n          \"luxury\",\n          \"affordable\",\n          \"cheap\"\n        ],\n        \"enumTitles\": [\n          \"Student housing\",\n          \"Senior housing\",\n          \"Military housing\",\n          \"Corporate housing\",\n          \"Luxury\",\n          \"Affordable housing\",\n          \"Cheap\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"keywords\": {\n      \"title\": \"Keywords\",\n      \"type\": \"string\",\n      \"description\": \"Keep listings whose name, description, amenities, neighborhood or floor-plan names contain this text. Requires scrapeDetails=true.\",\n      \"editor\": \"textfield\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort order\",\n      \"type\": \"string\",\n      \"description\": \"How to order returned listings.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevance\",\n        \"priceAsc\",\n        \"priceDesc\",\n        \"bedsAsc\",\n        \"bedsDesc\",\n        \"newest\"\n      ],\n      \"enumTitles\": [\n        \"Best match\",\n        \"Lowest rent first\",\n        \"Highest rent first\",\n        \"Fewest bedrooms first\",\n        \"Most bedrooms first\",\n        \"Recently updated\"\n      ],\n      \"default\": \"relevance\",\n      \"prefill\": \"relevance\"\n    },\n    \"startUrls\": {\n      \"title\": \"Start URLs\",\n      \"type\": \"array\",\n      \"description\": \"Apartments.com city-search or property URLs. Used only in `urls` mode. A listing key is also accepted.\",\n      \"editor\": \"requestListSources\",\n      \"sectionCaption\": \"Direct sources\",\n      \"sectionDescription\": \"Paste URLs or listing keys instead of searching.\"\n    },\n    \"listingKeys\": {\n      \"title\": \"Listing keys\",\n      \"type\": \"array\",\n      \"description\": \"Apartments.com listing keys such as `d3pj6rk`. Used only in `listingKeys` mode.\",\n      \"editor\": \"stringList\"\n    },\n    \"maximizeCoverage\": {\n      \"title\": \"Maximize coverage\",\n      \"type\": \"boolean\",\n      \"description\": \"When the public listing index cannot fill your request, automatically try the site's search page as a last resort. Off by default.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"scrapeDetails\": {\n      \"title\": \"Fetch full details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch floor plans, available units, fees, pets, parking, schools, office hours, manager, website and photos for each listing. Turn off for faster card-level results.\",\n      \"default\": true,\n      \"prefill\": true,\n      \"sectionCaption\": \"Output options\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max listings\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum listings to return (1–5,000). Search mode also stops at the maxPages scan depth.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 50,\n      \"prefill\": 1\n    },\n    \"maxPages\": {\n      \"title\": \"Max search depth (pages)\",\n      \"type\": \"integer\",\n      \"description\": \"How many 40-listing discovery pages to scan in search mode (1–20). Raise it when filters are narrow.\",\n      \"minimum\": 1,\n      \"maximum\": 20,\n      \"default\": 5,\n      \"prefill\": 1\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Apartments.com Rentals, Floor Plans & Fees Scraper\n\nApartments.com is where US renters compare managed communities, houses, condos and townhomes. This actor turns those public property pages into structured records: rent by bedroom count, floor plans, individual available units, fees, pet and parking rules, schools, office hours, the leasing manager, the property website and the photo gallery.\n\nUse it to research a move, compare neighborhoods, track rent changes, or feed a rental dataset into a spreadsheet, CRM or analytics pipeline.\n\n## What it does\n\n- Searches a US city/state or ZIP code with filters for rent, bedrooms, bathrooms, square footage, property type, pets, amenities, rating, move-in date, specials and lifestyle.\n- Accepts Apartments.com city-search URLs and property URLs in one mixed list.\n- Looks up listing keys directly when you already have them.\n- Returns one record per property, with the fields the property actually publishes.\n- Omits fields a property does not publish instead of sending empty values.\n- Reports partial failures (stale keys, failed detail requests) in the run status instead of failing the whole run.\n\n## Services\n\n- **Location search** — city/state or 5-digit ZIP.\n- **URL mode** — paste search-result pages or individual property pages.\n- **Listing-key lookup** — one record per key, with invalid keys reported.\n- **Rent by bedroom** — the rent range for studios, 1-bed, 2-bed and larger plans.\n- **Floor plans and units** — model names, beds, baths, square footage, rent, total monthly price, unit counts, and individual unit numbers with availability dates and apply links.\n- **Monthly and one-time fees** — application, admin, deposit, pet, parking, storage, utility and other published fees.\n- **Policies** — pet rules, parking options, lease terms, office hours and languages.\n- **Local context** — schools, neighborhood, submarket, market and rating.\n- **Contact and media** — manager, website, phone and photo gallery.\n\n## How it works\n\n1. Reads your mode and filters.\n2. For search mode, resolves the city or ZIP and scans the site's public listing index for that place, up to the `maxPages` depth you set.\n3. Reads each candidate property's public details, applies your filters, and keeps the matching listings.\n4. For `urls` and `listingKeys`, reads exactly the properties you provide.\n5. When full details are enabled, attaches floor plans, units, fees, policies, schools, office hours, manager, website and photos.\n6. De-duplicates by listing key and URL, removes empty fields, and saves the records.\n\nNo account, login, cookie or API key is required.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `search` | `search`, `urls` or `listingKeys` |\n| `searchLocation` | string | – | US city and state (`New York, NY`) or ZIP (`10001`); used by `search` |\n| `bedrooms` | select | `any` | `any`, `studio`, `1`, `2`, `3`, `4`, `5plus` |\n| `bathrooms` | select | `any` | `any`, `1plus`, `2plus`, `3plus` |\n| `priceMin` / `priceMax` | integer | – | Monthly rent range in USD (0–50,000) |\n| `sqftMin` / `sqftMax` | integer | – | Floor-plan size range (0–20,000) |\n| `propertyType` | select | `any` | `any`, `apartments`, `houses`, `condos`, `townhomes` |\n| `petPolicy` | select | `any` | `any`, `dogs`, `cats`, `pets` |\n| `amenities` | array | `[]` | 40 amenities, including pool, in-unit washer/dryer, parking, gym, elevator, dishwasher, air conditioning, balcony, furnished, gated, EV charging and more |\n| `rentSpecials` | boolean | `false` | Only listings advertising a current move-in deal |\n| `minRating` | select | `any` | `any`, `1`–`5` |\n| `moveInDate` | string | – | Keep listings with a unit available on or before this date (`YYYY-MM-DD`) |\n| `specialties` | array | `[]` | `student`, `senior`, `military`, `corporate`, `luxury`, `affordable`, `cheap` |\n| `keywords` | string | – | Match name, description, amenities, neighborhood or floor-plan names (requires `scrapeDetails`) |\n| `sortBy` | select | `relevance` | `relevance`, `priceAsc`, `priceDesc`, `bedsAsc`, `bedsDesc`, `newest` |\n| `startUrls` | array | – | Search or property URLs for `urls`; plain listing keys are accepted too |\n| `listingKeys` | array | – | Listing keys for `listingKeys` |\n| `maximizeCoverage` | boolean | `false` | Try an additional coverage path when the public index cannot fill your request |\n| `scrapeDetails` | boolean | `true` | Attach floor plans, units, fees, policies, schools, hours, manager, website and photos |\n| `maxItems` | integer | `50` | Maximum records to return (1–5,000) |\n| `maxPages` | integer | `5` | Search discovery depth, in 40-listing pages (1–20) |\n\n### Example: pet-friendly two-bedrooms under $2,500\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchLocation\": \"Austin, TX\",\n  \"bedrooms\": \"2\",\n  \"priceMax\": 2500,\n  \"petPolicy\": \"dogs\",\n  \"amenities\": [\"pool\", \"parking\"],\n  \"maxItems\": 50,\n  \"maxPages\": 5,\n  \"scrapeDetails\": true\n}\n```\n\n### Example: mixed URLs\n\n```json\n{\n  \"mode\": \"urls\",\n  \"startUrls\": [\n    \"https://www.apartments.com/austin-tx/2-bedrooms-under-2500/\",\n    \"https://www.apartments.com/amli-river-north-chicago-il/1pc7xx7/\"\n  ],\n  \"maxItems\": 20,\n  \"scrapeDetails\": true\n}\n```\n\n### Example: known listing keys\n\n```json\n{\n  \"mode\": \"listingKeys\",\n  \"listingKeys\": [\"d3pj6rk\", \"1pc7xx7\", \"lv3pbsf\"],\n  \"maxItems\": 10,\n  \"scrapeDetails\": true\n}\n```\n\n## Output\n\nEvery record is one property. Fields are omitted when the property does not publish them.\n\n**Identity and place**\n\n- `listingId`, `url`, `name`\n- `address`, `fullAddress`, `city`, `state`, `zipCode`, `country`, `county`\n- `neighborhood`, `submarket`, `marketName`, `dma`\n- `latitude`, `longitude`\n- `propertyType`, `listingType`, `listingStatus`\n\n**Pricing**\n\n- `priceMin`, `priceMax`, `priceCurrency`\n- `baseRentMin`, `baseRentMax`\n- `totalMonthlyPriceMin`, `totalMonthlyPriceMax`\n- `rentText`\n- `rentByBedType` — array of `{beds, priceMin, priceMax, priceText, baseRentMin, baseRentMax, totalMonthlyPriceMin, totalMonthlyPriceMax, sqftMin, sqftMax, availabilityDate}`\n- `rentSpecial` — `{title, description, expiresAt}`\n- `hasRentSpecials`\n\n**Size and plans**\n\n- `bedsMin`, `bedsMax`, `bathsMin`, `bathsMax`, `sqftMin`, `sqftMax`\n- `floorPlans` — `{name, modelKey, beds, baths, sqftMin, sqftMax, rentMin, rentMax, totalMonthlyPriceMin, totalMonthlyPriceMax, unitCount, availableUnits, amenities}`\n- `units` — the same floor-plan data in the legacy shape, with `bedsMin`/`bedsMax`/`bathsMin`/`bathsMax`/`rentMin`/`rentMax`/`sqftMin`/`sqftMax`\n- `availableUnits` — `{unitKey, unitNumber, modelName, modelKey, beds, baths, sqft, rent, totalMonthlyPriceMin, totalMonthlyPriceMax, deposit, availableDate, availabilityText, leaseTerm, amenities, applyNowUrl}`\n\n**Building and policies**\n\n- `yearBuilt`, `unitCount`, `stories`, `lotSize`, `lotSizeUnit`\n- `amenities`, `amenityCategories`, `uniqueFeatures`\n- `petPolicies`, `parkingOptions`\n- `fees` — `{oneTime[], monthly[], parking[], pets[], other[]}`, each fee with `name`, `amountMin`, `amountMax`, `amountText` or `period`\n- `leaseTerms`, `officeHours`, `languagesSpoken`\n\n**Contact, reputation and media**\n\n- `phoneNumber`, `propertyWebsite`, `propertyManager` — `{name, companyKey, logoUrl}`\n- `rating`\n- `schools` — `{public[], private[]}`\n- `photos`, `coverPhoto`, `photoCount`\n- `availabilityDate`, `availabilityText`\n- `description`\n- `lastUpdated`, `scrapedAt`\n\nThe original 32 fields remain available. Walk, transit, bike and sound scores (`walkScore`, `transitScore`, `bikeScore`, `soundScore`) are kept for compatibility but are only filled when a source publishes them.\n\n## Usage cost\n\nThis actor runs on Apify's platform and is billed by Apify compute usage for the time and memory the run consumes. There are no external API keys, subscriptions or per-record fees. A small run (one city, 10–50 listings, full details) usually finishes in under a minute; large runs scale with the number of listings and detail pages requested. Keep `maxItems` and `maxPages` at the smallest values that answer your question.\n\n## FAQ\n\n**Do I need an Apartments.com account?**\nNo. The actor reads publicly visible property information and needs no login, cookie or key.\n\n**Why did I get fewer records than `maxItems`?**\nSearch mode also stops at the `maxPages` discovery depth. A narrow filter may need a higher `maxPages`; direct `urls` and `listingKeys` modes are not limited by search depth. The run status says when a request was cut short.\n\n**Why are some fields missing for a property?**\nApartments.com does not publish every field for every property. Fees, pet rules, parking, office hours, schools, descriptions and photos are conditional. Missing values are omitted, never filled with placeholders.\n\n**What is the difference between `priceMin` and `baseRentMin`?**\n`priceMin`/`priceMax` are the rent range across the property's plans. Base rent and total monthly price are also reported separately because some communities add required monthly fees.\n\n**What does `availableUnits` contain?**\nIndividual units the property is advertising, with unit number, rent, square feet, availability date and apply link. Not every property publishes individual units; many only publish floor-plan models.\n\n**Does `scrapeDetails: false` still return useful data?**\nYes. It returns the property-level record (address, rent ranges, bedrooms, amenities, fees where published and similar fields) but skips the extra media/fee/unit enrichment. It is faster and cheaper.\n\n**Are reviews or walk scores included?**\nReviews and walk/transit/bike/sound scores are not part of the public property data used here. The score fields are kept for backward compatibility but are normally absent.\n\n**Can I use ZIP codes?**\nYes. A 5-digit US ZIP resolves to its city and is searched the same way as `City, ST`.\n\n## Notes\n\n- Search filters are applied to the listings returned by the public index, not to a private search API. Combining several narrow filters works best with a higher `maxPages`.\n- URLs in `urls` mode can mix search pages and property pages; URL filters override the corresponding input filters.\n- Listing keys are case-insensitive and validated before lookup.\n- Records are de-duplicated by listing key and URL.\n- `scrapedAt` is the time the record was produced; `lastUpdated` is the property's own freshness date when published.\n\n## Limitations\n\n- **US only.** Canadian provinces are not covered.\n- **Public index coverage.** The site's public listing index is large but not a complete inventory of every unit. Major metros are well covered; very small towns may return few or no results. The run status reports a shortfall when this happens.\n- **Search depth.** `maxPages` is capped at 20 (about 800 candidate listings). Use `listingKeys` or multiple URL runs when you need deeper coverage.\n- **Conditional fields.** Fees, pet rules, parking, office hours, schools and individual units are published by the property, not by every listing.\n- **Reviews, walkability scores, floor-plan images and virtual tours** are not exposed in the public property data. The legacy score fields remain reserved but are usually absent.\n- **Photo hosting.** Photo URLs point to Apartments.com's image CDN. They load in browsers; some command-line clients may be refused by the CDN.\n- **Coverage fallback.** `maximizeCoverage` adds an optional fallback path, but it can be unavailable or blocked. The actor then returns the direct results and explains the shortfall instead of failing.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "apartments-com-rental-listing-and-floor-plan",
      "title": "Apartments.com Rentals, Floor Plans & Fees Scraper",
      "description": "Search Apartments.com rentals by city, ZIP or URL, or look up listing keys. Get rent by bedroom, floor plans, available units, fees, pets, parking, schools, office hours, manager, website and photos.",
      "version": "2.0",
      "buildTag": "latest",
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      },
      "dockerfile": "./Dockerfile",
      "readme": "# Apartments.com Rentals, Floor Plans & Fees Scraper\n\nApartments.com is where US renters compare managed communities, houses, condos and townhomes. This actor turns those public property pages into structured records: rent by bedroom count, floor plans, individual available units, fees, pet and parking rules, schools, office hours, the leasing manager, the property website and the photo gallery.\n\nUse it to research a move, compare neighborhoods, track rent changes, or feed a rental dataset into a spreadsheet, CRM or analytics pipeline.\n\n## What it does\n\n- Searches a US city/state or ZIP code with filters for rent, bedrooms, bathrooms, square footage, property type, pets, amenities, rating, move-in date, specials and lifestyle.\n- Accepts Apartments.com city-search URLs and property URLs in one mixed list.\n- Looks up listing keys directly when you already have them.\n- Returns one record per property, with the fields the property actually publishes.\n- Omits fields a property does not publish instead of sending empty values.\n- Reports partial failures (stale keys, failed detail requests) in the run status instead of failing the whole run.\n\n## Services\n\n- **Location search** — city/state or 5-digit ZIP.\n- **URL mode** — paste search-result pages or individual property pages.\n- **Listing-key lookup** — one record per key, with invalid keys reported.\n- **Rent by bedroom** — the rent range for studios, 1-bed, 2-bed and larger plans.\n- **Floor plans and units** — model names, beds, baths, square footage, rent, total monthly price, unit counts, and individual unit numbers with availability dates and apply links.\n- **Monthly and one-time fees** — application, admin, deposit, pet, parking, storage, utility and other published fees.\n- **Policies** — pet rules, parking options, lease terms, office hours and languages.\n- **Local context** — schools, neighborhood, submarket, market and rating.\n- **Contact and media** — manager, website, phone and photo gallery.\n\n## How it works\n\n1. Reads your mode and filters.\n2. For search mode, resolves the city or ZIP and scans the site's public listing index for that place, up to the `maxPages` depth you set.\n3. Reads each candidate property's public details, applies your filters, and keeps the matching listings.\n4. For `urls` and `listingKeys`, reads exactly the properties you provide.\n5. When full details are enabled, attaches floor plans, units, fees, policies, schools, office hours, manager, website and photos.\n6. De-duplicates by listing key and URL, removes empty fields, and saves the records.\n\nNo account, login, cookie or API key is required.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `search` | `search`, `urls` or `listingKeys` |\n| `searchLocation` | string | – | US city and state (`New York, NY`) or ZIP (`10001`); used by `search` |\n| `bedrooms` | select | `any` | `any`, `studio`, `1`, `2`, `3`, `4`, `5plus` |\n| `bathrooms` | select | `any` | `any`, `1plus`, `2plus`, `3plus` |\n| `priceMin` / `priceMax` | integer | – | Monthly rent range in USD (0–50,000) |\n| `sqftMin` / `sqftMax` | integer | – | Floor-plan size range (0–20,000) |\n| `propertyType` | select | `any` | `any`, `apartments`, `houses`, `condos`, `townhomes` |\n| `petPolicy` | select | `any` | `any`, `dogs`, `cats`, `pets` |\n| `amenities` | array | `[]` | 40 amenities, including pool, in-unit washer/dryer, parking, gym, elevator, dishwasher, air conditioning, balcony, furnished, gated, EV charging and more |\n| `rentSpecials` | boolean | `false` | Only listings advertising a current move-in deal |\n| `minRating` | select | `any` | `any`, `1`–`5` |\n| `moveInDate` | string | – | Keep listings with a unit available on or before this date (`YYYY-MM-DD`) |\n| `specialties` | array | `[]` | `student`, `senior`, `military`, `corporate`, `luxury`, `affordable`, `cheap` |\n| `keywords` | string | – | Match name, description, amenities, neighborhood or floor-plan names (requires `scrapeDetails`) |\n| `sortBy` | select | `relevance` | `relevance`, `priceAsc`, `priceDesc`, `bedsAsc`, `bedsDesc`, `newest` |\n| `startUrls` | array | – | Search or property URLs for `urls`; plain listing keys are accepted too |\n| `listingKeys` | array | – | Listing keys for `listingKeys` |\n| `maximizeCoverage` | boolean | `false` | Try an additional coverage path when the public index cannot fill your request |\n| `scrapeDetails` | boolean | `true` | Attach floor plans, units, fees, policies, schools, hours, manager, website and photos |\n| `maxItems` | integer | `50` | Maximum records to return (1–5,000) |\n| `maxPages` | integer | `5` | Search discovery depth, in 40-listing pages (1–20) |\n\n### Example: pet-friendly two-bedrooms under $2,500\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchLocation\": \"Austin, TX\",\n  \"bedrooms\": \"2\",\n  \"priceMax\": 2500,\n  \"petPolicy\": \"dogs\",\n  \"amenities\": [\"pool\", \"parking\"],\n  \"maxItems\": 50,\n  \"maxPages\": 5,\n  \"scrapeDetails\": true\n}\n```\n\n### Example: mixed URLs\n\n```json\n{\n  \"mode\": \"urls\",\n  \"startUrls\": [\n    \"https://www.apartments.com/austin-tx/2-bedrooms-under-2500/\",\n    \"https://www.apartments.com/amli-river-north-chicago-il/1pc7xx7/\"\n  ],\n  \"maxItems\": 20,\n  \"scrapeDetails\": true\n}\n```\n\n### Example: known listing keys\n\n```json\n{\n  \"mode\": \"listingKeys\",\n  \"listingKeys\": [\"d3pj6rk\", \"1pc7xx7\", \"lv3pbsf\"],\n  \"maxItems\": 10,\n  \"scrapeDetails\": true\n}\n```\n\n## Output\n\nEvery record is one property. Fields are omitted when the property does not publish them.\n\n**Identity and place**\n\n- `listingId`, `url`, `name`\n- `address`, `fullAddress`, `city`, `state`, `zipCode`, `country`, `county`\n- `neighborhood`, `submarket`, `marketName`, `dma`\n- `latitude`, `longitude`\n- `propertyType`, `listingType`, `listingStatus`\n\n**Pricing**\n\n- `priceMin`, `priceMax`, `priceCurrency`\n- `baseRentMin`, `baseRentMax`\n- `totalMonthlyPriceMin`, `totalMonthlyPriceMax`\n- `rentText`\n- `rentByBedType` — array of `{beds, priceMin, priceMax, priceText, baseRentMin, baseRentMax, totalMonthlyPriceMin, totalMonthlyPriceMax, sqftMin, sqftMax, availabilityDate}`\n- `rentSpecial` — `{title, description, expiresAt}`\n- `hasRentSpecials`\n\n**Size and plans**\n\n- `bedsMin`, `bedsMax`, `bathsMin`, `bathsMax`, `sqftMin`, `sqftMax`\n- `floorPlans` — `{name, modelKey, beds, baths, sqftMin, sqftMax, rentMin, rentMax, totalMonthlyPriceMin, totalMonthlyPriceMax, unitCount, availableUnits, amenities}`\n- `units` — the same floor-plan data in the legacy shape, with `bedsMin`/`bedsMax`/`bathsMin`/`bathsMax`/`rentMin`/`rentMax`/`sqftMin`/`sqftMax`\n- `availableUnits` — `{unitKey, unitNumber, modelName, modelKey, beds, baths, sqft, rent, totalMonthlyPriceMin, totalMonthlyPriceMax, deposit, availableDate, availabilityText, leaseTerm, amenities, applyNowUrl}`\n\n**Building and policies**\n\n- `yearBuilt`, `unitCount`, `stories`, `lotSize`, `lotSizeUnit`\n- `amenities`, `amenityCategories`, `uniqueFeatures`\n- `petPolicies`, `parkingOptions`\n- `fees` — `{oneTime[], monthly[], parking[], pets[], other[]}`, each fee with `name`, `amountMin`, `amountMax`, `amountText` or `period`\n- `leaseTerms`, `officeHours`, `languagesSpoken`\n\n**Contact, reputation and media**\n\n- `phoneNumber`, `propertyWebsite`, `propertyManager` — `{name, companyKey, logoUrl}`\n- `rating`\n- `schools` — `{public[], private[]}`\n- `photos`, `coverPhoto`, `photoCount`\n- `availabilityDate`, `availabilityText`\n- `description`\n- `lastUpdated`, `scrapedAt`\n\nThe original 32 fields remain available. Walk, transit, bike and sound scores (`walkScore`, `transitScore`, `bikeScore`, `soundScore`) are kept for compatibility but are only filled when a source publishes them.\n\n## Usage cost\n\nThis actor runs on Apify's platform and is billed by Apify compute usage for the time and memory the run consumes. There are no external API keys, subscriptions or per-record fees. A small run (one city, 10–50 listings, full details) usually finishes in under a minute; large runs scale with the number of listings and detail pages requested. Keep `maxItems` and `maxPages` at the smallest values that answer your question.\n\n## FAQ\n\n**Do I need an Apartments.com account?**\nNo. The actor reads publicly visible property information and needs no login, cookie or key.\n\n**Why did I get fewer records than `maxItems`?**\nSearch mode also stops at the `maxPages` discovery depth. A narrow filter may need a higher `maxPages`; direct `urls` and `listingKeys` modes are not limited by search depth. The run status says when a request was cut short.\n\n**Why are some fields missing for a property?**\nApartments.com does not publish every field for every property. Fees, pet rules, parking, office hours, schools, descriptions and photos are conditional. Missing values are omitted, never filled with placeholders.\n\n**What is the difference between `priceMin` and `baseRentMin`?**\n`priceMin`/`priceMax` are the rent range across the property's plans. Base rent and total monthly price are also reported separately because some communities add required monthly fees.\n\n**What does `availableUnits` contain?**\nIndividual units the property is advertising, with unit number, rent, square feet, availability date and apply link. Not every property publishes individual units; many only publish floor-plan models.\n\n**Does `scrapeDetails: false` still return useful data?**\nYes. It returns the property-level record (address, rent ranges, bedrooms, amenities, fees where published and similar fields) but skips the extra media/fee/unit enrichment. It is faster and cheaper.\n\n**Are reviews or walk scores included?**\nReviews and walk/transit/bike/sound scores are not part of the public property data used here. The score fields are kept for backward compatibility but are normally absent.\n\n**Can I use ZIP codes?**\nYes. A 5-digit US ZIP resolves to its city and is searched the same way as `City, ST`.\n\n## Notes\n\n- Search filters are applied to the listings returned by the public index, not to a private search API. Combining several narrow filters works best with a higher `maxPages`.\n- URLs in `urls` mode can mix search pages and property pages; URL filters override the corresponding input filters.\n- Listing keys are case-insensitive and validated before lookup.\n- Records are de-duplicated by listing key and URL.\n- `scrapedAt` is the time the record was produced; `lastUpdated` is the property's own freshness date when published.\n\n## Limitations\n\n- **US only.** Canadian provinces are not covered.\n- **Public index coverage.** The site's public listing index is large but not a complete inventory of every unit. Major metros are well covered; very small towns may return few or no results. The run status reports a shortfall when this happens.\n- **Search depth.** `maxPages` is capped at 20 (about 800 candidate listings). Use `listingKeys` or multiple URL runs when you need deeper coverage.\n- **Conditional fields.** Fees, pet rules, parking, office hours, schools and individual units are published by the property, not by every listing.\n- **Reviews, walkability scores, floor-plan images and virtual tours** are not exposed in the public property data. The legacy score fields remain reserved but are usually absent.\n- **Photo hosting.** Photo URLs point to Apartments.com's image CDN. They load in browsers; some command-line clients may be refused by the CDN.\n- **Coverage fallback.** `maximizeCoverage` adds an optional fallback path, but it can be unavailable or blocked. The actor then returns the direct results and explains the shortfall instead of failing.\n",
      "input": {
        "title": "Apartments.com Scraper Input",
        "description": "Find Apartments.com rentals by city or ZIP, paste property URLs, or look up listing keys. Filters and extra detail are optional.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "How to find listings: `search` uses a city or ZIP plus filters; `urls` uses the Apartments.com URLs you paste; `listingKeys` looks up the listing keys you paste.",
            "editor": "select",
            "enum": [
              "search",
              "urls",
              "listingKeys"
            ],
            "enumTitles": [
              "Search by city or ZIP",
              "Scrape pasted URLs",
              "Look up listing keys"
            ],
            "default": "search",
            "prefill": "search",
            "sectionCaption": "Mode",
            "sectionDescription": "Choose how to discover listings."
          },
          "searchLocation": {
            "title": "Search location",
            "type": "string",
            "description": "US city and state (`New York, NY`) or 5-digit ZIP (`10001`). Used only in search mode.",
            "editor": "textfield",
            "prefill": "New York, NY",
            "sectionCaption": "Search filters",
            "sectionDescription": "Narrow the search by rent, size, type, pets and amenities. All filters are optional."
          },
          "bedrooms": {
            "title": "Bedrooms",
            "type": "string",
            "description": "Match listings with at least one floor plan of this bedroom count.",
            "editor": "select",
            "enum": [
              "any",
              "studio",
              "1",
              "2",
              "3",
              "4",
              "5plus"
            ],
            "enumTitles": [
              "Any",
              "Studio",
              "1 bedroom",
              "2 bedrooms",
              "3 bedrooms",
              "4 bedrooms",
              "5+ bedrooms"
            ],
            "default": "any",
            "prefill": "any"
          },
          "bathrooms": {
            "title": "Bathrooms",
            "type": "string",
            "description": "Match listings with a floor plan at or above this bathroom count.",
            "editor": "select",
            "enum": [
              "any",
              "1plus",
              "2plus",
              "3plus"
            ],
            "enumTitles": [
              "Any",
              "1+ bathrooms",
              "2+ bathrooms",
              "3+ bathrooms"
            ],
            "default": "any",
            "prefill": "any"
          },
          "priceMin": {
            "title": "Minimum monthly rent ($)",
            "type": "integer",
            "description": "Lowest monthly rent to include. Leave unset for no minimum.",
            "minimum": 0,
            "maximum": 50000
          },
          "priceMax": {
            "title": "Maximum monthly rent ($)",
            "type": "integer",
            "description": "Highest monthly rent to include. Leave unset for no maximum.",
            "minimum": 0,
            "maximum": 50000
          },
          "sqftMin": {
            "title": "Minimum square feet",
            "type": "integer",
            "description": "Smallest floor plan to include. Leave unset for no minimum.",
            "minimum": 0,
            "maximum": 20000
          },
          "sqftMax": {
            "title": "Maximum square feet",
            "type": "integer",
            "description": "Largest floor plan to include. Leave unset for no maximum.",
            "minimum": 0,
            "maximum": 20000
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "Restrict results to one property type.",
            "editor": "select",
            "enum": [
              "any",
              "apartments",
              "houses",
              "condos",
              "townhomes"
            ],
            "enumTitles": [
              "Any type",
              "Apartments",
              "Houses",
              "Condos",
              "Townhomes"
            ],
            "default": "any",
            "prefill": "any"
          },
          "petPolicy": {
            "title": "Pet policy",
            "type": "string",
            "description": "Require listings that allow dogs, cats, or both.",
            "editor": "select",
            "enum": [
              "any",
              "dogs",
              "cats",
              "pets"
            ],
            "enumTitles": [
              "Any",
              "Dogs allowed",
              "Cats allowed",
              "Dogs or cats allowed"
            ],
            "default": "any",
            "prefill": "any"
          },
          "amenities": {
            "title": "Required amenities",
            "type": "array",
            "description": "Only return listings that publish every selected amenity.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "smoke-free",
                "washer-dryer",
                "dishwasher",
                "central-heating",
                "air-conditioning",
                "balcony",
                "fireplace",
                "furnished",
                "fitness-center",
                "pool",
                "tennis-court",
                "rooftop-deck",
                "basketball-court",
                "playground",
                "parking",
                "wheelchair-accessible",
                "high-speed-internet",
                "elevator",
                "washer-dryer-hookups",
                "laundry-facilities",
                "utilities-included",
                "lofts",
                "doorman",
                "gated",
                "concierge",
                "clubhouse",
                "controlled-access",
                "business-center",
                "garage",
                "patio",
                "hardwood-floors",
                "den",
                "office",
                "yard",
                "walk-in-closets",
                "basement",
                "ev-charging",
                "storage-units",
                "high-ceilings",
                "dog-park"
              ],
              "enumTitles": [
                "Smoke-free",
                "In-unit washer/dryer",
                "Dishwasher",
                "Central heating",
                "Air conditioning",
                "Balcony",
                "Fireplace",
                "Furnished",
                "Fitness center",
                "Pool",
                "Tennis court",
                "Rooftop deck",
                "Basketball court",
                "Playground",
                "Parking",
                "Wheelchair accessible",
                "High-speed internet",
                "Elevator",
                "Washer/dryer hookups",
                "Laundry facilities",
                "Utilities included",
                "Lofts",
                "Doorman",
                "Gated",
                "Concierge",
                "Clubhouse",
                "Controlled access",
                "Business center",
                "Garage",
                "Patio",
                "Hardwood floors",
                "Den",
                "Office",
                "Yard",
                "Walk-in closets",
                "Basement",
                "EV charging",
                "Storage units",
                "High ceilings",
                "Dog park"
              ]
            },
            "default": [],
            "prefill": []
          },
          "rentSpecials": {
            "title": "Rent specials only",
            "type": "boolean",
            "description": "Only return listings advertising a current move-in deal.",
            "default": false,
            "prefill": false
          },
          "minRating": {
            "title": "Minimum rating",
            "type": "string",
            "description": "Only return listings rated at or above this score (1–5).",
            "editor": "select",
            "enum": [
              "any",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "enumTitles": [
              "Any rating",
              "1+ stars",
              "2+ stars",
              "3+ stars",
              "4+ stars",
              "5 stars"
            ],
            "default": "any",
            "prefill": "any"
          },
          "moveInDate": {
            "title": "Move-in by date",
            "type": "string",
            "description": "Only return listings with a unit available on or before this date (YYYY-MM-DD).",
            "editor": "textfield"
          },
          "specialties": {
            "title": "Lifestyle / housing type",
            "type": "array",
            "description": "Return listings matching at least one selected lifestyle or housing program. Student and senior housing are the most consistently published; other values are applied when the source exposes them.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "student",
                "senior",
                "military",
                "corporate",
                "luxury",
                "affordable",
                "cheap"
              ],
              "enumTitles": [
                "Student housing",
                "Senior housing",
                "Military housing",
                "Corporate housing",
                "Luxury",
                "Affordable housing",
                "Cheap"
              ]
            },
            "default": [],
            "prefill": []
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Keep listings whose name, description, amenities, neighborhood or floor-plan names contain this text. Requires scrapeDetails=true.",
            "editor": "textfield"
          },
          "sortBy": {
            "title": "Sort order",
            "type": "string",
            "description": "How to order returned listings.",
            "editor": "select",
            "enum": [
              "relevance",
              "priceAsc",
              "priceDesc",
              "bedsAsc",
              "bedsDesc",
              "newest"
            ],
            "enumTitles": [
              "Best match",
              "Lowest rent first",
              "Highest rent first",
              "Fewest bedrooms first",
              "Most bedrooms first",
              "Recently updated"
            ],
            "default": "relevance",
            "prefill": "relevance"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Apartments.com city-search or property URLs. Used only in `urls` mode. A listing key is also accepted.",
            "editor": "requestListSources",
            "sectionCaption": "Direct sources",
            "sectionDescription": "Paste URLs or listing keys instead of searching."
          },
          "listingKeys": {
            "title": "Listing keys",
            "type": "array",
            "description": "Apartments.com listing keys such as `d3pj6rk`. Used only in `listingKeys` mode.",
            "editor": "stringList"
          },
          "maximizeCoverage": {
            "title": "Maximize coverage",
            "type": "boolean",
            "description": "When the public listing index cannot fill your request, automatically try the site's search page as a last resort. Off by default.",
            "default": false,
            "prefill": false
          },
          "scrapeDetails": {
            "title": "Fetch full details",
            "type": "boolean",
            "description": "Fetch floor plans, available units, fees, pets, parking, schools, office hours, manager, website and photos for each listing. Turn off for faster card-level results.",
            "default": true,
            "prefill": true,
            "sectionCaption": "Output options"
          },
          "maxItems": {
            "title": "Max listings",
            "type": "integer",
            "description": "Maximum listings to return (1–5,000). Search mode also stops at the maxPages scan depth.",
            "minimum": 1,
            "maximum": 5000,
            "default": 50,
            "prefill": 1
          },
          "maxPages": {
            "title": "Max search depth (pages)",
            "type": "integer",
            "description": "How many 40-listing discovery pages to scan in search mode (1–20). Raise it when filters are narrow.",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "prefill": 1
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Apartments.com Rental Listings, Floor Plans & Fees",
        "description": "One record per Apartments.com property, with rent by bedroom, floor plans, available units, fees, pets, parking, amenities, schools, office hours, manager, website and photos.",
        "properties": {
          "listings": {
            "type": "string",
            "title": "Rental listings",
            "description": "Dataset containing the scraped Apartments.com properties.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Rental Listings",
              "transformation": {
                "fields": [
                  "name",
                  "address",
                  "city",
                  "state",
                  "zipCode",
                  "priceMin",
                  "priceMax",
                  "priceCurrency",
                  "bedsMin",
                  "bedsMax",
                  "propertyType",
                  "rating",
                  "photoCount",
                  "propertyManager",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "2.0.1",
    "imageDigest": "ea862d7f7d1fb0f3062a11f3b80bb81b3ea252294ba2782fe463a140ec5a49b4",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.018152222222222222
    }
  }
}