# Changelog of Metrocuadrado Scraper \[Just 💰$1.5] — Colombia Real Estate (`blackfalcondata/metrocuadrado-scraper`) Actor

- **URL**: https://apify.com/blackfalcondata/metrocuadrado-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/blackfalcondata/metrocuadrado-scraper.md

## Changelog

### 2026-10-01

- Fixed: runs with a maximum cost limit no longer end without results when platform usage counts toward the limit.
- Fixed: when the Max items run option limits a run, the log now says "maximum number of items" instead of "maximum cost".

### 2026-09-30

- Fixed: runs with a maximum cost limit now use the full budget. With a limit set, a run stopped early and returned fewer listings than the limit pays for. Incremental runs now leave the listings a limit did not cover for the next run instead of skipping them. Prices are unchanged.

### 0.2.x — 2026-06-20

- Added: `excludeEmptyFields` input — when enabled, drops null, empty-string, and empty-array fields from every listing (and from agency lead-gen rows) before output, for smaller, cleaner payloads in AI-agent and dashboard pipelines. Off by default, so existing output is unchanged.
- Added: optional centre + radius filter (`centerLat`, `centerLng`, `radiusKm`) — keep only listings within a set distance of a point (e.g. near a workplace, school, or transit stop), plus a new `distanceKm` output field so you can sort results by proximity. Listings without a coordinate are kept; inactive when no centre is set, so existing runs are unchanged.

### 0.2.x — 2026-06-10

- Fixed: `maxResults` is now honoured in incremental mode (caps the emitted output; collection stays complete so change tracking remains accurate)
- Fixed: `minRooms` filter is applied again (was silently ignored)
- Fixed: repost detection (`isRepost`, `repostOfId`, `skipReposts`) is functional again
- Added: free-text and centre-based locations (e.g. "valencia", "roma", any geocodable town) return results again
- Improved: results are delivered to the dataset before being billed
- Improved: incremental change tracking is scoped per search configuration, so different searches sharing a `stateKey` no longer interfere; listings are only marked `EXPIRED` when a run provably covered the full result set
- Improved: transient fetch failures no longer abort a run — already-collected results are kept and delivered
- Improved: `contentQuality` now reflects per-record data completeness (`full` vs `thin`)

### 0.1.x — 2026-04-14

- Added: `descriptionHtml`, `descriptionMarkdown` output fields (triple-format descriptions for RAG/LLM pipelines)
- Added: `contentHash` output field (SHA-256 of content-identifying fields for change detection)

### 0.1.x — 2026-04-14

- Added: cross-run repost detection (`isRepost`, `repostOfId`, `repostDetectedAt`)
- Added: `skipReposts` input to exclude detected reposts from output

### 0.1.0 — 2026-04-03

Initial release.

- Scrapes idealista.com (ES), idealista.pt (PT), and idealista.it (IT)
- Reliable access via cloud transport layer
- SERP parsing: price, size, rooms, floor, highlighted status
- Detail enrichment: description, address, district, features, photos, agency
- Structured metadata: operation, property type, geo ID, owner type
- Contact enrichment: phone and contact name per listing
- Parallel SERP fetching (pages 2–N in batches of 10)
- Incremental mode: NEW / CHANGED / EXPIRED tracking with KV state
- Compact output mode for AI agent workflows
- PAY_PER_EVENT pricing (actor-start + per-result)
