# How do I track what competing agencies are selling, reserving and removing in my area?

> **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).

Casafari's property graph links each property to the agencies and agents advertising it. Over the REST API, get exact names from `GET /api/v1/references/agencies` and count a competitor's stock with `POST /api/v2/properties/search` and `with_agencies`. Then follow its reservations, removals and sales with New Market Leads alerts filtered by agency.

Products: [References](/docs/references), [Property Sourcing](/docs/property-sourcing), [New Market Leads](/docs/alerts), [Comparables & Valuation](/docs/comparables-valuation), [AgentGraph AI](/docs/agentgraph).

## Short answer

The property graph links each property to the agencies and agents that advertise it, with one record per property. That lets you do three things for each competitor:

- count its active stock in an area
- see how much of that stock it holds exclusively
- follow every reservation, removal from the market and sale on its properties through New Market Leads alerts

## Steps

### Find exact names with `GET /api/v1/references/agencies`, `GET /api/v1/references/agents` and `GET /api/v1/references/sources`

1. Look up each competitor's name as Casafari stores it:
   - agencies with `GET /api/v1/references/agencies`
   - agents with `GET /api/v1/references/agents`
   - portals and other sources with `GET /api/v1/references/sources`

`with_agencies` and `without_agencies` take these agency, company or source names, and `listing_agents` takes the agent names. Query parameters are on each operation page.

### Count stock: `POST /api/v2/properties/search` with location_ids and with_agencies, `listing_agents`, exclusive

2. For each competitor, call `POST /api/v2/properties/search` with `location_ids` for your area. Set `with_agencies` to the agency's name, or `listing_agents` for one agent.
3. Run the same search with `exclusive: true`. That returns the properties available on the market exclusively from a single agency.

### Follow changes: `POST /api/v1/listing-alerts/search` with with_agencies for reservations, removals from the market and sales

4. Call `POST /api/v1/listing-alerts/search` with `location_ids`, `with_agencies`, `alert_date_from` and `alert_date_to`.
5. Set `alert_subtypes` to the reservation, removal and sale events. The exact values are on the [Search alerts (v1)](/docs/rest/alerts/search-alerts-v1) page.
6. Use `statuses` to filter by current status, for example reserved or sold.

### Automate: a feed on `POST /alerts-api/feeds`

7. Set a webhook with `PUT /alerts-api/webhooks`, then create a feed with `feed_name` and `filters` (`business_type` required); a feed created before any webhook answers `409` with `No webhook configured`. `filters` has no key for an agency name. Its only agency condition is `has_agency_name`, true or false. A feed therefore cannot follow one competitor. See the [Create feed](/docs/rest/alerts/create-feed) page.

## Example: agencies active in Estoril

1. Get the Estoril location id with `POST /api/v1/references/locations` (`name` "Estoril") or `POST /api/v1/references/locations/typeahead` (`country_codes` ["PT"], `name` "Estoril").
2. Pick the agencies to compare from `GET /api/v1/references/agencies`.
3. For each agency, send this to `POST /api/v2/properties/search`, then send it again with `"exclusive": true`:

```json
{
  "search_operations": ["sale"],
  "location_ids": [<ESTORIL_LOCATION_ID>],
  "with_agencies": ["<AGENCY_NAME>"]
}
```

The accepted values for `search_operations` are on the [Search properties (v2)](/docs/rest/property-sourcing/search-properties-v2) page.

4. For the period you want to review, send `POST /api/v1/listing-alerts/search` with the same `location_ids` and `with_agencies`, plus `alert_date_from` and `alert_date_to`.

Build a league table with one row per agency and these columns: active properties for sale, of which exclusive, reservations, removals from the market and sales in the period. The figures come from your own responses; this page shows no sample numbers.

An assistant on the Casafari MCP server cannot answer *"List the agencies active in Estoril and how many properties each has"*. References, Property Sourcing and alerts are REST only.

In Germany, AgentGraph AI answers this kind of question over MCP:

- `agentgraph_area_benchmark` shows how the market splits between independents, franchises, banks and online brokerages, and names the biggest networks.
- `agentgraph_screen_agencies` ranks the agencies active in an area.

## How to read the result

### Shared versus exclusive properties

Each property is one record, so a home advertised by several agencies appears once in each of those agencies' results. Subtract the exclusive count from the total to get the properties a competitor shares with others.

A high exclusive share means mandates held alone. Shared stock is contested, and a removal or sale on it may have gone to another agency.

### `sale_active_listings_count` on a property shows how many agencies advertise it

`sale_active_listings_count` is the number of active advertisements a property has on the sales market. It is a field of the `comps_get-comparables` output, which is available over MCP around a point. The same output includes `average_listings_per_property` in its statistics.

A count above one means several agencies or portals advertise the same home. Whether `POST /api/v2/properties/search` returns this field is shown on its operation page.

## Limits

### Agency names must match the References list

`with_agencies`, `without_agencies` and `listing_agents` accept the names returned by the References operations. Spelling a name your own way will not match. The graph sees only what is advertised, so mandates that are never advertised do not appear.

### Not available over MCP outside Germany's AgentGraph AI

References and Property Sourcing operations, and `POST /api/v1/listing-alerts/search`, are for Casafari client accounts. `/alerts-api/feeds` is for Casafari client accounts too.

For agency screening in Germany, AgentGraph AI is available over MCP to Casafari clients with MCP access; its tools' descriptions name Germany as their market. For the property search, `/alerts-api/feeds` and AgentGraph AI, self-serve access for new users is coming soon. No refresh frequency, quotas or prices are published; ask [Casafari](https://www.casafari.com/).

## Questions

### Can I see which agent has a property?

Yes, where an agent is named. The graph links properties to agents. `GET /api/v1/references/agents` gives the names Casafari stores, and `listing_agents` on `POST /api/v2/properties/search` or `POST /api/v1/listing-alerts/search` returns properties or alerts for those agents. In Germany, `agentgraph_screen_agents` notes that only advertisements naming an agent count, and that agency websites name them more often than portals.

### Can I get competitor activity as a webhook?

Not by agency name. A feed on `POST /alerts-api/feeds`, delivered through `PUT /alerts-api/webhooks`, sends alerts for its filters, but `filters` only has `has_agency_name`, no agency names. Casafari client accounts can filter alerts by agency on demand with `with_agencies` on `POST /api/v1/listing-alerts/search`.

### Can I exclude my own agency from results?

Yes. `without_agencies` excludes the agencies, companies or sources you name. It works on `POST /api/v2/properties/search`, `POST /api/v1/listing-alerts/search` and `comps_get-comparables`, using names from `GET /api/v1/references/agencies`. In Germany, AgentGraph AI's screens take `client_brand`, which keeps your own network's offices and agents out of competitor-franchise matches, and an `exclude_brands` filter.

### Is there an equivalent for Germany over MCP?

Yes. AgentGraph AI is offered over the Casafari MCP server and covers Germany. `agentgraph_screen_agencies` and `agentgraph_screen_agents` rank agencies and agents in an area. `agentgraph_territory_map` shows network shares by district. `agentgraph_area_benchmark` describes the market split. A watchlist, re-measured every day, reports changes through `agentgraph_watchlist_changes`.

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