SpotAHome Scraper | Fast & Reliable avatar

SpotAHome Scraper | Fast & Reliable

Pricing

from $0.70 / 1,000 property listings

Go to Apify Store
SpotAHome Scraper | Fast & Reliable

SpotAHome Scraper | Fast & Reliable

Extract Spotahome rental listings at scale with rich property detail, availability data, landlord signals, media, booking context, and flexible market filters. Built for enterprise-grade rental intelligence, market monitoring, and automated analytics pipelines.

Pricing

from $0.70 / 1,000 property listings

Rating

0.0

(0)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

2 days ago

Last modified

Share

Spotahome Scraper

Slug: fatihtahta/spotahome-scraper

Overview

Spotahome Scraper collects structured rental listing data from Spotahome, including listing identity, title, description, price, availability, location, property details, booking signals, media references, landlord metadata, and source context. Spotahome is a furnished rental marketplace where public listing data is useful for understanding rental supply, pricing, availability, and market composition across supported cities. The actor turns rental search results into repeatable JSON records that can be used in analytics, enrichment, monitoring, and operational reporting workflows. It is designed for automated, recurring data acquisition where consistent inputs and normalized outputs are important. Results reflect the publicly available data returned for the selected search scope at run time.

Why Use This Actor

  • Market research and analytics teams: collect normalized rental listing data for market intelligence, price analysis, availability tracking, and location-level reporting.
  • Product and content teams: enrich internal rental catalogs, city pages, comparison experiences, or content workflows with current public listing attributes.
  • Developers and data engineering teams: feed structured extraction output into downstream systems, warehouses, search indexes, and scheduled data acquisition pipelines.
  • Lead generation and enrichment teams: identify relevant rental properties, landlords, property formats, and public listing attributes for enrichment pipelines.
  • Monitoring and competitive tracking teams: track supply, pricing, listing quality signals, and availability changes across target rental markets.

Common Use Cases

  • Market intelligence: monitor rental supply, monthly pricing, availability dates, location coverage, property mix, and listing quality indicators.
  • Lead generation: build targeted lists of public rental listings and associated landlord identifiers for follow-up workflows.
  • Competitive monitoring: compare listing volume, pricing, amenities, property types, and trust signals across cities or rental segments.
  • Catalog and directory building: populate internal real estate databases with structured public listing records.
  • Data enrichment: add current public rental attributes to CRM, BI, analytics, or inventory datasets.
  • Recurring reporting: schedule periodic runs for dashboards, alerts, trend analysis, and operational reporting.

Quick Start

  1. Enter the location you want to search, such as a city, neighborhood, or rental market supported by Spotahome.
  2. Optionally add filters such as min_price, max_price, property_type, amenities, suitability, included bills, dates, or listing quality signals.
  3. Set a small limit for the first validation run, such as 25 or 50 records.
  4. Run the actor in Apify Console.
  5. Inspect the first dataset records to confirm that the fields, identifiers, and nested objects match your use case.
  6. Increase the limit, adjust filters, or schedule recurring runs once the output is verified.

Input Parameters

The actor requires one search location; all other fields are optional filters, sorting controls, or collection limits.

ParameterTypeDescriptionDefault
locationstringRequired search location, such as a city, neighborhood, or supported rental market. Example: Barcelona.
min_priceintegerMinimum monthly rental price to save. Use EUR as the practical pricing unit for Spotahome listings.
max_priceintegerMaximum monthly rental price to save. Use EUR as the practical pricing unit for Spotahome listings.
bed_typearray of stringsBed arrangements to include. Allowed values: single_bed, double_bed, twin_beds. Leave empty to include all bed setups.
property_typearray of stringsRental formats to include. Allowed values: apartments, studios, rooms_shared, student_residences. Leave empty to include all supported property types.
amenitiesarray of stringsAmenities that matching listings should include. Allowed values: air_conditioning, heating, washing_machine, oven, dishwasher, with_desk, balcony, elevator.
suitabilityarray of stringsRenter profile or household suitability signals. Allowed values: couples, pets, students, professionals.
included_billsarray of stringsBills or services that should be included in the rental cost. Allowed values: wifi, electricity, water, gas.
checkin_date_daystringDesired move-in date. Accepted formats: YYYY-MM-DD or DD/MM/YYYY. Used with checkout_date_day.
checkout_date_daystringDesired move-out date. Applies when checkin_date_day is also set. Accepted formats follow the same date style as check-in.
availability_variancestringOptional date flexibility around both check-in and check-out dates. Allowed values: 1_week, 2_week, 3_week. Ignored unless both dates are set.
sort_bystringResult ordering before records are saved. Allowed values: best_match, lowest_price, newest.best_match
private_bathroombooleanOnly save listings that indicate a private bathroom.false
spotahome_checkedbooleanOnly save listings marked as checked by Spotahome.false
no_depositbooleanOnly save listings that do not require a security deposit.false
limitintegerMaximum number of listings to save for the run. Leave empty to collect as many matching listings as available within the run scope.

