Apartments.com Scraper — Rentals, Prices & Reviews | 2$/1k avatar

Apartments.com Scraper — Rentals, Prices & Reviews | 2$/1k

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Apartments.com Scraper — Rentals, Prices & Reviews | 2$/1k

Apartments.com Scraper — Rentals, Prices & Reviews | 2$/1k

Extract rental listings from Apartments.com with 94+ fields: pricing, scores, reviews, amenities, photos, emails, and contacts. Filter by location, price range & property type. No browser — fast HTTP. Perfect for real estate research & lead generation.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Raven

Raven

Maintained by Community

Actor stats

3

Bookmarked

110

Total users

22

Monthly active users

3 days ago

Last modified

Share

Apartments.com Scraper — Rental Listings, Scores, Reviews & Email Contacts

Extract every detail from apartments.com listings — pricing, walk/transit/bike scores, ratings, floor plans, fees, amenities, schools, photos, and contact emails scraped directly from property websites.

Pricing

$2 per 1,000 results — you pay only for the results you actually get. No subscription, no monthly rental fee.

⚠️ A paid Apify plan is required

apartments.com is protected by an aggressive anti-scraping system. Getting past it needs infrastructure that is not available on the Apify Free plan, so runs started from a free account will fail to load pages and return no data.

Any paid Apify plan (Starter and above) works. If a run is started on a free account, the run log says so right at the top.

3 Actions — run step by step

The scraper works in 3 steps. Each step produces a dataset that feeds into the next one:

Step 1: Search listings → listing URLs (listingId, url, position)
↓ Dataset ID
Step 2: Scrape property details → full property data (120+ fields)
↓ Dataset ID
Step 3: Extract emails → validated contact emails
StepActionInputOutputCost
1Search listingsSearch URLs from apartments.comlistingId, URL, name, price, city, coordinatesCheapest — 1 request per page
2Scrape property detailsListing URLs or Dataset ID from Step 1120+ fields per propertyMedium — 1 request per listing
3Extract emails from websitesWebsite URLs or Dataset ID from Step 2Validated emails per propertyCheapest — 1 request per website

Important: You must run them in order. Step 2 needs listing URLs (from Step 1). Step 3 needs property website URLs (from Step 2). You can stop at any step — for example, only run Step 1 to monitor new listings, or run Steps 1+2 if you don't need emails.

What data do you get?

Search listings output

{
"listingId": "abc123",
"url": "https://www.apartments.com/the-max-new-york-ny/abc123/",
"position": 1,
"name": "The Max",
"address": {
"full": "100 W 57th St, New York, NY 10019",
"street": "100 W 57th St",
"city": "New York",
"state": "NY",
"zip": "10019"
},
"rentRollup": [
{"beds": "Studio", "price": "$3,917+"},
{"beds": "1 Bed", "price": "$5,639"},
{"beds": "2 Beds", "price": "$8,122"}
],
"priceMin": 3917,
"priceMax": 8122,
"phone": "(929) 552-4351",
"amenities": ["Pets Allowed", "Fitness Center", "In Unit Washer & Dryer"],
"managementCompany": "UDR",
"photo": "https://images1.apartments.com/i2/...",
"photoCount": 21,
"hasVideo": true,
"has3DTour": true,
"hasSpecials": true,
"tier": "diamond",
"_sourceUrl": "https://www.apartments.com/apartments/new-york-ny/"
}

Property details output (120+ fields)

Each listing returns 120+ structured fields organized into clean, nested JSON:

