# Spareroom \[US & UK] \[only $0.95💰] Scraper (`memo23/spareroom-scraper`) Actor

💰 $0.95 per 1,000 results. Extract comprehensive UK/USA property data from SpareRoom including detailed listings, pricing, availability, and property features. Get real-time insights on rooms for rent, buddy-ups, and room wanted ads with location details, amenities, and advertiser information.

- **URL**: https://apify.com/memo23/spareroom-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 44 total users, 7 monthly users, 96.8% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.95 / 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## SpareRoom Scraper

**Unlock the Full Power of SpareRoom Flatsharing Data** - The only scraper you need to track, analyze, and understand property listings on SpareRoom with enterprise-grade reliability and precision. Whether you're monitoring price trends, tracking specific property categories, or conducting market research, our scraper delivers comprehensive, real-time insights while saving you time and resources.

*"From rooms and flatshares to entire properties, we turn SpareRoom's data into your competitive advantage."*

### Overview

The SpareRoom Scraper is your go-to tool for extracting property data from SpareRoom. Ideal for real estate agents, market analysts, and property researchers, it tracks listing details, pricing, and property information across **both SpareRoom UK (spareroom.co.uk) and SpareRoom US (spareroom.com)** — the correct region is detected automatically. With easy setup and multiple export formats (JSON, CSV), it's perfect for anyone looking to gather comprehensive property data from SpareRoom.

### What does SpareRoom Scraper do?

The SpareRoom Scraper is a powerful tool that enables you to:

#### Comprehensive Data Collection
- **Property Data**
  - Extract complete property details and specifications
  - Scrape historical listing data and price changes
  - Gather comprehensive property features and descriptions
  - Analyze property categories and location information
  - Download high-quality property images
- **Location Data**
  - Scrape individual location profiles with complete information
  - Extract location-based metrics and ratings
  - Gather location history and listing statistics
  - Access location details and transportation information

#### Advanced Scraping Capabilities
- **Pagination Handling**: Automatically navigates through all search result pages
- **Efficient Processing**: Processes only new or updated listings in subsequent runs
- **Change Detection**: Identifies price changes, status updates, and new listings
- **Scheduled Monitoring**: Set up automated runs to keep your property data current
- **Incremental Data Collection**: Build comprehensive property datasets over time

#### Works with SpareRoom UK **and** US
The scraper supports **both SpareRoom UK (spareroom.co.uk) and SpareRoom US (spareroom.com)**. The region is detected automatically from each input URL's domain, so you can scrape London and Los Angeles in the same run.

#### Flexible Scraping Options
- **Search Results**: Extract property listings by search criteria
  - UK: `https://www.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list`
  - US: `https://www.spareroom.com/flatshare/?search=Los+Angeles&mode=list`
- **Locations**: Use a bare location for quick area-based searches
  - UK postcode areas: `E1`, `E14`, `SW1`, `NW2`, `EC1`
  - US cities / ZIPs: `Los Angeles`, `New York`, `90210` — the scraper automatically resolves these to the correct site's search results
- **Individual Listings**: Target specific properties using direct URLs (UK or US)
  - Example: `https://www.spareroom.co.uk/flatshare/flatshare_detail.pl?flatshare_id=17869324&search_id=1373028759&city_id=&flatshare_type=offered&search_results=%2Fflatshare%2F%3Fsearch_id%3D1373028759%26mode%3Dlist&`

This tool is ideal for:
- UK & US real estate market research and analysis
- Property pricing analysis and competitive intelligence
- Market trend analysis across various locations
- Building property databases for business intelligence
- Tracking price trends and availability in the UK and US property markets

### Features

- **Comprehensive Data Extraction**: Detailed property information, pricing, and specifications
- **Dual Scraping Modes**: 
  - **Search Results**: Scrape all properties from search results
  - **Individual Listings**: Target specific properties using direct URLs
- **UK & US support**: Works with both spareroom.co.uk and spareroom.com — region auto-detected per input
- **Flexible Input**: Supports multiple input formats:
  - Search result URLs (UK or US)
  - UK postcode area codes (e.g. E1, E14, SW1) and US cities / ZIPs (e.g. Los Angeles, 90210) — automatically resolved to search results
  - Direct property URLs
- **Automatic Pagination**: Handles multi-page results automatically
- **Efficient Processing**: Concurrent scraping with configurable concurrency settings
- **Reliable Performance**: Built-in retry mechanisms and proxy support
- **Structured Data Export**: Download property data in JSON or CSV format for analysis

### Supported Listing Categories

The SpareRoom Scraper can extract data from three main types of listings:

1. **Buddy Ups** - Group listings where multiple people are looking for roommates together
   - Example: `https://www.spareroom.co.uk/flatshare/?search_id=1373024068&mode=list
   - Fields: `number_of_seekers`, `combined_budget`, `buddy_up_text`, etc.

2. **Rooms for Rent** - Listings where property owners/advertisers offer rooms
   - Example: `https://www.spareroom.co.uk/flatshare/london/
   - Fields: `amenities`, `rooms_in_property`, `available_from`, etc.

