Rent.com Scraper - Rentals, Prices, Floor Plans & Contacts avatar

Rent.com Scraper - Rentals, Prices, Floor Plans & Contacts

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Rent.com Scraper - Rentals, Prices, Floor Plans & Contacts

Rent.com Scraper - Rentals, Prices, Floor Plans & Contacts

Extract rental listings from rent.com. Get comprehensive data including monthly rent ranges, full address with GPS, beds/baths/sqft ranges, three contact phone channels, special offers, pet policy, photos, amenities, floor plans, and per-day office hours. Apartments, houses, condos, and townhomes.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

7 hours ago

Last modified

Share

Rent.com Scraper: Apartment, House, Condo and Townhome Listings

Rent.com Scraper turns Rent.com into structured rental data you can pull on demand or on a schedule. Search any US city and state with a full filter builder, or paste any Rent.com search result URL for filters not exposed below, and get back price, full address, GPS, beds/baths/sqft ranges, photos, amenities, special offers, pet policy, and leasing office contact details for apartments, houses, condos and townhomes. Turn on detail-page enrichment for the full description, complete amenity list, floor plans and ratings, then export the results as JSON, CSV or Excel, pull them through the API, or pipe them into the apps you already use.

Why This Scraper?

  • Two ways to search. Build a search from city, state and filters, or paste any Rent.com search result URL you refined in your own browser for filters not exposed below. A single property page (/apartment/...-lc<id>) is also accepted.
  • Every US market. All 50 states plus DC, and all four property types: apartments, houses, condos and townhomes.
  • 40+ fields from the search results alone. Price, full address, GPS, beds/baths/sqft ranges, photos, amenities, special offers, pet policy and leasing office phones, all without an extra request per listing.
  • Detail enrichment on demand. Switch on detail pages for the full description, complete amenity list, individual floor plans, ratings and pet-policy details, and pay the same per-listing price either way.
  • Multi-location in one run. Add as many city and state pairs as you want, and the run walks every result page for each of them automatically, up to your Max pages / Max listings limits.
  • Built for schedules. Turn on incremental mode to get only what changed on a recurring run, with no run ID to paste each time.
  • Resume support. Continue an interrupted run from where it left off, without re-saving or re-paying for listings you already collected.

Use Cases

  • Rental market researchers: track rent ranges, availability and special offers across neighborhoods and cities over time.
  • Property management companies: monitor competitor pricing, amenities and rent specials in their own market.
  • Relocation and listing platforms: enrich their own site with fresh Rent.com pricing and availability data.
  • Lead-generation and outreach teams: collect leasing office contact numbers and property manager names by market.
  • Data teams: build historical pricing and availability datasets for forecasting and reporting.

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
id"lc00012345"
url"https://www.rent.com/apartment/willow-creek-apartments-austin-tx-lc00012345"
name"Willow Creek Apartments"
propertyType"APARTMENTS"
listingTier"diamond"
verifiedtrue
fullAddress"482 Maple Grove Rd, Austin, TX 78701"
city / state / zip"Austin" / "TX" / "78701"
latitude / longitude30.2672 / -97.7431
bedsLabel"1-3 Beds"
bathsLabel"1-2 Baths"
sqftMin / sqftMax650 / 1150
priceLabel"$1,400+"
availability"TODAY"
phone / phoneText"5125550142" / "(512) 555-0142"
specialOffer / specialOfferCategory"Up to 6 Weeks Free" / "FreeRent"
dealTypes, tourUrls, videoUrls, priceDropAmountsDeal labels (["4 Weeks Free"]), virtual-tour and video links, per-floor-plan price drops ([100]); empty lists when the listing has none
squareFeetText, timeZoneId, hasTotalCostWithFees, hasTotalCostWithFeesMessaging, contactPhone, unitsAvailableSquare-footage label, time zone, total-cost-with-fees flags, the listing's own contact phone and available-unit count when rent.com publishes them (otherwise null)
amenitiesHighlighted["Pet Friendly", "Pool", "Fitness Center"]
petsCats / petsDogstrue / true
propertyManagement"Meadowbrook Residential Management"
officeHours[{ "day": "Monday", "open": "09:00 AM", "close": "06:00 PM" }]
photos / primaryImage / imageCountarray of {id, url, caption} / cover photo URL / 24 (imageCount is always photos.length; sample array shortened for brevity)
scrapedAt"2026-01-01T00:00:00.000Z"