CategoryFields
PropertyName, type, listing ID, description, year built, total units, stories
AddressStreet, city, state, ZIP, county, neighborhood, DMA, full formatted address
PricingMin/max rent, currency
LocationLatitude, longitude
ScoresWalk Score, Transit Score, Bike Score + text labels ("Exceptionally friendly")
RatingAggregate rating: star value and review count
ContactPhone number, property website URL, languages spoken
Available unitsEvery vacant apartment: unit number, rent, sqft, total monthly price, lease terms, move-in date, rent specials, in-unit amenities
Models / Floor PlansModel name, rent range, beds, baths, sqft range, available unit count, floor-plan image, photo and virtual-tour counts
Rentals (raw)The site's own per-unit records — ~60 fields each — kept as-is for advanced use
FeesItemised one-time, monthly, pet, parking, situational and add-on charges — each with its group, amount and the property's own explanation. Plus lease terms, year built, unit count, stories.
AmenitiesGrouped as the site groups them: Community Amenities, Apartment Features, Kitchen Features, Unique Features, …
HighlightsThe property's headline selling points
SchoolsName, GreatSchools rating (1-10), public/private, grade range, enrolment, links
CollegesNearby colleges and universities with travel time and distance
TransportationTransit/subway stops, commuter rail and airports — with travel mode, minutes and miles
Points of InterestShopping centres, parks, hospitals, military bases — with distance
Average rents by areaNeighbourhood vs city average rent for each bedroom count
Photos & videoAll image URLs, video links, Matterport 3D tour link
Media CountsPhotos, videos, virtual tours, total images
Management companyName and logo
BreadcrumbFull geo hierarchy (State > County > City > Neighborhood)
FAQQuestions and answers from the listing page
Office HoursToday's hours (open/close) + full weekly schedule
Flags15+ boolean flags: has3DTour, hasVideo, hasRentSpecials, petsAllowed, hasApplyNow, etc.

Emails output

{
"url": "https://www.apartments.com/the-max-new-york-ny/abc123/",
"listingId": "abc123",
"propertyWebsite": "https://www.themax.com",
"emails": ["leasing@themax.com", "info@themaxapts.com"],
"emailCount": 2,
"propertyName": "The Max",
"propertyAddress": "100 W 57th St, New York, NY, 10019",
"scrapedAt": "2026-04-08T12:00:00Z"
}

Fields url, listingId, propertyName, propertyAddress are passed from the Details dataset — use url or listingId to match emails back to properties.

Who is this for?

  • Real estate investors — Compare rental pricing, scores, and fees across markets to find undervalued opportunities
  • Property managers — Monitor competitor listings, track rent changes, analyze amenity offerings
  • Relocation services — Get walk/transit/bike scores, schools, transportation for client recommendations
  • Lead generation agencies — Extract property management emails and phone numbers for outreach campaigns
  • Market researchers — Bulk data on rent trends, vacancy rates, property types across US cities
  • Data analysts — Clean, structured JSON/CSV ready for dashboards, spreadsheets, and BI tools
  • Rental aggregators — Build your own rental search platform with comprehensive listing data

How to use

Action 1: Search listings

Find listing URLs from apartments.com search pages. Fast and cheap — no detail fetching.

  1. Go to apartments.com, search any location, apply filters
  2. Copy the URL from your browser
  3. Set Action = Search listings
  4. Paste URL into Search URLs
  5. Set Max Items — how many listings you want in total; it decides how far the scraper pages (40 listings per page, up to 28 pages)
  6. Click Start

Input example:

{
"action": "search",
"startUrls": [
{ "url": "https://www.apartments.com/apartments/new-york-ny/" },
{ "url": "https://www.apartments.com/2-bedrooms-under-3000/chicago-il/" }
],
"maxItems": 100
}

Action 2: Scrape property details

Get full property data (120+ fields) for specific listings. Use listing URLs directly or chain from a Search run.

Option A — Direct URLs:

  1. Set Action = Scrape property details
  2. Paste listing URLs into Listing URLs
  3. Set Max Items
  4. Click Start

Option B — Chain from Search:

  1. Run Action 1 (Search) first
  2. Copy the Dataset ID from the Search run
  3. Set Action = Scrape property details
  4. Paste Dataset ID into Dataset ID field
  5. Click Start

Input example (direct):

