Properstar – Global Property Listings, URLs & Agency Data
Pricing
from $1.50 / 1,000 results
Properstar – Global Property Listings, URLs & Agency Data
Extract property listings from Properstar across global domains like .com, .co.uk, .ch, and .fr. Use search pages, listing URLs, or agency pages. Returns prices, multilingual descriptions, photos, floor plans, GPS coordinates, and agency details via Properstar’s data service.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
12 hours ago
Last modified
Categories
Share
Properstar Scraper
Extract property listings from Properstar across every country domain (.com, .co.uk, .ch, .fr, and more) in one actor. Paste a search results page, a single listing page, or an agency page, and get clean, structured records with prices, full multilingual descriptions, photos, floor plans, GPS coordinates, and agency details. The actor talks to Properstar's own data service, so it is fast, stable, and far cheaper to run than page-by-page scrapers.
Why this scraper
- 30+ fields per listing, more than comparable tools on the Store.
- Works on any Properstar country domain, auto-detected from the URL you paste.
- Three input shapes in one actor: search pages, single listings, and agency or agent pages.
- Multilingual titles and descriptions captured per language, not just one.
- Full geo data (latitude, longitude, postcode, city, country) on every record.
- Photos, floor plans, property type, rooms, bedrooms, bathrooms, living and land area in both m2 and square feet.
- Optional full detail mode adds amenities, view types, construction year, and floor.
- Cost optimised: the heavy data pull runs over the low-cost connection pool, so a typical run is a fraction of the price of browser-based scrapers.
Data you get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| id | "100000001" |
| url | "https://www.properstar.co.uk/listing/100000001" |
| transactionType | "Sell" |
| type | "Apartment" |
| subType | "Penthouse" |
| title | "Sample listing title" |
| description | "Full description text appears here." |
| titleByLanguage | { "en": "Sample listing title" } |
| price | 1000000 |
| currency | "GBP" |
| livingAreaSqm | 120 |
| landAreaSqm | 0 |
| livingAreaSqft | 1291 |
| rooms | 4 |
| bedrooms | 3 |
| bathrooms | 2 |
| floor | "3" |
| constructionYear | 2020 |
| address | "Sample Street 1" |
| city | "London" |
| postcode | "SW1" |
| countryISO | "GB" |
| latitude | 51.5000 |
| longitude | -0.1200 |
| pictures | ["https://images.example.com/0001.jpg"] |
| picturesCount | 12 |
| floorPlans | ["https://images.example.com/plan-0001.jpg"] |
| amenities | ["Balcony", "Parking"] |
| views | ["City"] |
| status | "Published" |
| energyRating | "C" |
| co2Rating | "B" |
| agencyId | 1000000 |
| agencyName | "Sample Agency" |
| agencyStatistics | { "numberOfListings": 0 } |
| publicationDate | "2026-01-01T00:00:00Z" |
| changeType (incremental mode only) | "NEW" |
| changedFields (incremental mode only) | ["price"] |
| firstSeenAt (incremental mode only) | "2026-01-01T00:00:00.000Z" |
| lastSeenAt (incremental mode only) | "2026-01-02T00:00:00.000Z" |
How to use
Basic search page:
{"startUrls": ["https://www.properstar.co.uk/united-kingdom/london/buy/apartment-house"],"maxItems": 50,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Search page with refinement filters:
{"startUrls": ["https://www.properstar.com/spain/barcelona/buy/apartment-house"],"transactionType": "buy","propertyTypes": ["apartment"],"minPrice": 300000,"maxPrice": 800000,"minBedrooms": 2,"maxItems": 200}
Single listing with full detail (amenities, views, year, floor):
{"startUrls": ["https://www.properstar.co.uk/listing/100000001"]}
Agency inventory:
{"startUrls": ["https://www.properstar.co.uk/agency/sample-agency/1000000"],"maxItems": 100}
Multiple URLs in one run:
{"startUrls": ["https://www.properstar.com/france/paris/rent/apartment","https://www.properstar.ch/switzerland/geneva/buy/house"],"maxItems": 300}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| startUrls | array | required | Properstar search, listing, or agency URLs from any country domain. |
| transactionType | string | "any" | Refine search URLs to "buy" or "rent". "any" keeps the URL setting. |
| propertyTypes | array | [] | Restrict to apartment, house, land, commercial, office, parking, building, room. |
| minPrice / maxPrice | integer | none | Price range in the selected currency. |
| minBedrooms / maxBedrooms | integer | none | Bedroom range. |
| luxuryOnly | boolean | false | Only listings flagged as luxury. |
| enrichDetail | boolean | false | Fetch each listing's detail page for amenities, views, year, floor. |
| maxItems | integer | 20 | Maximum listings across all URLs. 0 = unlimited. |
| maxPagesPerUrl | integer | (empty) | Maximum result pages per search/agency URL (25 listings per page). Leave empty to walk every result page (the walk still stops at the site's own ~2000-listing retrievable ceiling). |
| maxResidentialMb | integer | 0 | Soft cap on Residential traffic before downgrading to the cheaper pool. 0 = no cap. |
| proxy | object | Residential | Connection settings. Pick a country to pin the exit region. |
| resumeFromRunId | string | (empty) | A previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Listings already collected there (matched by id) are skipped, so this run only saves the new ones. |
| incrementalMode | boolean | false | Turn on for recurring monitoring of the same startUrls/filters. Only NEW, UPDATED, and REAPPEARED listings are returned after the first run. |
| stateKey | string | (empty) | Name an incremental-mode monitoring campaign, or share state deliberately across differently-configured runs. Auto-derived from startUrls + filters + enrichDetail when empty. |
| emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) listings with no change, marked UNCHANGED. |
| emitExpired | boolean | false | Incremental mode only. Also return (and bill) listings no longer found, marked EXPIRED — only when the run fully scanned every tracked URL. |
Resuming a full-catalogue walk
For an unbounded pull (maxPagesPerUrl empty, maxItems: 0), two things protect a long run:
resumeFromRunIdlets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every listingidalready saved there, appending only new listings.- A checkpoint is saved automatically as the run progresses. If the run is interrupted by an Apify platform migration or you click Resurrect on a failed run, it picks back up from where it left off in the same run, without re-saving (or re-charging for) listings it already collected. No input is needed for this; it's automatic.
Incremental mode — recurring monitoring
A different workflow from Resume above: instead of continuing one specific interrupted run, Incremental mode re-runs the same startUrls and filters on a schedule (e.g. daily) and tells you only what changed, using state the actor keeps for you.
- The first run for a given
startUrls/filter/enrichDetailcombination returns every listing markedchangeType: "NEW". - Later runs return only
NEW,UPDATED(withchangedFieldslisting exactly what changed), andREAPPEAREDlistings by default. Turn onemitUnchangedto also getUNCHANGEDrows, oremitExpiredto also getEXPIREDrows for listings that disappeared. EXPIREDdetection only fires when the run fully scanned every tracked URL — it is skipped (with a log line explaining why) on aresumeFromRunIdrun, a run capped bymaxItems, or a run where a page/connection was rejected mid-scan, since none of those prove a listing is actually gone.- State is namespaced per distinct
startUrls+ filter +enrichDetailcombination automatically, so two different searches never mix baselines. SetstateKeyto name a campaign explicitly or to share state across a deliberately different configuration. emitUnchangedandemitExpiredboth return — and bill — extra rows; leave them off for the leanest "just tell me what's new" feed.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape — the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record — not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Output example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "100000001","url": "https://www.properstar.co.uk/listing/100000001","class": "PropertyListing","transactionType": "Sell","type": "Apartment","subType": "Penthouse","title": "Sample listing title","description": "Full description text appears here.","titleByLanguage": { "en": "Sample listing title" },"descriptionByLanguage": { "en": "Full description text appears here." },"price": 1000000,"currency": "GBP","livingAreaSqm": 120,"livingAreaSqft": 1291,"rooms": 4,"bedrooms": 3,"bathrooms": 2,"floor": "3","constructionYear": 2020,"address": "Sample Street 1","city": "London","postcode": "SW1","countryISO": "GB","latitude": 51.5000,"longitude": -0.1200,"pictures": ["https://images.example.com/0001.jpg"],"picturesCount": 12,"floorPlans": ["https://images.example.com/plan-0001.jpg"],"amenities": ["Balcony", "Parking"],"views": ["City"],"agencyId": 1000000,"agencyName": "Sample Agency","agencySlug": "sample-agency","agencyStatistics": { "numberOfListings": 0 },"publicationDate": "2026-01-01T00:00:00Z"}
Plan requirement
The one-time connection setup needs a Residential proxy, which is included on the Apify Starter plan and above. The bulk data extraction then runs automatically over the lower-cost connection pool to keep your costs down. On the free plan the connection setup may not complete, so a paid plan is recommended. Pick a proxy country to pin the exit region, or leave it unset to rotate automatically.