FurnishedFinder $1π° Listings, Amenities & Reviews
Pricing
from $1.00 / 1,000 results
FurnishedFinder $1π° Listings, Amenities & Reviews
From $1/1K. Scrape furnishedfinder.com listings by city or URL. Extract structured data including price, beds, baths, occupancy, amenities, photos, location, square footage, ratings, reviews, utilities, house rules, and fees. Fast and reliable via the site's data API.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Share
Furnished Finder Scraper: Monthly Rentals, Prices, Amenities & Reviews
Furnished Finder Scraper turns Furnished Finder into structured monthly-rental data. Search any US city by free text, or paste search links, and get back price, bedrooms, bathrooms, sleeps, amenities, photos, coordinates, square footage, ratings, guest reviews, utilities, house rules and fees for every listing (a pasted individual property link returns a narrower, detail-page-only record instead). Export the results to JSON, CSV or Excel, or read them straight through the API.
Why This Scraper?
- Two input modes: search by free-text city ("Houston, TX") or paste Furnished Finder search and property URLs.
- Forward auto-pagination with no page limit by default; Max listings still caps the total returned at 20 unless you raise or remove it. Max pages and Max listings are two separate, optional caps, so you control exactly how far a run goes.
- Verified filters that narrow results server-side: price range, property type, minimum bedrooms, minimum bathrooms.
- Optional detail enrichment: turn it on for description, square footage, rating, review count, individual guest reviews, utilities, house rules, fees and a full amenity list, or leave it off for listing-card fields only.
- Concurrent per-listing enrichment with per-record output, so a stopped run keeps every listing finished so far.
- Resume a large catalogue walk across separate runs without re-scraping what a prior run already saved, or monitor a search on a schedule and get back only new and changed listings.
- Automatically retries with a different connection when a request is refused, so one rejected page does not stop the whole run.
Use Cases
- Furnished-rental and corporate housing platforms: build a comparison database of monthly rentals across cities to spot underpriced or overpriced listings.
- Real estate investors and property managers: track competitor pricing, amenities and availability signals in a target market.
- Relocation and travel-nurse agencies: match clients to available furnished rentals by city, bedroom count and budget.
- Market researchers and data teams: build historical pricing and amenity datasets for the monthly-rental market.
- Landlords and hosts: monitor how a market's listings, house rules and fees change over time on a recurring schedule.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
id | "00000001_1" |
url | "https://www.furnishedfinder.com/property/00000001_1" |
name | "Sample Furnished Rental Near Downtown" |
propertyType | "House" |
propertyTypeClass | "entire_unit" |
priceValue | 2000 |
priceFormatted | "$2,000/month" |
priceCurrency | "USD" |
bedroomCount | 2 |
bathroomCount | 1 |
totalSleeps | 4 |
laundryType | "In-Unit W/D" |
city / state | "Houston" / "Texas" (when Fetch full property details is on) |
latitude / longitude | 29.0000 / -95.0000 |
isAvailableNow | true |
availableOnDate | "Available" |
minimumStayInDays | 30 |
amenities | ["airConditioning", "wifi", "dishwasher"] |
photoCount | 1 (matches the length of photos) |
squareFootage | 1200 (when Fetch full property details is on) |
avgRating | 4.5 (when Fetch full property details is on) |
totalReviewCount | 2 (when Fetch full property details is on) |
utilitiesIncluded | true (when Fetch full property details is on) |
scrapedAt | "2026-01-01T00:00:00.000Z" |
Every listing also carries propertyId and unitId (the two parts of id), bathroomType, encodedLocationName, searchLocation (the search-URL slug that found it, or null for a pasted property URL) and the full photos URL list. With Fetch full property details on, a listing also gets description, neighborhoodDescription and spaceDescription, a separate detail-sourced minimumStayDays, houseRules, fees, a full detailAmenities list, and bedroomsDetail / bathroomsDetail breakdowns (the two minimum-stay fields come from different parts of the page and may not always agree); and with Include guest reviews also on, any listing that has at least one review gets a reviews array (reviewer name, star rating, date, text, landlord reply). A pasted property URL always fetches the full page and reviews, regardless of those two toggles, but returns only the detail-page fields; listing-card-only fields like name, bedroomCount, bathroomCount, totalSleeps, amenities and photos stay empty on that record. On an Incremental-mode run, every returned record also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields, firstSeenAt and lastSeenAt.
How to Use
- Pick a mode:
search(enter cities and filters) orurl(paste Furnished Finder search or property links). - Fill in the fields for that mode. Filters (price range, property type, minimum bedrooms, minimum bathrooms) only apply to search mode.
- Decide whether you want full property details (and guest reviews) per listing, and set Max pages / Max listings to control run size.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search a city with filters, full details on:
{"mode": "search","locations": ["Houston, TX"],"minPrice": 1500,"maxPrice": 3000,"minBedrooms": 2,"propertyTypeClass": "entire_unit","maxListings": 100}
Paste a search URL and walk the whole city, no cap:
{"mode": "url","urls": ["https://www.furnishedfinder.com/housing/us--tx--houston"],"maxPages": 0,"maxListings": 0}
Scrape specific property URLs:
{"mode": "url","urls": ["https://www.furnishedfinder.com/property/00000001_1","https://www.furnishedfinder.com/property/00000002_1"]}
Monitor a search on a recurring schedule:
{"mode": "search","locations": ["Houston, TX"],"incrementalMode": true}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/furnishedfinder-scraper").call(run_input={"mode": "search", "locations": ["Houston, TX"]})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing.get("name"), listing.get("priceFormatted"))
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/furnishedfinder-scraper').call({ mode: 'search', locations: ['Houston, TX'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max pages vs Max listings
Max pages caps how many 50-listing result pages are walked per city or search URL; 0 (the default) means unlimited for that city or URL, so its own walk stops naturally once a page comes back empty or repeats listings already collected. Max listings is the one overall cap on a run, across every city or URL combined (split roughly evenly between them), and defaults to 20 so a first run stays small; set it to 0 for no cap. A city or URL's own Max pages ends only its own walk; the run as a whole ends once every city or URL has stopped, or Max listings is reached first.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the listings it already saved are loaded and skipped before scraping starts, so this run only appends new listings. Useful for continuing a large walk-all pull across separate runs. - Incremental mode (
incrementalMode) is for scheduled runs over the same search. The first run returns everything asNEW. Later runs normally return onlyNEWandUPDATEDlistings;UNCHANGEDlistings are suppressed (and not billed) unlessemitUnchangedis on.EXPIREDrows are produced, and the underlying listing is marked gone, only once a run has proven it fully scanned the tracked search: not when Max listings capped the run, and not whenresumeFromRunIdwas used, since a partial scan cannot tell "gone" apart from "not reached yet" this run.REAPPEAREDonly appears on a later run, for a listing that a prior run like that had already marked gone; withemitExpiredleft off (the default), no listing is ever marked gone, soREAPPEAREDcannot occur.stateKeynames or deliberately shares a monitoring campaign; left empty, the actor derives one automatically from the search scope so different searches never mix state. With Incremental mode off, output is exactly as before.
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 (the listing's name) and its key fields flattened to plain text (price, beds/baths, city, URL, and so on). The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (cities + filters) or url (paste URLs). |
locations | array | ["Houston, TX"] | Cities for search mode. Free text, City, State, or a us--tx--houston slug. |
urls | array | no default (prefill: https://www.furnishedfinder.com/housing/us--tx--houston) | Search or property URLs for URL mode. |
propertyTypeClass | string | any | any, entire_unit, or room. |
minPrice | integer | (none) | Minimum monthly rent in USD. |
maxPrice | integer | (none) | Maximum monthly rent in USD. |
minBedrooms | integer | (none) | Minimum bedroom count. |
minBathrooms | integer | (none) | Minimum bathroom count. |
fetchDetails | boolean | true | Fetch the full property detail page per listing. |
fetchReviews | boolean | true | Include a guest-reviews array. Applies whenever the full property page is fetched, whether from fetchDetails or a pasted property URL, and only costs an extra request on listings that actually have reviews. |
maxPages | integer | 0 | Result pages per city or search URL (50 listings each). 0 = unlimited: walk until a page comes back empty or repeats listings already collected, or Max listings is hit first. |
maxListings | integer | 20 | The sole soft cap on the run, across all cities/URLs. 0 = unlimited. |
proxy | object | Residential, US | Proxy config. A residential US connection is required; the site rejects data-centre traffic. |
mcpConnectors | array | (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
resumeFromRunId | string | (none) | Continue one interrupted run: listings already saved by that run/dataset are loaded and skipped. |
incrementalMode | boolean | false | Turn on for recurring monitoring of the SAME search; returns only new and changed listings after the first run. |
stateKey | string | (none) | Optional. Name or share an incremental-mode monitoring campaign. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) listings with no change. |
emitExpired | boolean | false | Incremental mode only. Also return listings no longer found (not billed), once a run has fully scanned the tracked search. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "00000001_1","propertyId": "00000001","unitId": "1","url": "https://www.furnishedfinder.com/property/00000001_1","name": "Sample Furnished Rental Near Downtown","propertyType": "House","propertyTypeClass": "entire_unit","bedroomCount": 2,"bathroomCount": 1,"bathroomType": "Private Bath","totalSleeps": 4,"laundryType": "In-Unit W/D","priceFormatted": "$2,000/month","priceValue": 2000,"priceCurrency": "USD","latitude": 29.0,"longitude": -95.0,"city": "Houston","state": "TX","encodedLocationName": "us--tx--houston","isAvailableNow": true,"availableOnDate": "Available","minimumStayInDays": 30,"amenities": ["airConditioning", "wifi", "dishwasher"],"photos": ["https://staticproperties.furnishedfinder.com/00000001/1/00000001_1_00000000-full.jpg"],"photoCount": 1,"description": "Full property description appears here when Fetch full property details is on.","neighborhoodDescription": "Neighborhood summary text.","spaceDescription": "Space summary text.","squareFootage": 1200,"avgRating": 4.5,"totalReviewCount": 1,"reviews": [{ "reviewId": "00000001", "reviewerName": "Jane Example", "reviewerImage": null, "starRating": 5, "title": "Great stay", "text": "Clean and comfortable, great communication.", "submissionDate": "2026-01-01", "reply": null }],"utilitiesIncluded": true,"minimumStayDays": 30,"houseRules": [{ "name": "No smoking", "description": "Smoking is not allowed." }],"fees": [{ "type": "Cleaning", "amount": "$100" }],"detailAmenities": [{ "name": "Air Conditioning", "value": "airConditioning" }],"bedroomsDetail": [{ "title": "Bedroom 1", "type": "Queen Bed" }],"bathroomsDetail": [{ "title": "Bathroom 1", "type": "Full Bath" }],"searchLocation": "Houston, TX","scrapedAt": "2026-01-01T00:00:00.000Z"}
Plan Requirement
This actor needs a residential connection in the United States. The proxy input already defaults to Residential, country US, so most runs work with no changes. When a request is refused, the run automatically retries with a different connection instead of stopping. The Pricing tab shows the current rate for the detail-enrichment charge, which applies to any listing whose full property page is fetched, whether because Fetch full property details is on or because it came from a pasted property URL (always fetched in full, regardless of that toggle).
FAQ
How much does it cost?
You pay a detail-enrichment charge for a listing that is both returned AND had its full property page fetched. That happens whenever Fetch full property details is on, and also for every pasted property URL in URL mode, which always fetches the full page regardless of that toggle. A search or search-URL run with the toggle off, and any listing suppressed by Incremental mode, are not charged that event. The Pricing tab shows the current rate. Use Max listings to cap the size, and therefore the cost, of any run.
Is it legal to scrape Furnished Finder?
This actor collects only publicly available rental-listing data. You are responsible for how you use it: follow Furnished Finder's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. A listing's amenities, house rules and fees are facts about the property, but any names or contact details that appear in guest reviews or property text may be personal data in some jurisdictions, so handle them accordingly.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. The first run returns every matching listing as NEW; later runs against the same search normally return only NEW and UPDATED listings, and unchanged ones are not billed. Turn on Emit unchanged or Emit expired only if you also want those rows back.
What is the difference between Resume and Incremental mode?
Resume continues ONE specific interrupted run by its run or dataset ID, so a large walk-all pull can continue across separate runs without duplicate rows. Incremental mode is for running the SAME search again and again (for example daily) and getting back only what changed since the last run. They solve different problems; combine them once, on the first incremental run, to bootstrap tracking from a prior Resume dataset.
Why did my run return a row with error: true instead of failing?
This row means nothing was scanned: either a search or filter combination had no matches, or the first result page was refused before any listing could be read. It can appear on a genuinely empty search just as easily as on a partially blocked one, so treat it as "check the run log," not as a guarantee either way. If the site refuses every request while resolving a city or a pasted search URL, the run fails outright instead of returning this row, with a message that no resolvable location or URL was found; the same happens when a pasted Resume run or dataset ID cannot be read. A pasted property URL that comes back blocked instead pushes a mostly empty record for that listing rather than this sentinel row.
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 travel data?
Pair this actor with these related scrapers from the same team:
| π¨ Booking.com Hotels, Prices and Reviews Scraper Scrape booking.com hotels, apartments, villas and hostels. Search any destination with... | π AutoTrader UK Scraper Pull structured vehicle listings from autotrader.co.uk at scale. Search by filters or use... |
| π¨ Vrbo Scraper Extract vacation rental data from Vrbo.com by location, region, coordinates, property... | π Apartments.com Scraper From $1.50/1K. Scrape Apartments.com rentals by city, ZIP, neighborhood, address or URL... |
| π NewHomeSource Scrape new homes, floor plans, builders and communities from NewHomeSource.com. Search by... | π Autotrader US Scrape US car listings from Autotrader by make, model, ZIP, price, year, body style... |
π Browse all abotapi scrapers
π¬ Support & custom scrapers
- π 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 abotapi@proton.me or message Telegram @abotapi.
- β Enjoying it? A quick review on the actor page helps other users find it.