Turning on Fetch detail pages adds description, rating, reviewCount, yearBuilt, fees and petPolicyDetails, a fuller amenitiesAll, and per-unit floorPlans; these stay null or SERP-only otherwise. Dataset views: Listings (overview), Detail, Changes (incremental fields) and Floor plans (one row per floor plan). Turning on Incremental mode adds changeType, changedFields, firstSeenAt and lastSeenAt to every emitted record; a normal run never carries these fields at all.

How to Use

  1. Pick a mode: search (city + state + filters) or url (paste Rent.com search result links or single property page links).
  2. Fill in the fields for that mode, and switch on Fetch detail pages if you need the fuller record.
  3. Set Max pages and Max listings to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search mode, basic:

{
"mode": "search",
"locations": [{ "city": "Austin", "state": "TX" }],
"propertyType": "apartments",
"maxPages": 3
}

Search mode, with filters:

{
"mode": "search",
"locations": [{ "city": "Denver", "state": "CO" }],
"propertyType": "apartments",
"bedrooms": "2",
"maxPrice": 1500,
"petFriendly": true,
"maxListings": 100
}

URL mode, paste pre-filtered search links:

{
"mode": "url",
"urls": [
"https://www.rent.com/texas/austin-apartments/2-bedroom",
"https://www.rent.com/colorado/denver-apartments/max-price-2000"
],
"maxPages": 4
}

Detail enrichment plus incremental monitoring:

{
"mode": "search",
"locations": [{ "city": "Miami", "state": "FL" }],
"propertyType": "condos",
"fetchDetails": true,
"incrementalMode": true,
"maxListings": 50
}

Supported URL shapes (URL mode)

