# Properstar $0.8💰 (.com|.ch) Search | Detail | Agent | Agency (`memo23/properstar-leads-scraper`) Actor

💰$0.80 per 1,000 results. Unlock the full potential of global real estate data with the Properstar.com Scraper! Whether you're tracking market trends, building a portfolio, or exploring investment opportunities, this scraper delivers unparalleled access to listings, prices, agent details, and media

- **URL**: https://apify.com/memo23/properstar-leads-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 54 total users, 3 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.80 / 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.

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

### Overview

The Properstar Scraper is a cutting-edge tool for extracting detailed property data from Properstar (e.g. `properstar.com`, `properstar.ch`). Whether you're a real estate professional, investor, or researcher, this scraper simplifies the process of collecting essential property information from one of the top international real estate platforms.

Properstar is a global real estate marketplace connecting buyers, sellers, and agents, featuring thousands of property listings across different regions and price ranges.

### Features

- **Extract Property Listings**: Retrieve detailed data such as prices, locations, property descriptions, and images.
- **Agency Scraping**: Scrape all listings directly from agency pages (e.g., `https://www.properstar.ch/agence/gerances-giroud-sa/6434092`).
- **Agent Scraping**: Scrape agent profile information directly from agent pages (e.g., `https://www.properstar.ch/agent-immobilier/valerie-prelaz1`).
- **Gather Agent Information**: Collect details about listing agents or agencies.
- **Image and Media Links**: Download URLs for property images and media.
- **Configurable Settings**: Customize crawling parameters like concurrency, retries, and item limits.
- **Proxy Support**: Ensure anonymous and reliable scraping with built-in proxy configurations.

### How to Use

1. **Set Up**: Ensure you have an Apify account and access to the Apify platform.
2. **Provide Start URLs**: Add URLs from Properstar.com to define your scraping scope. The scraper supports:

- Search result pages (e.g., `https://www.properstar.com/spain/buy/apartment-house`)
- Direct property search URLs (e.g., `https://www.properstar.com/find/24002 Colonial Parkway,Katy,TX, USA`)
- Agency pages (e.g., `https://www.properstar.ch/agence/gerances-giroud-sa/6434092`)
- Agent pages (e.g., `https://www.properstar.ch/agent-immobilier/valerie-prelaz1`)

3. **Adjust Scraper Settings**: Customize settings like `maxItems`, `maxConcurrency`, and `minConcurrency` as per your requirements.
4. **Run the Scraper**: Execute the scraper on the Apify platform.
5. **Download Results**: Export the scraped data in your preferred format (JSON, CSV, Excel).

### Input Configuration

Here is an example of how to set up the input for the Properstar.com Scraper:

```json
{
    "startUrls": [
        "https://www.properstar.com/spain/buy/apartment-house",
        "https://www.properstar.com/find/24002 Colonial Parkway,Katy,TX, USA"
    ],
    "maxItems": 30,
    "maxConcurrency": 50,
    "minConcurrency": 1,
    "maxRequestRetries": 100,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
}
```

#### Input Fields Explanation

- **Start URLs** (`startUrls`): List of URLs to start scraping from, such as search result pages or property listings.
- **Max Items** (`maxItems`): Maximum number of listings to scrape in one run. Default is `30`.
- **Max Concurrency** (`maxConcurrency`): Maximum number of pages processed simultaneously. Default is `50`.
- **Min Concurrency** (`minConcurrency`): Minimum number of pages processed simultaneously. Default is `1`.
- **Max Request Retries** (`maxRequestRetries`): Number of retries for failed requests before stopping. Default is `100`.
- **Proxy Configuration** (`proxy`): Proxy settings for anonymity and reliability during scraping.

### Sample Output Listing

The scraper produces a comprehensive list of property listings with detailed information. Below is an example of the output:

