# Furnished Finder Scraper (`crawloop/furnished-finder-scraper`) Actor

Extract US mid-term rental listings from Furnished Finder by city. Rows include monthly rent, bedrooms, bathrooms, minimum stay, amenities, photos, and approximate coordinates. Schedule the same search to save only new listings.

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

## Pricing

from $1.00 / 1,000 rental listings

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

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Furnished Finder or its affiliates. Data is read from publicly accessible search listings only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Furnished Finder scraper** for US mid-term and travel-nurse rentals. Each row has monthly rent, bedrooms, bathrooms, minimum stay, amenities, photos, and approximate map coordinates. Use it as a **Furnished Finder API alternative** from **Python**, **Node.js**, **cURL**, or **Apify MCP**.

**Best for:** a hospital market’s furnished inventory, a rent comp sheet, and a scheduled check that saves only new listing ids.

| Actor | Role |
| :--- | :--- |
| Furnished Finder Scraper ◄── you are here | US mid-term furnished rentals |
| [Subito Real Estate Scraper](https://apify.com/crawloop/subito-real-estate-scraper) | Italy sale and rent |
| [realestate.com.au Scraper](https://apify.com/crawloop/realestate-com-au-scraper) | Australia sold comps and listing monitor |

### When to use this Actor

- **City search** — Set a US city and state, such as Austin, TX, and a radius in miles.
- **A map you already framed** — Pass the four map edges, or a housing search URL that includes map bounds.
- **New-listing monitor** — Schedule the same city. Later runs save listing ids that were not in the previous window. A quiet tick writes zero rows.
- **Rent, stay, and photos from the search card** — Monthly rent, beds, baths, minimum stay, amenities, and photo URLs come from the public search result. This run does not open each property page.

### When not to use this Actor

- **Landlord phone or email** — Those values are not on the public search card. This Actor does not log in.
- **Italy or Australia residential markets** — Use [Subito Real Estate Scraper](https://apify.com/crawloop/subito-real-estate-scraper) or [realestate.com.au Scraper](https://apify.com/crawloop/realestate-com-au-scraper).
- **A national dump in one run** — Cap `maxItems`. One map view returns at most 50 listings; the run splits that view until the cap or the query budget is reached.

### Key features

- **Search cards** — Public search endpoint, default **256 MB**, no browser.
- **City or map box** — City and state, an explicit viewport, or a housing search URL.
- **Past the 50-listing view** — A saturated view is split into quadrants and deduped by listing id.
- **Rent and stay** — Monthly rent, currency, beds, baths, minimum stay, amenities, and photos.
- **Monitor** — Named key-value store of listing ids already seen for that search.

### Input

| Field | Required | Default | What it does |
| :--- | :--- | :--- | :--- |
| City | No | Austin | US city. Ignored when Start URLs or a full map box is set. |
| State | No | TX | State name or two-letter code. |
| Radius (miles) | No | 15 | Circle around the city center. 1–40. |
| Map edges | No | — | `minLatitude`, `minLongitude`, `maxLatitude`, `maxLongitude`. All four skip the city lookup. |
| Start URLs | No | — | Housing search URL. Map bounds on the URL replace the radius. |
| Min / max monthly rent | No | — | USD filter on the search card. |
| Minimum bedrooms / bathrooms | No | — | Drop smaller units. |
| Property type | No | — | Case-insensitive match, for example House. |
| Maximum listings | No | 25 | Dataset cap, up to 500. |
| Monitor mode | No | false | Save only ids that were not stored for this search last time. |
| Monitor state store | No | furnished-finder-monitor | Named key-value store for seen ids. |
| Proxy | No | off | Leave off unless a run is blocked. |

```json
{
  "city": "Austin",
  "state": "TX",
  "radiusMiles": 15,
  "maxItems": 25,
  "monitorMode": false,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

### Output

| Field | Meaning |
| :--- | :--- |
| `listingId` | Listing id with unit suffix |
| `url` | Public listing URL |
| `name` | Headline |
| `propertyType` | House, Apartment, Condo, and similar |
| `monthlyRent` | Monthly rent |
| `currency` | Usually USD |
| `bedrooms` / `bathrooms` | Counts from the card |
| `minimumStayDays` | Minimum stay |
| `latitude` / `longitude` | Approximate map point |
| `city` / `state` | Search location, not a parsed street address |
| `amenities` | Amenity codes on the card |
| `imageUrls` | Up to 8 photo URLs |
| `scrapedAt` | UTC capture time |

```json
{
  "listingId": "1044004_1",
  "url": "https://www.furnishedfinder.com/property/1044004_1",
  "name": "Furnished Hyde Park Duplex",
  "propertyType": "House",
  "monthlyRent": 3000,
  "currency": "USD",
  "bedrooms": 2,
  "bathrooms": 2,
  "minimumStayDays": 30,
  "latitude": 30.304393,
  "longitude": -97.727177,
  "city": "Austin",
  "state": "TX",
  "amenities": ["wifi", "washeranddryer"],
  "imageUrls": ["https://staticproperties.furnishedfinder.com/1044004/1/1044004_1_70765583-full.jpg"]
}
```

### Use cases

- Pull furnished rentals around a hospital city and compare monthly rent, beds, and minimum stay in a spreadsheet.
- Schedule the same Austin search each morning and export only listing ids that were not in yesterday’s window.
- Feed rent, coordinates, and photos into an internal housing sheet.
- For Italy sale and rent, continue with [Subito Real Estate Scraper](https://apify.com/crawloop/subito-real-estate-scraper). For Australia sold comps, use [realestate.com.au Scraper](https://apify.com/crawloop/realestate-com-au-scraper).

### Integration examples

Replace `APIFY_TOKEN`. The slug below is the Store name.

#### Node.js

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/furnished-finder-scraper").call({
  city: "Austin",
  state: "TX",
  radiusMiles: 15,
  maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/furnished-finder-scraper").call(run_input={
    "city": "Austin",
    "state": "TX",
    "radiusMiles": 15,
    "maxItems": 25,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~furnished-finder-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"city":"Austin","state":"TX","radiusMiles":15,"maxItems":10}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store name `crawloop/furnished-finder-scraper`.

Example prompts:

- "Run Furnished Finder Scraper for Austin, TX and return monthly rent, beds, and minimum stay as JSON"
- "Scrape furnished rentals in Denver, CO within 15 miles and summarize the rent range"
- "Run Furnished Finder Scraper in monitor mode for Nashville, then use Subito Real Estate Scraper when the next market is Italy"

### Suite next step

This Actor covers US mid-term furnished search cards. For residential markets already on the Store, run [Subito Real Estate Scraper](https://apify.com/crawloop/subito-real-estate-scraper) for Italy or [realestate.com.au Scraper](https://apify.com/crawloop/realestate-com-au-scraper) for Australia sold comps.

### FAQ

**Does this open every property page?**
No. Rows are the public search cards: rent, beds, baths, minimum stay, amenities, photos, and an approximate map point. Phone and email are not on that card.

**Why might a dense city return fewer rows than the map shows?**
One view returns at most 50 listings. The run splits saturated views into quadrants, deduped by listing id, and stops at `maxItems` or a query budget. Narrow the radius when you need a tighter neighborhood.

**What does monitor mode skip?**
Listing ids already seen for that same city, radius, or map box. The run remembers the whole search view, including cards it did not bill because of `maxItems`. Change the city and it is a new cursor. A run with no new ids in that view writes zero rows.

**Do I need a proxy?**
No. Leave proxy off. Enable Apify Proxy only if a run is blocked, and try datacenter before residential.

# Actor input Schema

## `startUrls` (type: `array`):

Housing search URLs. A city path uses the city fields below only when this list is empty. Map bounds on the URL replace the radius.

## `city` (type: `string`):

US city, for example Austin. Used when Start URLs is empty and no map box is set.

## `state` (type: `string`):

US state name or two-letter code, for example TX.

## `radiusMiles` (type: `integer`):

Search radius around the city center. Ignored when a map box or a URL with map bounds is set.

## `minLatitude` (type: `number`):

South edge of a map box. Set all four edges to skip the city lookup.

## `minLongitude` (type: `number`):

West edge of a map box.

## `maxLatitude` (type: `number`):

North edge of a map box.

## `maxLongitude` (type: `number`):

East edge of a map box.

## `minPrice` (type: `integer`):

Keep listings at or above this monthly rent.

## `maxPrice` (type: `integer`):

Keep listings at or below this monthly rent.

## `minBedrooms` (type: `integer`):

Minimum bedroom count.

## `minBathrooms` (type: `number`):

Minimum bathroom count.

## `propertyType` (type: `string`):

Optional type match, for example House or Apartment. Leave empty for every type.

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

Maximum dataset rows for this run. A city search splits the map when one view returns 50 listings and this cap is still open.

## `monitorMode` (type: `boolean`):

Save only listing ids that were not stored for this same search on the previous run. A quiet tick writes zero rows.

## `monitorStateStore` (type: `string`):

Named key-value store that keeps seen listing ids across scheduled runs.

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

Leave proxy off. The public search endpoint answers without a proxy. Enable Apify Proxy only if a run is blocked, and try datacenter before residential.

## Actor input object example

```json
{
  "city": "Austin",
  "state": "TX",
  "radiusMiles": 15,
  "maxItems": 25,
  "monitorMode": false,
  "monitorStateStore": "furnished-finder-monitor",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items — one furnished rental listing per row.

# 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 = {
    "city": "Austin",
    "state": "TX"
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/furnished-finder-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 = {
    "city": "Austin",
    "state": "TX",
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/furnished-finder-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 '{
  "city": "Austin",
  "state": "TX"
}' |
apify call crawloop/furnished-finder-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/furnished-finder-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/cYJEHUcvXbRcnxwPM/builds/fbPbtgrVd5CSzl6X1/openapi.json