Choosing Inputs

Start with a clear location, because it defines the rental market and the overall result scope. Use price, property type, bed type, amenity, suitability, included bill, bathroom, deposit, and Spotahome-checked filters when you need a targeted dataset; leave optional filters empty when the goal is broader discovery. Availability dates should be supplied as a pair: set both checkin_date_day and checkout_date_day, then add availability_variance only when date flexibility matters. Use sort_by to align collection with your workflow, such as best-match discovery, lowest-price review, or recently listed monitoring. Begin with a small limit to validate the output shape, then increase it once the dataset matches your expectations.

Example Inputs

Broad Discovery In Barcelona

{
"location": "Barcelona",
"property_type": ["rooms_shared"],
"sort_by": "best_match",
"limit": 50
}
{
"location": "Madrid",
"min_price": 700,
"max_price": 1400,
"property_type": ["apartments", "studios"],
"amenities": ["washing_machine", "heating"],
"sort_by": "lowest_price",
"limit": 75
}
{
"location": "Valencia",
"property_type": ["rooms_shared", "student_residences"],
"suitability": ["students"],
"included_bills": ["wifi", "water"],
"checkin_date_day": "2026-09-01",
"checkout_date_day": "2027-01-31",
"availability_variance": "2_week",
"limit": 100
}

Output

Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

The dataset contains one primary public record shape: property_listing for Spotahome rental listings.

Record Envelope And Stable Identifiers

Each record represents one public Spotahome rental listing with a stable record_type, record_id, and grouped real estate objects for source context, listing identity, pricing, location, property details, availability, media, landlord relationships, metrics, and source-specific attributes. The recommended idempotency key is record_id; listing.listing_id, entity.url, and source_context.fingerprint can support secondary validation across repeated runs.

Examples

Example: Spotahome Rental Listing