```json
{
    "url": "https://www.properstar.com/listing/102145932",
    "id": 102145932,
    "title": "House for sale in Alhaurín de la Torre, Spain",
    "price": {
        "show": true,
        "values": [
            {
                "perSquareMeter": 1892,
                "currencyId": "EUR",
                "type": "Original",
                "value": 795000
            },
            {
                "perSquareMeter": 2003.0384356820334,
                "currencyId": "USD",
                "type": "Converted",
                "value": 841657.270807197
            }
        ]
    },
    "rooms": 8,
    "bedrooms": 8,
    "bathrooms": 4,
    "pictures": {
        "number": 51,
        "items": [
            {
                "url": "https://res.listglobally.com/listings/5828420/102145932/2fe45a03ecc9725e7d778c087768cb0c",
                "displayOrder": 1
            },
            {
                "url": "https://res.listglobally.com/listings/5828420/102145932/1558b9dd348d11964fb4c4c2d0b7122f",
                "displayOrder": 2
            }
        ]
    },
    "medias": {
        "number": 1,
        "items": [
            {
                "type": {
                    "id": "Video",
                    "name": "Video"
                },
                "url": "https://www.youtube.com/watch?v=VH-n39XnJ_0",
                "displayOrder": 1
            }
        ]
    },
    "location": {
        "placeId": "ChIJe4pwjNr6cg0Rtk4xIclUBuU",
        "countryISO": "ES",
        "city": "Alhaurín de la Torre",
        "postcode": "29130",
        "showAddress": false,
        "showPostcode": true,
        "latitude": 36.659895,
        "longitude": -4.559864,
        "geocodeLevel": "City"
    },
    "area": {
        "unit": {
            "id": "SquareMeter",
            "name": "m²"
        },
        "living": 420
    },
    "contactUsers": [
        {
            "type": "MainAgencyContact",
            "email": "new@strand.es",
            "firstName": "new@strand.es",
            "address": "avenida Playas del Duque, 1",
            "postCode": "29660",
            "countryISO": "ES",
            "mainLanguage": "es",
            "userId": 874322
        }
    ],
    "description": "Located in the elevated neighborhood of El Lagar, in Alhaurín de la Torre, this house is an exceptional opportunity for those looking for space and tranquility. Perfectly suited for large families, this property combines a serene residential setting with easy access to all essential amenities and just a 10-minute drive to the nearest beach, Plaza Mayor shopping centre and Malaga airport.",
    "advertiser": "STRAND PROPERTIES"
}
```

#### Output Fields Explanation

- **url**: The direct URL of the property listing.
- **id**: Unique identifier for the property.
- **title**: Title or name of the property.
- **price**: Detailed price information including per square meter and currency.
- **rooms**: Total number of rooms in the property.
- **bedrooms**: Number of bedrooms.
- **bathrooms**: Number of bathrooms.
- **pictures**: An object containing the number and details of image URLs.
- **medias**: Additional media items, such as videos.
- **location**: Geographic details including city, postcode, latitude, and longitude.
- **area**: Living area size in square meters.
- **contactUsers**: Details of the contact person or agency.
- **description**: Full property description.
- **advertiser**: Name of the advertising agency or person.

### Sample Output Agency Scraping

When scraping an agency page, the scraper produces a list of detailed property listings managed by that agency. Below is an example of the output structure:

