# Which agencies in a German city are worth partnering with?

> **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. Every property is one record with its full price and market history. [How the property graph is built](/docs/property-graph).

Use AgentGraph AI on the Casafari MCP server. Its `agentgraph_screen_agencies` tool ranks the agencies active in a German city, district or state against two partner profiles, growing independents and franchise offices losing momentum. It returns each agency's figures, signals met and missed, team and contacts. Open finalists with `agentgraph_agency_profile` and brief outreach with `agentgraph_partner_brief`.

Products: [AgentGraph AI](/docs/agentgraph).

## Short answer

`agentgraph_screen_agencies` ranks the real estate agencies active in a German area against two partner profiles:

- `franchise_office_losing_momentum`: franchise offices losing momentum.
- `growing_independent`: growing independent agencies, meaning solo brokers and small teams of about 2-10.

Each result has the agency's figures, the profile signals it meets and misses, its team and its contacts. The tool belongs to [AgentGraph AI](/docs/agentgraph) on the Casafari MCP server (`https://mcp.casafari.com/`). It is MCP only, with no REST equivalent.

Partnering with the right agencies at the right moment is how networks expand without guessing.

## Steps

### Call list_servers and agentgraph_list_profiles to read the profile rules

1. Call [`list_servers`](/docs/gateway/list_servers). It returns each product your account can use, with its own instructions. If AgentGraph AI is missing, your subscription does not cover it.
2. Call [`agentgraph_list_profiles`](/docs/agentgraph/list_profiles) (no inputs). It lists the partner profiles the screens match against, with each one's exact rules, its priority and what the advertisement data cannot show.

### Resolve ambiguous names with agentgraph_find_location

3. Call [`agentgraph_find_location`](/docs/agentgraph/find_location) with `query` (at least 2 characters) and optional `limit` (1 to 20, default 8). It returns German cities, districts and states with their location ids, kinds and parent areas. Use it when a name is ambiguous (several "Neustadt") or to pick a district within a city. The screens also accept a name directly, such as "München", "Hamburg-Altona" or "Bayern"; a 5-digit value is read as a postcode.

### See what normal looks like: agentgraph_area_benchmark

4. Call [`agentgraph_area_benchmark`](/docs/agentgraph/area_benchmark) with `location`, `unit` set to `agency` (the default) and `operation`. It returns percentiles of active homes, exits, days on market, price cuts and momentum, how the market splits between independents, franchises, banks and online brokerages, and the biggest networks there. Use these percentiles to set filter thresholds.

### Screen: agentgraph_screen_agencies with location, profile, operation, filters (brand_kinds, min_momentum_pct, max_team_size), client_brand