3. **Rooms Wanted** - Listings where individuals/groups are seeking accommodation
   - Example: `https://www.spareroom.co.uk/flatshare/?search_id=1373028759&mode=list
   - Fields: `number_of_rooms_required`, `combined_budget`, `areas_looking_in`, etc.

All three categories are available on **both SpareRoom UK and US** (on the US site these are the "rooms offered" and "roommates wanted" listings). Each category has its own unique data structure and fields, all of which are fully documented in this README.

### How to Use

#### Scraping Property Listings
To scrape property listings:
1. **Set Up**: Ensure you have an Apify account and access to the Apify platform.
2. **Configure Input**: Provide the search URL or specific property URL.
3. **Adjust Settings**: Configure options like max items, monitoring mode, and proxy settings as needed.
4. **Run the Scraper**: Execute the scraper on the Apify platform.
5. **Data Collection**: The scraper will output all available property data.

### Input Configuration

Here's an example of how to set up the input for the SpareRoom Scraper:

```json
{
    "startUrls": [
        "E14",
        "SW1",
        "https://www.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list",
        "https://www.spareroom.co.uk/flatshare/london/1234567890.html",
        "https://www.spareroom.co.uk/flatmate/flatmates.pl?search_id=1373023869&mode=list",
        "https://www.spareroom.co.uk/flatshare/flatshare_detail.pl?flatshare_id=17869324&search_id=1373028759&city_id=&flatshare_type=offered&search_results=%2Fflatshare%2F%3Fsearch_id%3D1373028759%26mode%3Dlist&"
    ],
    "maxItems": 1000,
    "monitoringMode": false,
    "maxConcurrency": 10,
    "minConcurrency": 1,
    "maxRequestRetries": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
````

#### Input Fields Explanation

- `startUrls`: Array of URLs or locations. **Both SpareRoom UK (spareroom.co.uk) and SpareRoom US (spareroom.com) are supported** — the region is detected automatically from each URL's domain. You can use:
  - **UK postcode areas**: `"E1"`, `"E14"`, `"SW1"`, `"NW2"`, `"EC1"`, etc. — automatically resolved to UK search results.
  - **US cities / ZIPs**: `"Los Angeles"`, `"New York"`, `"90210"`, etc. — automatically resolved to US (spareroom.com) search results.
  - **Search URL** (UK or US): `"https://www.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list"` or `"https://www.spareroom.com/flatshare/?search=Los+Angeles&mode=list"`
  - **Property URL** (UK or US): `"https://www.spareroom.co.uk/flatshare/london/1234567890.html"`
- `country`: How to interpret **bare location inputs** (city names / postcodes). `"auto"` (default) treats UK-postcode-shaped tokens as UK and everything else as a US city; `"UK"` / `"US"` force the region. Full URLs always auto-detect from their domain regardless of this setting.
- `maxItems`: Maximum number of listings to scrape **per entry** in `startUrls` (each search URL or location gets its own cap). Does not share one global budget across all inputs (default: 1000).
- `monitoringMode`: When enabled, only scrapes new listings compared to previous runs (default: false).
- `maxConcurrency`: Maximum number of pages processed simultaneously (default: 10).
- `minConcurrency`: Minimum number of pages processed simultaneously (default: 1).
- `maxRequestRetries`: Number of retries for failed requests (default: 100).
- `proxyConfiguration`: Proxy settings for enhanced scraping reliability.

#### Using Location Codes & City Names

Instead of copying full SpareRoom search URLs, you can put a location directly in `startUrls`:

- **UK** — use a **postcode area code** (e.g. `"E14"`, `"SW1"`). The scraper submits it to SpareRoom UK's search form and uses the resulting search results page.
- **US** — use a **city name or ZIP** (e.g. `"Los Angeles"`, `"90210"`). The scraper turns it into a spareroom.com search (`https://www.spareroom.com/flatshare/?search=Los+Angeles&mode=list`).

With `country: "auto"` (the default), postcode-shaped tokens resolve to UK and everything else to US. Set `country` to `"UK"` or `"US"` to force the region for ambiguous inputs.

**UK postcode format**: 1–2 letters followed by 1–2 digits (optional letter suffix). Examples:

| Code | Area |
|------|------|
| E1 | East London (Shoreditch, Whitechapel) |
| E14 | Canary Wharf, Limehouse, Poplar |
| SW1 | Westminster, Belgravia |
| NW2 | Cricklewood, Willesden |
| EC1 | Clerkenwell, Farringdon |
| W1 | West End, Mayfair |

You can mix UK postcodes, US cities, and full URLs (UK or US) in the same run:

```json
{
    "startUrls": ["E14", "SW1", "Los Angeles", "https://www.spareroom.com/flatshare/?search=Austin&mode=list", "https://www.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list"],
    "maxItems": 500
}
```

### Monitoring Mode

When `monitoringMode` is enabled, the scraper will only collect new listings that haven't been seen in previous runs. This is useful for:

- Tracking new properties as they come on the market
- Building a historical archive of property listings
- Monitoring specific areas for new opportunities without duplicating data

#### How Monitoring Mode Works

1. The scraper maintains a record of previously scraped property IDs
2. On subsequent runs with `monitoringMode: true`, it checks each property against this record
3. Only new properties (those not in the record) are processed and added to the output
4. The record is updated with any new property IDs found

### Output Structure

The scraper provides comprehensive information about SpareRoom listings. The output includes detailed property information, advertiser details, location data, and multimedia content. **The output schema is identical for SpareRoom UK and US** — US listings simply carry US locations and prices in USD (`$`) while UK listings use UK postcodes and GBP (`£`). Here's a breakdown of the main components:

#### Sample JSON Output For Buddy Ups

```json
{
    "room_type": "double",
    "profession": "P",
    "promoted_video": false,
    "min_age": "25",
    "wanted_advertiser_desc": "Ella, professional female 25",
    "number_of_rooms_required": "1",
    "advertiser_id": "24301371",
    "number_of_females": "1",
    "first_name": "Ella",
    "per": "pcm",
    "available": "Now",
    "pets": "N",
    "days_of_wk_available": "7 days a week",
    "areas_looking_in": [
        {
            "area_name": "Acton, Chiswick & Hammersmith",
            "area_parent_name": "West London"
        },
        {
            "area_parent_name": "West London",
            "area_name": "Hanwell & Ealing"
        }
    ],
    "amenities": {
        "ensuite": "Y",
        "living_room": "N"
    },
    "has_video": "N",
    "genders": {
        "other": 0,
        "male": 0,
        "female": 1
    },
    "contactable_by_tel": "N",
    "profession_required": "M",
    "num_areas": "2",
    "advertiser_last_online_iso": "2025-07-12T19:15:03Z",
    "expiry_date": "2025-08-09 17:13:28",
    "combined_budget": "1200",
    "gender": "Female",
    "couples": "N",
    "pets_req": "Y",
    "accreditations": [],
    "advertiser_name": "Ella",
    "ad_text": "I’m Ella, 25, and I’m moving to London this summer to start a new role in medical statistics, so I’m on the lookout for a great place to live from late July or August onwards.\n\nIdeally, I’d love to be right around Ealing Broadway, as close to the Tube and Elizabeth Line as possible for an easy commute to Slough. I’m also open to West Ealing or Acton if it’s well connected.\n\nA little about me – I’m sociable, clean, and easygoing. I love running, pilates, coffee, exploring new areas, and grabbing a drink with friends. I also enjoy a chilled night in with good food and a series to binge.\n\nI’ll be based in the office three to four days a week, so I’m looking for a comfortable spot to come home to after work. Ideally looking for an en-suite but I’m flexible on that. \n\nBudget: Preferably under £1,000pcm including bills, with a maximum of £1,200 for the right place.",
    "accom_type": "No available rooms",
    "room_size": "a double room",
    "min_age_req": "20",
    "advertiser_profile_photo_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/76/96761949.jpg",
    "available_from": "2025-07-12",
    "status": "Available",
    "ad_status": "Live",
    "summarised_location": "2 areas inc Acton...",
    "smoking": "Y",
    "advertiser_uuid": "UNQdNnEWsCPO9KZWhVAyCg",
    "ad_title": "I’m Ella, 25, and I’m moving to London th...",
    "interests": "reading, socialising, food, running, fitness, languages, coffee, meeting new people, brunch, pilates",
    "gender_req": "F",
    "advertiser_last_online": "just now",
    "bold_ad": "Y",
    "number_of_seekers": "1",
    "expiry_date_iso": "2025-08-09T16:13:28Z",
    "advertiser_verified": false,
    "room_size_const": "double",
    "max_age_req": "35",
    "photos": [
        {
            "caption": "",
            "tiny_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/tiny/96/76/96761585.jpg",
            "title_long": "Photo 1 of 6",
            "photo_id": "96761585",
            "index": 1,
            "odd_or_even": "odd",
            "square_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/76/96761585.jpg",
            "orientation": "landscape",
            "title": "Photo 1",
            "large_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/76/96761585.jpg",
            "record_number": 1,
            "standard_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/96/76/96761585.jpg",
            "thumb_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/thumbs/96/76/96761585.jpg"
        },
        {
            "index": 2,
            "photo_id": "96761589",
            "square_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/76/96761589.jpg",
            "odd_or_even": "odd",
            "caption": "",
            "title_long": "Photo 2 of 6",
            "tiny_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/tiny/96/76/96761589.jpg",
            "orientation": "portrait",
            "title": "Photo 2",
            "thumb_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/thumbs/96/76/96761589.jpg",
            "record_number": 1,
            "large_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/76/96761589.jpg",
            "standard_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/96/76/96761589.jpg"
        },
        ...
    ],
    "date_super_renewed_iso": "2025-07-12T19:45:28Z",
    "ad_type": "wanted",
    "advert_id": "17883340",
    "early_bird_required": "N",
    "thread_closed": false,
    "verified": "N",
    "new": "New Today",
    "basicInfo": {
        "id": "17883340",
        "url": "https://www.spareroom.co.uk/flatmate/flatmate_detail.pl?flatshare_id=17883340&search_id=1372522797&city_id=&summarised_location_matching_gs_id=21&flatshare_type=buddyup&search_results=%2Fflatmate%2Fflatmates.pl%3Finterested_meeting_other_seekers%3DY%26search_id%3D1372522797%26mode%3Dlist&",
        "brand": "bold",
        "type": "buddyup",
        "daysOld": "0",
        "availableNow": "1",
        "status": "new today",
        "earlyBird": "",
        "adVerified": "",
        "adProfilePhoto": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/76/96761949.jpg",
        "adPics": "6",
        "adVideo": "no",
        "title": "I’m Ella, 25, and I’m moving to London th...",
        "price": "£1,200 pcm"
    }
}
```

### Output Fields Explanation for Buddy Ups

#### Basic Information

- `room_type` (String): Type of room being offered (e.g., "double")
- `profession` (String): Profession category of the advertiser (P = Professional)
- `promoted_video` (Boolean): Indicates if the ad has a promoted video
- `min_age` (String): Minimum age of the advertiser
- `wanted_advertiser_desc` (String): Brief description of the advertiser
- `number_of_rooms_required` (String): Number of rooms needed
- `advertiser_id` (String): Unique identifier for the advertiser
- `number_of_females` (String): Number of female flatmates in the group
- `first_name` (String): Advertiser's first name
- `per` (String): Rental period (e.g., "pcm" = per calendar month)
- `available` (String): Availability status (e.g., "Now")
- `pets` (String): Indicates if advertiser has pets ("Y"/"N")
- `days_of_wk_available` (String): Days available for contact/viewing

#### Preferences

- `areas_looking_in` (Array\[Object]): Preferred locations with area details
- `amenities` (Object): Room amenities preferences
- `genders` (Object): Gender preferences for flatmates
- `contactable_by_tel` (String): Contact preference (N = Not by phone)
- `profession_required` (String): Preferred profession of flatmates (M = Mixed)

#### Availability

- `available` (String): Availability status (e.g., "Now")
- `days_of_wk_available` (String): Days available for contact/viewing
- `available_from` (String): Date available from
- `expiry_date` (String): Ad expiry date

#### Profile Details

- `advertiser_name` (String): Full name of advertiser
- `ad_text` (String): Full advertisement description
- `accom_type` (String): Type of accommodation (e.g., "No available rooms")
- `room_size` (String): Description of room size
- `min_age_req` (String): Minimum age requirement for flatmates
- `advertiser_profile_photo_url` (String): URL to advertiser's profile photo
- `status` (String): Current availability status (e.g., "Available")
- `ad_status` (String): Advertisement status (e.g., "Live")
- `summarised_location` (String): Brief location description
- `smoking` (String): Smoking preference ("Y"/"N")
- `advertiser_uuid` (String): Unique advertiser identifier
- `ad_title` (String): Advertisement title
- `interests` (String): Advertiser's interests/hobbies
- `gender_req` (String): Gender preference for flatmates
- `advertiser_last_online` (String): Human-readable last online status
- `bold_ad` (String): Indicates bold listing ("Y"/"N")
- `number_of_seekers` (String): Number of flatmates in group
- `expiry_date_iso` (String): Ad expiry date in ISO format
- `advertiser_verified` (Boolean): Advertiser verification status
- `room_size_const` (String): Room size constant (e.g., "double")
- `max_age_req` (String): Maximum age requirement for flatmates

#### Ad Metadata

- `advert_id` (String): Unique ad identifier
- `early_bird_required` (String): Early bird status ("Y"/"N")
- `thread_closed` (Boolean): Indicates if thread is closed
- `verified` (String): Verification status ("Y"/"N")
- `new` (String): New listing status
- `date_super_renewed_iso` (String): Super renewal date in ISO format
- `ad_type` (String): Type of ad (e.g., "wanted")

#### BasicInfo Object

This nested object contains summary information about the listing:

- `id` (String): Listing ID
- `url` (String): Full listing URL
- `brand` (String): Listing brand type
- `type` (String): Listing type
- `daysOld` (String): Days since listing posted
- `availableNow` (String): Immediate availability
- `status` (String): Listing status
- `earlyBird` (String): Early bird indicator
- `adVerified` (String): Ad verification status
- `adProfilePhoto` (String): Profile photo URL
- `adPics` (String): Number of photos
- `adVideo` (String): Video availability
- `title` (String): Listing title
- `price` (String): Price description

#### Photos

- `photos` (Array\[Object]): Listing photos with various size URLs
  - `tiny_url`, `square_url`, `large_url`, etc.

***

#### Sample JSON Output For Rooms for Rent

```json
{
  "ad_status": "Live",
  "available_from": "2025-08-11",
  "amenities": {
      "living_room": "shared",
      "furnishings": "furnished",
      "garden": "Y",
      "broadband": "Y",
      "balcony": "Y"
  },
  "advertiser_id": "19864218",
  "rooms_for_rent_available": "2",
  "date_super_renewed_iso": "2025-07-12T14:18:44Z",
  "longitude": "-0.0115371055361194",
  "occupants": "2",
  "smoking": "Y",
  "profession_required": "M",
  "genders": {
      "female": 1,
      "male": 1,
      "other": 0
  },
  "advertiser_last_online_iso": "2025-07-12T20:19:40Z",
  "rooms_in_property": "4",
  "status": "Available",
  "ad_text": " room  2    £1000  11/08\r\n room  1     £1110    02/10 No Couples,  long let ONLY\r\n✨ Features You'll Love:\r\n✔ Bright & Airy  Living Space – Relax in style  with natural light &  modern decor\r\n✔  Fully  Equipped  Kitchen  –  Cook effortlessly  in  a  sleek, functional space\r\n✔  Bills  Included  –  No surprises, just stress-free living\r\n✔  Prime  Location  –  Steps  from  transport, dining, and shopping\r\n✔  Stylish  Interiors  – Comfort meets practicality\r\n\r\n 💰  Secure  Your  Spot  NOW!\r\n 🔹  5-Week  Deposit  Required  –  Fully  protected  by  DPS  (Deposit  Protection  Scheme)\r\n This gem won’t last long—don’t  miss out!\r\n For  a  FAST  reply,  contact  Laura  on  WhatsApp  NOW!\r\n\r\n Thank  you!\r\n Laura\r\n",
  "language_req": "English",
  "enquiry_response": {
      "response_time_desc": "Within a day",
      "response_rate": "83",
      "response_rating": "1 - good",
      "response_time": 24
  },
  "thread_closed": false,
  "contactable_by_tel": "Y",
  "advertiser_uuid": "7wFDlcsIjs558sDLD0xp4g",
  "couples": "N",
  "expiry_date": "2025-08-09 20:47:44",
  "pets_req": "N",
  "accom_type": "2 doubles",
  "available_by_the_room": "Y",
  "advertiser_verified": false,
  "ad_type": "offered",
  "smoking_current": "N",
  "available_as_whole_property": "N",
  "number_of_males": "1",
  "date_super_renewal_available_iso": "2025-07-19T14:18:44Z",
  "broadband": "Y",
  "advertiser_type": "agent",
  "similar_ads_from_this_user": [
      {
          "description": " 3 rooms available for the whole flat E14 8AF, no couples, long let only!\r\n🆕 🛋️Features You'll Love:\r\n✔ Bright & Airy Living Space – Relax in style with natural light & modern decor\r\n✔ Fully Equipped Kitchen – Cook effortlessly in a sleek, functional space\r\n✔ Private Garden Retreat – Your own outdoor oasis for fresh air & tranquility\r\n✔ Bills Included – No surprises, just stress-free living\r\n✔ Prime Location – Steps from transport, dining, and shopping\r\n✔ Stylish Interiors – Comfort meets practicality\r\n\r\n💰 Secure Your Spot NOW!\r\n🔹 5-Week Deposit Required – Fully protected by DPS (Deposit Protection Scheme) This gem won’t last long—don’t miss out!\r\n For a FAST reply, contact Laura on WhatsApp NOW!\r\n\r\n+44 7465740744\r\n\r\nThank you!\r\nLaura 😊",
          "type": "offered",
          "videos": {
              "items": [],
              "total": 0
          },
          "advertiser": {
              "role": "agent",
              "last_name": "Pisoria",
              "uuid": "7wFDlcsIjs558sDLD0xp4g",
              "verified": false,
              "company": {
                  "name": "Pisoria Ltd"
              },
              "first_name": "Laura",
              "telephone_number": "+44 7465740744",
              "profile_photo": {
                  "url": "https://photos2.spareroom.co.uk/images/flatshare/listings/unmodified/82/15/82155690.jpg",
                  "id": "82155690"
              }
          },
          "id": "17881804",
          "title": "Canary  rooms,Whole flat bills incl,garden,cleaner",
          "display_state": "bold",
          "property": {
              "whole": false,
              "rent": {
                  "max": {
                      "amount": 25400,
                      "currency": "gbp"
                  },
                  "min": {
                      "currency": "gbp",
                      "amount": 25400
                  },
                  "duration": "pw"
              },
              "total_rooms": 3,
              "type": "Flat",
              "rooms": {
                  "total": 3,
                  "items": [
                      {
                          "status": "available",
                          "rent": {
                              "charge": {
                                  "currency": "gbp",
                                  "amount": 25400
                              },
                              "duration": "pw"
                          },
                          "size": "double",
                          "ensuite": false,
                          "id": "17996465",
                          "deposit": {
                              "currency": "gbp",
                              "amount": 0
                          }
                      },
                      {
                          "id": "17996466",
                          "deposit": {
                              "currency": "gbp",
                              "amount": 0
                          },
                          "status": "available",
                          "rent": {
                              "duration": "pw",
                              "charge": {
                                  "amount": 25400,
                                  "currency": "gbp"
                              }
                          },
                          "ensuite": false,
                          "size": "double"
                      },
                      {
                          "rent": {
                              "charge": {
                                  "amount": 25400,
                                  "currency": "gbp"
                              },
                              "duration": "pw"
                          },
                          "status": "available",
                          "ensuite": false,
                          "size": "double",
                          "id": "17996467",
                          "deposit": {
                              "amount": 0,
                              "currency": "gbp"
                          }
                      }
                  ]
              },
              "location": {
                  "geometry": {
                      "location": {
                          "latitude": "51.509676634259",
                          "longitude": "-0.0285890499486314"
                      }
                  },
                  "street_name": "Trinidad House",
                  "neighbourhood": "Docklands",
                  "postal_code": "E14"
              },
              "address_validated": false
          },
          "promoted_video": false,
          "free_to_contact": true,
          "date_instated": "2025-07-11T11:22:04Z",
          "photos": {
              "items": [
                  {
                      "advert": {
                          "id": "17881804"
                      },
                      "status": "L",
                      "user": {
                          "id": "19864218"
                      },
                      "id": "96750111",
                      "caption": "",
                      "url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/75/96750111.jpg"
                  },
                  {
                      "advert": {
                          "id": "17881804"
                      },
                      "status": "L",
                      "user": {
                          "id": "19864218"
                      },
                      "id": "96750110",
                      "url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/75/96750110.jpg",
                      "caption": ""
                  },
                  ...
              ],
              "total": 14
          },
          "date_available": "2025-09-07T23:00:00Z"
      },
      ...
  ],
  "advertiser_profile_photo_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/82/15/82155690.jpg",
  "lang_id": "26",
  "photos": [
      {
          "photo_id": "96642673",
          "large_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/64/96642673.jpg",
          "thumb_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/thumbs/96/64/96642673.jpg",
          "tiny_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/tiny/96/64/96642673.jpg",
          "index": 1,
          "odd_or_even": "odd",
          "square_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/64/96642673.jpg",
          "record_number": 1,
          "orientation": "landscape",
          "title": "Photo 1",
          "caption": "",
          "standard_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/96/64/96642673.jpg",
          "title_long": "Photo 1 of 9"
      },
      {
          "large_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/64/96642667.jpg",
          "photo_id": "96642667",
          "thumb_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/thumbs/96/64/96642667.jpg",
          "tiny_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/tiny/96/64/96642667.jpg",
          "index": 2,
          "odd_or_even": "odd",
          "record_number": 1,
          "square_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/64/96642667.jpg",
          "orientation": "landscape",
          "title": "Photo 2",
          "caption": "",
          "standard_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/96/64/96642667.jpg",
          "title_long": "Photo 2 of 9"
      },
      ...
  ],
  "ad_title": "🛋️ FEEL HOME!living,bills incl,cleaner,quite area",
  "parking": "N",
  "pets": "N",
  "dss": "N",
  "nearest_station": {
      "no_of_mins": "5",
      "station_name": "Canary Wharf",
      "no_of_mins_by": "walk"
  },
  "featured": "N",
  "expiry_date_iso": "2025-08-09T19:47:44Z",
  "new": "Super Renewed Today",
  "days_of_wk_available": "7 days a week",
  "min_term": "12",
  "max_rent": "256",
  "advertiser_last_online": "just now",
  "advertiser_name": "Laura",
  "lang_id_req": "26",
  "bold_ad": "Y",
  "verified": "N",
  "neighbourhood_name": "Canary Wharf",
  "bills_inc": "Yes",
  "per": "pw",
  "postcode": "E14",
  "has_video": "N",
  "advert_id": "17869324",
  "rent_options": "room",
  "short_lets_considered": "N",
  "available": "11 Aug 2025",
  "property_type": "Flat",
  "number_of_females": "1",
  "company_name": "Pisoria Ltd",
  "accreditations": [],
  "latitude": "51.5133905355057",
  "advertiser_type_const": "agent",
  "min_rent": "230",
  "promoted_video": false,
  "rooms": [
      {
          "room_furnishings": "furnished",
          "room_per": "pw",
          "room_type": "double",
          "security_deposit": "0.00",
          "room_status": "available",
          "ensuite": null,
          "room_price": "230"
      },
      {
          "room_status": "available",
          "ensuite": null,
          "room_price": "256",
          "room_furnishings": "furnished",
          "room_per": "pw",
          "room_type": "double",
          "security_deposit": "0.00"
      }
  ],
  "early_bird_required": "N",
  "basicInfo": {
      "id": "17869324",
      "url": "https://www.spareroom.co.uk/flatshare/flatshare_detail.pl?flatshare_id=17869324&search_id=1373017160&city_id=&flatshare_type=offered&search_results=%2Fflatshare%2F%3Fsearch_id%3D1373017160%26mode%3Dlist&",
      "brand": "bold",
      "type": "offered",
      "daysOld": "0",
      "availableNow": "0",
      "status": "boosted",
      "earlyBird": "",
      "adVerified": "",
      "adProfilePhoto": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/82/15/82155690.jpg",
      "adPics": "9",
      "adVideo": "no",
      "neighbourhood": "Canary Wharf",
      "postcode": "E14",
      "scp": "",
      "propertyType": "flat",
      "propertyTypeMore": "",
      "roomsInProperty": "4",
      "advertiserRole": "agent",
      "title": "🛋️ FEEL HOME!living,bills incl,cleaner,quite area",
      "price": "£230 - £256\n          pw\n      \n    \n    \n       - bills inc."
  }
}
```

### Output Fields Explanation for Rooms for Rent

#### Basic Information

- `ad_status` (String): Current advertisement status ("Live", "Expired", etc.)
- `available_from` (String): Date when the room becomes available
- `advertiser_id` (String): Unique identifier for the advertiser
- `rooms_for_rent_available` (String): Number of rooms currently available
- `date_super_renewed_iso` (String): Timestamp of last super renewal in ISO format
- `longitude` (String): Geographical longitude of the property
- `occupants` (String): Current number of occupants in the property
- `smoking` (String): Smoking policy ("Y" = allowed, "N" = not allowed)
- `profession_required` (String): Profession requirements for tenants
- `advertiser_last_online_iso` (String): Timestamp when advertiser was last online
- `rooms_in_property` (String): Total number of rooms in the property
- `status` (String): Availability status ("Available", "Taken", etc.)

#### Amenities

- `amenities` (Object): Property amenities
  - `living_room` (String): Type of living room ("shared", "private")
  - `furnishings` (String): Furnishing status ("furnished", "unfurnished")
  - `garden` (String): Garden availability ("Y" = yes)
  - `broadband` (String): Broadband availability
  - `balcony` (String): Balcony availability

#### Occupant Demographics

- `genders` (Object): Gender distribution of current occupants
  - `female` (Integer): Number of female occupants
  - `male` (Integer): Number of male occupants
  - `other` (Integer): Number of other gender occupants

#### Advertisement Content

- `ad_text` (String): Full description of the listing
- `language_req` (String): Language requirements for tenants
- `ad_title` (String): Title of the advertisement
- `advertiser_name` (String): Name of the advertiser
- `company_name` (String): Company name if advertiser is an agent

#### Communication & Response

- `enquiry_response` (Object): Response metrics
  - `response_time_desc` (String): Human-readable response time
  - `response_rate` (String): Percentage of inquiries responded to
  - `response_rating` (String): Quality rating of responses
  - `response_time` (Integer): Average response time in hours
- `contactable_by_tel` (String): Contactable by telephone ("Y" = yes)
- `days_of_wk_available` (String): Days available for contact/viewing

#### Property Details

- `nearest_station` (Object): Closest transportation station
  - `no_of_mins` (String): Travel time to station
  - `station_name` (String): Name of station
  - `no_of_mins_by` (String): Travel method ("walk", "drive")
- `property_type` (String): Type of property ("Flat", "House")
- `postcode` (String): Postal code of property
- `neighbourhood_name` (String): Neighborhood name
- `latitude` (String): Geographical latitude of property
- `bills_inc` (String): Bills inclusion status ("Yes", "No")

#### Rental Terms

- `expiry_date` (String): Advertisement expiry date
- `expiry_date_iso` (String): Expiry date in ISO format
- `min_term` (String): Minimum rental term in months
- `max_rent` (String): Maximum rent amount
- `min_rent` (String): Minimum rent amount
- `per` (String): Rental period ("pw" = per week)
- `rent_options` (String): Rental options ("room", "whole property")
- `short_lets_considered` (String): Short-term rentals considered
- `available` (String): Availability timeframe

#### Room Details

- `rooms` (Array\[Object]): Details of available rooms
  - `room_furnishings` (String): Room furnishings
  - `room_per` (String): Rental period for room
  - `room_type` (String): Type of room ("double", "single")
  - `security_deposit` (String): Security deposit amount
  - `room_status` (String): Availability status of room
  - `room_price` (String): Price for the room

#### Advertiser Information

- `advertiser_uuid` (String): Unique advertiser identifier
- `advertiser_verified` (Boolean): Advertiser verification status
- `advertiser_type` (String): Type of advertiser ("agent", "private")
- `advertiser_type_const` (String): Advertiser type constant
- `advertiser_profile_photo_url` (String): URL to advertiser's profile photo

#### Additional Features

- `featured` (String): Featured listing status
- `new` (String): New listing status
- `bold_ad` (String): Premium/bold listing status
- `verified` (String): Verification status
- `has_video` (String): Video availability
- `promoted_video` (Boolean): Promoted video status
- `thread_closed` (Boolean): Indicates if discussion thread is closed
- `available_by_the_room` (String): Available by individual room
- `available_as_whole_property` (String): Available as entire property

#### Tenant Preferences

- `couples` (String): Couples allowed ("Y" = yes)
- `pets_req` (String): Pets required? ("Y" = yes)
- `pets` (String): Pets allowed? ("Y" = yes)
- `dss` (String): DSS accepted? ("Y" = yes)
- `accom_type` (String): Type of accommodation
- `lang_id_req` (String): Language ID requirement
- `parking` (String): Parking availability
- `early_bird_required` (String): Early bird special

#### Similar Listings

- `similar_ads_from_this_user` (Array\[Object]): Similar ads from same advertiser
  - `description` (String): Ad description
  - `type` (String): Ad type ("offered")
  - `id` (String): Ad ID
  - `title` (String): Ad title
  - `date_available` (String): Availability date
  - `property` (Object): Property details
    - `location` (Object): Property location details
    - `rooms` (Array\[Object]): Room details

#### Photos

- `photos` (Array\[Object]): Property photos
  - `photo_id` (String): Unique photo ID
  - `large_url` (String): URL to large size photo
  - `thumb_url` (String): URL to thumbnail size
  - `tiny_url` (String): URL to tiny size
  - `square_url` (String): URL to square crop
  - `orientation` (String): Photo orientation
  - `title` (String): Photo title
  - `caption` (String): Photo caption

#### BasicInfo Summary

- `basicInfo` (Object): Key ad summary
  - `id` (String): Listing ID
  - `url` (String): Direct listing URL
  - `brand` (String): Branding type
  - `type` (String): Listing type
  - `daysOld` (String): Days since listing posted
  - `availableNow` (String): Immediate availability
  - `status` (String): Listing status
  - `adProfilePhoto` (String): Profile photo URL
  - `adPics` (String): Number of photos
  - `title` (String): Listing title
  - `price` (String): Price description

***

#### Sample JSON Output For Rooms Wanted

```json
{
  "min_term": "12",
  "advertiser_last_online": "just now",
  "number_of_rooms_required": "2",
  "gender": "2 Females",
  "verified_by": {
      "additional_checks": [
          "phone",
          "email"
      ],
      "photo_checks": [
          "name",
          "date_of_birth"
      ]
  },
  "advertiser_name": "Seren EVANS",
  "nationality": "British",
  "expiry_date_iso": "2025-08-09T20:26:17Z",
  "new": "New Today",
  "room_size_const": "2_rooms",
  "dss": "N",
  "min_age": "23",
  "days_of_wk_available": "7 days a week",
  "min_age_req": "21",
  "number_of_females": "2",
  "promoted_video": false,
  "max_age_req": "26",
  "early_bird_required": "N",
  "last_name": "EVANS",
  "accreditations": [],
  "interests": "travelling, sports, socialising, food, running, walking, yoga, netflix, pubs, outdoors, eating out, gigs, culture, meeting new people, being active",
  "verified": "Y",
  "per": "pcm",
  "summarised_location": "2 areas inc Clapham...",
  "bold_ad": "Y",
  "available": "20 Aug 2025",
  "has_video": "N",
  "advert_id": "17883583",
  "status": "Available",
  "profession_required": "P",
  "smoking": "Y",
  "genders": {
      "other": 0,
      "male": 0,
      "female": 2
  },
  "wanted_advertiser_desc": "2 professional females 23",
  "advertiser_last_online_iso": "2025-07-12T20:48:07Z",
  "language": "English",
  "advertiser_uuid": "opehUVXLrn0XMb_1UCJGrw",
  "expiry_date": "2025-08-09 21:26:17",
  "couples": "N",
  "ad_text": "Hi! My friend and I are looking for a house share in SW London from end of August/1st September. Hoping for rent and bills to be under or around £1k\r\n\r\nWe’re recent grads with jobs starting around August/September — both tidy, respectful, and easy to live with. Ideally we’d love to live with other girls (but not a dealbreaker).\r\n\r\nWe're social and would love to be in a house where we can all go out and socialise together but at the same time we like a chilled evening in too.\r\n\r\nWe're hoping to find somewhere within a 5–10 minute walk from a tube station — Tooting Broadway/Bec would be ideal \r\n\r\nLet us know if you think we could be a good fit — happy to come for a viewing or chat! ",
  "room_type": "single",
  "room_size": "2 rooms",
  "contactable_by_tel": "N",
  "thread_closed": false,
  "available_from": "2025-08-20",
  "areas_looking_in": [
      {
          "area_parent_name": "South West London",
          "area_name": "Clapham, Battersea & Wandsworth"
      },
      {
          "area_name": "Tooting & Streatham",
          "area_parent_name": "South West London"
      }
  ],
  "num_areas": "2",
  "ad_status": "Live",
  "advertiser_id": "24288395",
  "amenities": {
      "living_room": "N",
      "roomfurnishings": "furnished"
  },
  "date_super_renewed_iso": "2025-07-12T20:48:24Z",
  "advertiser_profile_photo_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/72/96727157.jpg",
  "number_of_seekers": "2",
  "profession": "P",
  "first_name": "Seren",
  "ad_title": "Looking for 2 rooms in SW london",
  "combined_budget": "2000",
  "pets": "N",
  "buddy_up_text": "We are two girls looking to buddy up with 1/2/3 more girls (or a nice guy lol). We're both looking to socialise with our housemates, but also appreciate each others space and down time. ",
  "lang_id": "26",
  "photos": [
      {
          "thumb_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/thumbs/96/76/96762765.jpg",
          "tiny_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/tiny/96/76/96762765.jpg",
          "index": 1,
          "photo_id": "96762765",
          "large_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/76/96762765.jpg",
          "title": "Photo 1",
          "orientation": "landscape",
          "standard_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/96/76/96762765.jpg",
          "title_long": "Photo 1 of 6",
          "caption": "",
          "square_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/76/96762765.jpg",
          "record_number": 1,
          "odd_or_even": "odd"
      },
      {
          "tiny_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/tiny/96/76/96763172.jpg",
          "thumb_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/thumbs/96/76/96763172.jpg",
          "index": 2,
          "large_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/large/96/76/96763172.jpg",
          "photo_id": "96763172",
          "orientation": "portrait",
          "title": "Photo 2",
          "standard_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/96/76/96763172.jpg",
          "title_long": "Photo 2 of 6",
          "caption": "",
          "square_url": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/76/96763172.jpg",
          "record_number": 1,
          "odd_or_even": "odd"
      },
      ...
  ],
  "accom_type": "No available rooms",
  "pets_req": "Y",
  "ad_type": "wanted",
  "smoking_current": "N",
  "max_age": "23",
  "advertiser_verified": true,
  "basicInfo": {
      "id": "17883583",
      "url": "https://www.spareroom.co.uk/flatmate/flatmate_detail.pl?flatshare_id=17883583&search_id=1373023869&city_id=&summarised_location_matching_gs_id=14&flatshare_type=wanted&search_results=%2Fflatmate%2Fflatmates.pl%3Fsearch_id%3D1373023869%26mode%3Dlist&",
      "brand": "bold",
      "type": "wanted",
      "daysOld": "0",
      "availableNow": "0",
      "status": "new today",
      "earlyBird": "",
      "adVerified": "yes",
      "adProfilePhoto": "https://photos2.spareroom.co.uk/images/flatshare/listings/square/96/72/96727157.jpg",
      "adPics": "6",
      "adVideo": "no",
      "title": "Looking for 2 rooms in SW london",
      "price": "£2,000 pcm"
  }
}
```

### Output Fields Explanation for Rooms Wanted

#### Basic Information

- `min_term` (String): Minimum rental term in months
- `advertiser_last_online` (String): Human-readable time since advertiser was last online
- `number_of_rooms_required` (String): Number of rooms being sought
- `gender` (String): Gender composition of seekers
- `advertiser_name` (String): Name of the advertiser
- `nationality` (String): Nationality of seekers
- `expiry_date_iso` (String): Advertisement expiry date in ISO format
- `new` (String): New listing status
- `room_size_const` (String): Room size constant
- `dss` (String): DSS accepted? ("Y" = yes)
- `min_age` (String): Minimum age of seekers
- `days_of_wk_available` (String): Days available for contact/viewing

#### Verification & Accreditation

- `verified_by` (Object): Verification methods used
  - `additional_checks` (Array\[String]): Additional verification checks performed
  - `photo_checks` (Array\[String]): Photo verification checks performed
- `accreditations` (Array\[String]): Professional accreditations
- `verified` (String): Verification status ("Y" = verified)
- `advertiser_verified` (Boolean): Advertiser verification status

#### Seeker Preferences

- `min_age_req` (String): Minimum age requirement for roommates
- `max_age_req` (String): Maximum age requirement for roommates
- `number_of_females` (String): Number of female seekers
- `profession_required` (String): Profession requirements for roommates
- `couples` (String): Couples allowed ("Y" = yes)
- `pets_req` (String): Pets required? ("Y" = yes)
- `smoking` (String): Smoking policy ("Y" = allowed)
- `smoking_current` (String): Current smoking status of seekers

#### Location Preferences

- `summarised_location` (String): Summary of preferred locations
- `areas_looking_in` (Array\[Object]): Specific areas being considered
  - `area_parent_name` (String): Parent area name
  - `area_name` (String): Specific area name
- `num_areas` (String): Number of areas being considered

#### Budget & Accommodation

- `per` (String): Rental period ("pcm" = per calendar month)
- `combined_budget` (String): Total budget for all rooms
- `room_type` (String): Type of room wanted ("single", "double")
- `room_size` (String): Size of room wanted
- `accom_type` (String): Type of accommodation wanted

#### Advertisement Content

- `ad_text` (String): Full description of what is wanted
- `ad_title` (String): Title of the advertisement
- `buddy_up_text` (String): Description of ideal roommate situation
- `wanted_advertiser_desc` (String): Brief description of seekers
- `interests` (String): Interests of seekers
- `first_name` (String): First name of primary seeker
- `last_name` (String): Last name of primary seeker

#### Contact Information

- `contactable_by_tel` (String): Contactable by telephone ("N" = no)
- `language` (String): Primary language
- `lang_id` (String): Language ID

#### Photos

- `photos` (Array\[Object]): Photos of seekers
  - `photo_id` (String): Unique photo ID
  - `thumb_url` (String): URL to thumbnail size
  - `tiny_url` (String): URL to tiny size
  - `large_url` (String): URL to large size
  - `square_url` (String): URL to square crop
  - `orientation` (String): Photo orientation
  - `title` (String): Photo title
  - `caption` (String): Photo caption

#### BasicInfo Summary

- `basicInfo` (Object): Key ad summary
  - `id` (String): Listing ID
  - `url` (String): Direct listing URL
  - `brand` (String): Branding type
  - `type` (String): Listing type ("wanted")
  - `daysOld` (String): Days since listing posted
  - `availableNow` (String): Immediate availability
  - `status` (String): Listing status
  - `adProfilePhoto` (String): Profile photo URL
  - `adPics` (String): Number of photos
  - `title` (String): Listing title
  - `price` (String): Price description

***

### Explore More Scrapers

If you found this Apify Truth Social Profile Scraper useful, be sure to check out our other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/B9QxpGHylsP0guHns/issues) section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>
- Email: muhamed.didovic@gmail.com