{
"action": "details",
"listingUrls": [
{ "url": "https://www.apartments.com/the-max-new-york-ny/abc123/" }
],
"maxItems": 10
}

Input example (chained):

{
"action": "details",
"datasetId": "abc123def456",
"maxItems": 50
}

Action 3: Extract emails from websites

Visit property websites and extract validated contact emails. Use website URLs directly or chain from a Details run.

Option A — Direct URLs:

  1. Set Action = Extract emails from websites
  2. Paste property website URLs into Property Website URLs
  3. Click Start

Option B — Chain from Details:

  1. Run Action 2 (Details) first
  2. Copy the Dataset ID from the Details run
  3. Set Action = Extract emails from websites
  4. Paste Dataset ID into Dataset ID field
  5. Click Start

Input example (chained):

{
"action": "emails",
"datasetId": "xyz789ghi012",
"maxItems": 100
}

Chaining actions with Dataset ID

Run all 3 actions in sequence for a complete pipeline:

Search listings → Dataset ID → Scrape property details → Dataset ID → Extract emails
  1. Search with your search URLs → get Dataset ID from the run
  2. Details with that Dataset ID → get a new Dataset ID
  3. Emails with the Details Dataset ID → final email list

This gives you full control: pay only for what you need, stop at any step.

Where to find Dataset ID

After a run finishes, find the Dataset ID in one of these places:

  1. Run page → Storage tab — click on the default dataset, the ID is shown at the top
  2. URL bar — the ID is in the URL: https://console.apify.com/storage/datasets/<DATASET_ID>
  3. API — the run result contains defaultDatasetId

Copy the ID and paste it into the Dataset ID field of the next action.

How records are linked between steps

Each step passes key fields to the next, so you can always match records back:

Step 1: Search → { listingId, url, position }
↓ url
Step 2: Details → { url, listingId, name, address, contact.propertyWebsite, ... }
↓ url, listingId, propertyWebsite, propertyName, propertyAddress
Step 3: Emails → { url, listingId, propertyWebsite, propertyName, propertyAddress, emails }
Linking fieldFrom stepTo stepPurpose
urlSearch → Details → EmailsAllListing URL — primary key across all 3 steps
listingIdSearch → Details → EmailsAllUnique listing ID (e.g. abc123)
contact.propertyWebsiteDetailsEmails (propertyWebsite)Property's own website where emails are extracted from
propertyNameDetails (name)EmailsProperty name for easy identification
propertyAddressDetails (address.full)EmailsFull address for easy identification

Example: To match emails back to property details, join on url or listingId — both are present in Details and Emails output.

Input parameters

ParameterActionsDescriptionDefault
ActionAllWhat to do: Search, Details, or EmailsSearch
Search URLsSearchapartments.com search URLs with filtersrequired for Search
Listing URLsDetailsDirect listing URLs (alternative to Dataset ID)
Website URLsEmailsProperty website URLs (alternative to Dataset ID)
Dataset IDDetails, EmailsChain from a previous run's dataset
Max ItemsAllMain limit — max results for the whole run. 0 = no limit.100
Max PagesSearchOptional extra cap on pages per search URL (40 listings/page, up to 28). 0 = as many as Max Items needs.0
ConcurrencyAllParallel requests (1-20)10

Max Items wins over Max Pages. In the Search action, paging stops the moment enough listings are collected — with maxItems: 10 you get 10 listings from the first page and the second page is never fetched. Set maxItems: 0 to take everything the search returns (up to 28 pages), and use maxPages only if you also want to cap how deep the scraper pages.

Property details output example

