Apartments.com Rental Scraper - Apartments & Houses avatar

Apartments.com Rental Scraper - Apartments & Houses

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Apartments.com Rental Scraper - Apartments & Houses

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

6

Total users

1

Monthly active users

4 days ago

Last modified

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_URL from Actor environment variables (plus optional per-run workerBaseUrl). If you migrate the worker to a new host, update WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required. Set WORKER_PROVIDES_PROXY=1 when the worker supplies its own PROXY_URL.

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 totalUnlimited
Dataset rows per runUp to 200Up 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 $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped 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:

  1. Resolves your city, ZIP code or neighborhood to an Apartments.com area (or reads your start URLs / sitemaps)
  2. Lists the properties in that area
  3. Reads each property's detail document: name, address, phone, management company, rents, amenities, schools, policies
  4. Adds units, floor plans, reviews, fees, scores, photos and other enrichments when you ask for them
  5. 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 pointIncluded
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/community
  • rowType: "floorplan" — one floorplan/model
  • rowType: "unit" — one currently available rental unit
  • rowType: "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.

FieldTypeMeaning 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 = [].
leadSourceenumWhich surface produced the lead: search (SRP card), detail (LDP), entity / contact / reveal-xhr (not currently emitted for Apartments.com).
leadRevealenumHow 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).
leadAbsencesobject/mapReason 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-fieldReasonleadAbsences 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.socialsNo 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

Prefer another specialized scraper?

Jobs & Freelance

E-commerce

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)

  1. Click Try for free
  2. Enter a location (Austin, TX)
  3. Choose property type (default: Apartments)
  4. Optionally set max rows and unit/review/fee/photo enrichment
  5. 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.

EventPriceWhen charged
apify-actor-start$0.005When 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):

ScenarioApprox. 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

FieldDescription
locationCity and state, e.g. Austin, TX
propertyTypeapartments, houses, condos, townhomes, or all
startUrlsOptional search or detail URLs
maxItems1–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.
maxPagesSearch pages for houses / condos / townhomes (~40 listings/page), raised automatically to cover maxItems; 1–18
scrapeDetailsBrowser channel: open detail pages. API channel: every row already carries its detail document; this switch only arms maxDetailFailRatio (default false)
includeUnitsEmit available units and their floorplans as separate rows (default false)
includeReviewsEmit each listing review as a separate row (default false)
requestDelayMillisPoliteness delay between navigations
providerCollection channel: bff = direct App BFF API (default — fastest, phones/units direct, datacenter-capable); browser/camoufox = headless browser over the Akamai-protected web pages (fallback)
includeFeesBFF: attach property/model/unit fee schedules (fees v2)
includeWalkscoreBFF: attach Walk/Transit/Bike scores
includeSubmarketBFF: attach PDS submarket overlay detail (name + bbox)
includeToursBFF: attach tour availability (types/settings)
includePropertyMapBFF: attach Engrain property-map metadata and backfill unit numbers
includeRentCalendarBFF: fetch per-unit lease-term rent calendar when populated
includePhotosListing photos (images, imageUrl) plus neighborhood, county, profile type and lead-form config from the listing web page (2 extra requests per listing)
fieldsPrecise 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
sitemapSinceBFF: with sitemap startUrls, keep only entries with lastmod on/after this date
deepCoverageBFF: when a market exceeds the 750-pin cap, split coverage by OptionFlag buckets and geog quadrants
optionMaskBFF: criteria.o OptionFlag bitmask filter (Advanced)
commuteBFF: travel-time isochrone filter (term/commuteTime/transportationMethod/location, Advanced)
geog / sortBFF: explicit geog override / search sort key (Advanced)
workerBaseUrlOptional 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:

EndpointPurpose
GET /Readiness / service info
GET /healthHealth check
GET /input-exampleLow-cost example input
GET /openapi.jsonDeployed 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 ApifyClient
client = 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.

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.


All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss