Fotocasa Price History — First Seen & Drops avatar

Fotocasa Price History — First Seen & Drops

Pricing

from $6.00 / 1,000 price histories

Go to Apify Store
Fotocasa Price History — First Seen & Drops

Fotocasa Price History — First Seen & Drops

Fotocasa historico for Spain ads: first seen, precio anterior piso, price drops and delisted status. Snapshot Fotocasa Madrid/Barcelona URLs; scheduled runs build history when the portal hides the first publication date. Not escrituras. RESIDENTIAL ES.

Pricing

from $6.00 / 1,000 price histories

Rating

0.0

(0)

Developer

Noah Adler

Noah Adler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Fotocasa Price History — First Seen, Drops & Delisted

Fotocasa historico for Spain property ads: track first seen, precio anterior piso, price drops and delisted listings on Fotocasa.es.

This is not another Fotocasa search dump (that Actor already exists). It is the Keepa-style watch that Forocoches, Burbuja and Rankia threads asked for: the first publication date is hidden when an ad is renewed; the same listing ID often comes back when the ad is relisted.

Honest limit: Fotocasa rarely publishes a full camelcamelcamel chart. Run 1 is a snapshot. Schedule the Actor on the same snapshotKey / URLs and you get the history. This Actor never invents escrituras or notary prices (Idealista sells those at €2400+VAT / 500 records).

Input: property URLs (…/d) and/or search URLs (…/l, Madrid / Barcelona).
Output: one Dataset row per listing check.
Proxy: RESIDENTIAL ES.


Table of contents

  1. What this Actor does
  2. What is real vs snapshot
  3. What you get
  4. Features
  5. Input
  6. Output example
  7. Output fields
  8. Quick start (API)
  9. Use cases
  10. Limitations
  11. FAQ
  12. Keywords

What this Actor does

StepAction
1Open Fotocasa search pages and/or property URLs you pass
2Read listing JSON (price, id, city, portal date) — same HTTP pattern as the Fotocasa listings Actor
3If the page exposes a price chart / original price, copy it into priceHistory with source=site
4Diff against the previous KV snapshot (or previousSnapshot JSON) → lastPriceChange, firstSeenAt, delisted
5Save the snapshot so the next scheduled run extends the history

What is real vs snapshot

You asked forWhat you actually get
Current asking priceReal — currentPrice + currency=EUR from Fotocasa
Stable idReal — propertyId from the ad (Burbuja: same ID when relisted)
Fecha de primera publicaciónOnly if Fotocasa still shows it. Portal date is usually the last renew. Otherwise firstSeenAt = first time this Actor saw the id
Precio anterior / dropsSite if a previous/original price is in the JSON; otherwise snapshot diff after run 2+
Escrituras / precio de compraventaNever. Rankia-style notary files are a different product

historySource is site, snapshot, or mixed so you can filter.


What you get

Identity

  • propertyId, url, title, city, status (active / delisted / unknown)

Price

  • currentPrice, currency (always EUR when a price exists)
  • lastPriceChange (fromPrice, toPrice, dropEur, dropPct, at)
  • priceHistory[] (price, seenAt, source)

Time

  • firstSeenAt, portalPublishedAt, daysOnPortal, scrapedAt

Features

CapabilityDetail
Property URLsWatch specific pisos (…/d)
Search snapshotMadrid / Barcelona /l pages up to maxItems
KV diffSame Actor storage + optional previousSnapshot
Delisted404/tombstone, or id missing from the same search vs last snapshot
No escriturasAsking prices only
RES ESResidential Spain injected if country is empty

Input

FieldRequiredDescription
propertyUrlsCond.Fotocasa detail URLs
searchUrlsCond.Fotocasa list URLs (…/l)
maxItemsNoDefault 10 (max 80). Each row is a listing check (PPE Price history, not a cheap dump)
snapshotKeyNoReuse on a schedule
previousSnapshotNoPaste prior JSON if you keep history outside Apify
persistSnapshotNoDefault true
proxyConfigurationNoRESIDENTIAL + ES

Need propertyUrls or searchUrls.

Example — Madrid sale snapshot

{
"searchUrls": [
"https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l"
],
"maxItems": 8,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "ES"
}
}

Example — Barcelona listing URL

Paste a live …/comprar/vivienda/barcelona-capital/…/{id}/d URL in propertyUrls. The Store Try it example is the Madrid search snapshot below.


Output example

{
"propertyId": "189717534",
"url": "https://www.fotocasa.es/es/comprar/vivienda/madrid-capital/lista/id/189717534/d",
"title": "Piso en Barrio de Salamanca",
"currentPrice": 650000,
"currency": "EUR",
"city": "Madrid",
"firstSeenAt": "2026-09-24T17:00:00Z",
"lastPriceChange": null,
"priceHistory": [
{ "price": 650000, "currency": "EUR", "seenAt": "2026-09-24T17:00:00Z", "source": "snapshot" }
],
"status": "active",
"daysOnPortal": 12,
"portalPublishedAt": "2026-09-12T10:00:00Z",
"historySource": "snapshot",
"scrapedAt": "2026-09-24T17:00:00Z"
}

On a later run, if the asking price dropped to 625000, lastPriceChange.dropEur is 25000 and priceHistory has both points. That drop is your snapshot, unless Fotocasa also showed an original price (source=site).


Output fields

GroupFields
IdentitypropertyId, url, title, city, status
PricecurrentPrice, currency, lastPriceChange, priceHistory
TimefirstSeenAt, portalPublishedAt, daysOnPortal, scrapedAt
ProvenancehistorySource
Errorserror, errorMessage

Quick start (API)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("noahadler/fotocasa-price-history").call(
run_input={
"searchUrls": [
"https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l"
],
"maxItems": 8,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "ES",
},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["propertyId"], item["currentPrice"], item["firstSeenAt"], item["historySource"])

Schedule daily/weekly with the same snapshotKey (or the same URLs) so firstSeenAt stays stable and drops appear.


Use cases

  • Buyer due diligence: did this piso sit and then drop?
  • Investor comps: asking-price path without paying Idealista escrituras
  • Agency watchlists: same Fotocasa id after a “new” ad (Burbuja pattern)
  • Alerts: status=delisted on a search you already snapshot
  • Cross-check vs the Fotocasa listings Actor (inventory vs history)

Limitations

  • No notary / escritura prices. Asking prices on Fotocasa only.
  • Portal “publication” date resets on renew — that is the whole Forocoches complaint. We store portalPublishedAt as Fotocasa sent it and firstSeenAt from the first snapshot when the site omits a true first-publish field.
  • Run 1 priceHistory is usually a single snapshot point. History depth = how long you schedule.
  • Search snapshots only mark delisted for ids that were in this Actor’s previous snapshot of the same watch, not the whole Spanish inventory.
  • Respect Fotocasa Terms of Service. RESIDENTIAL ES if you see 403/empty JSON. WAF after that → drop, not infinite rewrites.

FAQ

Is this the Fotocasa listings scraper?
No. Listings = current ads. This Actor = first seen, precio anterior, drops, delisted.

Why is lastPriceChange null?
First run, or the price did not move vs the last snapshot.

Can I get fecha publicacion Idealista?
This build is Fotocasa. Idealista first-publish is the same product idea on another portal — not bundled here.

Do you scrape Rankia escrituras?
No.

Blocked?
RESIDENTIAL + apifyProxyCountry=ES.


Keywords

fotocasa historico, fotocasa historico precios, idealista historico precios, fecha publicacion idealista, precio anterior piso, fotocasa price history, first seen fotocasa, fotocasa delisted

Related listings Actor: fotocasa-spain-property-scraper.