# Furnished Finder Scraper - Monthly Rentals & Landlord Leads (`haketa/furnishedfinder-scraper`) Actor

Furnished Finder scraper for mid-term & monthly furnished rentals and travel-nurse housing. Search any US city and export rent, bedrooms, bathrooms, sleeps, amenities, availability dates, photos, coordinates and landlord name, profile & phone.

- **URL**: https://apify.com/haketa/furnishedfinder-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Furnished Finder Scraper — Monthly & Mid‑Term Furnished Rentals + Landlord Leads

Extract furnished **monthly and mid‑term rental listings** from **[FurnishedFinder.com](https://www.furnishedfinder.com/)** — the largest US marketplace for **travel‑nurse housing**, corporate stays, insurance housing and 30‑day‑plus furnished rentals. Search any US city, neighborhood or ZIP and export clean, structured data: **rent, bedrooms, bathrooms, sleeps, amenities, availability dates, photos, GPS coordinates** and, optionally, the **landlord’s name, profile and phone**.

No login, no API key, no browser extension. Give it a location, press **Start**, and download the results as **JSON, CSV, Excel, HTML or XML** or pull them straight from the API.

***

### Why scrape Furnished Finder?

FurnishedFinder is the go‑to platform for stays of **one month or longer**, so its inventory is very different from Airbnb/Vrbo (nightly) or Zillow/Apartments.com (unfurnished, 12‑month leases). That makes it a unique dataset for:

- **Travel nurses & traveling professionals** — compare every available furnished rental in a city, by rent, move‑in date and minimum stay, in one spreadsheet instead of clicking through hundreds of map pins.
- **Relocation & corporate‑housing teams** — build a shortlist of mid‑term options for assignments, with amenities and availability side by side.
- **Real‑estate investors & property managers** — size up the mid‑term rental market in any metro: how many listings, typical monthly rent, bedroom mix, how many landlords are “good responders,” how many are brand‑new listings.
- **Rental arbitrage & co‑hosting operators** — find and track furnished inventory and the landlords behind it for outreach.
- **Market researchers & data teams** — monthly rent benchmarks, supply by city, amenity penetration (A/C, parking, washer/dryer, pet policy) and seasonality of availability.
- **Lead generation** — collect the **landlord/host name, profile handle, account tenure, verification badges and (when the host chooses to publish it) phone number** for direct outreach.

***

### Features

- 🔎 **Search by city, neighborhood or ZIP** — type it exactly as you would on the site (e.g. `Los Angeles, CA`, `Dallas, TX`, `78701`). Add as many locations as you want; each is scraped separately.
- 🏠 **Rich listing data out of the box** — title, property type, monthly rent, bedrooms, bathrooms, bathroom type, total sleeps, laundry type, full amenity list, availability date, minimum stay, GPS coordinates and all listing photos.
- 👤 **Optional landlord & full‑detail mode** — landlord name, profile username, account tenure, verification badges, response time, **phone (when public)**, plus the full property description, exact city/state, square footage, review score, house rules, bed/bath breakdown and fees.
- ⚡ **Fast** — the site is powered by a GraphQL API behind Cloudflare; this actor solves the Cloudflare check once with a real browser, then pulls listings over fast HTTP (hundreds of listings per request).
- 🌍 **Works on any US market** — from New York City to small towns; FurnishedFinder returns hundreds to thousands of listings per major metro.
- 🧾 **Clean, analysis‑ready output** — numeric rent, normalized fields, no HTML soup. One row per listing.
- 🔁 **Deduplicated** — the same listing is never saved twice within a run.

***

### Input

| Field | Type | Description |
|-------|------|-------------|
| `location` | array of strings | One or more places to scrape. A city, neighborhood or ZIP (`Los Angeles, CA`, `Nashville, TN`, `78701`) or a raw FurnishedFinder region id (`us--tx--austin`). Each entry is searched separately. |
| `maxItems` | integer | Maximum listings to save across all locations (default **200**). |
| `includeDetails` | boolean | If **true**, open each listing’s detail page for landlord contact + full details (slower, one extra request per listing). Default **false**. |
| `detailConcurrency` | integer | How many detail pages to fetch in parallel when `includeDetails` is on (default **5**, max 10). |
| `proxyConfiguration` | object | Proxy settings. **Residential is strongly recommended** (see *Proxy & Cloudflare* below). Defaults to Apify Residential. |

#### Example input

```json
{
  "location": ["Los Angeles, CA", "Dallas, TX", "Nashville, TN"],
  "maxItems": 500,
  "includeDetails": true,
  "detailConcurrency": 5,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

> **Tip:** Start with `includeDetails` off to grab a wide, cheap snapshot of a market. Turn it on when you need landlord contact details or the full description for a shortlist.

***

### Output

Each row is one listing. With `includeDetails` off you get everything down to `placeName`; the landlord/description/review fields are filled only when `includeDetails` is on.

#### Example record

```json
{
  "listingId": "1052614_1",
  "url": "https://www.furnishedfinder.com/property/1052614_1",
  "title": "Private primary bedroom with full bathroom, private workspace, and two closets",
  "propertyType": "Room - House",
  "propertyTypeClass": "room",
  "monthlyRent": 1300,
  "rentCurrency": "USD",
  "rentDisplay": "$1,300/month",
  "bedroomCount": 1,
  "bathroomCount": 2,
  "bathroomType": "Private Bath",
  "totalSleeps": 2,
  "availableDate": "Nov. 03, 2026",
  "isAvailableNow": false,
  "minimumStayDays": 30,
  "laundryType": "IN_UNIT",
  "amenities": ["airConditioning", "freeParkingOnPremises", "washeranddryer", "wifi", "utilitiesIncluded", "..."],
  "latitude": 30.2309054,
  "longitude": -97.6931931,
  "photos": ["https://staticproperties.furnishedfinder.com/1052614/1/..._full.jpg", "..."],
  "photoCount": 9,
  "featuredPhoto": "https://staticproperties.furnishedfinder.com/1052614/1/..._full.jpg",
  "isGoodResponder": false,
  "isNewListing": true,
  "isRegionMatch": true,
  "searchLocation": "Austin, TX",
  "regionId": "us--tx--austin",
  "placeName": "Austin, TX",

  "landlordName": "Alecia P",
  "landlordUsername": "Alecia.Paddock",
  "landlordPhone": null,
  "landlordTenure": "6 years, 9 months",
  "landlordResponseTime": "RARELY_REPLIES",
  "landlordVerifications": ["Email verified", "Phone number verified", "ID verified"],
  "landlordLicenseNumber": null,
  "landlordBiography": null,
  "description": "Fully furnished newly renovated spacious home in Austin with all the amenities one could want...",
  "neighborhoodDescription": null,
  "spaceDescription": "Fully furnished room with queen bed, 2 closets, full private bathroom...",
  "city": "Austin",
  "state": "TX",
  "squareFootage": 2000,
  "exactLatitude": 30.2309054,
  "exactLongitude": -97.6931931,
  "avgRating": 0,
  "totalReviewCount": 0,
  "utilitiesIncluded": true,
  "bedroomDetails": { "count": 1, "beds": ["Bedroom 1 · Queen Bed"] },
  "bathroomDetails": { "count": 2 },
  "houseRules": ["petsNotAllowed: Not Allowed", "smokingNotAllowed: Not Allowed"],
  "fees": [{ "type": "Cleaning Fee", "amount": 100, "amountDisplay": "$100" }],
  "scrapedAt": "2026-10-12T11:26:27.458Z"
}
```

#### Field reference

**Always present (listing search):**

| Field | Description |
|-------|-------------|
| `listingId` | FurnishedFinder listing id (e.g. `1052614_1`). |
| `url` | Canonical listing URL. |
| `title` | Listing headline written by the landlord. |
| `propertyType` / `propertyTypeClass` | e.g. `House`, `Apartment`, `Condo`, `Room - House` / `entire_unit`, `room`. |
| `monthlyRent` | Monthly rent as a number (USD). |
| `rentCurrency` / `rentDisplay` | Currency code and the original display string (`$1,300/month`). |
| `bedroomCount` / `bathroomCount` / `bathroomType` | Beds, baths and bath type (`Private Bath`, `Shared Bath`). |
| `totalSleeps` | How many people the place sleeps. |
| `availableDate` | Next available move‑in date (or `Available` when available now). |
| `isAvailableNow` | Whether it is available immediately. |
| `minimumStayDays` | Minimum stay in days (FurnishedFinder minimum is 30). |
| `laundryType` | `IN_UNIT`, `SHARED`, etc. |
| `amenities` | Array of amenity keys (A/C, parking, washer/dryer, wifi, pets, …). |
| `latitude` / `longitude` | Approximate map coordinates. |
| `photos` / `photoCount` / `featuredPhoto` | All photo URLs, the count and the featured image. |
| `isGoodResponder` | Landlord flagged by FurnishedFinder as a fast/reliable responder. |
| `isNewListing` | Recently added. |
| `isRegionMatch` | Whether the listing is inside the searched region (vs. a nearby suggestion). |
| `searchLocation` / `regionId` / `placeName` | What you searched, the resolved region id and its display name. |
| `scrapedAt` | ISO timestamp. |

**Added when `includeDetails` is true:**

| Field | Description |
|-------|-------------|
| `landlordName` | Host’s display name (first name + last initial). |
| `landlordUsername` | Host’s profile handle. |
| `landlordPhone` | Host phone **only when the landlord has chosen to display it publicly** — otherwise `null` (see note below). |
| `landlordTenure` | How long the host has been on FurnishedFinder (e.g. `6 years, 9 months`, `new`). |
| `landlordResponseTime` | e.g. `REPLIES_QUICKLY`, `RARELY_REPLIES`, `NO_INQUIRIES`. |
| `landlordVerifications` | Verified badges, e.g. `Email verified`, `Phone number verified`, `ID verified`. |
| `landlordLicenseNumber` | Rental license number, when provided. |
| `landlordBiography` | Host bio, when provided. |
| `description` | Full property description. |
| `neighborhoodDescription` / `spaceDescription` | Extra host‑written sections, when present. |
| `city` / `state` | City and state from the listing detail. |
| `squareFootage` | Size in square feet. |
| `exactLatitude` / `exactLongitude` | Precise coordinates from the detail page. |
| `avgRating` / `totalReviewCount` | Review score and number of reviews. |
| `utilitiesIncluded` | Whether utilities are included. |
| `bedroomDetails` / `bathroomDetails` | Bed and bath breakdown (counts and bed types). |
| `houseRules` | e.g. pets / smoking rules. |
| `fees` | Extra fees (type + numeric amount), e.g. cleaning fee. |

> **About landlord phone numbers.** FurnishedFinder connects guests and landlords primarily through its own messaging/inquiry flow, so most hosts do **not** publish a phone number on the listing. This actor extracts the phone **whenever the landlord has made it public**, and otherwise returns `null`. The reliably available contact signals are the landlord **name, profile username, account tenure, verification badges and response time** — use the profile handle to reach the host through the platform.

***

### How locations work

When you enter a free‑text location, the actor resolves it with FurnishedFinder’s own location autocomplete and picks the best matching **city/neighborhood** (it prefers regions over single points of interest). The resolved `regionId` and display `placeName` are included in every row so you always know exactly what was searched.

You can also pass a **region id directly** (e.g. `us--ca--los-angeles`, `us--tx--austin`, `us--tn--nashville`) to skip resolution. The format is `us--{state}--{city-slug}`.

Each big metro has hundreds to thousands of listings. Use `maxItems` to decide how deep to go; results are paginated automatically.

***

### Proxy & Cloudflare

FurnishedFinder is protected by a Cloudflare managed challenge. This actor handles it for you: it launches a real browser once, passes the challenge, and then reuses that verified session over fast HTTP for every search and detail request.

Because the Cloudflare session is tied to the IP that solved it, **the browser and all requests use a single sticky proxy session**. For reliability, use **Residential** proxies (the default). Datacenter IPs are more likely to be challenged by Cloudflare.

***

### Speed & cost

- **Listings‑only** runs are fast and cheap: a few GraphQL requests return hundreds of listings each.
- **`includeDetails`** adds one page fetch per listing, so it is slower and uses more proxy traffic — enable it for shortlists or when you specifically need landlord contact and full descriptions.
- A one‑time browser step (a few seconds) runs at the start of every run to pass the Cloudflare check.

***

### FAQ

**Do I need a FurnishedFinder account or API key?**
No. Just enter a location and run.

**Can I scrape multiple cities at once?**
Yes — add as many as you like to `location`. Each is searched separately and results are combined and deduplicated.

**Why is `landlordPhone` empty for most listings?**
Because most landlords don’t publish a phone number publicly on FurnishedFinder (contact goes through the platform). The actor returns it whenever it is public; otherwise use the landlord name and profile username.

**Why are some fields empty?**
Listing quality varies — not every host fills in square footage, neighborhood description, license number or a bio. Core fields (title, rent, beds/baths, amenities, photos, landlord name) are almost always present.

**How many listings can I get?**
As many as the market has — set `maxItems` accordingly. Major metros routinely have 2,000–6,000+ listings.

**What date is `availableDate`?**
The next move‑in date the landlord set. Available‑now listings show `Available` and `isAvailableNow: true`.

***

### Integrations

Export to **JSON, CSV, Excel, HTML or XML**, or fetch via the **Apify API**. Connect to Google Sheets, Airtable, Zapier, Make and more through Apify integrations, or schedule runs to track a market over time.

***

### Legal & ethical use

This actor collects **publicly available** listing information. Use the data responsibly and in compliance with FurnishedFinder’s Terms of Service and applicable laws (including privacy and anti‑spam regulations such as GDPR/CCPA and TCPA when contacting landlords). You are responsible for how you use the output. Do not use it to send unsolicited bulk messages.

***

### Related actors

Looking for other rental and real‑estate data? Check out scrapers for Zillow, Apartments.com, Redfin, Realtor, Rightmove, Funda and more on the Apify Store.

# Actor input Schema

## `location` (type: `array`):

One or more places to scrape. Type a city, neighborhood or ZIP exactly as you would on FurnishedFinder — e.g. <b>Los Angeles, CA</b>, <b>Dallas, TX</b>, <b>Nashville, TN</b> or <b>78701</b>. Each entry is searched separately. You can also paste a FurnishedFinder region id such as <b>us--tx--austin</b>. Leave empty to run a small demo for Austin, TX.

## `maxItems` (type: `integer`):

Maximum number of listings to save across all locations. FurnishedFinder returns hundreds to thousands of listings per big city, so set a cap to control run time and cost.

## `includeDetails` (type: `boolean`):

For each listing, also open its detail page to extract the <b>landlord name, profile & phone (when the landlord makes it public)</b>, the full property description, exact city/state, square footage, review score, house rules, bed/bath breakdown and availability calendar. This makes one extra request per listing, so it is slower and costs more — leave off for a fast listings-only export.

## `detailConcurrency` (type: `integer`):

How many detail pages to fetch in parallel when "Scrape landlord & full details" is on. Higher is faster but more likely to be rate-limited.

## `proxyConfiguration` (type: `object`):

FurnishedFinder is protected by Cloudflare. The actor solves the challenge once with a real browser and reuses that session over fast HTTP. Datacenter proxy (default) is cheapest and works well; switch to Residential only if you ever hit blocks.

## Actor input object example

```json
{
  "location": [
    "Austin, TX"
  ],
  "maxItems": 200,
  "includeDetails": false,
  "detailConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All extracted furnished rental listings for this run.

## `overviewTable` (type: `string`):

A clean, human-readable table view of the scraped listings.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": [
        "Austin, TX"
    ],
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/furnishedfinder-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "location": ["Austin, TX"],
    "maxItems": 200,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/furnishedfinder-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": [
    "Austin, TX"
  ],
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/furnishedfinder-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/furnishedfinder-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NKKVpe2pjn7sholHL/builds/UWGZB9xPvolqikslZ/openapi.json