```json
{
    "id": 113532870,
    "title": "Spacious renovated 3.5 room apartment in Villarsiviriaux",
    "price": {
        "show": true,
        "values": [
            {
                "currencyId": "CHF",
                "type": "Original",
                "value": 540000
            },
            {
                "currencyId": "USD",
                "type": "Converted",
                "value": 700877.26
            }
        ]
    },
    "rooms": 3.5,
    "area": {
        "values": [
            {
                "original": true,
                "unit": {
                    "id": "SquareMeter",
                    "name": "m²"
                },
                "living": 89,
                "terrace": 16.5
            },
            {
                "unit": {
                    "id": "SquareFoot",
                    "name": "Square foot"
                },
                "living": 957.99,
                "terrace": 177.60
            }
        ],
        "unit": {
            "id": "SquareMeter",
            "name": "m²"
        },
        "living": 89,
        "terrace": 16.5
    },
    "location": {
        "placeId": "ChIJrUY6kER7jkcRg0HLgh31O3Y",
        "countryISO": "CH",
        "city": "Villarsiviriaux",
        "postcode": "1694",
        "address1": "Route de la Condémine 9",
        "showAddress": true,
        "showPostcode": true,
        "latitude": 46.699624,
        "longitude": 7.012629,
        "geocodeLevel": "Coordinates"
    },
    "contactUsers": [
        {
            "contactId": 359659,
            "type": "MainAgencyContact",
            "email": "a.sanial@gerances-giroud.ch",
            "firstName": "Arnaud",
            "lastName": "Sanial",
            "address": "Rue du Centre2",
            "postCode": "1752",
            "locality": "Villars-sur-Glâne",
            "countryISO": "CH",
            "phone": "+410796458921",
            "mobile": "+410796458921",
            "mainLanguage": "fr",
            "spokenLanguages": ["fr"]
        }
    ],
    "pictures": {
        "number": 12,
        "items": [
            {
                "url": "https://files-api.properstar.com/api/v2/files/80725e58-cd25-4234-8f5c-631b333ae01f/1",
                "displayOrder": 1
            }
        ]
    },
    "description": "...",
    "features": {
        "rooms": 3.5
    },
    "resources": {
        "pictures": {
            "number": 12,
            "items": [
                {
                    "url": "https://files-api.properstar.com/api/v2/files/80725e58-cd25-4234-8f5c-631b333ae01f/1",
                    "displayOrder": 1
                }
            ]
        }
    },
    "updatedAt": "2026-02-03T17:51:09.31",
    "url": "https://www.properstar.ch/listing/113532870"
}
```

#### Agency Scraping Fields Explanation

- **id**: Unique identifier for the property listing.
- **title**: The title or headline of the property listing.
- **price**: Object containing pricing details.
  - **show**: Boolean indicating if the price is publicly visible.
  - **values**: Array of price values in different currencies.
    - **currencyId**: Currency code (e.g., CHF, USD).
    - **type**: Type of price (e.g., "Original", "Converted").
    - **value**: Numerical value of the price.
- **rooms**: Total number of rooms in the property.
- **area**: Object containing area measurements.
  - **values**: Array of area values in different units (m², sq ft).
    - **original**: Boolean indicating if this is the original unit.
    - **unit**: Object with unit ID and name.
    - **living**: Living area size.
    - **terrace**: Terrace area size (if applicable).
    - **land**: Land area size (if applicable).
  - **unit**: Primary unit used for display.
  - **living**: Primary living area value.
  - **terrace**: Primary terrace area value.
- **location**: Detailed geographic information.
  - **placeId**: Google Places ID or internal location ID.
  - **countryISO**: ISO country code (e.g., CH).
  - **city**: Name of the city/town.
  - **postcode**: Postal code.
  - **address1**: Street address (if available).
  - **showAddress**: Boolean indicating if address is public.
  - **showPostcode**: Boolean indicating if postcode is public.
  - **latitude**: Geographic latitude.
  - **longitude**: Geographic longitude.
  - **geocodeLevel**: Precision of the geocoding (e.g., "Coordinates", "City").
- **contactUsers**: Array of contact persons for the listing.
  - **contactId**: Internal ID of the contact.
  - **type**: Type of contact (e.g., "MainAgencyContact").
  - **email**: Contact email address.
  - **firstName**: First name of the agent.
  - **lastName**: Last name of the agent.
  - **address**: Agent/Agency address.
  - **postCode**: Agent/Agency postal code.
  - **locality**: Agent/Agency locality/city.
  - **countryISO**: Agent/Agency country code.
  - **phone**: Contact phone number.
  - **mobile**: Contact mobile number.
  - **mainLanguage**: Primary language of the contact.
  - **spokenLanguages**: Array of languages spoken.
