Apartments.com Scraper
Pricing
from $3.50 / 1,000 results
Apartments.com Scraper
Scrape rental listings from Apartments.com — the largest US rental marketplace by CoStar Group. Extract rent prices, total monthly costs, floor plans, amenities, fees, pet policies, photos, phone numbers and availability. Filter by city, price range, bedrooms and property type.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
6
Monthly active users
4 days ago
Last modified
Categories
Share
Apartments.com Scraper — US Rental Listings, Rent Comps, Floor Plans & Multifamily Property Data Extractor
The most complete Apartments.com data extraction tool on Apify. Pull live rental listings from the largest US apartment marketplace — operated by CoStar Group — with structured rent prices, total monthly costs, beds/baths/sqft, amenities, fees, pet policies, photos, phone numbers, ratings, and geocoordinates. Built for multifamily investors, prop-tech teams, rent-comp analysts, lenders, brokerages, and relocation platforms that need fresh, query-ready rental supply data without fighting CoStar's anti-bot stack.
What This Actor Does
The Apartments.com Scraper is a production-ready Apify actor that extracts structured rental listings from Apartments.com — the flagship US rental marketplace owned by CoStar Group, the same company behind LoopNet, Homes.com, and the CoStar Suite used by 90%+ of US commercial real-estate professionals. Apartments.com aggregates multifamily complexes, condos, townhomes, and single-family rentals across virtually every metro in the United States, making it the single largest public source of US rental supply data.
The actor fetches city or URL-scoped search results, parses each listing card from the HTML and from the embedded JSON-LD CollectionPage graph, and optionally dives into each property's detail page to pull floor plans, amenity tags, fees, pet policies, photos, ratings, walk scores, and management company info. It returns one normalized JSON record per property — ready to drop into Postgres, BigQuery, Snowflake, Power BI, a CRM, or an investment-research notebook.
Each record can include:
- Property identity — Apartments.com listing ID, property name, full street address, city, state, ZIP, neighborhood, latitude/longitude
- Pricing — base rent range (
rentMin/rentMax), total monthly with fees (totalMonthlyMin/totalMonthlyMax), deposit - Unit specs — bedroom range, bathroom range, sqft range, floor plans (when detail scrape is on)
- Property metadata — property type (apartment / house / condo / townhome), year built, unit count, management company
- Lifestyle attributes — pet friendly flag + full pet policy + breed/weight restrictions, parking, lease term
- Marketing signals —
rentSpecialsflag + free-text promo description, ratings, review count - Media — photo URLs, photo count, virtual tour link
- Walkability — Walk Score, Transit Score, Bike Score
- Contact — leasing phone number, listing URL
If you've ever tried to build a rent-comp dataset by hand, you already know this is a multi-week engineering project. This actor does it in minutes.
Why scrape Apartments.com yourself when this exists?
Apartments.com is a high-value target because it is hard to scrape. CoStar invests heavily in protecting its data — they license it commercially through the CoStar API at five-figure annual contracts. DIY scrapers typically hit the wall at one of these obstacles within the first week:
- Aggressive Akamai / DataDome fingerprinting that blocks vanilla
requests/axiostraffic on the first hit - HTTP 403 and 429 rate-limit walls triggered by even mild concurrency
- Markup churn — Apartments.com ships A/B tests constantly, so CSS selectors break every few weeks
- Two sources of truth per page — the visible HTML cards and a separate JSON-LD
CollectionPagegraph that need to be merged and de-duplicated by property name - Pagination quirks —
/2/,/3/URL suffixes with no canonical "last page" hint; you have to detect partial pages - Detail-page JSON-LD nesting — floor plans, fees, and pet rules live across multiple
@graphnodes inside multiple<script type="application/ld+json">blocks - Total monthly vs. base rent confusion — the headline price excludes mandatory fees that often add $100–$400/month
- Phone numbers rendered as click-to-call tokens, not raw text
- Geocoordinates only available in JSON-LD, not in the visible card
- IP geofencing — non-US IPs get throttled or shown a stripped layout, so residential US proxies are mandatory at scale
This actor handles all of it: realistic Chrome headers, retry-with-backoff on 403/429, Apify Residential Proxy integration, JSON-LD + HTML merge, deterministic dedupe by property ID, and a stable normalized output schema that survives Apartments.com's UI refreshes.
Quick Start
One-Click Run
- Open the actor page on the Apify Store and click "Try for free"
- Enter one or more city slugs in the Cities field (e.g.
austin-tx,new-york-ny,chicago-il) — or paste full Apartments.com search URLs into Search URLs - Optionally toggle Scrape Detail Pages for floor plans/amenities/fees/photos, and set a Max Listings cap
- Hit Start — your structured rental dataset appears in the Apify dataset view, downloadable as JSON, CSV, Excel, or HTML
API Run (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/apartments-com-scraper").call(run_input={"cities": ["austin-tx", "houston-tx", "dallas-tx"],"propertyType": "apartments","maxPrice": 2500,"minBeds": 2,"scrapeDetails": True,"maxListings": 300,"maxPages": 15,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"]}})for unit in client.dataset(run["defaultDatasetId"]).iterate_items():print(unit["propertyName"],f"{unit['bedsMin']}–{unit['bedsMax']} bd",f"${unit['rentMin']:,}–${unit['rentMax']:,}/mo",unit["city"], unit["zipCode"],)
API Run (Node.js / TypeScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/apartments-com-scraper').call({searchUrls: ['https://www.apartments.com/new-york-ny/','https://www.apartments.com/brooklyn-ny/under-3500/',],rentSpecialsOnly: false,scrapeDetails: true,maxListings: 500,proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Pulled ${items.length} NYC + Brooklyn listings`);
API Run (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~apartments-com-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"cities": ["los-angeles-ca", "san-francisco-ca", "seattle-wa"],"propertyType": "all","maxPrice": 4000,"scrapeDetails": false,"maxListings": 200}'
How It Works
The actor builds a list of search URLs from your input, fetches each page with got-scraping (rotating Chromium-style headers + optional Apify Residential Proxy), parses the response with Cheerio, and merges two complementary data sources:
- HTML placard cards —
<article class="placard">elements expose listing ID, street address, headline rent range, beds, deal/special badge, and detail-page URL viadata-*attributes. - JSON-LD
CollectionPagegraph — every search page embeds a<script type="application/ld+json">block containing an@graphwith anItemListofApartmentComplex/Product/Residenceentities. These supply geocoordinates, telephone, aggregate rating, review count, and a clean address object that backfills missing fields.
The actor matches the two sources by lowercased property name, dedupes by propertyId, and pushes one normalized record per property to the dataset.
If scrapeDetails: true, each property's detail page is fetched too. The detail parser pulls additional JSON-LD nodes covering floor plans (with per-floor-plan rent + sqft + bedrooms), amenity tags, fee schedule, pet policy + restrictions, parking notes, lease term, deposit, photo gallery URLs, virtual tour link, walk/transit/bike scores, and management company.
Source endpoints
| Source Pattern | Example | What's there |
|---|---|---|
| City landing | apartments.com/{city-slug}/ | Default search — all property types |
| Price filter | apartments.com/{city}/under-{price}/ | Adds price cap filter |
| Bed filter | apartments.com/{city}/{n}-bedrooms/ | Adds bedroom minimum |
| Specials | apartments.com/{city}/rent-specials/ | Promotions-only feed |
| Type filter | apartments.com/houses/{city}/ etc. | Houses, condos, townhomes |
| Pagination | apartments.com/{city}/{page}/ | /2/, /3/, … |
| Detail page | apartments.com/{property-slug}-{city-slug}/{propertyId}/ | Full JSON-LD + amenity HTML |
Engineering details
- Realistic Chrome 124 fingerprint —
User-Agent,sec-ch-ua,sec-fetch-*,Accept-Languageheaders all aligned - Exponential backoff on 403/429 — five attempts per URL, sleeping 5×attempt seconds
- Optional Apify Residential Proxy — strongly recommended; default config pre-selects
RESIDENTIALgroup - Configurable
requestDelay(default 1500 ms) +maxConcurrency(default 1) — tuned to stay under CoStar's per-IP rate-limit threshold - JSON-LD walker — recursive scanner up to 8 levels deep, supports nested
@graph,ListItem, andmentions[]structures - Dedupe by
propertyIdwith fallback tolistingUrlthenpropertyName - Auto-stop on partial pages — when a page returns fewer than 5 listings, the actor treats it as the last page and moves to the next task
Input Parameters
{"cities": ["austin-tx", "houston-tx", "denver-co"],"propertyType": "apartments","maxPrice": 2200,"minBeds": 1,"rentSpecialsOnly": false,"scrapeDetails": true,"maxListings": 250,"maxPages": 15,"requestDelay": 1500,"maxConcurrency": 1,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Parameter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
searchUrls | array<string> | [] | Direct Apartments.com search URLs. When set, cities and other filters are ignored. Use to target arbitrary slices (neighborhoods, ZIPs, custom filter combos). |
cities | array<string> | ["austin-tx"] | City-state slugs matching Apartments.com URL format. Examples: new-york-ny, los-angeles-ca, chicago-il, miami-fl, seattle-wa, boston-ma, washington-dc, san-francisco-ca. |
propertyType | string | all | One of all, apartments, houses, condos, townhomes. Only applied when cities is used. |
maxPrice | integer | 0 | Maximum monthly rent. Appends /under-{price}/ to search URLs. 0 = no cap. Common values: 700, 1000, 1500, 2000, 2500, 3000. |
minBeds | integer | 0 | Minimum bedrooms. 0 = studio or any. Max enum value 5. |
rentSpecialsOnly | boolean | false | Restrict to listings with active promotions (free month, discounted rent, etc.). |
scrapeDetails | boolean | false | Visit each listing's detail page for JSON-LD enrichment (floor plans, amenities, fees, pet policy, photos, scores). Significantly increases runtime and cost. |
maxListings | integer | 100 | Hard cap on total listings saved. 0 = unlimited. |
maxPages | integer | 20 | Pages crawled per city/search URL. Each page yields ~20–25 listings. |
requestDelay | integer | 1500 | Delay between requests in ms. CoStar rate-limits aggressively — keep at or above 1500. Max 15000. |
maxConcurrency | integer | 1 | Parallel requests. Keep at 1–2. Higher values trigger 403/429 quickly. Max 5. |
proxyConfiguration | object | Residential | Apify Proxy config. Residential proxies are strongly recommended — datacenter IPs are blocked within minutes. |
Output Schema
Every dataset record uses a single flat JSON shape so warehouse loads, BI tools, and CRMs don't need per-record branching.
Identity & location
| Field | Type | Description |
|---|---|---|
propertyId | string | Apartments.com canonical listing ID (e.g., 40n18nj) |
propertyName | string | Property name (e.g., Edison Austin, The Hudson Yards, Pacific Plaza Apartments) |
address | string | Street address (e.g., 4711 E Riverside Dr) |
city | string | City (e.g., Austin, New York, Los Angeles) |
state | string | Two-letter state code (TX, NY, CA, …) |
zipCode | string | 5-digit ZIP code |
neighborhood | string | Neighborhood / submarket when detected |
latitude | number | Geocoordinate (decimal degrees) — from JSON-LD |
longitude | number | Geocoordinate (decimal degrees) — from JSON-LD |
listingUrl | string | Canonical Apartments.com property detail URL |
searchCity | string | The city slug the listing was discovered under |
Property metadata
| Field | Type | Description |
|---|---|---|
propertyType | string | Apartment, House, Condo, Townhome (when detected) |
yearBuilt | integer | Construction year (detail page) |
unitCount | integer | Total units in the property (detail page) |
managementCompany | string | Property manager / owner name (detail page) |
Pricing & unit specs
| Field | Type | Description |
|---|---|---|
rentMin | number | Lowest advertised monthly rent (base) |
rentMax | number | Highest advertised monthly rent (base) |
totalMonthlyMin | number | Lowest total monthly cost including mandatory fees |
totalMonthlyMax | number | Highest total monthly cost including mandatory fees |
bedsMin | integer | Minimum bedrooms (0 = studio) |
bedsMax | integer | Maximum bedrooms |
bathsMin | number | Minimum bathrooms |
bathsMax | number | Maximum bathrooms |
sqftMin | integer | Minimum unit square footage |
sqftMax | integer | Maximum unit square footage |
deposit | number | Required security deposit (USD) |
leaseTerm | string | Lease length(s) — e.g. 6, 9, 12 months |
floorPlans | array<object> | Per-floor-plan array (name, beds, baths, sqft, rent, availability) — detail page |
fees | object | Free-text fee schedule (application, admin, amenity, etc.) — detail page |
Marketing, lifestyle & media
| Field | Type | Description |
|---|---|---|
availabilityStatus | string | Now Available, Coming Soon, Waitlist, etc. |
rentSpecials | boolean | true if a promo banner is detected |
specialText | string | Free-text promo description (e.g., 1 month free on 13-month lease) |
petFriendly | boolean | true if dogs or cats are allowed |
petPolicy | string | Free-text pet policy summary |
petRestrictions | array<string> | Breed/weight restrictions when published |
parkingInfo | string | Parking type + cost (e.g., Garage, $150/mo) |
amenities | array<string> | Community + unit amenity tags (Pool, Fitness Center, In-Unit Laundry, EV Charging, …) |
description | string | Full marketing description from detail page |
photoCount | integer | Number of gallery images |
photos | array<string> | Photo URLs |
virtualTour | string | Virtual tour URL when offered |
rating | number | Apartments.com aggregate rating (0–5) |
reviewCount | integer | Number of resident reviews |
walkScore | integer | 0–100 walkability score |
transitScore | integer | 0–100 public transit score |
bikeScore | integer | 0–100 bikeability score |
phoneNumber | string | Leasing office phone (from JSON-LD) |
scrapedAt | string | ISO-8601 timestamp |
Example record — multifamily complex (Austin, TX)
{"propertyId": "40n18nj","propertyName": "Edison Austin","address": "4711 E Riverside Dr","city": "Austin","state": "TX","zipCode": "78741","neighborhood": "East Riverside","latitude": 30.2389,"longitude": -97.7128,"propertyType": "Apartment","yearBuilt": 2021,"unitCount": 312,"rentMin": 1295,"rentMax": 2840,"totalMonthlyMin": 1395,"totalMonthlyMax": 3010,"bedsMin": 0,"bedsMax": 3,"bathsMin": 1,"bathsMax": 2,"sqftMin": 512,"sqftMax": 1420,"availabilityStatus": "Now Available","rentSpecials": true,"specialText": "1 month free on 13-month lease","petFriendly": true,"petPolicy": "Cats and dogs welcome. 2 pets max.","petRestrictions": ["No aggressive breeds", "50 lb weight limit"],"phoneNumber": "(512) 555-0142","amenities": ["Pool", "Fitness Center", "In-Unit Laundry", "EV Charging", "Rooftop Lounge"],"floorPlans": [{ "name": "S1", "beds": 0, "baths": 1, "sqft": 512, "rent": 1295 },{ "name": "A2", "beds": 1, "baths": 1, "sqft": 720, "rent": 1620 },{ "name": "B1", "beds": 2, "baths": 2, "sqft": 1090, "rent": 2310 },{ "name": "C1", "beds": 3, "baths": 2, "sqft": 1420, "rent": 2840 }],"fees": { "application": "$60", "admin": "$200", "amenity": "$25/mo" },"parkingInfo": "Garage, $125/mo","leaseTerm": "6, 9, 12, 13 months","deposit": 500,"photoCount": 42,"photos": ["https://images1.apartments.com/.../photo01.jpg", "..."],"virtualTour": "https://my.matterport.com/show/?m=abcdef","rating": 4.3,"reviewCount": 178,"walkScore": 64,"transitScore": 51,"bikeScore": 72,"managementCompany": "Greystar","listingUrl": "https://www.apartments.com/edison-austin-austin-tx/40n18nj/","searchCity": "austin-tx","scrapedAt": "2026-05-16T14:32:18.000Z"}
Example record — single-family rental (Houston, TX)
{"propertyId": "p3kxr88","propertyName": "1842 Bissonnet St House","address": "1842 Bissonnet St","city": "Houston","state": "TX","zipCode": "77005","neighborhood": "West University","latitude": 29.7193,"longitude": -95.4196,"propertyType": "House","rentMin": 3450,"rentMax": 3450,"totalMonthlyMin": 3450,"totalMonthlyMax": 3450,"bedsMin": 3,"bedsMax": 3,"bathsMin": 2,"bathsMax": 2,"sqftMin": 1980,"sqftMax": 1980,"availabilityStatus": "Now Available","rentSpecials": false,"petFriendly": true,"petPolicy": "Small dogs only with deposit","phoneNumber": "(713) 555-0199","amenities": ["Backyard", "Garage", "Washer/Dryer"],"listingUrl": "https://www.apartments.com/1842-bissonnet-st-houston-tx/p3kxr88/","searchCity": "houston-tx","scrapedAt": "2026-05-16T14:35:02.000Z"}
Property Type & Status Reference
Property type taxonomy
propertyType value | Meaning |
|---|---|
Apartment | Multifamily rental community (most common) |
House | Single-family detached rental |
Condo | Condominium unit rented by owner |
Townhome | Attached townhouse rental |
Filter at the search level with the propertyType input parameter: all, apartments, houses, condos, townhomes.
Availability statuses
availabilityStatus | Meaning |
|---|---|
Now Available | Units available for immediate move-in |
Coming Soon | Pre-leasing future units (often new construction) |
Waitlist | Fully occupied; accepting waitlist applications |
Limited Availability | Few units left |
Contact for Availability | No live availability published |
Rent specials examples
When rentSpecials: true, the specialText field contains the promo verbatim. Common patterns:
1 month free on 13-month lease$500 off first monthLook & Lease — $0 admin feeReduced deposit for qualified applicantsFree covered parking for 12 months
Use Cases
Multifamily Investment Research & Acquisitions
Multifamily syndicators, REITs, and value-add investors run this actor to:
- Pull a full rent roll snapshot for every comp within a 1–3 mile radius of a target acquisition
- Compute price-per-sqft and price-per-bed comparables across submarkets to underwrite offer prices
- Track lease-up velocity at new construction by re-running weekly and diffing
availabilityStatus - Identify rent specials concentration as a soft-market signal (markets with high
rentSpecials: trueshare are typically over-supplied) - Benchmark target asset rent vs. market by floor plan type using the
floorPlansarray - Source off-market opportunities by spotting properties listed by smaller management companies that may signal owner fatigue
Rent Comp & Pricing Analytics (Prop-Tech)
Pricing platforms, revenue-management vendors, and prop-tech startups use the data to:
- Train rent-prediction models on millions of rows of
rentMin/bedsMin/sqftMin/zipCode/amenities - Build rent index dashboards by city, ZIP, neighborhood, or property class
- Power automated comp reports that property managers receive in their inbox each Monday
- Monitor competitor pricing in real time — alert when a comp drops rent by >5%
- Feed AI underwriting copilots with the freshest possible rent signal
- Validate proprietary pricing recommendations against live market evidence
Brokerage, Leasing & Tour Generation
Apartment locators, leasing brokerages, and corporate housing providers leverage Apartments.com data to:
- Build searchable internal inventories without licensing the CoStar Suite
- Match client requirements (budget, beds, pet policy, neighborhood) against current listings instantly
- Stage tour itineraries by pulling addresses, phone numbers, and availability in one query
- Identify pet-friendly inventory for clients with dogs over 50 lbs using
petRestrictions - Spot rent specials to lead with savings in client conversations
- Track which buildings convert from "Now Available" to "Waitlist" as a soft demand signal
Relocation & Corporate Housing
Relocation management companies, HR mobility teams, and corporate-housing providers use the actor to:
- Pre-screen rentals in destination metros before an employee accepts an offer
- Build relocation packets with shortlisted comparables across price tiers
- Quote cost-of-living adjustments with hard
totalMonthlyMindata — not estimated medians - Compare neighborhoods using
walkScore/transitScore/bikeScore - Match commute zones by geocoordinate to office addresses
Lender Underwriting, Insurance & Risk
Multifamily lenders (agency, CMBS, debt funds), property insurers, and tax appeal consultants use the dataset to:
- Underwrite refi requests by validating sponsor's stated rent against scraped market rent
- Stress-test pro formas with current vacancy + concession environment in the submarket
- Identify mispriced insurance policies when scraped rent is materially above premium-baseline rent
- Support property-tax appeals with hard comparable evidence
- Monitor portfolio submarkets quarterly for early signs of rent compression
- Feed credit committees with submarket performance briefs
Market Reports & Real-Estate Journalism
Brokerages, research desks, and real-estate journalists publish recurring market reports built on this data:
- Quarterly metro rent index — median
rentMinby city/ZIP, year-over-year - Concession watch — % of listings carrying
rentSpecialsby metro - New construction lease-up tracker — units coming online filtered by
yearBuilt >= current_year - 2 - Pet-friendliness index — share of inventory accepting cats/dogs by city
- Amenity-of-the-month reports — which amenities (EV charging, coworking, dog wash) are spreading fastest
Location Intelligence & Site Selection
Retailers, QSR chains, fitness operators, and mobility companies use rental density as a population/demand proxy:
- Identify high-density rental ZIPs for store/site selection (renter share correlates with foot traffic)
- Spot emerging neighborhoods by tracking new-construction inventory growth
- Estimate household formation by counting unique
propertyIdin lease-up status - Inform last-mile / delivery zone design with apartment-cluster maps
- Layer Walk/Transit scores onto trade-area analyses
Academic & Public-Policy Research
Housing researchers, urban planners, and policy think tanks use the dataset to study:
- Rent burden trends by metro and submarket
- Geographic patterns of affordable inventory (filter
maxPriceagainst AMI thresholds) - Concession patterns as market-softness indicators
- Pet-policy and source-of-income discrimination signals across jurisdictions
- Inventory mix shifts — multifamily vs. SFR vs. condo — over time
CRM Enrichment, Lead Routing & Direct Outreach
B2B vendors selling to multifamily operators (property-management software, IoT, smart locks, payment platforms) enrich their pipelines with:
- Building-level firmographics —
managementCompany,unitCount,yearBuilt, location - Targeted outbound lists filtered by property size or vintage
- Account-mapping — group properties by
managementCompanyto estimate operator portfolio scale - Territory planning — geographic clustering by ZIP / metro
- Trigger-based plays — new properties appearing for the first time = new construction = sales trigger
Sample Queries & Recipes
Recipe 1: Full Manhattan inventory under $4,000/mo, all property types
{"cities": ["new-york-ny"],"propertyType": "all","maxPrice": 4000,"scrapeDetails": false,"maxListings": 0,"maxPages": 30}
Recipe 2: 2-bedroom Austin apartments with full detail enrichment
{"cities": ["austin-tx"],"propertyType": "apartments","minBeds": 2,"maxPrice": 2500,"scrapeDetails": true,"maxListings": 200}
Recipe 3: Houses for rent across Houston, Dallas, and San Antonio
{"cities": ["houston-tx", "dallas-tx", "san-antonio-tx"],"propertyType": "houses","minBeds": 3,"scrapeDetails": true,"maxListings": 300}
Recipe 4: Rent-specials-only sweep across top tech metros (concession monitor)
{"cities": ["san-francisco-ca", "seattle-wa", "austin-tx", "denver-co"],"rentSpecialsOnly": true,"scrapeDetails": false,"maxListings": 500,"maxPages": 20}
Recipe 5: Hyper-targeted neighborhood comp pull via search URLs
{"searchUrls": ["https://www.apartments.com/brooklyn-ny/williamsburg/","https://www.apartments.com/chicago-il/west-loop/","https://www.apartments.com/los-angeles-ca/silver-lake/"],"scrapeDetails": true,"maxListings": 150}
Recipe 6: Affordable inventory under $1,000 across Sun Belt secondary markets
{"cities": ["el-paso-tx", "lubbock-tx", "tulsa-ok", "memphis-tn", "birmingham-al"],"maxPrice": 1000,"scrapeDetails": false,"maxListings": 400}
Recipe 7: Sample run — 20 listings to validate schema before a full scrape
{"cities": ["miami-fl"],"maxListings": 20,"maxPages": 1,"scrapeDetails": true}
Integration Examples
Google Sheets
Configure an Apify schedule that runs this actor each morning. Add the "Save to Google Sheets" integration on the schedule's outputs tab — every run appends fresh rows. Use a pivot table for medianRent BY city, bedsMin.
Make.com / Zapier / n8n
Use the official Apify connector to trigger on run.succeeded. Common downstream flows:
- New listing in target ZIP → Slack alert to broker team
rentSpecialsflipped totrueon a target comp → email digest- Property dropped below
$Xprice threshold → trigger CRM task - Rent decreased vs. last week → push to internal pricing dashboard
Power BI / Tableau / Looker Studio
Connect Apify's REST dataset endpoint directly. Build dashboards covering:
- Median rent heatmap by ZIP
- Concession share by metro / submarket
- New construction lease-up funnel (
yearBuilt >= 2024+availabilityStatus) - Floor-plan-level price-per-sqft comparisons
- Pet-policy distribution by city
Postgres / Snowflake / BigQuery
Use the Apify webhook integration to POST run results to your warehouse ingestion endpoint after every scheduled run. Recommended schema: one table listings, one table floor_plans (one row per floor plan, joined on propertyId).
SELECT zip_code,AVG(rent_min) AS avg_rent_min,AVG(rent_max) AS avg_rent_max,COUNT(*) AS active_listings,SUM(CASE WHEN rent_specials THEN 1 ELSE 0 END)::float / COUNT(*) AS concession_shareFROM apartments_com_listingsWHERE state = 'TX' AND scraped_at >= CURRENT_DATE - INTERVAL '7 days'GROUP BY zip_codeORDER BY active_listings DESC;
Salesforce / HubSpot CRM Enrichment
Nightly Apify run → match managementCompany to your Account records → upsert unitCount, yearBuilt, latest median rent. Trigger Tasks when an Account's portfolio shows new lease-up properties (sales opportunity for property-management software).
Webhooks & Custom Pipelines
Subscribe a webhook to RUN.SUCCEEDED and post the dataset URL to your ETL worker. The actor's deterministic schema makes downstream parsing trivial.
Major US Rental Markets at a Glance
| Metro | City Slug | Why it matters |
|---|---|---|
| New York, NY | new-york-ny | Largest US rental market by unit count; highest median rent |
| Los Angeles, CA | los-angeles-ca | 2nd largest renter base; complex submarket geography |
| Chicago, IL | chicago-il | Top-5 multifamily transaction market; deep neighborhood data |
| Houston, TX | houston-tx | Energy-driven rental demand; broad price spectrum |
| Dallas-Fort Worth, TX | dallas-tx, fort-worth-tx | One of the hottest US lease-up markets |
| Austin, TX | austin-tx | Tech-driven; high concession environment in 2024–2026 cycle |
| Miami, FL | miami-fl | Migration-driven rent growth; luxury condo rental supply |
| Seattle, WA | seattle-wa | Tech-heavy; high transit-score inventory |
| Boston, MA | boston-ma | Higher-ed and biotech demand; September lease cycle |
| Washington, DC | washington-dc | Government employment base; stable rent |
| San Francisco, CA | san-francisco-ca | Most volatile rents post-COVID; rich concession data |
| Denver, CO | denver-co | High new-construction pipeline; lease-up rich |
| Atlanta, GA | atlanta-ga | Sun Belt magnet; large SFR rental share |
| Phoenix, AZ | phoenix-az | Build-to-rent capital of the US |
| San Diego, CA | san-diego-ca | Military + biotech demand; supply-constrained |
| Philadelphia, PA | philadelphia-pa | Affordable East Coast comp baseline |
| Minneapolis, MN | minneapolis-mn | Stable rust-belt-adjacent market |
| Portland, OR | portland-or | Walk-score-rich; renter-friendly regulations |
| Nashville, TN | nashville-tn | High in-migration; lease-up heavy |
| Charlotte, NC | charlotte-nc | Banking center; growing multifamily pipeline |
The actor works on any Apartments.com city slug — those above are simply the deepest by listing count.
Cost & Performance
| Metric | Value |
|---|---|
| Engine | HTTP fetch (got-scraping) + Cheerio + JSON-LD parsing |
| Runtime (city, 100 listings, no detail) | ~3–6 minutes |
| Runtime (city, 100 listings, with detail) | ~15–30 minutes |
| Data freshness | Live at run time |
| Auth required | None |
| Proxy required | Yes — Apify Residential strongly recommended |
| Concurrency | 1–2 (CoStar rate-limits aggressively) |
| Memory footprint | 256 MB minimum, 1 GB recommended for scrapeDetails: true |
| Pricing model | Pay-per-event — predictable per-record cost |
| Cost per 100 listings (no detail) | varies — typically a few cents |
| Cost per 100 listings (with detail) | varies — significantly higher due to extra page fetches |
| Output formats | JSON, CSV, Excel (XLSX), HTML, XML, RSS, JSON Lines |
Compliance, Privacy & Legal Notes
- Public data only. Every field returned by this actor comes from publicly accessible Apartments.com listing pages — the same content visible to any anonymous web visitor.
- No login, no scraped credentials. The actor does not bypass authentication, cookies, or any access control.
- No PII. Phone numbers are leasing office numbers published by property owners for marketing purposes — they are not personal numbers.
- No financial data. No payment processing, application, or tenant data is touched.
- Respect
robots.txtand Apartments.com / CoStar Terms of Service. Consumers of the data are responsible for ensuring their use complies with applicable terms. The actor itself is a general-purpose research tool. - GDPR / CCPA. Listings represent business establishments, not individuals; standard PII protections do not apply. Apply standard data-handling practices if you enrich with personal data.
- Rate considerations. Default settings (
requestDelay: 1500,maxConcurrency: 1, residential proxy) are deliberately conservative to minimize impact on the source.
Important: This data must not be used for unlawful purposes including but not limited to source-of-income discrimination, fair-housing violations, scraping for resale at scale in violation of CoStar's terms, or to enable identity fraud. Consult legal counsel before resale or syndication.
Frequently Asked Questions
How fresh is the data?
Live at run time. Apartments.com is updated continuously by property managers, so every run pulls the current snapshot. Schedule the actor hourly, daily, or weekly to maintain a history.
How many listings will I get per run?
Depends entirely on inputs. A single city with maxPages: 20 typically returns 300–500 listings. Major metros (NYC, LA, Chicago) can yield 1,000+ if you raise maxPages and maxListings. Set maxListings: 0 for unlimited.
Do I need an Apartments.com login or API key?
No. The actor uses anonymous HTTP fetches against public search and detail pages. CoStar's commercial API is not required.
Why do I need residential proxies?
CoStar uses Akamai / DataDome anti-bot protection that fingerprints datacenter IP ranges within minutes. Apify Residential proxies present as real US consumer connections and are the most reliable option. Datacenter proxies will get blocked.
Will this work on the Apify Free plan?
Yes for small sample runs. Production-scale crawling (thousands of listings) typically requires a paid Apify plan because of residential proxy traffic costs.
How do I scrape only one neighborhood?
Use searchUrls and paste Apartments.com's neighborhood URL — e.g. https://www.apartments.com/brooklyn-ny/williamsburg/. The cities/propertyType/maxPrice inputs are ignored when searchUrls is set.
Can I scrape houses, condos, and townhomes — not just apartments?
Yes. Set propertyType to houses, condos, or townhomes. Apartments.com lists significant SFR and condo inventory in addition to multifamily.
What's the difference between rentMin and totalMonthlyMin?
rentMin is the headline base rent. totalMonthlyMin includes mandatory fees the property charges every month (amenity fee, trash fee, pest control, technology package, etc.). For underwriting and rent-comp accuracy, use totalMonthlyMin/totalMonthlyMax.
Does the actor return floor-plan-level pricing?
Yes when scrapeDetails: true. The floorPlans array contains one entry per published floor plan with name, beds, baths, sqft, and rent.
Are reviews and ratings included?
rating (0–5) and reviewCount are included when available. Individual review text is not extracted in the default schema to keep records flat — open a feature request if you need it.
Can I get historical rent data?
Not from a single run — Apartments.com only publishes current rents. To build history, schedule this actor daily and archive each dataset run; Apify stores all run datasets indefinitely on most plans.
Does the actor handle pagination automatically?
Yes. It walks /2/, /3/, … up to maxPages per task and auto-stops when it detects a partial / empty page.
Does it work for Canadian or international listings?
No — Apartments.com is US-only. For Canada use the Realtor.ca Scraper or Kijiji Scraper; for Australia use Domain.com.au Scraper; for Europe see the Immoweb and Marktplaats actors.
What if I get blocked (403 / 429) during a run?
The actor retries up to 5 times with exponential backoff on 403/429. If persistent: raise requestDelay to 3000+, drop maxConcurrency to 1, and ensure residential proxies are enabled. Avoid running multiple parallel Apartments.com jobs.
Can I schedule the actor?
Yes — Apify's built-in Scheduler supports any cron expression. Pair with the Save-to-Sheets or webhook integration for a fully automated pipeline.
Can I export to Excel, CSV, or directly to my warehouse?
Yes — JSON, CSV, Excel (XLSX), HTML, XML, RSS, and JSON Lines from the dataset view, plus REST API access for any custom pipeline.
How does this compare to the CoStar / Apartments.com commercial API?
CoStar's commercial product offers contracted data licensing, broader historical coverage, and SLA support — but starts in the high five figures annually. This actor gives you live public listing data at a pay-per-event price point, perfect for ad-hoc research, prototyping, and many production workloads.
Are agent or owner contact emails included?
No. Apartments.com does not publish leasing emails on listings — only the leasing-office phone number (when present) is returned.
Related Apify Actors by Haketa
If you need rental, real-estate, or marketplace data beyond Apartments.com, these sibling actors cover related sources:
- Rent.com Scraper (US) — sister rental marketplace with overlapping but distinct US inventory
- Realtor.ca Scraper (Canada) — Canadian residential listings (CREA MLS feed)
- Domain.com.au Property Scraper (Australia) — Australian sale & rental listings
- Immoweb.be Belgium Property Scraper — Belgian residential & commercial property
- Zameen.com Pakistan Real Estate Scraper — Pakistan's largest property portal
- VivaReal Brazil Real Estate Scraper — Brazilian residential listings
- ZAP Imóveis Brazil Scraper — Brazilian sale & rental
- Lamudi Philippines Real Estate Scraper — Philippines property listings
- Realestate.com.kh Cambodia Scraper — Cambodian property
- OfferUp Scraper (US) — adjacent US marketplace data
- Kijiji.ca Scraper (Canada) — Canadian classifieds incl. rentals
- BBB Business Scraper — enrich property management company records
Comparison vs. Alternatives
| Approach | Setup | Freshness | Cost (1,000 listings) | Schema normalization | Anti-bot handling |
|---|---|---|---|---|---|
| This actor | < 5 minutes | Live | Pennies–dollars (pay-per-event) | Built-in | Built-in (proxies + backoff) |
| Manual copy-paste | Hours per city | Live | Free (labor cost) | None | N/A — manual |
| Custom Python + residential proxies | 2–4 weeks dev | Live | Proxy + dev + infra | DIY (constantly breaks) | DIY |
| CoStar / Apartments.com commercial API | Weeks of contract negotiation | Live | $$$$ annual contract | Yes | Yes |
| Generic web-scraping SaaS | Days to configure | Live | $$ monthly subscription | Limited | Limited |
| Stale third-party rent reports | None | Monthly–quarterly | Subscription | Pre-aggregated only | N/A |
Why Pay-Per-Event Pricing?
- You only pay when the actor actually runs and produces records
- Cost scales linearly with how much data you consume — no monthly minimums
- Transparent line-item billing inside the Apify console
- Free to evaluate — run a 20-listing sample for pennies before committing
- Far cheaper than a CoStar enterprise contract for most non-enterprise workloads
- Predictable for finance — no surprise overage bills based on Compute Units
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05 | Initial public release — HTTP + JSON-LD scrape, city/URL inputs, optional detail-page enrichment, residential proxy support, pay-per-event pricing |
Keywords
Apartments.com scraper · Apartments.com data extractor · Apartments.com API · US rental listings API · US apartment data scraper · CoStar rental data alternative · rent comp data · multifamily property data · multifamily rent comp scraper · apartments listings scraper · apartment rental data extractor · Apartments.com rent scraper · NYC apartment scraper · Los Angeles apartment scraper · Chicago apartment scraper · Houston apartment scraper · Miami apartment scraper · Seattle apartment scraper · Austin apartment scraper · Boston apartment scraper · Washington DC apartment scraper · San Francisco apartment scraper · Denver rent comp scraper · Atlanta rent data · Phoenix rental scraper · floor plan rent data · apartment amenities scraper · pet policy rental data · single family rental scraper · SFR rental listings API · condo rental scraper · townhome rental scraper · build-to-rent data · rent specials tracker · concession monitor scraper · multifamily investor research data · prop-tech rental data feed · relocation cost-of-living data · lender multifamily underwriting data · REIT rent comp dataset · brokerage rental inventory API · CoStar Group alternative · Apify real estate actor · US apartment listings JSON
Support
- Bug reports: Use the Issues tab on the Apify Store actor page
- Feature requests: Same place — please describe your use case and target metro
- Direct contact: Through the Apify developer profile
If this actor saves you time or unlocks a project that wasn't possible before, a 5-star rating on the Apify Store helps other multifamily investors, prop-tech teams, brokerages, and researchers discover it. Thank you.