{
"url": "https://www.apartments.com/the-max-new-york-ny/abc123/",
"listingId": "abc123",
"name": "The Max",
"propertyType": "Apartment",
"address": {
"full": "100 W 57th St, New York, NY, 10019",
"street": "100 W 57th St",
"city": "New York",
"state": "NY",
"zip": "10019",
"neighborhood": "Midtown West",
"county": "New York County"
},
"location": {
"latitude": 40.7648,
"longitude": -73.9798
},
"pricing": {
"min": 3200,
"max": 8500,
"currency": "USD"
},
"contact": {
"phone": "+1-212-555-0100",
"propertyWebsite": "https://www.themax.com",
"languages": ["English", "Spanish"]
},
"scores": {
"walkScore": 100,
"transitScore": 100,
"bikeScore": 70,
"walkScoreLabel": "Exceptionally friendly",
"transitScoreLabel": "Exceptionally friendly",
"bikeScoreLabel": "Moderately friendly"
},
"rating": {
"value": 4,
"count": 100
},
"highlights": ["Walker's Paradise", "Premier Transit Location", "Rooftop Deck"],
"models": [
{
"modelKey": "sw76tc4",
"name": "1 Bedroom / 1 Bathroom",
"rentMin": 3200,
"rentMax": 4100,
"beds": 1,
"baths": 1.0,
"sqftMin": 550,
"sqftMax": 720,
"availableUnits": 6,
"leaseTermMin": 12,
"leaseTermMax": 24,
"floorPlanImage": "https://images1.apartments.com/i2/...",
"amenities": ["Washer/Dryer", "Stainless Steel Appliances"]
}
],
"units": [
{
"unitKey": "6999fgt",
"modelKey": "sw76tc4",
"unitNumber": "1615",
"beds": 1,
"baths": 1.0,
"rent": 3200,
"sqft": 550,
"totalMonthlyPriceMin": 3378,
"availableDate": "2026-08-14T00:00:00",
"availableDateText": "Available Now",
"rentSpecials": "1 Month Free"
}
],
"fees": {
"required": [
{
"group": "One-Time Basics / Due at Application",
"name": "Application Fee Per Applicant",
"amount": "$20",
"note": "Charged per applicant."
}
],
"pet": [{"group": "Dogs", "name": "Pet Rent", "amount": "$30 / mo", "note": "Max of 1."}],
"parking": [{"group": "Covered", "name": "Parking Fee", "amount": "$40 / mo"}],
"leaseTerms": ["12 - 24 Month Leases"],
"propertyInfo": {"yearBuilt": 2019, "totalUnits": 230, "stories": 42}
},
"amenities": {
"Community Amenities": ["Pool", "Fitness Center", "Rooftop Terrace", "Doorman"],
"Kitchen Features & Appliances": ["Dishwasher", "Stainless Steel Appliances", "Pantry"],
"Unique Features": ["24-Hour Attended Lobby", "Amazon Lockers"]
},
"schools": [
{
"name": "PS 111",
"type": "Public Elementary School",
"rating": 8,
"details": ["Grades PK-5", "610 Students"],
"url": "https://www.apartments.com/schools/ny/ps-111/7x0mbtx/"
}
],
"transportation": {
"Transit / Subway": [
{"name": "Astoria", "mode": "Walk", "duration": "8 min", "distance": "0.4 mi"}
],
"Airports": [{"name": "LaGuardia", "mode": "Drive", "duration": "21 min", "distance": "12.2 mi"}]
},
"averagePricesByArea": [
{"beds": "Studio", "Midtown West": 3229, "New York, NY": 2766}
],
"faq": [
{"question": "Is parking available?", "answer": "Yes, garage parking is available for $350/month."}
],
"officeHours": {
"today": {"open": "09:00", "close": "18:00", "isClosed": false}
},
"media": {
"photos": ["https://images1.apartments.com/i2/..."],
"photoCount": 45,
"videoCount": 2,
"virtualTourCount": 3
},
"breadcrumb": [
{"name": "New York", "url": "https://www.apartments.com/ny/"},
{"name": "New York County", "url": "https://www.apartments.com/new-york-county-ny/"},
{"name": "New York", "url": "https://www.apartments.com/new-york-ny/"}
]
}

What makes this scraper different?

