AgencyGraph MCP server
https://platform.casafari.com/mcp/agencygraph: Streamable HTTP, OAuth 2.1 sign-in in the browser (or a platform API key), 10 read-only tools plus account_status (free). Every tool but agencygraph_coverage takes country. Resolve town names to location ids with Location Lookup's locations_search (https://platform.casafari.com/mcp/locations, free), and agency names to agc_ ids with agencygraph_resolve_agency (free). Lists come in pages of up to 25 rows: pass the answer's next_offset as offset for the next page, each page a call.
Connect
Claude
- Open Customize → Connectors, choose + Add and then Add custom connector.
- Name it
Casafari AgencyGraphand pastehttps://platform.casafari.com/mcp/agencygraphas the URL. - Choose Connect, sign in or create your account, accept the Platform Terms of Use and approve.
In Claude Team or Enterprise an organisation owner adds the connector under Organization settings → Connectors; members then choose Connect.
ChatGPT
- Turn on Developer mode in ChatGPT's settings (Apps & Connectors, advanced settings).
- Create a connector, paste
https://platform.casafari.com/mcp/agencygraphas the MCP server URL and choose OAuth. - Sign in or create your account and approve.
Claude Code
claude mcp add --transport http casafari-agencygraph https://platform.casafari.com/mcp/agencygraphThen run /mcp and choose Authenticate. Other clients: Connect and Connect to the Casafari Platform, with the URL above. Problems: Support.
What the server tells the model
AgencyGraph: the real estate agencies of a country, firms only, never individual agents, measured every week from the homes they advertise for sale. For each agency in each town it gives five measures, for all homes and for apartments and houses: portfolio value (the asking prices of the homes it has on the market, their total, mean and median); growth of new and delisted homes by quarter; price cuts and increases; overpricing at the start (how far first asking prices per square metre start above the town's median); and time on the market (minimum, maximum, median and mean days). Countries: Spain (ES) and Portugal (PT); agencygraph_coverage lists them with the date of each weekly build; agencygraph_country_coverage gives one country's towns and agencies in detail. Start with locations_search for a town's location id, or agencygraph_resolve_agency to turn an agency's name or website into its agency_id. Then agencygraph_agency_profile for one agency, agencygraph_area_benchmark or agencygraph_market_share for a town, agencygraph_territory for where an agency works, agencygraph_network for a franchise network and its offices, agencygraph_screen_agencies to filter agencies by the measures, and agencygraph_changes to follow agencies week by week. Lists come in pages of up to 25 rows (size, offset, next_offset); each page is a call. The benchmark shows at most the first 100 agencies of a town; every agency of a town is the city dataset, on REST. AgencyGraph gives no sales counts yet: delisted homes left the market and are not confirmed sales; a confirmed-sales measure is coming. Figures count deduplicated properties: a home advertised on several sites counts once per agency. Fewer than 5 properties give the count and null figures. A merged agency_id answers with the agency it now belongs to (merged_from). For individual agents and partner screens in Germany, AgentGraph AI is a separate product. account_status is free and shows remaining tokens and a payment link when tokens run out.
Tools
Every example below is illustrative: made-up agencies, ids and figures, not real data.
agencygraph_coverage
Countries and weekly builds. Free. Parameters and response.
Lists the countries AgencyGraph answers for, with the date of each country's latest weekly build and the property type groups it measures, and the countries not yet available.
Inputs:
No parameters.
Example arguments:
{}Example result (illustrative: made-up agencies, ids and figures):
{
"countries": [
{
"country": "ES",
"name": "Spain",
"as_of": "2026-10-26",
"type_groups": [
"all",
"apartment",
"house"
],
"operations": [
"sale"
]
},
{
"country": "PT",
"name": "Portugal",
"as_of": "2026-10-26",
"type_groups": [
"all",
"apartment",
"house"
],
"operations": [
"sale"
]
}
],
"not_yet_available": [
{
"country": "IT",
"name": "Italy"
},
{
"country": "DE",
"name": "Germany"
}
],
"method_url": "https://developers.casafari.com/docs/agencygraph"
}agencygraph_country_coverage
One country in detail. 5 tokens per call. Parameters and response.
One country's latest weekly build in detail: the towns and agencies measured, their properties, and the 25 towns with the most agencies, each with the size tier of its city dataset.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.
Example arguments:
{
"country": "PT"
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"name": "Portugal",
"type_groups": [
"all",
"apartment",
"house"
],
"operations": [
"sale"
],
"totals": {
"towns": 300,
"agencies": 9000,
"properties": 150000
},
"towns": [
{
"location_id": 101,
"name": "Lisboa",
"agencies": 2100,
"properties": 26000,
"dataset_tier": "large"
},
{
"location_id": 102,
"name": "Cascais",
"agencies": 650,
"properties": 7400,
"dataset_tier": "mid"
}
]
}agencygraph_resolve_agency
Find an agency. Free. Parameters and response.
Turns an agency's name, one of its trading names or its website into ranked candidates in one country: agency_id, name, kind (agency, office of a network, network), network, its properties and main towns, and how it matched. Ambiguous names return several candidates and say so. Use the agency_id in the other tools.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.q(string, required): An agency's name, one of its trading names, or its website (domain). 2–100 characters.location_id(integer, optional): Optional: only agencies active in this town: a town or city's location id from locations_search. ≥ 1.
Example arguments:
{
"country": "PT",
"q": "Sample Homes"
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"query": "Sample Homes",
"ambiguous": true,
"results": [
{
"agency_id": "agc_EXAMPLEHOMES00000000000000",
"name": "Sample Homes Lisboa",
"kind": "agency",
"network": null,
"matched_by": "name_contains",
"properties": 214,
"main_towns": [
{
"location_id": 101,
"name": "Lisboa",
"properties": 180
},
{
"location_id": 102,
"name": "Cascais",
"properties": 34
}
]
},
{
"agency_id": "agc_EXAMPLEPORTO00000000000000",
"name": "Sample Homes Porto",
"kind": "office",
"network": "Example Network",
"matched_by": "name_contains",
"properties": 95,
"main_towns": [
{
"location_id": 103,
"name": "Porto",
"properties": 95
}
]
}
]
}agencygraph_agency_profile
Agency profile. 50 tokens per call. Parameters and response.
One agency in one country: trading names, websites, network, totals, new and delisted homes for the last four quarters, and its largest towns (up to 25), each with the five measures for all homes, apartments and houses and its rank and percentile among the town's agencies.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.agency_id(string, required): An agency's agc_ id from agencygraph_resolve_agency. pattern^agc_[0-9A-Za-z]{10,40}$.operation(string, optional): sale (default): homes for sale. Rentals are not measured yet. Values:sale. default "sale".
Example arguments:
{
"country": "PT",
"agency_id": "agc_EXAMPLEHOMES00000000000000"
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"agency": {
"agency_id": "agc_EXAMPLEHOMES00000000000000",
"name": "Sample Homes Lisboa",
"kind": "agency",
"network": null,
"trading_names": [
"Sample Homes Lisboa",
"Sample Homes"
],
"websites": [
"samplehomes.example"
]
},
"totals": {
"towns": 2,
"properties": 214,
"portfolio_value_eur": 158500000
},
"growth": {
"quarter": "2026-Q3",
"new": 79,
"delisted": 15,
"new_change_pct": {
"previous_quarter": 6.7,
"year_before": 10.4
},
"delisted_change_pct": {
"previous_quarter": -11.8,
"year_before": null
}
},
"quarters": [
{
"quarter": "2026-Q3",
"new": 79,
"delisted": 15
},
{
"quarter": "2026-Q2",
"new": 74,
"delisted": 17
},
{
"quarter": "2026-Q1",
"new": 66,
"delisted": 12
},
{
"quarter": "2025-Q4",
"new": 58,
"delisted": 14
}
],
"towns": [
{
"location_id": 101,
"name": "Lisboa",
"measures": [
{
"type_group": "all",
"properties": 180,
"co_listed": 32,
"share": 0.039,
"portfolio": {
"value_eur": 117000000,
"mean_eur": 650000,
"median_eur": 560000,
"min_eur": 173600,
"max_eur": 2688000,
"p25_eur": 403200,
"p75_eur": 789600,
"price_per_sqm_median_eur": 4746
},
"price_changes": {
"cut": 22,
"raised": 3,
"cut_share": 0.12,
"cut_median_pct": -4.8,
"raised_median_pct": 3
},
"overpricing_at_start": {
"median_gap_pct": 7.2,
"share_over_10_pct": 0.24,
"cut_since_share": 0.41
},
"time_on_market": {
"properties_counted": 180,
"days_min": 3,
"days_max": 384,
"days_median": 96,
"days_mean": 120
},
"ranks": {
"portfolio_value": {
"rank": 2,
"of": 486,
"percentile": 99.6
},
"days_on_market": {
"rank": 42,
"of": 486,
"percentile": 91.4
}
}
}
]
}
],
"towns_total": 2
}agencygraph_area_benchmark
Agencies of a town, with the five measures. 75 tokens per page of up to 25 rows (the first 100 agencies of a town). Parameters and response.
The agencies active in one town (location_id), each with the five measures (portfolio value, growth of new and delisted homes, price cuts and increases, overpricing at the start, time on the market) and its ranks, sorted by the measure you choose (sort). Pages of up to 25, at most the first 100 agencies of the town in that order; every agency of a town is the city dataset, on REST.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.location_id(integer, required): The town: a town or city's location id from locations_search. ≥ 1.type_group(string, optional): Property type group: all (default), apartment or house. Values:all,apartment,house. default "all".operation(string, optional): sale (default): homes for sale. Rentals are not measured yet. Values:sale. default "sale".sort(string, optional): The measure to sort by. Values:portfolio_value,properties,share,median_price,price_per_sqm,price_cut_share,days_on_market,overpricing. default "portfolio_value".order(string, optional): asc or desc; default the measure's natural order (fewest days on the market first, the rest largest first). Values:asc,desc.min_properties(integer, optional): Leave out agencies with fewer properties (default 5; below 5 the figures are null). ≥ 1; default 5.size(integer, optional): Rows per page, 1 to 25 (default 25). 1–25; default 25.offset(integer, optional): Rows to skip: the next_offset of the previous page. At most the first 100 agencies of a town (offset + size <= 100). ≥ 0; default 0.
Example arguments:
{
"country": "PT",
"location_id": 101,
"sort": "portfolio_value",
"size": 2
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"location": {
"location_id": 101,
"name": "Lisboa"
},
"type_group": "all",
"sort": "portfolio_value",
"order": "desc",
"total": 100,
"offset": 0,
"size": 2,
"next_offset": 2,
"agencies_in_town": 486,
"results": [
{
"position": 1,
"agency": {
"agency_id": "agc_EXAMPLEPRIME00000000000000",
"name": "Example Prime Estates",
"kind": "office",
"network": "Example Network"
},
"measures": {
"type_group": "all",
"properties": 260,
"co_listed": 47,
"share": 0.0563,
"portfolio": {
"value_eur": 214000000,
"mean_eur": 823077,
"median_eur": 690000,
"min_eur": 213900,
"max_eur": 3312000,
"p25_eur": 496800,
"p75_eur": 972900,
"price_per_sqm_median_eur": 5847
},
"price_changes": {
"cut": 31,
"raised": 5,
"cut_share": 0.12,
"cut_median_pct": -5.5,
"raised_median_pct": 3
},
"overpricing_at_start": {
"median_gap_pct": 9.1,
"share_over_10_pct": 0.3,
"cut_since_share": 0.41
},
"time_on_market": {
"properties_counted": 260,
"days_min": 3,
"days_max": 472,
"days_median": 118,
"days_mean": 148
},
"ranks": {
"portfolio_value": {
"rank": 1,
"of": 486,
"percentile": 99.8
},
"days_on_market": {
"rank": 41,
"of": 486,
"percentile": 91.6
}
}
},
"growth": {
"quarter": "2026-Q3",
"new": 71,
"delisted": 19,
"new_change_pct": {
"previous_quarter": 4.4,
"year_before": 7
},
"delisted_change_pct": {
"previous_quarter": 2.1,
"year_before": -5
}
}
},
{
"position": 2,
"agency": {
"agency_id": "agc_EXAMPLEHOMES00000000000000",
"name": "Sample Homes Lisboa",
"kind": "agency",
"network": null
},
"measures": {
"type_group": "all",
"properties": 180,
"co_listed": 32,
"share": 0.039,
"portfolio": {
"value_eur": 117000000,
"mean_eur": 650000,
"median_eur": 560000,
"min_eur": 173600,
"max_eur": 2688000,
"p25_eur": 403200,
"p75_eur": 789600,
"price_per_sqm_median_eur": 4746
},
"price_changes": {
"cut": 22,
"raised": 3,
"cut_share": 0.12,
"cut_median_pct": -4.8,
"raised_median_pct": 3
},
"overpricing_at_start": {
"median_gap_pct": 7.2,
"share_over_10_pct": 0.24,
"cut_since_share": 0.41
},
"time_on_market": {
"properties_counted": 180,
"days_min": 3,
"days_max": 384,
"days_median": 96,
"days_mean": 120
},
"ranks": {
"portfolio_value": {
"rank": 2,
"of": 486,
"percentile": 99.6
},
"days_on_market": {
"rank": 42,
"of": 486,
"percentile": 91.4
}
}
},
"growth": {
"quarter": "2026-Q3",
"new": 64,
"delisted": 12,
"new_change_pct": {
"previous_quarter": 6.7,
"year_before": 10.7
},
"delisted_change_pct": {
"previous_quarter": -14.3,
"year_before": null
}
}
}
],
"more": "This town has 486 agencies; the benchmark shows the first 100 in this order. Every agency of the town is the city dataset (GET /v1/agencygraph/pt/datasets?location_id=101)."
}agencygraph_market_share
Market share in a town. 50 tokens per page of up to 25 rows. Parameters and response.
Each agency's share of the properties on the market in one town, and of the town's new and delisted homes in the latest complete quarter and the quarter before, largest share first. A home two agencies advertise counts for each, so shares can add up to more than 1. Pages of up to 25 agencies.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.location_id(integer, required): The town: a town or city's location id from locations_search. ≥ 1.type_group(string, optional): Property type group: all (default), apartment or house. Values:all,apartment,house. default "all".operation(string, optional): sale (default): homes for sale. Rentals are not measured yet. Values:sale. default "sale".size(integer, optional): Rows per page, 1 to 25 (default 25). 1–25; default 25.offset(integer, optional): Rows to skip: the next_offset of the previous page. ≥ 0; default 0.
Example arguments:
{
"country": "ES",
"location_id": 301,
"size": 2
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "ES",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"location": {
"location_id": 301,
"name": "Madrid"
},
"type_group": "all",
"quarter": "2026-Q3",
"town_totals": {
"quarter": "2026-Q3",
"new": 9100,
"delisted": 4300,
"previous_quarter": {
"quarter": "2026-Q2",
"new": 8800,
"delisted": 4100
}
},
"total": 2380,
"offset": 0,
"size": 2,
"next_offset": 2,
"results": [
{
"position": 1,
"agency": {
"agency_id": "agc_EXAMPLECENTRO0000000000000",
"name": "Example Inmobiliaria Centro",
"kind": "agency",
"network": null
},
"properties": 310,
"share": 0.034,
"new": 355,
"new_share": 0.039,
"delisted": 133,
"delisted_share": 0.0309,
"previous_quarter": {
"new_share": 0.034,
"delisted_share": 0.0293
}
},
{
"position": 2,
"agency": {
"agency_id": "agc_EXAMPLEMADRID0000000000000",
"name": "Sample Realty Madrid",
"kind": "office",
"network": "Example Network"
},
"properties": 240,
"share": 0.028,
"new": 200,
"new_share": 0.022,
"delisted": 112,
"delisted_share": 0.026,
"previous_quarter": {
"new_share": 0.025,
"delisted_share": 0.0244
}
}
]
}agencygraph_territory
Where an agency works. 50 tokens per page of up to 25 rows. Parameters and response.
One row per town where an agency has homes on the market: properties, its share of the town, portfolio value and its rank there, and new and delisted homes of the latest complete quarter. Largest first, pages of up to 25 towns.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.agency_id(string, required): An agency's agc_ id from agencygraph_resolve_agency. pattern^agc_[0-9A-Za-z]{10,40}$.type_group(string, optional): Property type group: all (default), apartment or house. Values:all,apartment,house. default "all".operation(string, optional): sale (default): homes for sale. Rentals are not measured yet. Values:sale. default "sale".size(integer, optional): Rows per page, 1 to 25 (default 25). 1–25; default 25.offset(integer, optional): Rows to skip: the next_offset of the previous page. ≥ 0; default 0.
Example arguments:
{
"country": "PT",
"agency_id": "agc_EXAMPLEHOMES00000000000000"
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"agency": {
"agency_id": "agc_EXAMPLEHOMES00000000000000",
"name": "Sample Homes Lisboa",
"kind": "agency",
"network": null
},
"type_group": "all",
"total": 2,
"offset": 0,
"size": 25,
"next_offset": null,
"results": [
{
"location_id": 101,
"name": "Lisboa",
"properties": 180,
"share": 0.023,
"portfolio_value_eur": 117000000,
"portfolio_value_rank": {
"rank": 2,
"of": 486,
"percentile": 99.6
},
"growth": {
"quarter": "2026-Q3",
"new": 64,
"delisted": 12,
"new_change_pct": {
"previous_quarter": 6.7,
"year_before": 10.7
},
"delisted_change_pct": {
"previous_quarter": null,
"year_before": null
}
}
},
{
"location_id": 102,
"name": "Cascais",
"properties": 34,
"share": 0.019,
"portfolio_value_eur": 41500000,
"portfolio_value_rank": {
"rank": 9,
"of": 122,
"percentile": 92.6
},
"growth": {
"quarter": "2026-Q3",
"new": 15,
"delisted": 3,
"new_change_pct": {
"previous_quarter": 7.1,
"year_before": null
},
"delisted_change_pct": {
"previous_quarter": null,
"year_before": null
}
}
}
]
}agencygraph_network
Franchise network and its offices. 75 tokens per page of up to 25 rows. Parameters and response.
One franchise or brand network in a country (brand, such as agencygraph_resolve_agency returns in network): its totals, and its offices with each one's properties, portfolio value, number of towns and main towns, largest first. location_id narrows it to one town. Pages of up to 25 offices.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.brand(string, required): The network's name, as agencygraph_resolve_agency returns it in network (for example RE/MAX, Century 21). 1–100 characters.location_id(integer, optional): Optional: only its offices in this town: a town or city's location id from locations_search. ≥ 1.size(integer, optional): Rows per page, 1 to 25 (default 25). 1–25; default 25.offset(integer, optional): Rows to skip: the next_offset of the previous page. ≥ 0; default 0.
Example arguments:
{
"country": "PT",
"brand": "Example Network",
"size": 1
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"network": "Example Network",
"totals": {
"offices": 58,
"towns": 74,
"properties": 4120,
"portfolio_value_eur": 1630000000
},
"total": 58,
"offset": 0,
"size": 1,
"next_offset": 1,
"results": [
{
"office": {
"agency_id": "agc_EXAMPLEPRIME00000000000000",
"name": "Example Prime Estates",
"kind": "office",
"network": "Example Network"
},
"properties": 294,
"portfolio_value_eur": 255500000,
"towns": 2,
"main_towns": [
{
"location_id": 101,
"name": "Lisboa",
"properties": 260
},
{
"location_id": 102,
"name": "Cascais",
"properties": 34
}
]
}
]
}agencygraph_screen_agencies
Screen agencies by the measures. 100 tokens per page of up to 25 rows. Parameters and response.
Filters agencies, one row per agency and town, in the whole country or in up to 20 towns, by ranges of the measures (portfolio value, share, price cut share, days on the market, overpricing), size, network or independence and property type, sorted as you ask, with each row's measures and growth. For recruitment, partners or agencies growing in an area. Pages of up to 25 rows.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.location_ids(integer[], optional): Optional: up to 20 towns (location ids from locations_search); without, the whole country. at most 20 items; ≥ 1.type_group(string, optional): Property type group: all (default), apartment or house. Values:all,apartment,house. default "all".operation(string, optional): sale (default): homes for sale. Rentals are not measured yet. Values:sale. default "sale".sort(string, optional): The measure to sort by. Values:portfolio_value,properties,share,median_price,price_per_sqm,price_cut_share,days_on_market,overpricing. default "portfolio_value".order(string, optional): asc or desc; default the measure's natural order (fewest days on the market first, the rest largest first). Values:asc,desc.min_properties(integer, optional): Leave out agencies with fewer properties (default 5; below 5 the figures are null). ≥ 1; default 5.max_properties(integer, optional): At most this many properties in the town. ≥ 1.min_portfolio_value_eur(number, optional): At least this portfolio value (EUR).max_portfolio_value_eur(number, optional): At most this portfolio value (EUR).min_share(number, optional): At least this share.max_share(number, optional): At most this share.min_price_cut_share(number, optional): At least this price cut share.max_price_cut_share(number, optional): At most this price cut share.min_days_on_market(number, optional): At least this days on market.max_days_on_market(number, optional): At most this days on market.min_overpricing_pct(number, optional): At least this overpricing (percent).max_overpricing_pct(number, optional): At most this overpricing (percent).independent(boolean, optional): true: only agencies that belong to no network.network(string, optional): Only offices of this network. at most 100 characters.size(integer, optional): Rows per page, 1 to 25 (default 25). 1–25; default 25.offset(integer, optional): Rows to skip: the next_offset of the previous page. ≥ 0; default 0.
Example arguments:
{
"country": "PT",
"location_ids": [
401,
402
],
"independent": true,
"min_properties": 20,
"max_days_on_market": 120
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"type_group": "all",
"sort": "portfolio_value",
"order": "desc",
"total": 7,
"offset": 0,
"size": 25,
"next_offset": null,
"results": [
{
"agency": {
"agency_id": "agc_EXAMPLENORTE00000000000000",
"name": "Sample Imobiliária Norte",
"kind": "agency",
"network": null
},
"location": {
"location_id": 401,
"name": "Sample Municipality A"
},
"measures": {
"type_group": "all",
"properties": 48,
"co_listed": 9,
"share": 0.0828,
"portfolio": {
"value_eur": 13900000,
"mean_eur": 289583,
"median_eur": 260000,
"min_eur": 80600,
"max_eur": 1248000,
"p25_eur": 187200,
"p75_eur": 366600,
"price_per_sqm_median_eur": 2203
},
"price_changes": {
"cut": 5,
"raised": 1,
"cut_share": 0.1,
"cut_median_pct": -3.9,
"raised_median_pct": 3
},
"overpricing_at_start": {
"median_gap_pct": 5.4,
"share_over_10_pct": 0.18,
"cut_since_share": 0.41
},
"time_on_market": {
"properties_counted": 48,
"days_min": 3,
"days_max": 328,
"days_median": 82,
"days_mean": 102
},
"ranks": {
"portfolio_value": {
"rank": 3,
"of": 61,
"percentile": 95.1
},
"days_on_market": {
"rank": 43,
"of": 61,
"percentile": 29.5
}
}
},
"growth": {
"quarter": "2026-Q3",
"new": 22,
"delisted": 4,
"new_change_pct": {
"previous_quarter": 18,
"year_before": 29.4
},
"delisted_change_pct": {
"previous_quarter": null,
"year_before": null
}
}
}
]
}agencygraph_changes
What changed for agencies. 25 tokens per call (up to 25 agencies). Parameters and response.
For up to 25 agency_ids, week by week since a date: new, delisted and relisted homes, price increases and cuts with their median change, and merges into another agency. Keep your own list of agency_ids and call it each week to follow them.
Inputs:
country(string, required): Country code: ES or PT. Values:ES,PT.agency_ids(string[], required): Up to 25 agency ids to follow (on REST, comma-separated). 1–25 items; pattern^agc_[0-9A-Za-z]{10,40}$.since(string, optional): A date within the last year, YYYY-MM-DD (default: a week before the latest weekly build). pattern^\d{4}-\d{2}-\d{2}$.
Example arguments:
{
"country": "PT",
"agency_ids": [
"agc_EXAMPLEPRIME00000000000000",
"agc_EXAMPLEOEIRAS0000000000000"
],
"since": "2026-10-19"
}Example result (illustrative: made-up agencies, ids and figures):
{
"country": "PT",
"build": {
"build_id": "agb_EXAMPLEBUILD0000000000001",
"as_of": "2026-10-26"
},
"method_url": "https://developers.casafari.com/docs/agencygraph",
"since": "2026-10-19",
"from_week": "2026-W43",
"results": [
{
"agency_id": "agc_EXAMPLEPRIME00000000000000",
"found": true,
"agency": {
"agency_id": "agc_EXAMPLEPRIME00000000000000",
"name": "Example Prime Estates",
"kind": "office",
"network": "Example Network"
},
"totals": {
"new": 8,
"delisted": 1,
"relisted": 0,
"price_up": 0,
"price_down": 2
},
"weeks": [
{
"week": "2026-W43",
"new": 8,
"delisted": 1,
"relisted": 0,
"price_up": 0,
"price_up_median_pct": null,
"price_down": 2,
"price_down_median_pct": -4.5
}
],
"merges": []
},
{
"agency_id": "agc_EXAMPLEOEIRAS0000000000000",
"found": true,
"agency": {
"agency_id": "agc_EXAMPLEOEIRAS0000000000000",
"name": "Example Casas Oeiras",
"kind": "agency",
"network": null
},
"totals": {
"new": 2,
"delisted": 0,
"relisted": 1,
"price_up": 0,
"price_down": 11
},
"weeks": [
{
"week": "2026-W43",
"new": 2,
"delisted": 0,
"relisted": 1,
"price_up": 0,
"price_up_median_pct": null,
"price_down": 11,
"price_down_median_pct": -6
}
],
"merges": []
}
]
}