{
"record_type": "property_listing",
"record_id": "972206",
"source_context": {
"total_markers": 4595,
"source_url": "https://www.spotahome.com/s/barcelona--spain/for-rent:rooms",
"seed_id": "8307012beefb3073198e",
"seed_type": "search",
"seed_value": "Barcelona",
"page_index": 1,
"fingerprint": "5e3ef37335bac80f421f",
"listing_url": "https://www.spotahome.com/barcelona/for-rent:rooms/972206",
"source_name": "Spotahome",
"source_domain": "spotahome.com"
},
"entity": {
"title": "Room in a shared 3-bedroom flat in El Raval, Barcelona",
"description": "Looking for a shared space in the vibrant El Raval neighborhood of Barcelona? This exterior room is part of a 3-bedroom apartment.",
"url": "https://www.spotahome.com/barcelona/for-rent:rooms/972206",
"external_ids": {
"spotahome_listing_id": "972206"
}
},
"listing": {
"listing_id": "972206",
"listing_type": "rental",
"deal_type": "rent",
"spotahome_checked": true,
"best_choice": false,
"favorite": false
},
"pricing": {
"price": "630-700",
"price_text": "630-700",
"price_min": 630,
"currency": "EUR",
"bills_included": "all",
"no_security_deposit": false,
"deposit_protection": false
},
"location": {
"street": "Carrer de les Penedides",
"postal_code": "08001",
"city": "Barcelona",
"market_city": "barcelona",
"coordinates": {
"longitude": 2.1738070149258406,
"latitude": 41.37953883861105
},
"address_coordinates": {
"longitude": 2.17395,
"latitude": 41.37948
}
},
"property": {
"property_type": "room_shared",
"floor_area_sqm": 0,
"room_area_sqm": 0,
"bathrooms": 1,
"bedrooms": 3
},
"availability": {
"available_from": "2027-02-01T00:00:00+00:00",
"instant_booking": false,
"permanent_contract_allowed": false
},
"media": {
"main_image_url": "https://photos.spotahome.com/smw_768/6693d1da7864bdbc806819b5cebc6b515c3abb456f9a3a4adc427ee8.jpg",
"photo_ids": [
"6693d1da7864bdbc806819b5cebc6b515c3abb456f9a3a4adc427ee8",
"190dbf6e91de8be9faa0c094f0d77630de774620cc7bb0df3f1d7ca3"
],
"other_property_photo_ids": [
"35c3910116c2204a8df9901dedc8dd8a32fe866f25c0fa56a98750a9"
]
},
"relationships": {
"landlord": {
"landlord_id": "d7854809-8fcb-4e47-897d-925573869267",
"scoring": {
"score": 430,
"total_bookings_closed": 171
}
}
},
"metrics": {
"landlord_score": 430,
"landlord_total_bookings_closed": 171
},
"attributes": {
"feature_flags": [
"Any",
"Professionals",
"Students",
"Furnished",
"Exterior",
"Equipped kitchen",
"Balcony or terrace",
"Oven",
"Desk",
"Chest of drawers",
"Shelving",
"Independent key",
"Built-in wardrobe",
"Window",
"Electricity",
"Water",
"Gas",
"Wifi",
"Double Bed"
],
"unmapped_feature_flags": {
"3024": true
},
"search_marker": {
"instant_booking": false,
"minimum_price": 630
}
}
}

Field Reference

Spotahome Rental Listing

record_type (string, required): Stable record discriminator. Spotahome listing rows use property_listing.

record_id (string, required): Stable Spotahome listing identifier.

source_context.source_name (string, optional): Source name, usually Spotahome.

source_context.source_domain (string, optional): Source domain, usually spotahome.com.

source_context.source_url (string, optional): Public source search URL associated with the record.

source_context.listing_url (string, optional): Public Spotahome listing URL.

source_context.seed_id (string, optional): Stable identifier for the input seed used in the run.

source_context.seed_type (string, optional): Seed type, such as search.

source_context.seed_value (string, optional): Seed value supplied for collection, such as the input location.

source_context.page_index (number, optional): Result page index associated with the saved record.

source_context.total_markers (number, optional): Total matching markers reported for the source search context.

source_context.fingerprint (string, optional): Record fingerprint useful for repeated-run comparison and secondary deduplication.

entity.title (string, optional): Listing title.

entity.description (string, optional): Public listing description.

entity.url (string, optional): Public Spotahome listing URL.

entity.external_ids.spotahome_listing_id (string, optional): Spotahome listing identifier.

listing.listing_id (string, required): Spotahome listing identifier.

listing.listing_type (string, optional): Listing type, usually rental.

listing.deal_type (string, optional): Deal type, usually rent.

listing.spotahome_checked (boolean, optional): Whether the listing is marked as checked by Spotahome.

listing.best_choice (boolean, optional): Whether the listing is marked as a best choice.

listing.favorite (boolean, optional): Whether the listing is marked as a favorite in the source context.

pricing.price (number or string, optional): Displayed monthly rental price, preserving source ranges when present.

pricing.price_text (string, optional): Original displayed price text when the source value is a range or cannot be represented as one number.

pricing.price_numeric (number, optional): Numeric monthly rental price when safely available.

pricing.price_min (number, optional): Minimum monthly rental price.

pricing.currency (string, optional): Price currency, such as EUR.

pricing.bills_included (string, optional): Included-bills indicator, such as all.

pricing.no_security_deposit (boolean, optional): Whether no security deposit is indicated.

pricing.deposit_protection (boolean, optional): Whether deposit protection is indicated.

