# Search profiles

7 tools. Generated from the MCP server: names, inputs and prices match the code.

Source: https://leverage.immo/docs/tools/search-profiles/

## search_profiles_create

**Create Search Profile** · Write · Free

Save a search profile. Create one only when the person asks and gives the values; do not invent criteria. Free on every plan. checks take any criterion of the deals_search catalog, one per check_type, percentages as 0-1 fractions (0.05 = 5 %). Rates and shares of the assumptions are 0-1 fractions; financing is all three of loan_amount_percentage, interest_rate, repayment_rate or none. agent_enabled (the daily mail, free) needs a place and one of the plan’s mailing slots. Storing a market-value or cashflow criterion or sort needs a plan that shows market values. Judging what a mail delivers is a routine (routines_create with trigger deal_arrived and source search_agent, whose search_agent_id is this id).

REST: `POST /api/v1/search-profiles`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | yes |  |
| `location_label` | `string \| null` | no |  |
| `search_area` | `object \| null` | no | A drawn area as a GeoJSON Polygon or MultiPolygon. A place is this OR a centre with a radius, never both; none at all is a Suchprofil without a place, which cannot mail or be public. |
| `centre_latitude` | `number \| null` | no |  |
| `centre_longitude` | `number \| null` | no |  |
| `search_distance` | `number \| null` | no | Radius in km around the centre; required with a centre. |
| `property_types` | `array<string>` | no | The property types searched; empty means every type. Values: `multi_family_house`, `house`, `apartment` |
| `calculation_strategy` | `string \| null` | no | The strategy the metrics are modelled with. Null: the account’s default strategy. A fix-and-flip criterion needs fix_and_flip. Values: `buy_and_hold`, `fix_and_flip` |
| `interest_rate` | `number \| null` | no |  |
| `repayment_rate` | `number \| null` | no |  |
| `loan_amount_percentage` | `number \| null` | no |  |
| `buyhold_building_share` | `number \| null` | no |  |
| `purchase_price_discount` | `number \| null` | no |  |
| `estimated_rent_net_per_sqm` | `number \| null` | no |  |
| `estimated_operating_costs_per_sqm` | `number \| null` | no |  |
| `estimated_operating_costs_transferable_per_sqm` | `number \| null` | no |  |
| `maintenance_reserve_per_sqm` | `number \| null` | no |  |
| `imputed_rental_loss` | `number \| null` | no |  |
| `buyhold_estimated_rental_increase` | `number \| null` | no |  |
| `buyhold_estimated_market_value_increase` | `number \| null` | no |  |
| `buyhold_estimated_cost_increase` | `number \| null` | no |  |
| `fixflip_target_selling_price_per_sqm` | `number \| null` | no |  |
| `fixflip_target_rent_net_per_sqm` | `number \| null` | no |  |
| `fixflip_project_duration_in_months` | `integer \| null` | no |  |
| `fixflip_operating_costs_per_sqm` | `number \| null` | no |  |
| `checks` | `array<object>` | no | The criteria, one per check_type: a deal must meet all of them. Replaces the whole set; leave out to keep it. Percentages are 0-1 fractions (0.05 = 5 %). |
| `search_order_by` | `string \| null` | no | Values: `distance`, `startDate`, `salePrice`, `salePricePerSqm`, `rentalYieldGross`, `purchasePriceFactor`, `cashflow`, `marketDiscount`, `fixflipMargin`, `fixflipProfit`, `rentalYieldGrossActual`, `rentalYieldGrossYearOne`, `returnOnEquity`, `crawledAt`, `purchasePriceVsMarket`, `rentVsMarket`, `totalInvestmentCostsPerSqm`, `fixflipBestCaseMargin`, `fixflipBestCaseProfit` |
| `search_order_by_direction` | `string \| null` | no | Values: `asc`, `desc` |
| `agent_enabled` | `boolean` | no | The daily mail of new hits. Needs a place; switching it on uses one of the plan’s active Suchprofil slots. |
| `agent_time_local` | `string \| null` | no |  |
| `agent_timezone` | `string` | no |  |
| `public_enabled` | `boolean` | no | Shown on the owner’s public investor page. Needs a place. |
| `public_note` | `string \| null` | no |  |

## search_profiles_delete

**Delete Search Profile** · Write · Destructive · Free

Delete a search profile: it disappears, stops mailing and leaves the investor page. Its delivered listings, runs and routines stay. Confirm with the person first; it cannot be restored here.

REST: `DELETE /api/v1/search-profiles/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `integer` | yes | The search profile id. |

## search_profiles_get

**Get Search Profile** · Read · Free

Get one search profile with its checks, assumptions, mail schedule and investor-page settings.

REST: `GET /api/v1/search-profiles/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `integer` | yes | The search profile id. |

## search_profiles_list

**List Search Profiles** · Read · Free

List the user’s search profiles (Suchprofile), oldest first. A search profile is a saved deal search: a place (a drawn area or a centre with a radius, or none yet: has_place false), property_types (empty = every type), checks (the criteria, as deals_search takes them), calculation assumptions (null = the account’s defaults), an optional daily mail of new hits (agent_enabled) and an optional card on the investor page (public_enabled). Pass one to deals_search as search_profile_id.

