# Trovit Homes Property Listings Scraper (`rainminer/trovit-homes-scraper`) Actor

Scrape Trovit Homes property search results across supported countries. Export title, price, rooms, location, and listing URLs to JSON or CSV for housing market monitoring and lead generation.

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

## Pricing

from $1.49 / 1,000 home 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Trovit Homes Scraper

Extract rental and for-sale property listings from [Trovit Homes](https://homes.trovit.com/) — a leading real-estate aggregator that collects listings from hundreds of portals and classified sites into a single search interface.

![Trovit Homes](https://homes.trovit.com/images/global/trovit-logo.png)

### What does this Actor do?

The **Trovit Homes Scraper** crawls Trovit Homes search result pages and outputs structured data for every listing found. Because Trovit is a search-result aggregator (SERP), all the key details — title, price, location, bedroom count, size, description, and image — are embedded directly in the search-result cards. No separate detail-page visit is required, making the scraper fast and efficient.

For each listing the Actor collects:

- **id** — Trovit's internal unique identifier for the property
- **title** — Listing headline as shown on the card
- **propertyType** — Property category (e.g. *Apartment*, *House*, *Studio*)
- **priceText** — Raw price string as shown on the page (e.g. *USD 795/month*)
- **price** — Parsed numeric price value
- **currency** — Detected currency code (USD, GBP, EUR, BRL)
- **location** — City, county, or region where the property is listed
- **bedrooms** — Number of bedrooms (parsed from card text)
- **bathrooms** — Number of bathrooms (parsed from card text)
- **sizeSqFt** — Floor area in square feet (parsed from card text)
- **features** — Array of amenity/feature tags shown on the card (e.g. *Air conditioning*, *Garden*, *Parking*)
- **description** — Snippet description from the listing card
- **imageUrl** — Direct URL to the listing thumbnail image
- **updatedText** — Recency label (e.g. *26 days ago*, *Today*)
- **clickUrl** — Outbound tracking link (to the originating portal)
- **searchUrl** — The Trovit search page the listing was found on

### Supported Country Versions

| Country        | Domain                  |
| -------------- | ----------------------- |
| United States  | `homes.trovit.com`      |
| United Kingdom | `homes.trovit.co.uk`    |
| Spain          | `casas.trovit.es`       |
| France         | `immo.trovit.fr`        |
| Italy          | `case.trovit.it`        |
| Brazil         | `casas.trovit.com.br`   |
| Germany        | `wohnungen.trovit.de`   |
| Austria        | `immobilien.trovit.at`  |

### How to use

1. Open the Actor in [Apify Console](https://console.apify.com/).
2. Paste one or more **Trovit Homes search URLs** into the **Start URLs** field.
3. Set **Maximum items** to control how many listings to collect per URL.
4. Enable **Proxy configuration** (Apify datacenter proxies are recommended — the site blocks some IPs without a proxy).
5. Click **Start**. Results appear in the **Dataset** tab as JSON or CSV.

#### Example start URLs

```
https://homes.trovit.com/for-rent-house
https://homes.trovit.com/for-sale-house
https://homes.trovit.co.uk/property-to-rent
https://casas.trovit.es/pisos-en-alquiler
https://immo.trovit.fr/appartements-a-louer
```

#### Pagination

The Actor automatically follows Trovit's numeric pagination (`/2`, `/3`, …) until it has collected the requested number of items or no more results are available.

### Output example

```json
{
  "id": "trovit-US-abc123",
  "title": "RPI student rental available on 6/1/2026 for School Year 2026 to 2027",
  "propertyType": "Apartment",
  "priceText": "USD 795/month",
  "price": 795,
  "currency": "USD",
  "location": "12180, City of Troy, Rensselaer County, New York",
  "bedrooms": 2,
  "bathrooms": 1,
  "sizeSqFt": 990,
  "features": [],
  "description": "All Utilities are included and Fully Furnished! Price is per room…",
  "imageUrl": "https://img-us-2.trovit.com/abc123/abc123.1_11.jpg",
  "updatedText": "26 days ago",
  "clickUrl": "https://clk.thribee.com/...",
  "searchUrl": "https://homes.trovit.com/for-rent-house/"
}
```

### Use cases

- **Rental market research** — Compare asking rents across cities, neighbourhoods, and property sizes without visiting multiple portals.
- **Price monitoring** — Track how rental and sale prices shift week over week for a specific area or property type.
- **Investment analysis** — Build datasets of properties matching specific criteria (price range, bedroom count, location) for yield calculations.
- **Lead generation** — Identify new listings as they appear on the aggregator before they age out.
- **Academic / data journalism** — Analyse residential real-estate trends from aggregated listing data.

### Technical details

- Crawler: `CheerioCrawler` (pure HTTP — no browser required)
- Base image: `apify/actor-node:20`
- Proxy: Apify datacenter proxies enabled by default (the site returns 401 from many IPs without a proxy)
- Charging model: pay-per-event (`result-item`)
- TypeScript, Crawlee v3, Apify SDK v3

### Frequently asked questions

**Does the Actor visit individual property portals?**
No. Trovit embeds all listing metadata in its search-result cards. The Actor never navigates to the third-party portal links.

**Can I scrape multiple searches at once?**
Yes — add multiple URLs to the *Start URLs* field. Each URL gets its own independent `maxItems` counter.

**Why do I need a proxy?**
Trovit Homes returns HTTP 401 for requests from many data-centre and residential IP ranges. Apify datacenter proxies (the default) work reliably for `homes.trovit.com`.

**Will it work for all Trovit country domains?**
The Actor validates the hostname against all known Trovit Homes country domains listed in the table above.

### Image Credit

Image credit: [trovit.com](https://www.trovit.com/)

# Actor input Schema

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

Trovit Homes search URLs to scrape (e.g. https://homes.trovit.com/for-rent-house). Supports homes.trovit.com, homes.trovit.co.uk, casas.trovit.es, immo.trovit.fr, case.trovit.it, casas.trovit.com.br.

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

Maximum number of property listings to return per start URL.

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

Proxy settings. Trovit Homes often requires a proxy — Apify datacenter proxies are recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://homes.trovit.com/for-rent-house"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://homes.trovit.com/for-rent-house"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rainminer/trovit-homes-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 = {
    "startUrls": [{ "url": "https://homes.trovit.com/for-rent-house" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://homes.trovit.com/for-rent-house"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rainminer/trovit-homes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rainminer/trovit-homes-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/WSgCBzpAdgebPZEtV/builds/I2IuVHooTdF63xhcq/openapi.json