pricing.offers (array, optional): Available discount or promotional offers.

pricing.offers[].discount_type (string, optional): Offer type, such as percentage.

pricing.offers[].discount_value (number, optional): Offer value.

location.street (string, optional): Public street-level location.

location.postal_code (string, optional): Postal code.

location.city (string, optional): City name.

location.market_city (string, optional): Normalized market city value.

location.coordinates.longitude (number, optional): Listing longitude.

location.coordinates.latitude (number, optional): Listing latitude.

location.address_coordinates.longitude (number, optional): Address-level longitude when available.

location.address_coordinates.latitude (number, optional): Address-level latitude when available.

property.property_type (string, optional): Rental format, such as room_shared.

property.floor_area_sqm (number, optional): Total property area in square meters.

property.room_area_sqm (number, optional): Room area in square meters when provided.

property.bathrooms (number, optional): Number of bathrooms.

property.bedrooms (number, optional): Number of bedrooms.

availability.available_from (string, optional): First available rental date in ISO 8601 format.

availability.instant_booking (boolean, optional): Whether instant booking is indicated.

availability.permanent_contract_allowed (boolean, optional): Whether a permanent contract is indicated as allowed.

media.main_image_url (string, optional): Main public photo URL.

media.photo_ids (array, optional): Photo identifiers associated with the listing.

media.other_property_photo_ids (array, optional): Additional property-level photo identifiers.

relationships.landlord.landlord_id (string, optional): Public landlord identifier when available.

relationships.landlord.scoring.score (number, optional): Landlord score value when available.

relationships.landlord.scoring.total_bookings_closed (number, optional): Total closed bookings associated with the landlord score.

metrics.rating_average (number, optional): Listing rating average when available.

metrics.landlord_score (number, optional): Source-provided landlord score.

metrics.landlord_total_bookings_closed (number, optional): Source-provided landlord closed-booking count.

attributes.feature_flags (array, optional): Public listing features, amenities, suitability signals, and bill indicators.

attributes.unmapped_feature_flags (object, optional): Additional feature flags not mapped to a descriptive label.

attributes.search_marker.instant_booking (boolean, optional): Instant-booking signal from the search record.

attributes.search_marker.minimum_price (number, optional): Minimum price from the search record.

attributes.source_offer (object, optional): Source-provided offer details that do not fit the normalized pricing offer shape.

attributes.total_count_multilisting (number, optional): Source-provided multi-listing count when present.

Data Quality, Guarantees, And Handling

  • Structured records: results are normalized into predictable JSON objects for downstream use.
  • Best-effort extraction: fields may vary by region, session, availability, listing type, or source-side presentation changes.
  • Optional fields: null-check optional values in downstream code, especially media, landlord, availability, and detailed property attributes.
  • Deduplication: use record_id as the primary stable key; listing.listing_id, entity.url, and source_context.fingerprint can support validation or secondary matching.
  • Freshness: results reflect the publicly available data at run time.
  • Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, or monitoring systems.

Tips For Best Results

  • Start with a small limit to validate the output shape before scaling up.
  • Use one location or rental segment per run when you need cleaner reporting and easier comparison.
  • Leave optional filters empty when the goal is broad discovery.
  • Add filters gradually to understand how each field changes coverage.
  • Set both availability dates together when move-in and move-out timing matters.
  • Use sort_by: "newest" for recently listed monitoring and sort_by: "lowest_price" for budget analysis.
  • Store results using record_id to deduplicate repeated runs over time.

How To Run On Apify

  1. Open the actor in Apify Console.
  2. Configure the available input fields for the target location and rental scope.
  3. Set the maximum number of outputs to collect with limit.
  4. Click Start and wait for the run to finish.
  5. Open the dataset preview and inspect the first records.
  6. Download results in JSON, CSV, Excel, or other supported formats.

Scheduling & Automation

Scheduling

Automated Data Collection

Use Apify schedules to run the actor periodically and keep rental datasets fresh for monitoring, reporting, and enrichment workflows.

  • Navigate to Schedules in Apify Console
  • Create a new schedule, such as daily, weekly, or custom cron
  • Configure input parameters
  • Enable notifications for run completion
  • Add webhooks for automated processing

