# S1Homes Scotland Property Scraper (`vivid-softwares/s1homes-scotland-property-scraper`) Actor

Scrape S1Homes, Scotland's property website. Paste any search URL to get every listing for sale or to rent with prices, dates added, photos, floor plans, videos, nearby schools and stations, and agent contacts.

- **URL**: https://apify.com/vivid-softwares/s1homes-scotland-property-scraper.md
- **Developed by:** [VividSoftwares](https://apify.com/vivid-softwares) (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

$14.00 / 1,000 property listings

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/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

### What does S1Homes Scotland Property Scraper do?

**S1Homes Scotland Property Scraper** extracts property listings from [S1Homes](https://www.s1homes.com), one of Scotland's longest-running property websites. Paste **any S1Homes search URL** and get every matching listing, **for sale or to rent**, as clean JSON: prices and "offers over" terms, **dates added**, bedrooms and bathrooms, full descriptions, key features, **every photo, floor plan, video and 3D tour**, Home Report and EPC documents when supplied, **nearby schools and train stations**, coordinates, and the listing agent's public branch contact details.

It is a **dedicated S1Homes scraper** and a practical **Scottish property listings API**. Run it from Apify Console, call it over the API, schedule it, or connect it to AI agents through MCP.

- 🏠 **Property for sale** across Scotland
- 🔑 **Property to rent**, including furnishing, deposit, availability date, let type and pet-friendly lets
- 🏗️ **New homes** from Scottish developers and agents
- 📍 Towns, neighbourhoods, council areas and **postcode districts**, with S1Homes' radius search

### Why use this S1Homes scraper?

- **Every page, not just the first.** Paste one search URL and the Actor collects every matching listing, up to your limit.
- **Dates added and updated**, so you can track new stock and time on market.
- **Rich media**: all photos, floor plans, videos, 3D tours and Home Report or EPC PDFs when the agent supplies them.
- **Location context**: nearby schools and train stations with distances, plus Google Maps and Street View links.
- **Only new listings on repeat runs**: listings you already received are skipped and not charged.

Common uses:

- **Property market research** across Glasgow, Edinburgh, Aberdeen, Dundee and the rest of Scotland
- **UK property lead generation**: build lists of active estate and letting agent branches with their public phone numbers and emails
- **Rental market tracking**: rents, furnishing, deposits and availability by postcode
- **Investor deal sourcing**: new listings, guide prices, auctions and new-build developments
- **Property data for AI agents**: structured Scottish listings for assistants and automations

### How to scrape S1Homes property listings

#### Option 1: paste an S1Homes search URL (recommended)

1. Go to [s1homes.com](https://www.s1homes.com) and search with any filters you like: location, radius, price, bedrooms, bathrooms, property type, furnishing, pet-friendly, date added and so on.
2. Copy the results URL from your browser, for example `https://www.s1homes.com/property-for-sale?keywords=Edinburgh&locationIdentifier=edinburgh%5E20676&locationText=Edinburgh&sortedBy=date&sort=DESC`.
3. Paste it into **S1Homes search or property URLs**, set **Maximum listings** and click **Start**.

You can paste as many URLs as you like in one run. Every kind of S1Homes listing page works:

- Search results: `/property-for-sale?…`, `/property-to-rent?…`
- Area and neighbourhood pages: `/property-for-sale/glasgow`, `/property-for-sale/edinburgh/stockbridge`, `/property-to-let/aberdeen`
- Type, bedroom and filter pages: `/flats-to-rent/…`, `/3-bedroom-house-for-sale/…`, `/furnished-homes-to-let/…`, `/pet-friendly-flat-to-rent/…`, `/bungalows-for-sale/…`
- Land and new-build pages: `/find-land-for-sale/…`, `/plot-of-land-for-sale/…`, `/new-homes-for-sale/…`, `/new-build-homes`
- Agent pages: `/estate-agent/<agent>/<branch>`, `/letting-agent/<agent>/<branch>`, `/agent/<agent>/<branch>` (all of that branch's listings)
- Developer and development pages: `/developer/<developer>`, `/development/<developer>/<development>`
- Individual property pages

Filters you add to any of these URLs (for example `?minBedrooms=2&sortedBy=price&sort=ASC`) are applied. Pages that are not property listings, such as news or guides, are skipped with a warning.

#### Option 2: use the optional search builder

Pick a **Search type** (for sale, to rent or new homes) and one or more **Locations**, then add filters. The builder uses the same values as S1Homes' own search form. URLs and builder searches can be combined in one run, and duplicates are removed.

Download results as JSON, CSV, Excel or HTML, or read them through the API.

### Input

The main input is `startUrls`. Every other search field belongs to the optional search builder.

| Field | Description |
|---|---|
| `startUrls` | **Main input.** Any S1Homes search, area, type, land, new-build, agent, developer or property page. Every matching listing is collected. |
| `searchType` | `forSale`, `toRent` or `newHomes` |
| `locations` | 1,900+ S1Homes locations: towns, neighbourhoods, council areas and postcode districts such as `edinburgh`, `st-andrews`, `eh4`, `g42` |
| `radius` | This area only, or ¼ mile to 40 miles |
| `propertyType` | Detached, Semi-Detached, Terraced, Flat, Apartment, Bungalow, Land, Farm, Park Home, House, Maisonette, Cottage, Studio, Other |
| `minBedrooms`, `maxBedrooms` | Studio (0) to 20 |
| `minBathrooms`, `maxBathrooms` | 1 to 20 |
| `minPrice`, `maxPrice` | Sale price steps from £50,000 to £5,000,000 |
| `minRent`, `maxRent` | Monthly rent steps from £100 to £25,000 PCM |
| `addedToSite` | Last 24 hours, 3 days, 7 days, 14 days or last month |
| `includeSoldSTC`, `excludeUnderOffer` | Sale searches |
| `furnishedType`, `petsAllowed` | Rental searches |
| `sortBy` | Highest price, lowest price, newest listed, oldest listed |
| `maxItems` | Maximum number of saved listings (default 50) |
| `scrapeDetails` | Read every listing in full for all floor plans, videos, 3D tours, documents and the agent profile link (default on) |
| `includeImages` | Include photo URLs (default on) |
| `includeDuplicates` | Include listings from previous runs (default off) |
| `proxyConfiguration` | Apify Proxy, on by default |

#### Example input: search URL

```json
{
  "startUrls": [{ "url": "https://www.s1homes.com/property-to-rent?keywords=Glasgow&locationIdentifier=glasgow%5E70434&locationText=Glasgow&furnishedType=furnished" }],
  "maxItems": 100
}
```

#### Example input: search builder

```json
{
  "searchType": "forSale",
  "locations": ["edinburgh", "eh4"],
  "radius": "1",
  "minBedrooms": "2",
  "maxPrice": "350000",
  "propertyType": "flat",
  "addedToSite": "7d",
  "sortBy": "date-DESC",
  "maxItems": 200
}
```

### Output

Each listing is one dataset item. Fields that S1Homes does not provide for a listing are left out rather than guessed.

#### Example listing

```json
{
  "listing_id": "20260925132431160",
  "url": "https://www.s1homes.com/property-for-sale/Flat/20260925132431160",
  "search_type": "forSale",
  "title": "2 Bed Flat for Sale",
  "summary": "Situated on a quiet tree-lined street in the conservation area of one of Edinburgh's most sought after suburbs, this top floor flat retains many period features and offers leafy aspects to the front with views to Arthur's Seat. The property has been well-maintained by its current owner and offers flexible space with its own private garden area to the rear.",
  "listing_status": "available",
  "status_text": "Available",
  "price_text": "Offers over £395,000",
  "price": 395000,
  "price_qualifier": "Offers Over",
  "currency": "GBP",
  "address": "15 3f1, Gladstone Terrace, Edinburgh, EH9 1LS",
  "street_address": "15 3f1",
  "locality": "Gladstone Terrace",
  "city": "Edinburgh",
  "postcode": "EH9 1LS",
  "outcode": "EH9",
  "country": "Scotland",
  "latitude": 55.9387439,
  "longitude": -3.1857299,
  "google_maps_url": "https://www.google.com/maps/search/?api=1&query=55.938744,-3.185730",
  "street_view_url": "https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=55.938744,-3.185730",
  "property_type": "Flat",
  "bedrooms": 2,
  "bathrooms": 1,
  "tenure": "Freehold",
  "council_tax_band": "E",
  "is_new_home": false,
  "description": "The property is accessed via a secure door entry system with stairs to all floors and a door on the ground level giving access to the garden.\nThe central hallway, with its ceiling rose and decorative …",
  "key_features": [
    "Original period features and private garden"
  ],
  "advertiser_type": "agent",
  "agent_name": "Peterkin & Kidd",
  "branch_name": "Linlithgow",
  "agent_phone": "01506 840000",
  "agent_email": "cmclaughlin@peterkinandkidd.co.uk",
  "agent_profile_url": "https://www.s1homes.com/agent/peterkin-kidd/linlithgow",
  "agent_logo_url": "https://cdn.s1homes.com/s1homes/uploads/2025/07/Peterkin-Kidd.png",
  "agent_reference": "199_BRA_12975",
  "main_image_url": "https://cdn.s1homes.com/s1homes/uploads/property_images/2026/09/01-2423674.jpg",
  "images": [
    "https://cdn.s1homes.com/s1homes/uploads/property_images/2026/09/01-2423674.jpg",
    "https://cdn.s1homes.com/s1homes/uploads/property_images/2026/09/04-2423675.jpg",
    "…"
  ],
  "image_count": 11,
  "floorplans": [
    "https://cdn.s1homes.com/s1homes/uploads/property_images/2026/09/15-Gladstone-Terrace_-3f1-DM.jpg"
  ],
  "floorplan_url": "https://cdn.s1homes.com/s1homes/uploads/property_images/2026/09/15-Gladstone-Terrace_-3f1-DM.jpg",
  "floorplan_count": 1,
  "nearby_schools": [
    {
      "name": "James Gillespie's High School",
      "address": "120 Warrender Park Road, Edinburgh",
      "distance_miles": 0.57,
      "latitude": 55.936757,
      "longitude": -3.2001215
    }
  ],
  "nearby_train_stations": [
    {
      "name": "Edinburgh Waverley",
      "address": "United Kingdom",
      "distance_miles": 0.95,
      "latitude": 55.9524097,
      "longitude": -3.1883014
    }
  ],
  "date_added": "2026-09-25T13:24:31.884Z",
  "date_updated": "2026-09-25T13:24:32.611Z",
  "view_count": 7,
  "detail_page_complete": true,
  "scraped_at": "2026-09-27T21:07:45.623162+00:00",
  "seen_in_previous_run": false
}
```

#### Output fields

| Group | Fields |
|---|---|
| Listing | `listing_id`, `url`, `search_type`, `title`, `summary`, `listing_status`, `status_text`, `is_new_home`, `date_added`, `date_updated`, `view_count` |
| Price | `price_text`, `price`, `price_qualifier`, `price_frequency`, `currency` |
| Address | `address`, `street_address`, `locality`, `city`, `region`, `postcode`, `outcode`, `country`, `latitude`, `longitude`, `google_maps_url`, `street_view_url` |
| Property | `property_type`, `bedrooms`, `bathrooms`, `reception_rooms`, `floor_area`, `floor_area_max`, `floor_area_unit`, `tenure`, `council_tax_band` |
| Rentals | `furnishing`, `let_type`, `deposit`, `date_available`, `landlord_registration`, `letting_agent_registration` |
| Description | `description`, `key_features`, `rooms` (name, size and description) |
| Features | `parking`, `outside_space`, `heating`, `accessibility`, `electricity`, `broadband`, `year_built`, `floors` |
| Ownership and rental terms | `service_charge_per_year`, `ground_rent_per_year`, `tenure_unexpired_years`, `shared_ownership_percent`, `shared_ownership_rent`, `is_auction`, `pets_allowed`, `smokers_considered`, `sharers_considered`, `is_student_property`, `is_house_share`, `minimum_term_months`, `contract_months`, `bills_included`, `council_tax_exempt`, `furnished_extras` |
| Agent | `advertiser_type` (agent, developer or private), `developer_name`, `development_name`, `agent_name`, `branch_name`, `agent_phone`, `agent_email`, `agent_profile_url`, `agent_logo_url`, `agent_reference` |
| Media | `main_image_url`, `images`, `image_count`, `floorplans`, `floorplan_url`, `floorplan_count`, `video_urls`, `video_url`, `video_count`, `tour_3d_urls` |
| Documents | `documents`, `home_report_url`, `epc_document_url`, `brochure_url` |
| Area | `nearby_schools`, `nearby_train_stations` (name, address, distance in miles, coordinates) |
| Run | `seen_in_previous_run`, `detail_page_complete`, `scraped_at` |

The Output tab has four views: **Property listings**, **Photos, floor plans and media**, **Agent contacts** and **Rental details**. A `RUN_SUMMARY` record in the key-value store lists property URLs that are no longer listed (`unavailable_urls`) and any that could not be loaded (`failed_urls`).

### Pagination, duplicates and new-listing monitoring

- The Actor reads the whole result set of each search, 200 listings at a time, until it reaches the number S1Homes reports or your **Maximum listings**.
- **Within a run**, each listing is saved once, even if it appears in several searches.
- **Across runs**, the Actor remembers the listings it has already saved for your account and skips them by default, so scheduled runs only return and charge for **new listings**. Turn on **Include listings from previous runs** to get everything again; `seen_in_previous_run` tells you which ones you had before. The history is kept in a dataset named `s1homes-history-<your user ID>` in your own Apify account.

### Use the S1Homes scraper through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/vivid-softwares~s1homes-scotland-property-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://www.s1homes.com/property-for-sale/glasgow"}], "maxItems": 20}'
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("vivid-softwares/s1homes-scotland-property-scraper").call(run_input={
    "searchType": "toRent",
    "locations": ["glasgow", "g12"],
    "furnishedType": "furnished",
    "maxItems": 100,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(listing["price_text"], listing["address"], listing.get("date_available"))
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('vivid-softwares/s1homes-scotland-property-scraper').call({
    startUrls: [{ url: 'https://www.s1homes.com/property-for-sale?keywords=Aberdeen&locationIdentifier=aberdeen%5E61759&locationText=Aberdeen&addedToSite=7d' }],
    maxItems: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((home) => `${home.price_text} - ${home.address} (added ${home.date_added})`));
```

### Property data for AI agents and MCP

The Actor works with the [Apify MCP server](https://mcp.apify.com), so assistants such as Claude, ChatGPT or Cursor can call it as a tool. Add `vivid-softwares/s1homes-scotland-property-scraper` to your MCP configuration and ask, for example:

- "List furnished 2-bed flats to rent in Glasgow West End under £1,500 a month."
- "Which agents added the most listings in Aberdeen this week?"
- "Find detached houses near a train station in West Lothian with a floor plan."

### How much does it cost to scrape S1Homes?

This Actor uses **pay-per-event** pricing: **$14 per 1,000 property listings**, which is $0.014 for each listing saved to the dataset. You are not charged for search pages, retries, invalid input, listings that are no longer available, or listings skipped because you already received them. For example, 200 Glasgow listings cost $2.80.

### Tips

- Run your search on S1Homes first and paste the URL: every S1Homes filter is supported that way.
- Turn off **Get every photo, floor plan and video** for much faster runs. You still get every other field, all photos and nearby places, but not floor plans, videos, 3D tours, documents or the agent profile link.
- Schedule a daily run with **Added to site: Last 24 hours** (or sort by newest) to monitor new listings.

### Data limitations

- S1Homes shows the agent's phone and email on the branch's public profile page, not on each listing. The Actor returns those public branch details.
- **Private advertisers** (people selling or letting without an agent) contact S1Homes users through a form. Their contact details are never returned; these listings have `advertiser_type: private`.
- Home Report, EPC and brochure PDFs are returned when the agent supplies them with the listing. S1Homes does not always link them on the listing page.
- Some listings report more videos than they include links for; `video_count` shows S1Homes' count and `video_urls` the links available.
- Council tax, bathrooms, floor area, tenure, parking, heating, rooms and the other detail fields are only present when the advertiser provides them. S1Homes shows the rest as "Ask agent", and the Actor leaves them out.
- Full-detail runs read several listings in parallel; turn details off for the fastest runs.

### Public contact data policy

The Actor only returns contact details that S1Homes shows publicly: the listing agent's **branch phone and email** from the branch's public S1Homes profile. It never returns private advertisers' details, company staff emails that S1Homes does not display, or anything behind a contact form. If you use agent contact data for outreach, follow UK GDPR and PECR rules.

### FAQ

**Is there an official S1Homes API?** No public API is offered. This Actor gives you structured S1Homes data through the Apify API.

**Is it legal to scrape S1Homes?** The Actor collects publicly available listing information and respects S1Homes' robots.txt crawl delay. You are responsible for how you use the data, including data protection rules. If in doubt, ask a lawyer.

**Can I scrape properties by postcode?** Yes. Pick postcode districts such as EH4 or G42 in the builder, or paste an S1Homes search URL for a postcode.

**Does it get more than the first page of results?** Yes. It collects every matching listing up to your limit.

**Does it return duplicate listings?** No. Listings are de-duplicated within a run, and listings from your previous runs are skipped by default.

**Can you add a field or a custom version?** Open an issue on the Issues tab.

*This Actor is not affiliated with, endorsed by or connected to S1Homes or Newsquest.*

# Actor input Schema

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

The easiest way to use this Actor: run a search on <a href="https://www.s1homes.com" target="_blank">s1homes.com</a> with any filters, then paste the results URL here. Every matching listing is scraped, not just the first page. You can also paste property pages and area pages such as s1homes.com/property-for-sale/glasgow. Leave empty to use the search builder below.

## `searchType` (type: `string`):

Optional search builder, used instead of or as well as URLs.

## `locations` (type: `array`):

The search builder runs only when you pick at least one location. Towns, neighbourhoods, council areas and postcode districts from S1Homes. Names include their area, for example <i>Stockbridge, Edinburgh</i>.

## `radius` (type: `string`):

Include properties within this distance of each location.

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

Property type as offered by S1Homes.

## `minBedrooms` (type: `string`):

Minimum number of bedrooms.

## `maxBedrooms` (type: `string`):

Maximum number of bedrooms.

## `minBathrooms` (type: `string`):

Minimum number of bathrooms.

## `maxBathrooms` (type: `string`):

Maximum number of bathrooms.

## `minPrice` (type: `string`):

Minimum price for sale and new-home searches.

## `maxPrice` (type: `string`):

Maximum price for sale and new-home searches.

## `minRent` (type: `string`):

Minimum monthly rent for rental searches.

## `maxRent` (type: `string`):

Maximum monthly rent for rental searches.

## `addedToSite` (type: `string`):

Only listings added within this period.

## `includeSoldSTC` (type: `boolean`):

Sale searches: also return listings that are sold STC.

## `excludeUnderOffer` (type: `boolean`):

Sale searches: leave out listings that are under offer.

## `furnishedType` (type: `string`):

Rental searches only.

## `petsAllowed` (type: `boolean`):

Rental searches: only pet-friendly lets.

## `sortBy` (type: `string`):

Order of results.

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

Stop after saving this many listings. Each saved listing is one billable result.

## `scrapeDetails` (type: `boolean`):

Reads each listing in full for all photos, floor plans, videos, 3D tours and the agent profile link. Turn off for much faster runs: you still get every other field, all photos and nearby schools and stations.

## `includeImages` (type: `boolean`):

Return full-size photo URLs for each listing.

## `includeDuplicates` (type: `boolean`):

Off by default: listings you already received in an earlier run are skipped and not charged, so scheduled runs only return new listings. Turn on to get every matching listing again.

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

Apify Proxy is recommended on the Apify platform. The default datacenter proxy is fast and inexpensive.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.s1homes.com/property-for-sale?keywords=Edinburgh&locationIdentifier=edinburgh%5E20676&locationText=Edinburgh&sortedBy=date&sort=DESC"
    }
  ],
  "searchType": "forSale",
  "radius": "",
  "propertyType": "",
  "minBedrooms": "",
  "maxBedrooms": "",
  "minBathrooms": "",
  "maxBathrooms": "",
  "minPrice": "",
  "maxPrice": "",
  "minRent": "",
  "maxRent": "",
  "addedToSite": "",
  "includeSoldSTC": false,
  "excludeUnderOffer": false,
  "furnishedType": "",
  "petsAllowed": false,
  "sortBy": "price-DESC",
  "maxItems": 50,
  "scrapeDetails": true,
  "includeImages": true,
  "includeDuplicates": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `runSummary` (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://www.s1homes.com/property-for-sale?keywords=Edinburgh&locationIdentifier=edinburgh%5E20676&locationText=Edinburgh&sortedBy=date&sort=DESC"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vivid-softwares/s1homes-scotland-property-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://www.s1homes.com/property-for-sale?keywords=Edinburgh&locationIdentifier=edinburgh%5E20676&locationText=Edinburgh&sortedBy=date&sort=DESC" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vivid-softwares/s1homes-scotland-property-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 '{
  "startUrls": [
    {
      "url": "https://www.s1homes.com/property-for-sale?keywords=Edinburgh&locationIdentifier=edinburgh%5E20676&locationText=Edinburgh&sortedBy=date&sort=DESC"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vivid-softwares/s1homes-scotland-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vivid-softwares/s1homes-scotland-property-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/tk9TQPTvQb01wpMF0/builds/q2xz9uYEnpS0fJ9rF/openapi.json
