Casa 47 Spain Public Housing Rental Scraper
Pricing
from $2.00 / 1,000 housing listings
Casa 47 Spain Public Housing Rental Scraper
Export every affordable rental home published by Casa 47, Spain's state housing entity: rent, size, bedrooms, elevator, storage room and GPS coordinates. Official API, no browser.
Pricing
from $2.00 / 1,000 housing listings
Rating
0.0
(0)
Developer
Andres Garcia-Baquero Leon
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
Export and monitor affordable rental records exposed by Casa 47, Spain's state housing entity (Entidad Estatal de Vivienda), as clean structured data in CSV, JSON, Excel or API workflows.
The public portal API returned 645 records on 6 October 2026. Inventory changes over time. This actor returns rent, size, rooms, amenities and GPS coordinates, with province/region normalization, price per square metre, filters and persistent change detection. A record exposed by the API is not proof of an open application: check status and the official call.
What you get
Each listing includes:
| Field | Description |
|---|---|
reference | Official Casa 47 reference code, e.g. 26-7-VAL-004 |
listingId | Stable internal record ID |
province | Spanish province, resolved from postcode |
region | Autonomous community derived from province, with reference-code fallback |
postcode | Postcode (null when the portal has not published it) |
priceMonth | Monthly rent in EUR |
currency | Always EUR |
sizeM2 | Built floor area in square metres |
pricePerM2 | Computed rent per square metre |
bedrooms / bathrooms | Room counts |
floor | Floor label, e.g. Bajo, 1 |
hasElevator / hasStorageRoom | Building amenities |
latitude / longitude | GPS coordinates |
mapUrl | Ready-to-open Google Maps link |
status | Listing status reported by the portal |
listedAt | When the home was published |
portalUrl, source, scrapedAt | Provenance metadata |
Example output
Selected fields from a real portal record retrieved on 6 October 2026 (not a fictional listing):
{"reference": "26-7-VAL-004","province": "Valencia","region": "Comunidad Valenciana","postcode": "46550","priceMonth": 587.0,"currency": "EUR","sizeM2": 73.0,"pricePerM2": 8.04,"bedrooms": 3,"bathrooms": 1,"floor": "Bajo","hasElevator": false,"hasStorageRoom": false,"latitude": 39.544381216274,"longitude": -0.325596341982626,"mapUrl": "https://www.google.com/maps?q=39.544381216274,-0.325596341982626","status": "Borrador","listedAt": "2026-07-14T07:52:17Z","source": "portal.casa47.es"}
Input options
All inputs are optional — run it empty to get the cheapest homes in Spain.
| Option | Description |
|---|---|
maxItems | Maximum listings to return (default 100) |
provinces | Filter by province or region, e.g. ["Valencia", "Galicia"] |
minPriceEur / maxPriceEur | Monthly rent bounds in EUR |
minBedrooms | Minimum number of bedrooms |
minSizeM2 | Minimum built size in m² |
requireElevator | Only buildings with an elevator |
requireStorageRoom | Only homes including a storage room (trastero) |
onlyNew | Only homes that appeared, or changed price, since the previous run |
stateStoreName | Persistent monitor name, default casa47-listing-state; use one per filter set |
updateState | Default true; false reads but never commits the monitoring baseline |
sort | priceAsc, priceDesc, sizeAsc, sizeDesc, bedroomsDesc, newest, reference |
Example: large affordable family homes in Valencia
{"provinces": ["Valencia"],"minBedrooms": 3,"maxPriceEur": 650,"sort": "priceAsc","maxItems": 50}
Track new homes (alerts)
Casa 47 publishes stock in waves, so the useful question is usually what changed, not what exists. Set onlyNew: true and schedule the Actor: each run compares the portal against what the previous run saw and returns only homes that are new or whose rent changed.
{ "onlyNew": true, "provinces": ["Valencia"], "maxPriceEur": 600 }
Every listing carries changeType (new, priceChanged, existing), isNew, and previousPriceMonth when the rent moved. The Actor writes identical OUTPUT and RUN_SUMMARY records with delivered counts, budget-limit status, baseline commit status and references missing from the snapshot. A disappearance is not proof of rental or removal from an open call.
The first onlyNew run has no baseline, so it records the starting point without rows. A normal first run returns matching rows. Use a distinct
stateStoreNamefor each filter set, keep filters unchanged and serialize runs of the same monitor. State lives within your Apify account; there is no cross-customer global baseline or concurrency lock.
The baseline advances only when all matches are delivered. If maxItems or the charge budget truncates delivery, baselineUpdated is false (item_limit or charge_limit). The next run may repeat previously delivered rows: increase limit/budget to acknowledge the full snapshot. This conservative policy prevents undelivered changes from being silently lost; it is not exactly-once alert delivery. updateState: false is useful for previews and QA.
Example independent monitor:
{"onlyNew": true, "stateStoreName": "valencia-housing-monitor", "provinces": ["Valencia"], "maxItems": 5000}
Use cases
- Housing seekers — track new affordable homes and get alerted when one matches your budget, size and location.
- Journalists and researchers — analyse public rent levels, price per m² and geographic distribution of Spain's state housing rollout.
- Policy and NGO analysts — monitor how the public housing stock grows across regions over time.
- Proptech and data teams — benchmark public rents against private market listings.
Schedule the actor daily and compare runs to detect newly published homes as future Casa 47 rounds open.
How it works
The actor calls the official public data API behind portal.casa47.es, follows continuation links and fails rather than committing an incomplete snapshot after its 50-page safety cap. There is no login or browser. Filtering and sorting apply before selection; repeated listing identities/references are removed before billing. Results are delivered atomically with the named listing event: the SDK delivers only the chargeable prefix, and billing errors propagate without advancing the baseline.
Scope and limitations
- Returns the homes published on the Casa 47 rental portal. It does not cover regional or municipal public housing registries, nor the private market.
- The portal exposes rent, size, rooms, floor, elevator, storage room and coordinates. It does not expose street addresses, photos or energy certificates through its public API, so those are not included.
- Placeholder postcodes become
null, with province resolved from the official reference code where possible. - This actor reads published listings only. It cannot submit an application. Applications must be filed through the official Casa 47 electronic office within each open call's deadline.
- Casa 47 publishes homes in time-limited rounds. Inventory size and availability change between calls.
Pricing
| Event | Price |
|---|---|
listing | $0.002 per delivered listing ($2.00 / 1,000) |
apify-actor-start | $0.0001 per start event, memory-adjusted by Apify |
Only delivered rows incur listing charges. A valid no-match or baseline-only run can produce zero rows and still incur the start event. Set a maximum charge in Apify to control spend. These are prices, not guaranteed seller earnings.
How to use and integrate
- Run
{}for an optional-input example, or configure your filters. - Inspect dataset and
OUTPUT, especiallybaselineUpdated. - For monitoring, configure your own schedule with a unique state name and enough budget/limit. Do not overlap runs.
- Export CSV, JSON, Excel or consume the dataset API. Connect webhooks to n8n, Make, Zapier, Slack or Google Sheets in your own workflow.
FAQ
Does it submit housing applications? No; use the official electronic office.
Are all exposed records currently available? No. A Borrador status is preserved; consult the official call.
Why did my first onlyNew run return nothing? It records the initial baseline, not invented new homes.
Why are changes repeated? A truncated or preview run does not commit its snapshot; check baselineSkipReason.
Can I have multiple monitors? Yes, with distinct stateStoreName values and fixed filters.
Is state shared across customers? No. The named store belongs to the account executing the Actor. Monitors using the same name in that account share state.
Is every source field guaranteed? No. Missing portal values remain null; street addresses, photos and energy certificates are unavailable through this API.
What happens on an upstream or billing failure? The run fails; it does not silently return unrelated demo data or acknowledge the monitoring snapshot.
Troubleshooting
| Problem | Action |
|---|---|
| No matches | Broaden filters; check onlyNew and baseline status |
charge_limit | Increase maximum charge; no unpaid rows are delivered |
item_limit | Raise maxItems to include all matching changes |
| Monitor interference | Use a unique name per filter set; serialize runs |
| Portal/API error | Retry later; inspect logs, do not interpret failure as no available homes |
Feedback and reviews
Useful for your housing search or monitoring? A short, honest review on the Store helps others find it. Positive or critical, both are welcome.
Something missing or broken (a field, a filter, a province)? Please open an issue so it can be fixed quickly.
Data source
Official portal of Casa 47, Entidad Estatal de Vivienda — https://portal.casa47.es. Public listing data only.