Screen investments · Use case
What gross rental yield can I expect in this area, and which properties beat it?
Casafari's tools do not return an area yield directly. You compute gross yield by dividing annualised rent per m² by sale price per m², both from Area Insights' ma_get_time_series_data on the same boundary. To find properties that beat it, filter POST /api/v2/properties/search by gross_yield_from, then check gross_yield on comps_get-comparables results.
Products: Area Insights, References, Property Sourcing, Comparables & Valuation
Short answer
Area gross yield = annual rent per m² ÷ sale price per m² × 100. Compare like with like: same boundary, type group, bedroom range and period.
Area Insights gives you both inputs. Call ma_get_time_series_data with data_point avg_price_psqm twice: once with business_type rent, once with business_type sale.
At property level, gross_yield appears in two places:
- as a filter on
POST /api/v2/properties/search, throughgross_yield_fromandgross_yield_to - as a field on each
comps_get-comparablesresult, described as gross yield in percentage
The property graph keeps one record per property, so a home advertised by several agencies is counted once on both the rent side and the sale side (The property graph).
Steps
Resolve the area
Call
ma_get_location_typeaheadwith an English place name, for examplePorto. Checkadministrative_levelandbreadcrumbsto choose between a city and a district with the same name, and keep thelocation_id.You can use a
circleinstead: atarget_pointplus adistancein meters, from 50 to 50000. Note that the Area Insights tools measure the circle in meters, whilecomps_get-comparablesuses kilometers.
ma_get_time_series_data with business_type rent and avg_price_psqm; repeat with business_type sale
- Call
ma_get_time_series_datawith:type_group:apartmentbusiness_type:rentdata_point:avg_price_psqmdate_interval:monthdate_range.minalias: for examplePorto rentcustom_location_boundary.location_ids
- Repeat the call with
business_typesaleand a newalias, keeping every other field the same. - Take the latest
valuefrom each series. To smooth out a single period, you can instead runma_get_time_series_operationswithmeanormovavg_last_3on each series. That tool is available over MCP only.
Segment by bedrooms with ma_get_bedrooms_distribution for both operations
Call
ma_get_bedrooms_distributionwith the same boundary, once withbusiness_typerentand once withsale. On this tool,bedrooms_rangegoes up to 10.Each row returns
bedrooms,properties_count,average_priceandaverage_price_per_sqm. The yield for a bedroom segment is that segment's annualised rentaverage_price_per_sqm÷ its saleaverage_price_per_sqm.properties_countshows how many properties stand behind each figure.
Shortlist properties: POST /api/v2/properties/search with gross_yield_from
Call
POST /api/v2/properties/searchwith:search_operations: salelocation_ids: documented as those returned byPOST /api/v1/references/locationstypesbedrooms_fromandbedrooms_togross_yield_from: at or above the area yield you computed
The field is described only as the "minimum gross yield value", with no unit stated. Comparables report
gross_yieldin percentage, but check the unit on the operation page.
Validate a target: comps_get-comparables and the gross_yield field
- Call
comps_get-comparablesaround the target's address or coordinates withoperationrent. Readestimated_prices.fair_market_priceand therent_periodof the results. - Call it again with
operationsale, and compare the annualised fair rent with the asking price. - Read
gross_yieldon the returned comparables to see what similar properties yield nearby.
Example: 1-bedroom apartments in Porto
A person asks their assistant: "What is the gross yield for 1-bedroom apartments in Porto, and which ones beat it?"
The assistant makes these calls:
list_servers.ma_get_location_typeaheadwithPorto.ma_get_bedrooms_distributionwithtype_groupapartment,bedrooms_rangemin 1 and max 1,business_typerent.- The same call with
business_typesale. - Optionally,
ma_get_time_series_datafor both operations to see the trend.
The calculation, with the values each response returns:
- Call the rent row's
average_price_per_sqmR and the sale row's S. - If R is a monthly figure, the area gross yield is R × 12 ÷ S × 100.
- For one property, divide its annualised rent by its asking price.
The shortlist runs over REST with a Casafari client account:
{
"search_operations": ["sale"],
"location_ids": ["<LOCATION_ID>"],
"types": ["apartment"],
"bedrooms_from": 1,
"bedrooms_to": 1,
"gross_yield_from": "<AREA_YIELD>"
}Replace the placeholders with numbers, and check value formats on the operation page. This page gives no market figures: every number comes from the responses.
How to read the result
Check rent_period: monthly figures must be annualised
comps_get-comparables results carry rent_period, which is one of day, week, fortnight, month, year or none. Annualise before you divide: multiply monthly figures by 12 and weekly figures by 52.
The Area Insights tool descriptions do not state the period behind rent values. Confirm it before annualising, for example by comparing with rent_price_per_sqm and rent_period on comparables in the same area.
Keep both sides in the same currency. Comparables give sale_price_per_sqm_base and rent_price_per_sqm_base in Euros.
Gross, not net: costs and vacancy are yours to add
Gross yield ignores taxes, maintenance, management, insurance, fees and vacancy, and none of these are in the data.
Area Insights figures describe advertised prices; the product's own example speaks of asking price per m². They are not achieved rents. Treat the result as a screen, not an underwriting figure.
Limits
The tools do not return an area yield; you compute it
No Area Insights data_point is a yield: the data points cover price, price per m², supply and activity. You build the yield from a rent call and a sale call.
Availability:
- The Area Insights tools, including
ma_get_heatmap, andcomps_get-comparablesare available to Casafari clients with MCP access, using their Casafari account. - Self-serve access for new users is coming soon, for these tools and for the property search.
Coverage limits:
- The API's permissions list 16 markets.
- The Area Insights tools take
type_groupapartmentorhouseonly. ma_get_location_typeaheadexpects English names.- The cadastral-reference input of
comps_get-comparablesis Spain only. - Other tools name no market.
Commercial and other types: see rentals and commercial.
Property-level yield search is REST only
POST /api/v2/properties/search with gross_yield_from and gross_yield_to is for Casafari client accounts and is not offered over Casafari MCP. Without it, check yield property by property with comps_get-comparables.
The sources give no figures for pricing, quotas, rate limits or data refresh frequency; ask Casafari.
Questions
Is gross_yield based on asking prices?
These docs do not document how gross_yield is calculated. The field is defined only as gross yield in percentage, on comps_get-comparables results and as a filter on POST /api/v2/properties/search. The area yield you compute from Area Insights uses advertised prices, and the product's own example speaks of asking price per m². For the exact method behind gross_yield, ask Casafari at https://www.casafari.com/.
Can I compare yields across districts in one go?
Yes. Use ma_get_heatmap, which returns a value for each child location of a location_id, such as the districts of a city. Call it with data_point avg_price_psqm once with business_type rent and once with sale, then divide per district after annualising rent. The heatmap includes only active properties. ma_get_time_series_data returns one series per call, not one per district.
Can I get a yield heatmap?
Not directly, because ma_get_heatmap has no yield data_point. Build the heatmap yourself: run ma_get_heatmap twice on the same location_id, type_group and date_range, once for rent and once for sale avg_price_psqm. Then divide each district's annualised rent value by its sale value. Each row's location_id and location_name let you join the two results and draw the map.
How do I move from gross to net yield?
Subtract your own costs, because Casafari data does not include them. The calculation is net yield = (annual rent − taxes, maintenance, management, insurance, fees and expected vacancy) ÷ purchase price, including your purchase costs. None of these inputs are in the Area Insights, comparables or property search fields. Use your own figures or an adviser's for each market.