Furnished Finder Scraper at a glance
Furnished Finder Scraper is a ready-to-run Apify actor from abotapi for collecting travel data. Its documented output includes id, change type (incremental mode), url, title and type, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Travel, Developer Tools, Ecommerce
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 22 options
Scrape Furnished Finder (furnishedfinder.com) rental listings by city or URL. Extract prices, bedrooms, bathrooms, occupancy, amenities, photos, locations, square footage, ratings, reviews, utilities, house rules and fees. Fast, structured data extraction via the site's API.
What Furnished Finder Scraper can do
- Two input modes. Two input modes: search by free-text city ("Houston, TX") or paste Furnished Finder search and property URLs.
- Auto-pagination. 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. Verified filters that narrow results server-side: price range, property type, minimum bedrooms, minimum bathrooms.
- Optional detail enrichment. 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.
- Per-record output. Concurrent per-listing enrichment with per-record output, so a stopped run keeps every listing finished so far.
- Resume and monitor. 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.
Choose what to collect
These inputs let you configure Furnished Finder Scraper - Rentals, Prices & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | search = enter cities and filters. url = paste Furnished Finder search or property URLs. |
locationsarray | Cities to scrape. Accepts free text ('Houston, TX', 'Houston'), 'City, State', or a Furnished Finder slug ('us--tx--houston'). One search box is built around each city. |
propertyTypeClassstring | Entire unit (whole place) or Room (private/shared room). Leave as Any for both. |
minPriceinteger | Minimum monthly rent. Leave empty for no minimum. |
maxPriceinteger | Maximum monthly rent. Leave empty for no maximum. |
minBedroomsinteger | Minimum bedroom count. Leave empty for any. |
minBathroomsinteger | Minimum bathroom count. Leave empty for any. |
Show 15 more inputs
| Input | What it controls |
|---|---|
moveInDatestring | Only listings available by this date. Leave empty for any. Applies to search mode. |
moveOutDatestring | Only listings that can host a stay ending on this date. Leave empty for any. Applies to search mode. |
urlsarray | Paste Furnished Finder city search URLs (/housing/us--tx--houston, also with ?map= or ?filters= queries, or the legacy /rooms suffix) or property URLs (/property/999116_1 or /property/999116). Multi-URL supported. Left untouched, this list of one example per URL shape is scraped (capped by Max listings). |
fetchDetailsboolean | ON: each listing gets description, square footage, rating, review count, utilities, house rules, fees, full amenity list and bed/bath breakdown (one extra request per listing). OFF: faster, listing-card fields only. |
maxPagesinteger | How many result pages (50 listings each) to walk per city/search URL. 0 (default) means unlimited - the walk stops naturally once a page comes back empty or repeats listings already collected, or sooner once Max listings is reached. Set a number only for an explicit page cap below that natural stop. |
maxListingsinteger | The sole soft cap on the run: stop after this many listings across all cities/URLs. Defaults to 20 so a run stays small unless you raise it. 0 = unlimited (bounded only by the natural stop on Max pages). |
resumeFromRunIdstring | Optional. Paste a previous run ID or dataset ID to continue a large walk-all pull: listings already saved by that run are loaded before scraping starts and skipped, so this run only appends new listings. Leave empty for a normal fresh run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching listings as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings. Turn on "Emit unchanged" or "Emit expired" only when you also want those listings returned (and billed). State is kept separately for each city/URL/filter and detail-mode setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a prior run above. Compared: every output field of a listing (price, availability, amenities, details, photos and so on); NOT compared: scrapedAt, the guest reviews array and photo URL query strings, plus anything you list in "Ignore fields when detecting changes". Only a changed compared field returns the listing as UPDATED. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the cities/URLs, filters and detail settings, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max listings capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Field names that must NOT make a listing count as UPDATED. Use a top-level name (e.g. amenities) or a dotted path for nested fields (e.g. fees.amount, houseRules.description; arrays are searched element by element). Ignored fields stay in the output; they are only left out of the comparison and changedFields. Already excluded by default: scrapedAt, reviews, and photo URL query strings. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. Notion gets a page per item; other connectors receive a best-effort write/digest. Leave empty to skip, this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idIDchangeTypeChange type (incremental mode)urlURL (link)nameTitlepropertyTypeTypepropertyTypeClassClasspriceValuePricepriceFormattedPrice (text)priceCurrencyCurrencybedroomCountBedsbathroomCountBathstotalSleepsSleepsShow 35 more fields
laundryTypeLaundrysquareFootageSq ftavgRatingRatingtotalReviewCountReviewsutilitiesIncludedUtilitiesminimumStayDaysMin stay (days)cityCitystateStatelatitudeLatlongitudeLngisAvailableNowAvailable nowavailableOnDateAvailableamenitiesAmenitieslandlordNamelandlordNamephotoCountPhotossearchLocationSearchscrapedAtScrapedchangedFieldsChanged fields (incremental mode)firstSeenAtFirst seen (incremental mode)lastSeenAtLast seen (incremental mode)houseRulesHouse rulesfeesFeesdetailAmenitiesAll amenitiesbedroomsDetailBedroomsbathroomsDetailBathroomspricingFrequencyPrice cadenceotherUnitsOther unitsnearbyHospitalsNearby hospitalsreviewIdReview IDreviewerNameReviewerstarRatingStarstitleReview titletextReviewsubmissionDateDatereplyHost replyExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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,
"longitude": -95,
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Furnished Finder Scraper return?
The documented output for Furnished Finder Scraper includes id, change type (incremental mode), url, title, type, class, price and price (text). Availability of each field depends on the source page and the selected mode.
How much does Furnished Finder Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