5. Call [`agentgraph_screen_agencies`](/docs/agentgraph/screen_agencies) with:
   - `location` (name or id) and, optionally, `zipcodes` (up to 200 five-digit postcodes).
   - `profile`: one profile, an array of both, `all` (default), or `none` to rank every broker by volume using filters only.
   - `operation`: `sale` (default) or `rent`.
   - `limit`: 1 to 50, default 20.
   - `filters`, applied on top of the profiles: `brand_kinds` (`independent`, `franchise`, `bank_network`, `digital_brokerage`), `min_momentum_pct` and `max_momentum_pct` (whole-number percents), `min_team_size` and `max_team_size` (named people on the agency's advertisements), plus `min_active_homes`, `max_active_homes`, `min_exits_last_12m`, `min_median_days_on_market`, `max_median_days_on_market`, `min_price_cut_share_pct`, `max_postcodes`, `min_top_postcode_share_pct` and `exclude_brands`.
   - `client_brand`: your own network's name, if you are one. Its offices and agents are not offered as matches from "another network's franchise".

### Deep dive: agentgraph_agency_profile by id

6. Call [`agentgraph_agency_profile`](/docs/agentgraph/agency_profile) with the `id` the screen returned (`c:...` or `k:...`), or a `name` when no id is known. Add `location` to benchmark against that area instead of the agency's main city. It returns the agency's figures quarter by quarter, its team (named agents on its advertisements), its places, contacts and every partner profile it matches.

### Prepare outreach: agentgraph_partner_brief

7. Call [`agentgraph_partner_brief`](/docs/agentgraph/partner_brief) with `id` (required) and the `location` to compare against. It returns a one-page brief for the person who will approach the agency, and `brief_url`, a printable page.

### Save the shortlist: agentgraph_save_to_watchlist

8. Call [`agentgraph_save_to_watchlist`](/docs/agentgraph/save_to_watchlist) with `ids` (1 to 50 per call), the `location` to measure them in, `operation` and an optional `label` (up to 60 characters, e.g. 'Q4 outreach'). AgentGraph AI re-measures the list every day and records changes.

## Example: independent agencies in München

Prompt to your AI assistant, once the Casafari MCP server is [connected](/docs/connect):

> Which independent agencies in München are growing faster than the market?

The assistant calls `list_servers`, then `agentgraph_list_profiles`, then `agentgraph_area_benchmark` for München with `unit` `agency`, and then `agentgraph_screen_agencies` with arguments like these:

```json
{
  "location": "München",
  "profile": "growing_independent",
  "operation": "sale",
  "limit": 20,
  "filters": { "brand_kinds": ["independent"] }
}
```

A condensed answer looks like this (placeholders shown; the tool returns the real names and figures):

| Rank | Agency | Profile | Momentum | Active homes | New homes per quarter | Team | Signals missed |
|---|---|---|---|---|---|---|---|
| 1 | (agency) | growing_independent | (value) | (value) | (value) | (value) | (none or list) |
| 2 | (agency) | growing_independent | (value) | (value) | (value) | (value) | (list) |

The assistant then opens the top result with `agentgraph_agency_profile` and, if asked, writes an outreach brief with `agentgraph_partner_brief`.

## How to read the result

### Active homes, new homes per quarter, momentum, exits, days on market, price cuts, postcodes

Active homes and new homes per quarter show the agency's current stock and how fast it wins new homes. Momentum shows its direction. Exits and days on market show how its homes leave the market; price cuts show how often its asking prices fall. Postcodes show how concentrated its territory is. Compare each figure with the percentiles from `agentgraph_area_benchmark`: an agency above the area's typical values on momentum, with few price cuts, is a stronger growth partner than one that is only large.

### Signals met and missed per profile

Each result lists the profile signals it meets and the ones it misses. An agency that meets every signal of `growing_independent` fits the profile fully; one that misses a signal may still be worth a call, but the missed signal is the first question to check in `agentgraph_agency_profile`.

### What the advertisement data cannot show (from list_profiles)

All figures come from the properties agencies advertise, merged into the [property graph](/docs/property-graph). `agentgraph_list_profiles` states, for each profile, what this data cannot show. Read it before drawing conclusions; this page does not repeat it because the tool's live answer is the contract.

## Limits

All AgentGraph AI tools are available to Casafari clients with MCP access, using their Casafari account; self-serve access for new users is coming soon. They are MCP only: there is no REST equivalent. The sources give no prices, quotas, rate limits or SLAs; ask [Casafari](https://www.casafari.com/). When a product's quota is used up, its tools answer `Request limit reached for this product.`

### Germany only, as the tools state

AgentGraph AI covers Germany. Locations are German cities, districts, states or five-digit postcodes. For other markets, AgentGraph AI has no data; see [Does Casafari cover Germany?](/docs/faq/coverage-germany).

### Up to 50 results per screen; brief_url valid 7 days and for internal use

`limit` runs from 1 to 50 (default 20). Narrow the area or add filters to see more relevant agencies. The partner brief's `brief_url` is valid for 7 days; share it only inside your organisation.

### Lawful approach guidance in the brief

Each partner brief includes how the agency may lawfully be approached in Germany, alongside two or three talking points, key figures against the area, the partner signals met, the quality of its advertisements (photos, descriptions, sole-agent mandates, price cuts, own website versus portals), its team and a map of its active advertised homes. Follow that guidance before contacting anyone.

## Questions

### What do the two agency profiles mean?

The two agency profiles are franchise_office_losing_momentum, for franchise offices losing momentum, and growing_independent, for growing independent agencies, meaning solo brokers and small teams of about 2-10. Call agentgraph_list_profiles to read each profile's exact rules, its priority and what the advertisement data cannot show. Use profile all to match either, or none to rank every broker by volume with filters only.

### Can I exclude my own network's offices?

Yes, pass your network's name as client_brand and agentgraph_screen_agencies will not offer its offices and agents as matches from another network's franchise. To drop other brands too, list them in the exclude_brands filter. You can also restrict results by brand_kinds, choosing among independent, franchise, bank_network and digital_brokerage.

### Can I screen rentals instead of sales?

Yes, set operation to rent in agentgraph_screen_agencies; the default is sale. Use the same operation in agentgraph_area_benchmark, agentgraph_agency_profile and agentgraph_partner_brief so the figures you compare describe the same market. Agencies strong in rentals can rank very differently from the sales screen of the same area.

### How current are the figures?

The sources publish no data refresh frequency for AgentGraph AI or the property graph, so this page cannot state one; ask Casafari at https://www.casafari.com/. What the tools do state: entries saved to the watchlist are re-measured every day, and agentgraph_watchlist_changes with refresh true re-measures on request, which is slower.

### Can I limit the screen to certain postcodes?

Yes, pass up to 200 five-digit German postcodes in zipcodes, with or without a location. A 5-digit value given as location is also read as a postcode. To favour concentrated agencies instead, use the max_postcodes and min_top_postcode_share_pct filters, which act on how many postcodes an agency works in and its top postcode's share.

All use cases: [Use cases](/docs/use-cases#agentgraph).
