Skip to content

In production · 2025

Spanish real-estate market aggregator

A commercial API that crawls property portals, normalises them into a single schema and publishes the result as a data product.

Role
Design and development, end to end
Portals integrated
7
Verified listings
~900
Monthly extraction cost
€400 → €20–35

Problem

Extraction ran on Apify, a third-party provider costing around €400 a month. The cost was the visible part; the real problem was underneath it. In a product whose value is the data, extraction is not a supporting service — it is the core. Their limits, their pricing and how fast they reacted when a portal changed were setting ours.

Decision

Replace it with our own extraction and processing pipeline, built as one adapter per portal rather than a single module full of conditionals.

The alternative was keeping the provider and writing only the normalisation layer. We ruled it out because it left the dependency untouched: we would still be waiting on someone else to fix a broken portal.

Implementation

Every portal implements a shared interface inside its own adapter. Adding a new one means writing it and registering it; the core — normalisation, deduplication, price history — does not change.

Four extraction techniques run side by side, one per what each portal actually exposes: JSON embedded in the HTML, JSON-LD structured data, reading Livewire’s serialised state, and parsing server-rendered HTML.

Portals behind bot protection go through a Playwright browser bridge. That is the expensive route — a real browser costs memory and time — so it is declared per adapter and paid only where there is no alternative, not across all seven.

The same property shows up on several portals with different descriptions and floor areas rounded differently. Everything is normalised into one schema and deduplicated so a flat is one row, not five. The price history is built on top of that.

Result

Seven portals in production over roughly 900 verified listings. Extraction cost down from €400 a month to between €20 and €35.

And the part that never shows on an invoice: when a portal changes, the fix is ours to make and it happens the same day. In exchange, maintenance became our own development time.

The product ships as a commercial API with Stripe payments.