- **pictures**: Object containing image information.
  - **number**: Total count of pictures.
  - **items**: Array of picture objects.
    - **url**: Direct URL to the image file.
    - **displayOrder**: Order in which the image should be displayed.
- **description**: Full text description of the property.
- **features**: Object containing specific property features (e.g., specific room counts).
- **resources**: Nested object containing media resources (redundant with `pictures` but maintained for structure).
- **updatedAt**: Timestamp of the last update to the listing.
- **url**: Direct URL to the property listing page.

### Sample Output Agent Scraping

When scraping an agent page, the scraper currently produces the agent's profile information. Below is an example of the output structure:

```json
{
    "id": 1652737,
    "status": "Registered",
    "agency": {
        "accountId": 6287503,
        "name": "Comptoir Immobilier Lausanne",
        "userIsAgent": true
    },
    "accountsRoles": [
        {
            "accountId": 6287510,
            "role": "Agent"
        }
    ],
    "email": "valerie.prelaz@comptoir-immo.ch",
    "updateDate": "2026-02-17T18:49:16.867",
    "fullName": "Valérie PRÉLAZ",
    "avatar": "https://res.listglobally.com/users/1652737/4223fe9f96437be3e0a263db3abadcd3",
    "countryISO": "CH",
    "mainLanguage": "fr",
    "spokenLanguages": [
        "fr"
    ],
    "slug": "valerie-prelaz1",
    "url": "https://www.properstar.ch/agent-immobilier/valerie-prelaz1"
}
```

#### Agent Scraping Fields Explanation

- **id**: Unique identifier for the agent user.
- **status**: Status of the agent's account (e.g., "Registered").
- **agency**: Object containing details about the agent's agency.
  - **accountId**: The account ID of the agency.
  - **name**: Name of the agency.
- **fullName**: The full name of the agent.
- **email**: The contact email of the agent.
- **avatar**: URL to the agent's profile picture.
- **countryISO**: ISO country code associated with the agent.
- **mainLanguage**: The agent's primary language code.
- **spokenLanguages**: Array of languages spoken by the agent.
- **slug**: The URL slug for the agent's profile.
- **url**: The source URL of the agent page.

### Sample Output Broker Data

The scraper produces a comprehensive list of property listings with detailed information. Below is an example of the output:

```json
{
        "agent": {
            "id": 1699250,
            "fullName": "ANDRES PATIÑO",
            "email": "andres.patino@expcolombiaci.co",
            "phone": "+57(314)422-8004",
            "avatar": "https://res.listglobally.com/users/1699250/48325522c0eb2c3dbdf4cd53ee2e5dc1",
            "countryISO": "CO",
            "language": "es",
            "slug": "andres-patino",
            "socialContacts": [
                {
                    "type": "WebSite",
                    "contact": "https://pydinmobiliaria.funnels.mastertools.com/"
                },
                {
                    "type": "Facebook",
                    "contact": "https://www.facebook.com/andresp777"
                },
                {
                    "type": "Instagram",
                    "contact": "https://www.instagram.com/pydinmobiliaria"
                }
            ],
            "agency": {
                "id": 6439959,
                "name": [
                    {
                        "language": "es",
                        "text": "EXP Colombia"
                    }
                ]
            },
            "lastUpdated": "2025-08-13T01:27:53.86"
        },
        "listings": [
            {
                "id": 108902346,
                "reference": "8594448",
                "title": "Lot in Flanders Great Opportunity",
                "description": "",
                "price": {},
                "location": {
                    "city": "Flandes"
                },
                "features": {},
                "resources": {
                    "imageCount": 18,
                    "mainImage": "https://res.listglobally.com/listings/6440033/108902346/2c9f07b1e587610d57e56e38396a7a1f"
                }
            },
            ...
        ],
        "stats": {
            "totalListings": 6,
            "activeListings": 0,
            "lastUpdated": "2025-08-13T08:34:37.988Z"
        },
        "metadata": {
            "source": "properstar.com",
            "scrapedAt": "2025-08-13T08:34:37.989Z"
        }
    }
```