REST: `GET /api/v1/search-profiles`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | `integer` | no |  |
| `offset` | `integer` | no |  |
| `source_acquisition_profile_id` | `integer` | no | The id of an acquisition profile from before the merge: returns the Suchprofil that carries it (old links). |

## search_profiles_patch

**Update Search Profile** · Write · Destructive · Free

Update a search profile: fields left out stay, null clears one (an assumption falls back to the account’s number). Rates, shares and percentages are 0-1 fractions. checks replaces the whole set, so call search_profiles_get first and send the checks to keep. Switching agent_enabled on checks the plan’s mailing slots and starts the daily mail; off stops it. A profile with provided_by_customer_id is provided and edited by a Vertrieb seller: only agent_enabled, agent_time_local and agent_timezone may change (otherwise search_profile_provided_by_seller; Duplizieren in the app makes an editable copy), and its mail takes no mailing slot.

REST: `PATCH /api/v1/search-profiles/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | no |  |
| `location_label` | `string \| null` | no |  |
| `search_area` | `object \| null` | no | A drawn area as a GeoJSON Polygon or MultiPolygon. A place is this OR a centre with a radius, never both; none at all is a Suchprofil without a place, which cannot mail or be public. |
| `centre_latitude` | `number \| null` | no |  |
| `centre_longitude` | `number \| null` | no |  |
| `search_distance` | `number \| null` | no | Radius in km around the centre; required with a centre. |
| `property_types` | `array<string>` | no | The property types searched; empty means every type. Values: `multi_family_house`, `house`, `apartment` |
| `calculation_strategy` | `string \| null` | no | The strategy the metrics are modelled with. Null: the account’s default strategy. A fix-and-flip criterion needs fix_and_flip. Values: `buy_and_hold`, `fix_and_flip` |
| `interest_rate` | `number \| null` | no |  |
| `repayment_rate` | `number \| null` | no |  |
| `loan_amount_percentage` | `number \| null` | no |  |
| `buyhold_building_share` | `number \| null` | no |  |
| `purchase_price_discount` | `number \| null` | no |  |
| `estimated_rent_net_per_sqm` | `number \| null` | no |  |
| `estimated_operating_costs_per_sqm` | `number \| null` | no |  |
| `estimated_operating_costs_transferable_per_sqm` | `number \| null` | no |  |
| `maintenance_reserve_per_sqm` | `number \| null` | no |  |
| `imputed_rental_loss` | `number \| null` | no |  |
| `buyhold_estimated_rental_increase` | `number \| null` | no |  |
| `buyhold_estimated_market_value_increase` | `number \| null` | no |  |
| `buyhold_estimated_cost_increase` | `number \| null` | no |  |
| `fixflip_target_selling_price_per_sqm` | `number \| null` | no |  |
| `fixflip_target_rent_net_per_sqm` | `number \| null` | no |  |
| `fixflip_project_duration_in_months` | `integer \| null` | no |  |
| `fixflip_operating_costs_per_sqm` | `number \| null` | no |  |
| `checks` | `array<object>` | no | The criteria, one per check_type: a deal must meet all of them. Replaces the whole set; leave out to keep it. Percentages are 0-1 fractions (0.05 = 5 %). |
| `search_order_by` | `string \| null` | no | Values: `distance`, `startDate`, `salePrice`, `salePricePerSqm`, `rentalYieldGross`, `purchasePriceFactor`, `cashflow`, `marketDiscount`, `fixflipMargin`, `fixflipProfit`, `rentalYieldGrossActual`, `rentalYieldGrossYearOne`, `returnOnEquity`, `crawledAt`, `purchasePriceVsMarket`, `rentVsMarket`, `totalInvestmentCostsPerSqm`, `fixflipBestCaseMargin`, `fixflipBestCaseProfit` |
| `search_order_by_direction` | `string \| null` | no | Values: `asc`, `desc` |
| `agent_enabled` | `boolean` | no | The daily mail of new hits. Needs a place; switching it on uses one of the plan’s active Suchprofil slots. |
| `agent_time_local` | `string \| null` | no |  |
| `agent_timezone` | `string` | no |  |
| `public_enabled` | `boolean` | no | Shown on the owner’s public investor page. Needs a place. |
| `public_note` | `string \| null` | no |  |
| `id` | `integer` | yes | The search profile id. |

## search_profiles_run

**Run Search Profile** · Write · Free

Run a search profile now, off schedule, with the rules of the daily mail: only listings it never delivered are mailed. Free. Needs a place. On a search profile whose mail was never on, the first run sets a baseline (mode baseline): it records the current listings and mails nothing; later runs mail what is new. The run is asynchronous: search_profiles_runs_list shows its outcome.

REST: `POST /api/v1/search-profiles/{id}/run`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `integer` | yes | The search profile id. |

## search_profiles_runs_list

**List Search Profile Runs** · Read · Free

Run history of a search profile, newest first. skipped_reason says why a run delivered nothing: no_new_deals, inactive, baseline, tier_unresolved (the plan did not resolve and the profile has criteria only some plans may use) or seller_inactive (a Vertrieb seller provided the profile and no longer carries it: the connection ended or their plan has no Vertrieb); no_credits only on runs from before mails were free.

REST: `GET /api/v1/search-profiles/{id}/runs`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `integer` | yes | The search profile id. |
| `limit` | `integer` | no |  |
| `offset` | `integer` | no |  |
