π’ Apartments.com Scraper
Pricing
from $3.99 / 1,000 results
π’ Apartments.com Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Apartments.com Scraper β Rental Listings, Rent Ranges, Coordinates & Transit
Extract rental property data from Apartments.com: property name, full address, neighbourhood, GPS coordinates, rent range, rating, verified-listing status and nearby transit with drive times and distances.
Paste listing URLs, search URLs, map URLs β or just a city name β and the Actor works out what each one is and crawls it.
What is Apartments.com Scraper?
Apartments.com is the largest rental marketplace in the US, and the hardest to read at scale: it runs Akamai Bot Manager, which returns 403 Access Denied to most automated traffic on sight.
This Actor is built around that problem. It uses Firefox TLS impersonation with matching Firefox-shaped headers, hunts for a working US residential exit IP, and then sticks to that IP for the rest of the run β because Akamai's bm_* cookies are bound to the IP that received them, and rotating per request invalidates them instantly. Each candidate IP gets its own clean cookie jar, and soft blocks (Access Denied bodies, suspiciously short responses) are detected and retried rather than silently returned as empty data.
Input handling is equally forgiving. startUrls accepts individual property pages, city or neighbourhood search pages, and map URLs with ?bb= bounding boxes, and auto-detects each. Or skip URLs entirely and type Brookline MA into the Search term field β the Actor builds the search URL for you.
Two fields do a lot of work in the output: coordinates, which makes every record mappable and joinable to any other geodata you hold, and transportation, which lists nearby transit stops with drive time and distance β the commute context that usually explains why one building prices above another.
What data can you extract?
| Field | Description |
|---|---|
id | Apartments.com listing identifier |
propertyName | Building or community name |
url | Canonical listing URL |
breadcrumbs | Navigation path β state β city β neighbourhood β property |
lastUpdated | When the listing was last updated |
location.fullAddress | Complete formatted address |
location.streetAddress | Street line |
location.city | City |
location.state | State name |
location.neighborhood | Neighbourhood, derived from the breadcrumb path |
location.postalCode | ZIP code |
coordinates.latitude / .longitude | GPS position |
rent.min / rent.max | Advertised rent range, parsed to integers |
rating | Property rating when published |
isVerified | Whether Apartments.com marks it a Verified Listing |
transportation[] | Nearby transit: name, drive time, distance, and url when linked |
Scope, stated plainly: this Actor returns property-level data. Per-unit floor plans, amenity lists and management phone numbers are not part of the output.
Why teams scrape Apartments.com
For rental market analysis
rent.min and rent.max across a whole city, joined to coordinates and location.neighborhood, produce a real price map β not a headline median.
For real estate investment
Rent ranges next to neighbourhood and transit context are the inputs for a yield estimate. lastUpdated shows which listings are live rather than stale.
For proptech and mapping products
Every record ships with latitude and longitude, so listings drop straight onto a map or into a spatial database with no geocoding step or cost.
For competitive analysis
Property managers can pull every competing building in their submarket and compare advertised ranges, ratings and verified status.
For relocation and commute tools
transportation gives named stops with drive time and distance β the data behind "how far is this from the train?"
For lead generation
Property names, addresses and neighbourhoods build a territory list for vendors selling to multifamily operators.
How to scrape rentals step by step
- Decide your input. Either paste Apartments.com URLs into Apartments.com URLs, or type a city, neighbourhood or ZIP into Search term β or do both.
- Set Maximum properties to scrape (
0for unlimited). - (Optional) Set a Listing end page to stop pagination early β
3scrapes pages 1β3. - Leave the proxy alone. Residential is enforced because Apartments.com requires it.
- Click Start, then export the Output tab as JSON (recommended) or CSV.
β¬οΈ Input
Example input β search term
{"search": "Brookline MA","maxItems": 50,"endPage": 3}
Example input β mixed URLs
{"startUrls": ["https://www.apartments.com/sobe-apartment-rentals-miami-beach-fl/26xc7jb/","https://www.apartments.com/brookline-ma/"],"maxItems": 100}
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | [] | Optional. Bulk Apartments.com URLs β individual listings, city/neighbourhood searches, or map URLs with ?bb=. The Actor auto-detects which is which. Use this, or search, or both. |
search | string | β | Optional free-text query: a city, neighbourhood or ZIP (Brookline MA, Miami Beach FL, 10001). Converted into a search URL and crawled like any other start URL. |
maxItems | integer | 10 | Cap on total property records returned. 0 for unlimited, up to whatever the page set contains. |
endPage | integer | 0 | Stop pagination at this page number. 0 means continue until results run out β Apartments.com itself caps a search at 28 pages. |
includeAllImages | boolean | false | β οΈ Roadmap flag. Image extraction is not yet implemented; enabling this adds an empty images array and returns no URLs. |
includeVirtualTours | boolean | false | β οΈ Roadmap flag. Virtual-tour extraction is not yet implemented; enabling this adds an empty virtualTours array. |
proxyConfiguration | object | Residential | The Actor always runs on Apify Residential proxy with three retry rounds and IP refresh β Apartments.com is too aggressive for direct or datacenter traffic. Custom proxy URLs pasted here are tried first (three rounds) before falling back to Residential. The Use Apify Proxy toggle and group selection are ignored; Residential is enforced. |
The two image flags are reserved, not functional. They are documented here honestly: toggling them today changes the output shape (an empty array appears) but produces no image or tour URLs.
β¬οΈ Output
Example output
{"id": "wqc416h","propertyName": "Forte at 1440 Beacon","url": "https://www.apartments.com/forte-at-1440-beacon-brookline-ma/wqc416h","breadcrumbs": ["Massachusetts", "Brookline", "Coolidge Corner", "Forte at 1440 Beacon"],"lastUpdated": "2026-08-08T11:20:00Z","location": {"fullAddress": "1440 Beacon St, Brookline, MA 02446","streetAddress": "1440 Beacon St","city": "Brookline","state": "Massachusetts","neighborhood": "Coolidge Corner","postalCode": "02446"},"coordinates": { "latitude": 42.3418, "longitude": -71.1265 },"rating": 4.2,"isVerified": true,"rent": { "min": 2450, "max": 5900 },"transportation": [{ "name": "Summit Ave Station", "drive": "2 min", "distance": "0.5 mi", "url": "https://www.apartments.com/β¦" },{ "name": "Boston Logan International", "drive": "18 min", "distance": "8.1 mi" }]}
Illustrative values β a live run returns current Apartments.com data.
Usage recipes
Map a city's rental market
{"search": "Austin TX","maxItems": 0}
Every record has coordinates, so the export goes straight into a mapping tool or PostGIS.
Compare neighbourhoods
Run several searches, then group by location.neighborhood and compare median rent.min. The breadcrumb-derived neighbourhood is more consistent than free-text address parsing.
Track a competitive set
Put the listing URLs of competing buildings in startUrls, schedule a weekly run, and watch rent.min / rent.max move.
Transit-first search
Filter the export for properties whose transportation contains a stop under a 5-minute drive. That is a commute filter Apartments.com's own UI does not offer.
Quick sample before a big run
{"search": "Miami Beach FL","maxItems": 10,"endPage": 1}
Verified listings only
Filter on isVerified: true β verified properties are generally the better-maintained records.
How does this compare to an official Apartments.com API?
There is no public Apartments.com API. The site (part of CoStar Group) offers no developer programme, no public endpoints and no data feed for general use; commercial data licensing goes through CoStar's sales process at enterprise prices.
That leaves the public website as the only broadly available source, which is what this Actor reads β with the anti-bot handling that makes reading it reliably possible.
Integrate and automate
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperforge/apartments-com-scraper").call(run_input={"search": "Brookline MA","maxItems": 50,})for p in client.dataset(run["defaultDatasetId"]).iterate_items():rent = p.get("rent") or {}coords = p.get("coordinates") or {}print(p["propertyName"], "|", rent.get("min"), "-", rent.get("max"),"|", coords.get("latitude"), coords.get("longitude"))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperforge/apartments-com-scraper').call({search: 'Brookline MA',maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
REST API
curl -X POST "https://api.apify.com/v2/acts/scraperforge~apartments-com-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"search":"Brookline MA","maxItems":50}'
n8n, Make, Zapier and AI agents
Call the Actor from n8n, Make, Zapier or an MCP-capable agent β a common pattern is new listings β filter by rent and commute β Slack alert.
Schedules and webhooks
Attach a Schedule for weekly market tracking and deduplicate on id, then route results with webhooks or the Google Sheets / Airtable / BigQuery integrations.
Pricing and what you are charged for
Billing details for this Actor are shown on the Pricing tab of its page β check there for the current model and rates before a large run. Apify shows a cost estimate before and during every run.
maxItems is your ceiling on records. Residential proxy traffic is billed separately by the platform and is unavoidable here, because Apartments.com does not tolerate direct or datacenter traffic.
A note on billing accuracy: version 0.8 removed a leftover duplicate charge call, so each result is charged once.
Limits, reliability and blocking
- Residential proxy is mandatory and enforced. The proxy toggle and group selection are ignored. Custom proxy URLs are tried first, then the Actor falls back to Residential.
- Apartments.com caps its own searches at 28 pages. No setting gets past that β split a large market into several narrower searches or map bounding boxes instead.
includeAllImagesandincludeVirtualToursare roadmap flags. They reserve the output keys but return no image or tour URLs today.- The output is property-level. Individual floor plans, unit-level pricing, amenity lists and management phone numbers are not returned.
rentis the advertised range, parsed from the listing's rent line. Some listings publish a single figure, in which caseminandmaxare equal; some publish "Call for rent" and both come backnull.- Anti-bot handling shapes run behaviour. The Actor hunts for a good residential IP and then sticks with it; a run may spend its first requests finding one.
- A genuinely empty run still writes one diagnostic record (not charged), so the dataset is never empty and health checks stay meaningful. Do not mistake that record for a property.
ratingisnullwhen the property has no published rating, andneighborhoodis empty when the breadcrumb path does not include one.- Default run options are 4 GB memory and a 1-hour timeout; raise the timeout for unlimited runs.
Is it legal to scrape Apartments.com?
This Actor collects publicly available rental listing information β property names, addresses, advertised rent ranges and transit context that any visitor can read without logging in. It does not log in, access private landlord dashboards, or collect renter or applicant data.
Listing content belongs to the property managers and to Apartments.com. Using it for market analysis, research and internal decision-making is the ordinary case; republishing listings wholesale as your own inventory is not. Comply with Apartments.com's Terms of Use, and with fair housing law wherever you apply this data to advertising or tenant selection.
β Frequently asked questions
Do I need to supply URLs?
No. Type a city, neighbourhood or ZIP into search and the Actor builds the search URL itself.
What URL types are supported?
Individual listing pages, city and neighbourhood search pages, and map URLs with a ?bb= bounding box β auto-detected, mixable in one run.
Why is residential proxy forced?
Apartments.com runs Akamai Bot Manager, which blocks direct and datacenter traffic on sight. Residential is what makes the run work.
Why did my search stop before I expected?
Apartments.com caps a single search at 28 pages, or your endPage / maxItems limit was reached first.
Do I get photos?
Not yet. includeAllImages is a reserved roadmap flag β enabling it adds an empty images array and no URLs.
Do I get per-unit floor plans and pricing?
No. Output is property-level, including the advertised rent range.
Why is rent null on some properties?
The listing advertises "Call for rent" or publishes no figure. Nothing to parse.
What is the single record in an otherwise empty run?
A deliberate, un-charged diagnostic record so the dataset is never empty. It is not a property.
Are coordinates accurate?
They come from the listing's own published location metadata β accurate to the property, and ready to map without a geocoding step.
Which export format should I use?
JSON β location, coordinates, rent and transportation are nested. CSV flattens them into columns if you prefer a spreadsheet.
π Related scrapers
- π Zillow Agents Finder β the agents and lenders behind the market.
- Realtor.com Agent Scraper β agent rosters on a second portal.
- Facebook Marketplace Scraper β private-landlord rental listings.
- Google Search Results Scraper with Local Businesses β local context around a property.
Browse the full collection on the ScraperForge profile.
π¬ Feedback
Need floor-plan data, amenity lists, or image extraction sooner? Open an issue on the Issues tab of this Actor.