Platform
Get started

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. For a standing feed: 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. Casafari client accounts: 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 ma_get_time_series_data, data_point price_down

  1. Over MCP: resolve the area with ma_get_location_typeahead.
  2. Call ma_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 comps_get-comparables

  1. Over MCP: call comps_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 the Casafari MCP server: "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. ma_get_location_typeahead with Marbella.
  2. ma_get_time_series_data with type_group house, data_point price_down and date_interval month.
  3. comps_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, POST /api/v1/listing-alerts/search, POST /api/v2/properties/search and GET /api/v1/properties/search/{property_id} are for Casafari client accounts. ma_get_time_series_data and comps_get-comparables are available over MCP to Casafari clients with MCP access. For the feeds, the property search and fetch, and these two tools, self-serve access for new users is coming soon.

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.

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 the Casafari MCP server, two tools help. ma_get_time_series_data with data_point price_down counts price decreases in an area over time. comps_get-comparables returns total_sale_price_change, last_sale_price_reduction and sale_price_last_change for properties around a point. Both are available to Casafari clients with MCP access.

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, comps_get-comparables returns total_rent_price_change, last_rent_price_reduction and rent_price_last_change. ma_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 comps_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. ma_get_price_distribution adds the area's price bands.

All use cases

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