Platform

Casafari is the AI agent-native real estate data intelligence platform. The most complete property index in Europe: a deduplicated, cleaned property graph of residential and commercial property, for sale and for rent, in 16 countries.The most complete property index in Europe: a deduplicated, cleaned property graph.

How the graph is built

Find leads · Use case

How do I find properties with price reductions, especially repeated cuts?

Every price change is recorded in Casafari's property graph. With New Market Leads, create a feed with POST /alerts-api/feeds or query POST /api/v1/listing-alerts/search for price-cut alerts in your area. Then fetch each property with GET /api/v1/properties/search/{property_id} and count consecutive reductions in sale_price_history to spot repeated cuts.

Products: New Market Leads, Property Sourcing, Area Insights, Comparables & Valuation

Short answer

The property graph records every price change of every property, with dates. It keeps them in sale_price_history, and in rent_price_history for rentals.

A New Market Leads feed turns each price cut in your area into an alert. Repeated cuts are not a search filter: you count them from a property's history. Area Insights and comparables then show whether the whole area is moving or only that seller.

Steps

Create a feed for price cuts in your area (alert_subtypes) or search alerts with alert_date_from

  1. Self-serve: create a feed with POST /alerts-api/feeds (feed_name, filters) for your area, property type and price cuts. Put alert_subtypes set to price_decreased in filters, with location_ids, types and business_type. The other keys are on the Create feed page. Set a webhook with PUT /alerts-api/webhooks before the first feed: without one, creating a feed answers 409 with No webhook configured. price_decreased combines with private, bank and auction.
  2. Casafari client accounts: call POST /api/v1/listing-alerts/search with location_ids, operation, types, alert_subtypes set to the price-decrease subtype, and alert_date_from / alert_date_to (YYYY-MM-DD). Note the property each alert refers to.

Shortlist with POST /api/v2/properties/search using days_on_market_from and updated_date_from

  1. With a Casafari client account (the self-serve Property Sourcing search has no time-on-market or update-date filter): search the same area with location_ids, types, days_on_market_from and updated_date_from (YYYY-MM-DDTHH:mm:ss). For example, days_on_market_from 180 keeps properties on the market for about six months or more. updated_date_from keeps those whose record changed recently. Add price_from / price_to to match a budget.

Fetch each property with GET /api/v1/properties/search/{property_id} and count consecutive reductions in sale_price_history

  1. For each candidate, call GET /api/v1/properties/search/{property_id}.
  2. Sort sale_price_history by date and count how many changes in a row lowered the price. The entry fields are on the Get property by ID (v1) page.
  3. Two or more consecutive reductions mark a repeated-cut lead.

Check the area with area-insights_get_time_series_data, data_point price_down

  1. Self-serve over MCP: resolve the area with locations_search.
  2. Call area-insights_get_time_series_data with custom_location_boundary.location_ids, type_group, business_type sale, data_point price_down, date_interval month, date_range.min and an alias.

If cuts are rising across the whole area, one seller's cuts say less about that seller.

On a target, read total_sale_price_change and last_sale_price_reduction from comparables_get_comparables

  1. Self-serve over MCP: call comparables_get_comparables with these inputs:
    • location_boundary.circle.target_point.address and a distance in kilometres
    • operation sale
    • comparables_types
    • comparables_count (1 to 50)
    • sold_or_rented_after: null, so only active properties are considered
  2. Read the price fields of each result: total_sale_price_change and last_sale_price_reduction (both in percent) and sale_price_last_change. This covers the neighbours, and the target itself if it appears among the results.
  3. Compare the asking price with the response's estimated_prices.

Example: houses in Marbella with two or more cuts

A Casafari client account first pulls this year's price-cut alerts for houses in Marbella. Replace <MARBELLA_LOCATION_ID> with the location id. Replace <PRICE_DECREASE_SUBTYPE> with the value listed on the Search alerts (v1) page.

json
{
  "operation": "sale",
  "location_ids": [<MARBELLA_LOCATION_ID>],
  "types": ["house", "villa", "townhouse"],
  "alert_subtypes": [<PRICE_DECREASE_SUBTYPE>],
  "alert_date_from": "2026-01-01"
}

Next, it calls GET /api/v1/properties/search/{property_id} for each property in the alerts. It keeps those whose sale_price_history shows two or more consecutive reductions.