#### Broker Data Fields Explanation

##### Agent Information

- **agent**: Contains comprehensive information about the real estate agent
  - **id**: Unique identifier for the agent in the system
  - **fullName**: Full legal name of the agent (e.g., "ANDRES PATIÑO")
  - **email**: Professional contact email address of the agent
  - **phone**: Direct contact phone number with country code
  - **avatar**: URL to the agent's profile picture
  - **countryISO**: ISO 3166-1 alpha-2 country code where the agent operates (e.g., "CO" for Colombia)
  - **language**: Primary language code used by the agent (e.g., "es" for Spanish)
  - **slug**: URL-friendly version of the agent's name for web addresses
  - **socialContacts**: Array of social media profiles and websites
    - **type**: Platform type (e.g., "WebSite", "Facebook", "Instagram")
    - **contact**: Direct URL to the social media profile or website
  - **agency**: Information about the agent's affiliated real estate agency
    - **id**: Unique identifier for the agency
    - **name**: Localized agency names with language codes
      - **language**: Language code (e.g., "es" for Spanish)
      - **text**: Agency name in the specified language
  - **lastUpdated**: ISO 8601 timestamp of when the agent's profile was last updated

##### Property Listings

- **listings**: Array of property listings managed by the agent
  - **id**: Unique identifier for the property listing
  - **reference**: Internal reference number used by the agency
  - **title**: Marketing title of the property listing
  - **description**: Detailed description of the property (may be empty)
  - **price**: Object containing pricing information (may be empty if not specified)
  - **location**: Geographic information about the property
    - **city**: City or municipality where the property is located
  - **features**: Property characteristics and amenities (may be empty)
  - **resources**: Media resources associated with the listing
    - **imageCount**: Total number of images available for the property
    - **mainImage**: URL of the primary/featured image for the listing

##### Statistics

- **stats**: Summary statistics about the agent's portfolio
  - **totalListings**: Total number of properties listed by the agent
  - **activeListings**: Number of currently active/published listings
  - **lastUpdated**: ISO 8601 timestamp of when statistics were last calculated

##### Metadata

- **metadata**: Information about the data collection process
  - **source**: Source website of the data (e.g., "properstar.com")
  - **scrapedAt**: ISO 8601 timestamp of when the data was collected

### Explore More Scrapers

If you found the Properstar.com Scraper useful, check out other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to streamline your web scraping and automation needs.

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/4sdPPHPfyo1aCreJd/issues) section of this actor.
- For further assistance, contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or a full dataset: <muhamed.didovic@gmail.com>
- Need other platforms scraped? Contact <muhamed.didovic@gmail.com>
- For API services of this scraper, reach out to <muhamed.didovic@gmail.com>

# Actor input Schema

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

URLs to start with.

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

Maximum number of listings/items that will be scraped.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `enrichEmails` (type: `boolean`):

If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Billed per contact email found; only charged when an email is returned, never for misses.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.properstar.com/spain/buy/apartment-house"
  ],
  "maxItems": 1000,
  "maxConcurrency": 50,
  "minConcurrency": 1,
  "maxRequestRetries": 100,
  "enrichEmails": false
}
```

# 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": [
        "https://www.properstar.com/spain/buy/apartment-house"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/properstar-leads-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": ["https://www.properstar.com/spain/buy/apartment-house"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/properstar-leads-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": [
    "https://www.properstar.com/spain/buy/apartment-house"
  ]
}' |
apify call memo23/properstar-leads-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4sdPPHPfyo1aCreJd/builds/DL2Tp0WbueqxOfEzk/openapi.json