ShapeExampleResult
City searchhttps://www.rent.com/california/los-angeles-apartmentsListings, walked page by page
Paginated.../los-angeles-apartments/page-2Starts at that page and walks forward
Legacy page query.../los-angeles-apartments?page=3Same as /page-3 (the shipped example uses page 3 so it does not duplicate the /page-2 example)
Houses / condos.../los-angeles-houses, .../los-angeles-condosListings of that type
Townhouses.../los-angeles-townhousesTownhome listings (Rent.com's path word is townhouses)
Neighborhood.../los-angeles-apartments/hancock-park-neighborhoodListings in that neighborhood
Bedrooms.../los-angeles-apartments/2-bedroomListings with that bedroom count
Studio.../los-angeles-apartments/studioStudio listings
Max price band.../los-angeles-apartments/max-price-2000Listings up to that band
Amenity flag.../los-angeles-apartments/pet-friendlyListings with that flag
Near mehttps://www.rent.com/near-me/apartmentsListings near the location rent.com infers for the request
Other cityhttps://www.rent.com/texas/austin-apartmentsListings for that city
Single propertyhttps://www.rent.com/apartment/cahuenga-apartments-los-angeles-ca-lc6041139One row with the full detail-page data
Room detail pagehttps://www.rent.com/r/...Not supported, skipped with a warning
State page, rent-trends pagehttps://www.rent.com/californiaNot supported, skipped with a warning in the run log (a state page lists cities and carries no listings; a rent-trends page shows a six-listing teaser, not a search)

Rent.com serves only one filter segment per search page (for example /2-bedroom or /pet-friendly, never both). In search mode, when you set several filters only the first (Bedrooms, Pet-friendly, Furnished, Luxury, Income-restricted, Deals only, then Max price) is applied and the log says which others were not. A search that rent.com answers with 404 (for example a misspelled city) is reported as an error in the log, and the run fails if every search is a 404.

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/rent-com-scraper").call(run_input={
"mode": "search",
"locations": [{"city": "Austin", "state": "TX"}],
"propertyType": "apartments",
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["name"], listing["priceLabel"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/rent-com-scraper').call({
mode: 'search',
locations: [{ city: 'Austin', state: 'TX' }],
propertyType: 'apartments',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resuming an unbounded walk

For a full pull (maxPages empty, maxListings: 0), two things protect a long run:

  • resumeFromRunId lets you continue in a brand new run: paste the ID of a previous run (or its dataset), and this run skips every listing id already saved there, appending only new listings.
  • A checkpoint is saved automatically as the run progresses. If the run is interrupted by an Apify platform migration, or you click Resurrect on a failed run, it picks back up from where it left off in the same run, without re-saving or re-paying for listings it already collected. No input is needed for this, it is automatic.

Incremental and recurring updates (incrementalMode)

Schedule this actor to re-run the same search daily or weekly and get only what changed, with no run ID to paste each time:

  • Turn on incrementalMode. The actor derives a state key from your search or URL and filter settings (or use stateKey to name it yourself).
  • Every emitted listing gets changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields, firstSeenAt and lastSeenAt.
  • NEW, UPDATED and REAPPEARED rows are never suppressed by default. UNCHANGED rows are scanned, so change detection still works, but are withheld and not billed unless emitUnchanged is on.
  • REAPPEARED can only happen for a listing a prior run already marked as gone (EXPIRED, or an unmarked placeholder seeded from a resumeFromRunId baseline), and EXPIRED itself is only produced when emitExpired was on for a run that completed a full, uncapped scan of the tracked search (no page or item cap cut it short, no page was blocked, and it was not a resumed run). Until you have run with emitExpired on and finished such a scan at least once, no listing can ever come back marked REAPPEARED, because nothing has been marked gone yet.
  • Turn on emitExpired to also see, and be billed for, previously tracked listings that are no longer found. If a run cannot prove a complete scan, expired detection is skipped for that run and the prior tracked state is kept as is, so nothing is falsely marked gone.
  • What is compared: every listing field (rent range, beds/baths, availability, units text, special offers, deals, phone, floor plans, amenities and the rest). What is excluded from the comparison, yet still present in the output: scrapedAt and the photo fields photos, primaryImage and imageCount (the photo CDN list is re-ordered without any change to the rental), plus any field you list in ignoreFieldsForChanges (the always-ignored set is scrapedAt, photos, primaryImage, imageCount). A plain name matches that field at any depth; a dotted path such as floorPlans.unitsAvailable matches that exact path inside lists.
  • A scan that starts from a pasted result URL on page 2 or later never covers the earlier pages, so it is never treated as a complete scan and cannot mark listings EXPIRED.
  • This is a distinct feature from resumeFromRunId: resume continues one interrupted run from a pasted ID, incremental mode remembers state itself across separately scheduled runs.
  • Duplicates within one run, across pages, searches or URLs, are always deduplicated and pushed once, independent of incrementalMode.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestring"search""search" (city + state + filters) or "url" (paste Rent.com URLs).
locationsarraynone in schema (prefill: [{"city": "Los Angeles", "state": "CA"}]; if omitted or empty, the actor searches Los Angeles, CA)Search mode only. List of {city, state} objects; state is the 2-letter US code.
propertyTypestring"apartments"apartments, houses, condos or townhomes. Determines what gets fetched in search mode; in URL mode it is only a fallback label when neither the pasted URL nor the listing data states a type.
bedroomsstring"" (any)Exact bedroom count: studio, 1, 2, 3 or 4 (4+). Search mode only.
maxPriceintegernoneRounded down to the nearest Rent.com price band (700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 2000). Below 700, no filter is applied; 2000 or more applies the $2000 band. Search mode only.
petFriendlybooleanfalseShow only pet-friendly listings. Search mode only.
furnishedbooleanfalseShow only furnished listings. Search mode only.
luxurybooleanfalseShow only premium or luxury listings. Search mode only.
dealsOnlybooleanfalseShow only listings with active rent specials. Search mode only.
incomeRestrictedbooleanfalseShow only income-restricted (affordable housing) listings. Search mode only.
urlsarrayone example of each supported URL shape (see the table below)URL mode only. One or more Rent.com search result or property page URLs; multi-URL supported. If you switch to URL mode and leave this field untouched, the field holds one example of each supported shape; they are scraped in order until maxListings is reached (with the default of 20, only the first example is reached). This is a changed default: earlier versions had an empty list here, so a URL-mode run with no input now scrapes these examples instead of nothing.
maxPagesintegernoneSERP pages walked per location or URL. Leave empty to walk every result page (still bounded by maxListings).
maxListingsinteger20Stop after this many listings across all locations. 0 means no cap.
fetchDetailsbooleanfalseFetch each listing's detail page for the full description, complete amenity list, individual floor plans, ratings and pet-policy details.
resumeFromRunIdstringnoneA previous run ID or dataset ID to continue an unbounded walk across separate runs.
incrementalModebooleanfalseRecurring monitoring: compares this run with the last committed run of the same search. See the incremental section above.
stateKeystringnoneName a monitoring campaign so state is shared across runs deliberately, instead of the automatic search-derived key.
emitUnchangedbooleanfalseAlso output listings that did not change since the last run, tagged UNCHANGED. Billed like any other row.
emitExpiredbooleanfalseAlso output previously tracked listings no longer found, tagged EXPIRED, only after a complete scan. Billed like any other row.
ignoreFieldsForChangesarraynoneIncremental mode only. Extra fields (dotted paths allowed) left out of change detection; they stay in the output. See the incremental section above.
proxyobjectnone in schema (prefill: Apify residential, country US; the same is used if omitted)Proxy configuration. A US-residential connection is strongly recommended.
mcpConnectorsarraynoneOptional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Tip, filters not in the schema: Rent.com's URL grammar exposes only the filters above as canonical SEO segments. For other refinements (specific amenity, neighborhood), open Rent.com in your browser, apply the filter, then copy the search result URL into URL mode. The actor scrapes it as is.

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"id": "lc00012345",
"url": "https://www.rent.com/apartment/willow-creek-apartments-austin-tx-lc00012345",
"name": "Willow Creek Apartments",
"propertyType": "APARTMENTS",
"listingTier": "diamond",
"isLuxury": false,
"verified": true,
"fullAddress": "482 Maple Grove Rd, Austin, TX 78701",
"street": "482 Maple Grove Rd",
"city": "Austin",
"state": "TX",
"stateName": "Texas",
"zip": "78701",
"latitude": 30.2672,
"longitude": -97.7431,
"bedsMin": 1,
"bedsMax": 3,
"bedsLabel": "1-3 Beds",
"bathsMin": 1,
"bathsMax": 2,
"bathsLabel": "1-2 Baths",
"sqftMin": 650,
"sqftMax": 1150,
"priceMin": 1400,
"priceMax": 2600,
"priceLabel": "$1,400+",
"availability": "TODAY",
"unitsAvailableText": "4 Units Available",
"phone": "5125550142",
"phoneText": "(512) 555-0142",
"phoneSem": "5125550142",
"phoneSemText": "(512) 555-0142",
"specialOffer": "Up to 6 Weeks Free",
"specialOfferCategory": "FreeRent",
"deals": ["Up to 6 Weeks Free"],
"categoryBadges": [],
"amenitiesHighlighted": ["Pet Friendly", "Pool", "Fitness Center"],
"amenitiesAll": ["Pet Friendly", "Pool", "Fitness Center"],
"petsCats": true,
"petsDogs": true,
"petPolicyDetails": null,
"hasVideo": false,
"hasVirtualTour": true,
"hasPriceDrops": false,
"incomeRestrictions": [],
"propertyManagement": "Meadowbrook Residential Management",
"cplEligible": true,
"revenue": 6,
"sourceId": "10000001",
"bedCountData": [
{ "beds": 1, "pricesLow": 1400, "pricesHigh": 1700, "sqftLow": 650, "sqftHigh": 750 }
],
"floorPlans": [
{ "beds": 1, "baths": 1, "availableCount": 2, "priceMin": 1400, "priceMax": 1700, "sqftMin": 650, "sqftMax": 750, "availableDate": null, "units": [] }
],
"officeHours": [
{ "day": "Monday", "open": "09:00 AM", "close": "06:00 PM" }
],
"leasingTerms": [],
"description": null,
"rating": null,
"reviewCount": null,
"yearBuilt": null,
"fees": null,
"photos": [
{ "id": "00000", "url": "https://i.rent.com/t_3x2_fixed_webp_lg/00000", "caption": null }
],
"primaryImage": "https://i.rent.com/t_3x2_fixed_webp_lg/00000",
"imageCount": 24,
"updatedAt": "2026-01-01T00:00:00.000Z",
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

Rent.com protects its search and detail pages with a JavaScript challenge that plain HTTP clients do not pass (it answers with an empty HTTP 202 instead of the page), so the actor needs proxy access and does not work with no action on your side. The proxy field defaults to Apify's residential proxy group with country set to US. A paid Apify plan is recommended because it includes residential proxies.

  • Paid plan (residential granted): the default connection is used, and a backup connection is used only if it becomes unavailable. When that happens the log says: "Served over the backup connection (the default connection was unavailable)."
  • Free plan (no residential proxies): the run continues on a backup connection and logs a warning: "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable." Some pages may fail to load. If none can, the run fails with: "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Rent.com pages. Upgrade at https://apify.com/pricing or supply your own proxy URLs, then try again."
  • Proxy refused for the account: the run fails with "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required". If you entered your own proxy URLs, check their credentials.
  • Pages fail to load on a plan that has access: the run fails with "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later." This is never reported as an empty search.

FAQ

How much does it cost?

Billing is pay per event: one run-start event per run and one result event per listing pushed to the dataset. Turning on detail-page enrichment does not add events. Listings suppressed as unchanged in incremental mode are not pushed and not billed. The Pricing tab shows the current rates. Use Max listings and Max pages to cap the cost of any run.

This actor collects only publicly available rental listing data. You are responsible for how you use it: follow Rent.com's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Contact details and property descriptions may be subject to third-party rights.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Unchanged listings are not billed unless you turn on Emit unchanged. Listings that disappear are only tagged EXPIRED, and can only later come back tagged REAPPEARED, once you have run with Emit expired on for a run that completed a full scan.

Why did my run return an empty dataset instead of failing?

If a page for a city or URL is rejected by the site, that search stops at that point (any earlier pages it already read are kept) with a warning, and the run moves on; if every search ends up blocked, the run still finishes successfully with an empty dataset and a warning telling you to check the proxy country, use your own residential proxy URLs, or try again for a fresh connection. An empty dataset can also mean every location was invalid, url mode had no URLs, or, in incremental mode, that everything found was UNCHANGED and suppressed. The run only fails outright if no working proxy connection could be established at all before any scraping started, or if resumeFromRunId points to a run or dataset your account cannot read, or if resumeFromRunId is combined with incrementalMode on a search that already has saved state.

Why do I need a proxy, and why residential US?

Rent.com answers plain requests with a JavaScript challenge, and the actor passes it through a US-residential connection. The proxy field defaults to the right setting. On a free plan the actor falls back to a backup connection and warns you (see Plan Requirement); results there can be partial.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

๐Ÿ”— Want more real estate data?

Pair this actor with these related scrapers from the same team:

๐Ÿ  Apartments.com Scraper
Scrape Apartments.com rentals by city, ZIP, neighborhood, address or URL. Extract rent...
๐Ÿ  Zumper Scraper
Scrape Zumper.com rental listings: apartments, houses, condos and rooms. Pulls 60+ fields...
๐Ÿ  Realtor.com
Extract property listings from realtor.com. Get comprehensive data, including prices...
๐Ÿงฉ Padmapper Scraper
Scrape Padmapper apartment rentals across US/CA cities: rent, beds, baths, sqft...
๐Ÿ  NewHomeSource
Scrape new homes, floor plans, builders and communities from NewHomeSource.com. Search by...
๐Ÿจ Hipflat Scraper Thailand Property & Projects
Scrape hipflat.co.th property listings and new-project data across Thailand: price, price...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.