For context, ask an assistant connected to Casafari's MCP servers: "How many price cuts were there on houses for sale in Marbella each month this year? Among comparable houses within 2 km of Avenida Ricardo Soriano, Marbella, which have cut their price?" It calls:

  1. locations_search with Marbella.
  2. area-insights_get_time_series_data with type_group house, data_point price_down and date_interval month.
  3. comparables_get_comparables with the address, distance 2, operation sale, comparables_types ["house", "villa", "townhouse"], comparables_count 20 and sold_or_rented_after null.

How to read the result

sale_price_last_change: change_date, old_value, new_value

sale_price_last_change gives the date of the last price change (change_date) and the price before and after it (old_value, new_value). If new_value is lower, the last change was a cut. last_sale_price_reduction gives the size of that cut in percent, and total_sale_price_change gives the total change in percent.

Several cuts plus long days on market: a negotiable seller

A property with two or more consecutive cuts that has also stayed on the market a long time points to a seller ready to negotiate. It is a signal, not proof. Check it against the area's price_down trend and against fair_market_price from estimated_prices before you make an offer or pitch a new strategy.

Limits

No search filter for the number of cuts: count them from the history

No operation in the sources filters by the number of price cuts. You count them yourself from sale_price_history or rent_price_history.

/alerts-api/* feeds are self-serve on the Casafari API and MCP Platform. The property search and fetch, POST /api/v2/properties/search and GET /api/v1/properties/search/{property_id}, are available to Casafari clients over REST with their Casafari account. New users have Property Sourcing on the self-serve platform, a different API without these date filters, and High Potential Seller Leads (GET /v1/seller-leads), which lists homes whose asking price was cut repeatedly around a point, in Spain, France, Italy, Germany, Greece and Andorra. POST /api/v1/listing-alerts/search is for Casafari client accounts. area-insights_get_time_series_data and comparables_get_comparables are self-serve over MCP, and comparables over REST too.

The alert_subtypes values

alert_subtypes in a feed's filters accepts new, price_increased, price_decreased, reserved, delisted and sold. A feed has no key for the number of consecutive cuts either, so every price_decreased alert is one cut and you count repeats yourself.

The history shows what the price did, not why. No refresh frequency, quotas or prices are published; ask Casafari.

Ask in Claude or ChatGPT

Property Sourcing has an MCP server, https://platform.casafari.com/mcp/property-sourcing, so an assistant can run this from a chat. In Claude or ChatGPT, add a custom connector with that URL; in Claude Code: claude mcp add --transport http casafari-property-sourcing https://platform.casafari.com/mcp/property-sourcing. Sign in with your Casafari Platform account in the browser (a new account starts on the Free plan). Then ask, for example:

Flats in Madrid under €650K, 2+ bedrooms: show each with every agency advertising it and its price history.

The assistant finds the place with locations_search (free), searches with property-sourcing_search (50 tokens a page, property-sourcing_next_page for more), reads each home with property-sourcing_get_property (10 tokens: every agency and portal advertising it and its asking price history) and turns a pasted portal or agency link into its home with property-sourcing_resolve_listing (25 tokens). Prices are asking prices. See Property Sourcing.

Questions

Can I get price-cut alerts over MCP?

No. Price-cut alerts belong to New Market Leads, which is offered over the REST API only. Over Casafari's MCP servers, two tools help. area-insights_get_time_series_data with data_point price_down counts price decreases in an area over time. comparables_get_comparables returns total_sale_price_change, last_sale_price_reduction and sale_price_last_change for properties around a point. Both are self-serve.

Does a price cut alert fire once per property or once per advertisement?

Alerts follow the property graph, where every advertisement of a property is merged into one record with its full history. A price change is therefore reported for the property, not once for each agency or portal advertising it. This is why Casafari counts properties, not advertisements, and why a lead list built from alerts does not repeat the same home.

Can I see rent price cuts too?

Yes. The graph keeps rent_price_history alongside sale_price_history. With operation rent, comparables_get_comparables returns total_rent_price_change, last_rent_price_reduction and rent_price_last_change. area-insights_get_time_series_data with business_type rent and data_point price_down gives the area trend. POST /api/v1/listing-alerts/search also takes an operation field for rent alerts.

How do I combine price cuts with below-market pricing?

Run comparables_get_comparables around the property and compare its asking price with fair_market_price in estimated_prices. Set exclude_outliers to false so underpriced properties stay in the results, then read is_outlier. A property with repeated cuts that now sits below the fair market price is both a motivated seller and a possible bargain. area-insights_get_price_distribution adds the area's price bands.

All use cases

Tip: add .md to any URL to read it as Markdown.