Compared to other apartments.com scrapers on Apify:

FeatureOthersThis scraper
3 separate actions (Search / Details / Emails)NoYes
Chaining actions via Dataset IDNoYes
Email extraction from property websitesNoYes
Score labels ("Exceptionally friendly")NoYes
Per-unit inventory (up to 300 units per property)NoYes
FAQ from listingNoYes
Office hoursNoYes
Lease termsNoYes
Year built, units, storiesNoYes
Property website URLNoYes
Languages spokenNoYes
Amenities by category1 scraperYes
Async concurrency (10 parallel)VariesYes
Native async TLS (primp)NoYes (fastest)

How it works (technical)

The scraper has 3 independent actions:

  1. Search — Fetches search result pages and extracts listing URLs with pagination
  2. Details — Visits each listing page and extracts data from:
    • startup.init() JavaScript object (100+ fields, including every unit record)
    • Schema.org JSON-LD (@graph with Product, BreadcrumbList, FAQPage)
    • HTML elements (scores, amenities, fees, schools, transportation)
  3. Emails — Follows the property website link and extracts validated emails with strict filtering (junk domains, placeholder addresses, file extensions excluded)

The scraper uses primp — a TLS client that generates browser-identical fingerprints, so no Playwright or Selenium overhead is needed.

Tips for best results

  • Start with small runs (maxItems: 5) to verify your setup before scaling.
  • Multiple cities in one run — add several search URLs to scrape New York, Chicago, and Miami simultaneously.
  • Search-only mode — use the Search action to quickly grab listing URLs. Great for monitoring new listings.
  • Concurrency 5-10 is the sweet spot. Going above 15 may increase block rate.
  • Chain actions for a complete pipeline: Search → Details → Emails. Pay only for what you need.

Limits

  • The Apify Free plan cannot run this Actor — the site's anti-scraping protection cannot be passed from a free account. Upgrade to any paid plan
  • A search query returns max 28 pages (~1,100 listings) — narrow the query with filters to reach more inventory
  • Bedroom count (studios, 1-bedrooms4-bedrooms), max price (under-3000) and cheap filters carry over from your search URL. Other site filters are skipped (the run log says which)
  • Some listings have no rating, scores, or property website
  • Review texts, Drive Score and Sound Score are not currently returned
  • Email extraction depends on whether the property website is reachable and contains a contact email

Having issues? Help me fix them faster

If you experience any problems, please share your run data with me so I can debug and improve the Actor:

  1. Go to Apify Security Settings
  2. Find "Share run data with developers"
  3. In the "Manage list of Actors" section, check this Actor (or All Actors)
  4. Save

This data is used only for debugging and helps me resolve issues much faster. Thank you!

Support

Having issues or need a custom feature? Contact: africanec@gmail.com

Cost estimate

ScenarioActionItemsRequests~Time
Quick searchSearch1 page (40 listings)~1~5s
City searchSearch5 pages (200 listings)~5~15s
Small detailsDetails5 listings~5~30s
Medium detailsDetails50 listings~50~3 min
Full city detailsDetails720 listings~720~15 min
Email extractionEmails50 websites~50~2 min

Tags

Apartments.com Scraper, Rental Listings Scraper, Real Estate Data Extractor, Walk Score Extractor, Transit Score Scraper, Rental Unit Scraper, Apartment Contact Emails, Lead Generation Real Estate, Floor Plans Data, Rental Market Research, Property Management Analytics, Apartments.com API, Rent Price Tracker, Amenities Extractor, School Ratings Scraper, Neighborhood Data, Property Photos Scraper, Real Estate Lead Generation, How to Scrape Apartments.com, Extract Rental Data, Housing Market Data, Property Listings Scraper, Real Estate Web Scraping, Rental Price Comparison, US Rental Market Data, Email Extractor Real Estate, Apartment Fees and Deposits, Drive Score, Sound Score, Renter Reviews Extractor