# Actor input Schema

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

What to scrape. Accepts: full SpareRoom URLs (UK spareroom.co.uk or US spareroom.com — search or listing pages), UK postcode area codes (e.g. E1, E14, SW1), or US city names / ZIPs (e.g. Los Angeles, 90210). Bare locations are resolved to search results automatically; the country is detected from the URL domain, or set the Country field below for bare locations.

## `country` (type: `string`):

How to interpret bare location inputs (city names / postcodes) in Start URLs. 'Auto' treats UK-postcode-shaped tokens (E1, SW1) as UK and everything else as a US city. Full URLs always auto-detect from their domain regardless of this setting.

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

Maximum listings scraped for each entry in startUrls (per search URL or location code), not a single shared limit across all inputs.

## `monitoringMode` (type: `boolean`):

If checked, it will only scrape newly listings compared to what has been scraped in previous runs.

## `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.

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

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list"
  ],
  "country": "auto",
  "maxItems": 1000,
  "monitoringMode": false,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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": [
        "https://www.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/spareroom-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.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/spareroom-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.spareroom.co.uk/flatshare/?search_id=1373017160&mode=list"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/spareroom-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Spareroom [US & UK] [only $0.95💰] Scraper",
        "description": "💰 $0.95 per 1,000 results. Extract comprehensive UK/USA property data from SpareRoom including detailed listings, pricing, availability, and property features. Get real-time insights on rooms for rent, buddy-ups, and room wanted ads with location details, amenities, and advertiser information.",
        "version": "0.0",
        "x-build-id": "qdWzkwca1mxb7CTTi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~spareroom-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-spareroom-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~spareroom-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-spareroom-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~spareroom-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-spareroom-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "What to scrape. Accepts: full SpareRoom URLs (UK spareroom.co.uk or US spareroom.com — search or listing pages), UK postcode area codes (e.g. E1, E14, SW1), or US city names / ZIPs (e.g. Los Angeles, 90210). Bare locations are resolved to search results automatically; the country is detected from the URL domain, or set the Country field below for bare locations.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country (for bare location inputs)",
                        "enum": [
                            "auto",
                            "UK",
                            "US"
                        ],
                        "type": "string",
                        "description": "How to interpret bare location inputs (city names / postcodes) in Start URLs. 'Auto' treats UK-postcode-shaped tokens (E1, SW1) as UK and everything else as a US city. Full URLs always auto-detect from their domain regardless of this setting.",
                        "default": "auto"
                    },
                    "maxItems": {
                        "title": "Maximum items per start URL",
                        "type": "integer",
                        "description": "Maximum listings scraped for each entry in startUrls (per search URL or location code), not a single shared limit across all inputs.",
                        "default": 1000
                    },
                    "monitoringMode": {
                        "title": "Run in monitoring mode where only newly listings compared to previous runs will be scraped",
                        "type": "boolean",
                        "description": "If checked, it will only scrape newly listings compared to what has been scraped in previous runs.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "type": "integer",
                        "description": "Maximum number of pages that can be processed at the same time.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min Concurrency",
                        "type": "integer",
                        "description": "Minimum number of pages that will be processed at the same time.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "type": "integer",
                        "description": "Number of times the crawler will retry a failed request before giving up.",
                        "default": 100
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