Integration Options

  • BI dashboards: monitor rental pricing, availability, property mix, and location coverage over time.
  • Data warehouses: load normalized listing records into historical tables for trend analysis and reporting.
  • Webhooks: trigger validation, notification, or ingestion workflows after each completed run.
  • CRM enrichment: sync public listing, landlord, location, and property attributes into account or lead records.
  • Google Sheets or Airtable: review smaller rental datasets, validate segments, and share operational extracts with non-technical teams.
  • ETL and data enrichment pipelines: combine Spotahome listing data with internal market, geography, or inventory datasets.

Export Formats And Downstream Use

Apify datasets can be exported from the platform or consumed by downstream systems for reporting, analysis, and operational workflows.

  • JSON: for APIs, applications, and data pipelines
  • CSV or Excel: for spreadsheet workflows and manual review
  • API access: for automated ingestion into internal systems
  • BI and warehouses: for reporting, dashboards, and historical analysis

Performance

Estimated run times:

  • Small runs (< 1,000 outputs): ~3–5 minutes
  • Medium runs (1,000–5,000 outputs): ~5–15 minutes
  • Large runs (5,000+ outputs): ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

Limitations

  • Availability depends on what Spotahome publicly exposes at run time.
  • Some optional fields may be missing on sparse listings or in specific markets.
  • Very broad searches may take longer or require higher limit values.
  • Source-side changes can affect field availability, naming, or completeness.
  • Regional, account, or availability differences may change visible results.
  • Date and price filters depend on matching public listings being available for the selected location.

Troubleshooting

  • No results returned: check filter combinations, location spelling, date range, and whether Spotahome has matching public listings for the selected market.
  • Fewer results than expected: broaden filters, raise limit, or verify that the target location contains enough matching public records.
  • Some fields are empty: optional fields depend on what each listing publicly provides.
  • Run takes longer than expected: reduce scope, lower limit for validation, or split broad collection into smaller location or property-type segments.
  • Output changed: compare the current output with the field reference and include a small sample if support is needed.

FAQ

What data does this actor collect?

It collects public Spotahome rental listing records, including listing identity, URL, title, description, property type, pricing, availability, location, property details, booking signals, media references, landlord metadata, attributes, and source context.

Can I filter by location, category, date, price, or other criteria?

Yes. The actor requires location and supports filters for monthly price, bed type, property type, amenities, suitability, included bills, availability dates, bathroom requirements, Spotahome-checked status, deposit requirements, sorting, and result limit.

Why did I receive fewer results than my limit?

The limit is a maximum, not a guarantee. You may receive fewer records when the selected location and filters return fewer matching public listings at run time.

Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cadence for monitoring, reporting, and enrichment workflows.

How do I avoid duplicates across runs?

Use record_id as the primary idempotency key when storing or syncing records. listing.listing_id, entity.url, and source_context.fingerprint can help with secondary validation.

Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support exports in JSON, CSV, Excel, and other platform-supported formats.

Does this actor collect private data?

No. The actor is intended to collect publicly available Spotahome listing information. Users are responsible for using the data lawfully and in accordance with applicable requirements.

What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample if it helps illustrate the issue. Redact any sensitive internal notes before sharing.

Compliance & Ethics

Responsible Data Collection

This actor collects publicly available rental listing information from Spotahome for legitimate business purposes, including:

  • Real estate research and market analysis
  • Rental pricing and availability monitoring
  • Data enrichment for operational reporting and analytics

This section is informational and not legal advice. Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, and platform terms.

Best Practices

  • Use collected data in accordance with applicable laws, regulations, and the target site's terms
  • Respect individual privacy and personal information
  • Use data responsibly and avoid disruptive or excessive collection
  • Do not use this actor for spamming, harassment, or other harmful purposes
  • Follow relevant data protection requirements where applicable, such as GDPR and CCPA

Support

For help, use the actor page or Issues section. Include the input used, with sensitive values redacted; the run ID; expected versus actual behavior; and a small output sample when useful. Avoid sharing private credentials, personal notes, or unrelated internal data.