Apartments.com Rental Scraper - Apartments & Houses
Pricing
from $2.20 / 1,000 results
Apartments.com Rental Scraper - Apartments & Houses
Scrape Apartments.com rentals by US city. Extract apartment, house, condo, and townhome prices, phones, addresses, amenities, floorplans, and units. An Apartments.com API alternative for Excel, CSV, or JSON.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
6
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Apartments.com Rental Scraper — apartments, houses & condos. Scrape Apartments.com rental listings by US city, then download structured data as Excel, CSV, or JSON. Each Dataset row is one billable entity: a listing, floorplan, available unit, or review.
This Actor is a practical Apartments.com API alternative for rental market research, investor screening, comps, and lead lists. Enter a city such as Austin, TX, choose apartments / houses / condos / townhomes, and get separate listing, floorplan, unit, and review rows with parent context copied onto every child.
- Pull apartments for rent, houses, condos, and townhomes from Apartments.com
- Enrich search cards with detail-page fields (JSON-LD, floorplans, units, amenities, fees, schools)
- Filter by property type — or paste known search / detail URLs
- Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or MCP
- Pay per event — Actor start + each Dataset row; no subscription
Worker URL is config, not code: the Actor reads
WORKER_BASE_URLfrom Actor environment variables (plus optional per-runworkerBaseUrl). If you migrate the worker to a new host, updateWORKER_BASE_URL(andWORKER_AUTHif the API key changes) in Apify Console — no Actor code change required. SetWORKER_PROVIDES_PROXY=1when the worker supplies its ownPROXY_URL.
Free Apify plan limits (set by this Actor's developer)
| Limit | Free Apify plan | Paid Apify plan |
|---|---|---|
| Runs of this Actor | 10 total | Unlimited |
| Dataset rows per run | Up to 200 | Up to your maximum total charge |
These caps are enforced in Actor code (not by Apify Console). Hitting the run limit finishes with a clear status message — it is not a platform bug.
Need a dedicated scraper for one website?
This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.
I confirm the tier before you pay. The clock starts after that confirmation.
Start here: Submit a custom scraper request
| Starter $50 | Dedicated $100 | Hard target $200–999 | |
|---|---|---|---|
| Site | 1 simple anti-bot public site | 1 medium anti-bot public site | Cloudflare / aggressive anti-bot / custom parser |
| Scope | Full listing + detail fields | Listing + detail + pagination, your field list | Agreed fields, repeatable runs |
| Delivery | CSV/JSON · Apify Actor or standalone runnable client (script/CLI) | Same, plus a sample run and short instructions | Feasibility first, then build |
| Time | 24 hours after we confirm the URL is in scope | 48 hours after confirmation | Quoted after feasibility |
| Fixes | 30 days for small public-layout changes | 30 days | Scoped in the quote |
Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.
Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.
What does the Apartments.com Rental Scraper do?
It turns a US city rental search on Apartments.com into a clean Apify Dataset of rental communities and listings.
Under the hood, the Actor:
- Resolves your city, ZIP code or neighborhood to an Apartments.com area (or reads your start URLs / sitemaps)
- Lists the properties in that area
- Reads each property's detail document: name, address, phone, management company, rents, amenities, schools, policies
- Adds units, floor plans, reviews, fees, scores, photos and other enrichments when you ask for them
- Writes one normalized entity per Dataset row
The default bff channel calls the Apartments.com App API over plain HTTP: no browser. It connects directly and switches to a residential proxy from the worker's control plane only when the direct route is refused or busy; you never configure a proxy. The browser channel renders the Akamai-protected web pages through the worker's remote browsers and is only a fallback.
What data can you extract from Apartments.com?
| Data point | Included |
|---|---|
| Property / community name | ✅ |
| Address, city, state | ✅ |
Rent / price range (price, lowPrice, highPrice) | ✅ |
| Bed / rent summary | ✅ |
| Phone | ✅ |
| GPS coordinates | ✅ |
| Listing URL & images | ✅ |
| Amenities | ✅ |
| Floorplans / units as separate rows (when enabled) | ✅ |
| Reviews as separate rows (when enabled) | ✅ |
| Fees / schools / Walk Score text | ✅ |
Every Dataset row includes rowType, stable id, scrapedAt, and source = apartments.com. Child rows copy the parent listing ID, property name, URL, and location. A RUN_SUMMARY record in the key-value store reports counts and warnings.
One row per billed entity
maxItems is the maximum number of Dataset rows delivered and charged for each location or Start URL. The default is 70. Larger values are collected in parts of 70. The whole run still stops at your maximum total charge; free Apify plan runs stop at 200 rows and are limited to 10 runs.
rowType: "listing"— one rental property/communityrowType: "floorplan"— one floorplan/modelrowType: "unit"— one currently available rental unitrowType: "review"— one listing review
Parent listing rows do not contain nested units, domFloorplans, or reviews lists. Counts can remain. For example, maxItems: 3 with units enabled can return one listing, one floorplan, and one unit. The worker stops opening new listings and child endpoints once the shared row budget is full.
Lead & contact fields
Every Dataset row carries a normalized lead block (phones, emails, address, geo, person, org, web, leadSource, leadReveal, leadAbsences) in addition to the listing fields above. These keys are always present; a missing lead is reported explicitly via leadAbsences rather than silently omitted.
| Field | Type | Meaning on Apartments.com |
|---|---|---|
phones | [{value, type}] | Leasing-office phone for an apartment community. On apartment LDPs the number is already visible (DOM plaintext + tel: href + JSON-LD telephone, e.g. +1-832-730-2535). On condo unit LDPs the JSON-LD telephone is an empty +1- and no DOM phone exists — see leadAbsences. |
emails | [{value, type}] | Per-listing contact email. Apartments.com exposes no recipient email on listing pages (mailto: links are share links, not contact addresses); contact happens via "Send Message" / "Request Tour" lead-form modals. Always [] for per-listing rows. |
address | {street, unit, locality, region, postalCode, country, full} | Listing address. street = street line (e.g. 11901 Burnet Rd); unit = 门牌 / unit number (e.g. 1201 on condo units, null on community pages); locality = city; region = state; full = assembled full address. Already visible via JSON-LD PostalAddress + DOM. |
geo | {lat, lng} | GPS coordinates from JSON-LD GeoCoordinates / hasMap URL on apartment community LDPs (e.g. 30.40504, -97.71511). May be absent on condo unit pages (see leadAbsences). |
person | {name, role?} | Individual agent / landlord / leasing contact name. Apartments.com does not surface a named individual per listing — the contact is the community leasing office. Always null for per-listing rows. |
org | {name, id?} | Management / property company. Not exposed as a structured field on listing pages; the management company may appear in description prose but is not reliably parseable. null unless a structured source is found. |
web | {website, socials[]} | Per-listing website and social links. Apartments.com does not link to a property's own website or socials from listing pages. website = null, socials = []. |
leadSource | enum | Which surface produced the lead: search (SRP card), detail (LDP), entity / contact / reveal-xhr (not currently emitted for Apartments.com). |
leadReveal | enum | How the lead was obtained: visible (already on page, no interaction), click / xhr (after a reveal click — not used here), gated (behind login / lead form), image (image-only), absent (no lead and no gate). |
leadAbsences | object/map | Reason each missing sub-field is absent: 本站无 (site never provides it), 闸门锁 (lead-form / login wall), 未验证 (not confirmed during research). |
Reveal cost
Apartments.com does not use click-to-reveal phone/email controls. The leasing-office phone, address, and GPS on apartment community LDPs are already visible on page load (JSON-LD + DOM), so leadReveal = visible with zero extra clicks or XHR round-trips. There is no per-listing email to reveal — contact is a gated lead-form modal, so emails is always [] with leadAbsences.emails = 闸门锁. Detail pages are fetched one at a time (concurrency 1) for Akamai stability, which is the only cost driver; reveal itself adds no latency or proxy budget.
Honest limitations
The following lead sub-fields are not available from Apartments.com listing pages and are reported in leadAbsences — do not expect non-null values:
| Sub-field | Reason | leadAbsences value |
|---|---|---|
emails (per-listing) | No recipient email on listing pages; contact is a "Send Message" / "Request Tour" lead-form modal behind Akamai. | 闸门锁 |
person (agent/landlord name) | Apartments.com surfaces a community leasing office, not a named individual. | 本站无 |
org (management company) | No structured management-company field on listing pages; may appear in description prose but is not reliably parseable. | 未验证 |
web.website / web.socials | No per-listing website or social links on Apartments.com. | 本站无 |
phones (condo unit LDPs) | JSON-LD telephone is an empty +1- and the DOM has no phone; only the lead form is offered. | 闸门锁 |
geo (condo unit LDPs) | GeoCoordinates may be absent on condo unit detail pages. | 未验证 |
Platform-level contacts on apartments.com/grow/about/contact (e.g. support@apartments.com, CoStar Group address) are not used as per-listing lead values — they are corporate contacts, not listing leads.
What you can do with it
1. Scrape apartments for rent in a metro
Enter a city like Austin, TX, keep property type Apartments, and get structured community rows with rent ranges, phones, addresses, and listing URLs.
2. Cover houses, condos, and townhomes
Set propertyType to houses, condos, townhomes, or all. For houses, condos and townhomes the worker's remote browsers read that vertical's search pages (the only filtered source) and the API channel fills in each listing's phone, address, units and fees. If the browser finds nothing, the API channel returns every rental type in the area and the run's warnings say so.
3. Enrich known Apartments.com URLs
Paste search or detail URLs into Start URLs to override location/property type or fetch specific listing detail pages directly.
4. Pull floorplans and unit grids
Turn on Include unit/floorplan details to emit available units (rent, size range, availability date) and their floorplans as separate Dataset rows. unitCount is the building's total; availableUnitCount counts the units listed for rent.
5. Feed rental data into automations
Schedule the Actor and send the Dataset to Sheets, Slack, CRM, Make, n8n, Zapier, or an AI agent via Apify MCP / API.
More Actors like this
Looking for another housing / property portal, or a scraper outside Apartments.com? Use a specialized Actor when one exists — structured fields, better coverage, usually lower cost. Use this Actor for Apartments.com rentals (apartments, houses, condos, townhomes) with optional detail and floorplan enrichment.
Similar real estate Actors
- Zillow & Zumper Scraper
- Realtor.com Scraper
- Realtor.com Agents Scraper
- Zillow Group Scraper
- Craigslist Housing Scraper
- Realtor.ca Scraper
- Rightmove Scraper
- Idealista Scraper
- ImmoScout24 Scraper
- realestate.com.au Scraper
- Bayut Scraper
- Property Finder Scraper
- Funda Scraper
- 99.co Scraper
Prefer another specialized scraper?
Jobs & Freelance
- LinkedIn Jobs Scraper
- Indeed Jobs Scraper
- Upwork Jobs Scraper
- Glassdoor Scraper
- Fiverr Gigs Scraper
- Bayt Jobs Scraper
E-commerce
- Walmart Product Scraper
- Amazon Search Scraper
- Shopee Search Scraper
- Etsy Scraper
- SHEIN Product Scraper
- Temu Product Scraper
- Target Product Scraper
- Allegro Scraper
Travel & Stays
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.
How to scrape Apartments.com (no code required)
- Click Try for free
- Enter a location (
Austin, TX) - Choose property type (default: Apartments)
- Optionally set max rows and unit/review/fee/photo enrichment
- Click Start — open the Dataset tab when the run finishes
Start with maxItems: 5–10 rows to verify the market, then scale up.
Pricing — how much does it cost to scrape Apartments.com?
Pay per event. No subscription.
| Event | Price | When charged |
|---|---|---|
apify-actor-start | $0.005 | When a normal run starts (scaled by allocated memory GB) |
apify-default-dataset-item (result) | $2.50 / 1,000 ($0.0025 each) | Each listing, floorplan, unit, or review row written to the default Dataset |
User pays platform usage costs: Yes — Actor compute is billed to the user in addition to event charges. No proxy is billed to you.
Example product charges (events only):
| Scenario | Approx. event charge |
|---|---|
| Canary: 10 rows | $0.005 + 10 × $0.0025 = $0.030 |
| City scan: 100 rows | $0.005 + $0.25 = $0.255 |
| 1,000 rows | $0.005 + $2.50 = $2.505 |
Platform usage (Actor compute) is separate and depends on run duration and memory.
Input
| Field | Description |
|---|---|
location | City and state, e.g. Austin, TX |
propertyType | apartments, houses, condos, townhomes, or all |
startUrls | Optional search or detail URLs |
maxItems | 1–200 rows for each location or Start URL (default 70). Values above 70 are collected in parts of 70. Listings, floorplans, units, and reviews all count; the run stops at your maximum total charge. Free users are capped at 200 rows/run and 10 runs. |
maxPages | Search pages for houses / condos / townhomes (~40 listings/page), raised automatically to cover maxItems; 1–18 |
scrapeDetails | Browser channel: open detail pages. API channel: every row already carries its detail document; this switch only arms maxDetailFailRatio (default false) |
includeUnits | Emit available units and their floorplans as separate rows (default false) |
includeReviews | Emit each listing review as a separate row (default false) |
requestDelayMillis | Politeness delay between navigations |
provider | Collection channel: bff = direct App BFF API (default — fastest, phones/units direct, datacenter-capable); browser/camoufox = headless browser over the Akamai-protected web pages (fallback) |
includeFees | BFF: attach property/model/unit fee schedules (fees v2) |
includeWalkscore | BFF: attach Walk/Transit/Bike scores |
includeSubmarket | BFF: attach PDS submarket overlay detail (name + bbox) |
includeTours | BFF: attach tour availability (types/settings) |
includePropertyMap | BFF: attach Engrain property-map metadata and backfill unit numbers |
includeRentCalendar | BFF: fetch per-unit lease-term rent calendar when populated |
includePhotos | Listing photos (images, imageUrl) plus neighborhood, county, profile type and lead-form config from the listing web page (2 extra requests per listing) |
fields | Precise collection: list the output fields you need (e.g. ["propertyName","telephone","walkScore"]) — the worker resolves the minimal enrichment endpoints automatically; ["*"] collects the full catalog. Worker GET /v1/fields returns the complete field catalog |
sitemapSince | BFF: with sitemap startUrls, keep only entries with lastmod on/after this date |
deepCoverage | BFF: when a market exceeds the 750-pin cap, split coverage by OptionFlag buckets and geog quadrants |
optionMask | BFF: criteria.o OptionFlag bitmask filter (Advanced) |
commute | BFF: travel-time isochrone filter (term/commuteTime/transportationMethod/location, Advanced) |
geog / sort | BFF: explicit geog override / search sort key (Advanced) |
workerBaseUrl | Optional per-run worker origin override (Advanced) |
Open the Input tab in Console for the full form and tooltips.
Output example
You can download the Dataset as JSON, CSV, Excel, or HTML.
{"rowType": "listing","id": "abc123","listingId": "abc123","propertyName": "Example Apartments","listingUrl": "https://www.apartments.com/example-apartments-austin-tx/abc1234/","city": "Austin","state": "TX","price": 1450,"lowPrice": 1450,"highPrice": 2100,"telephone": "(512) 555-0100","unitCount": 345,"availableUnitCount": 149,"floorplanCount": 8,"source": "apartments.com","scrapedAt": "2026-07-17T00:00:00+00:00"}
Core listing fields include address/price/phone/GPS, the Apartments.com listingUrl, the property's own propertyWebsite, beds/bedsHigh (Studio = 0), amenities, schools and policies. With includeUnits, floorplans and available units become their own rows. With includeReviews, reviews become their own rows. Fees, scores, photos and the other enrichments come with their include* switch or fields.
Live View endpoints
When Standby / Live View is enabled, the Actor exposes a small OpenAPI surface for readiness and discovery:
| Endpoint | Purpose |
|---|---|
GET / | Readiness / service info |
GET /health | Health check |
GET /input-example | Low-cost example input |
GET /openapi.json | Deployed OpenAPI document |
Scraping still runs through a normal Actor run — Live View does not scrape Apartments.com by itself.
Connect from code
Actor ID: lentic_clockss/apartments-com-rental-scraper
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("lentic_clockss/apartments-com-rental-scraper").call(run_input={"location": "Austin, TX","propertyType": "apartments","maxItems": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("propertyName"), item.get("price"), item.get("listingUrl"))
Use the same Actor ID in Make, n8n, Zapier, or Apify MCP for AI-agent workflows.
FAQ
Why did my free-plan run stop after 10 runs?
Free Apify plan users get 10 runs of this Actor and up to 200 Dataset rows per run. These limits are set by the Actor developer (not Apify). When you hit the run cap, the run finishes with a clear status message — it is not a platform bug. Upgrade to a paid Apify plan for unlimited runs.
Is there a free Apartments.com API?
Apartments.com does not offer a simple public rental API for bulk third-party export. This Actor gives you structured rental community data through Apify runs, Dataset exports, and integrations.
Do I need a proxy?
Apartments.com is protected by Akamai on its web HTML pages, which return 403 Access Denied for many datacenter and direct IPs. The default bff channel reads the App API instead, which only checks the app User-Agent shape. You never configure a proxy: the worker gets its US egress from its own control plane.
Can I scrape houses and condos as well as apartments?
Yes. Set propertyType to houses, condos or townhomes. Those runs find listings on the vertical's search pages (through the worker's remote browsers) and read each listing's details from the API channel, so you get the same fields as for apartments. If the browser finds nothing, you still get rows from the API channel (every rental type), with a warning in the run summary.
How fast are detail documents fetched?
The API channel reads up to 4 listings at a time (at most 8 requests in flight: up to 4 direct, the rest through the backup proxy) with requestDelayMillis between each listing's calls. The browser channel opens detail pages one at a time for Akamai stability.
What happens when a detail page fails?
Failed detail fetches still emit the row (with its listingUrl) and a detailError field. If scrapeDetails is enabled and the detail failure rate exceeds maxDetailFailRatio (default 0.5) after at least two attempts, the run fails instead of looking like a clean success.
Can I schedule daily Apartments.com scrapes?
Yes. Create an Apify schedule with the same input and send the Dataset to Sheets, Slack, a CRM, or your pipeline.
Is it legal to scrape Apartments.com?
Use this Actor for legitimate research and analysis only. Respect Apartments.com terms of use and applicable law. Results may include publicly displayed listing information; do not use personal data without a lawful basis.
Related Actors
All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.
Jobs & Freelance
- LinkedIn Jobs Scraper
- Bayt Jobs Scraper
- Fiverr Gigs Scraper
- Freelancer.com Scraper
- Glassdoor Scraper
- Himalayas Jobs Scraper
- Indeed Jobs Scraper
- Jobicy Remote Jobs Scraper
- RemoteOK Jobs Scraper
- SEEK Jobs Scraper
- Upwork Jobs Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- 99.co Scraper
- Realtor.com Agents Scraper
- Apartments.com Rental Scraper
- Bayut Scraper
- Craigslist Housing Scraper
- Daft.ie Scraper
- Dot Property Scraper
- FINN.no Scraper
- Funda Scraper
- Hepsiemlak Scraper
- Idealista Scraper
- Immobiliare.it Scraper
- ImmoScout24 Scraper
- Naver Land Scraper
- OpenSooq Scraper
- Otodom Scraper
- Property Finder Scraper
- PropertyGuru Scraper
- realestate.com.au Scraper
- Realtor.ca Scraper
- Rightmove Scraper
- SeLoger Scraper
- SUUMO Scraper
- Zillow Group Scraper
E-commerce
- Shopee Search Scraper
- E-commerce Scraper
- 1688 Global Product Search Scraper
- Allegro Scraper
- Amazon Search Scraper
- ASOS Product Scraper
- Cdiscount Product Scraper
- Costco Product Scraper
- Coupang Product Scraper
- Etsy Scraper
- Lazada Scraper
- MercadoLibre Scraper
- Mercari Japan Scraper
- Rakuten Japan Scraper
- SHEIN Product Scraper
- Target Product Scraper
- Temu Product Scraper
- Walmart Product Scraper
Travel & Stays
- Booking.com & Airbnb Scraper
- Agoda Scraper
- Airbnb Listings Scraper
- Booking.com Hotels Scraper
- Despegar Scraper
- Expedia Scraper
- Traveloka Scraper
- Travelstart Flights Scraper
- Trip.com Scraper
- TripAdvisor Scraper
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ Browse the full profile: apify.com/lentic_clockss