# Mashvisor API

> Every Mashvisor endpoint on Cotlet: inputs, JSON Schema, cURL, Python and Node.js examples and an example response for each call.

Source: https://cotlet.dev/docs/api/mashvisor

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

14 endpoints for Mashvisor. Each one is a POST with a JSON body, called with your API key.

- Base URL: `https://cotlet.dev/api/v1/mashvisor`
- Connects with: Your own Mashvisor investor account
- Integration page: https://cotlet.dev/integrations/mashvisor-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `find_properties` | read | Property Finder: for-sale properties ranked by cash on cash return for your budget. |
| `list_filter_presets` | read | Your saved Map Property Finder filter presets, with name and filters. |
| `run_filter_preset` | read | Apply a saved preset to a city or neighborhood and return the matching listings with their metrics. |
| `get_property_analysis` | read | Property Analytics page: price, rental income, cash flow, cap rate and cash on cash return per strategy, Mashmeter and expenses. |
| `get_property_comps` | read | Comparable listings near a property, with occupancy, nightly rate, rent or sale price. |
| `search_markets` | read | Market Finder: neighborhoods and cities ranked by rental performance, with your filters. |
| `list_saved_homes` | read | Properties in your Saved Homes, with type, sale price and your rating. |
| `list_property_alerts` | read | Your Property Alerts with location, filters and email frequency. |
| `export_neighborhood_data` | read | Excel export of a neighborhood from Map Property Finder. Uses one of your plan's monthly exports. |
| `download_property_report` | read | PDF analytics report of a property, optionally with your company name and logo. Uses one download. |
| `analyze_unlisted_property` | write | Look up an off-market address, add it to Saved Homes and return its rental analysis. |
| `save_home` | write | Add a property to your Saved Homes. |
| `remove_saved_home` | write | Remove a property from your Saved Homes. |
| `create_property_alert` | write | New Property Alert: Mashvisor emails you new listings that match, only when there are any. |

## Find properties

`POST https://cotlet.dev/api/v1/mashvisor/find_properties`

Access: read.

Searches for-sale properties in one or more cities, as in Property Finder, ranked by cash on cash return for the rental strategy you pick. Radius works only with one city. Each item has the property_id that the analysis, comps and Saved Homes tools take.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `cities` | string[] | yes | One or more cities, e.g. "Tampa, FL". |
| `miles` | integer | no | Radius around the city. Only with one city. |
| `budget_min` | integer | no | Minimum listing price in USD. |
| `budget_max` | integer | no | Maximum listing price in USD. |
| `rental_strategy` | enum | no | airbnb or traditional. |
| `bedrooms` | integer | no | Minimum bedrooms, 1 to 5. |
| `bathrooms` | integer | no | Minimum bathrooms, 1 to 5. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/find_properties \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"cities":["Tampa, FL"]}'
```

**Python**

```python
result = client.call("mashvisor", "find_properties", {"cities":["Tampa, FL"]})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'find_properties', {"cities":["Tampa, FL"]});
```

**CLI**

```bash
cotlet call mashvisor find_properties --data '{"cities":["Tampa, FL"]}'
```

### Example response

```json
{
  "properties": [
    {
      "property_id": "p_88120",
      "address": "1823 Schyler Ln, Tampa, FL",
      "price": 365000,
      "bedrooms": 3,
      "bathrooms": 2,
      "cash_on_cash": 13.1,
      "cap_rate": 9.4
    },
    {
      "property_id": "p_88144",
      "address": "57 Palm Ct, Tampa, FL",
      "price": 342000,
      "bedrooms": 3,
      "bathrooms": 2,
      "cash_on_cash": 11.7,
      "cap_rate": 8.5
    }
  ]
}
```

## List filter presets

`POST https://cotlet.dev/api/v1/mashvisor/list_filter_presets`

Access: read.

Returns the filter presets you saved with Save Filters in Map Property Finder, each with its name and filters. Pass preset_id to run_filter_preset or export_neighborhood_data. Presets are created, renamed and deleted in Mashvisor, not through Cotlet.

### Parameters

No parameters.

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/list_filter_presets \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("mashvisor", "list_filter_presets")
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'list_filter_presets');
```

**CLI**

```bash
cotlet call mashvisor list_filter_presets
```

### Example response

```json
{
  "presets": [
    {
      "preset_id": "fp_2041",
      "name": "Tampa STR under 400k",
      "filters": {
        "price_max": 400000,
        "bedrooms_min": 3,
        "property_type": "single_family"
      }
    },
    {
      "preset_id": "fp_2057",
      "name": "Cleveland cash flow",
      "filters": {
        "price_max": 200000,
        "bedrooms_min": 2
      }
    }
  ]
}
```

## Run filter preset

`POST https://cotlet.dev/api/v1/mashvisor/run_filter_preset`

Access: read.

Applies one saved preset to a city or neighborhood and returns the matching listings with their metrics, like selecting the preset in Map Property Finder. The tab picks the same three views as the app: investment, airbnb_comps or rental_comps. Results come back in the order the app shows them.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `preset_id` | string | yes | Preset ID from list_filter_presets. |
| `location` | string | yes | City or neighborhood, e.g. "Ybor City, Tampa, FL". |
| `tab` | enum | no | investment, airbnb_comps or rental_comps. Default: investment. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/run_filter_preset \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"preset_id":"fp_2041","location":"Ybor City, Tampa, FL","tab":"investment","limit":25}'
```

**Python**

```python
result = client.call("mashvisor", "run_filter_preset", {"preset_id":"fp_2041","location":"Ybor City, Tampa, FL","tab":"investment","limit":25})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'run_filter_preset', {"preset_id":"fp_2041","location":"Ybor City, Tampa, FL","tab":"investment","limit":25});
```

**CLI**

```bash
cotlet call mashvisor run_filter_preset --data '{"preset_id":"fp_2041","location":"Ybor City, Tampa, FL","tab":"investment","limit":25}'
```

### Example response

```json
{
  "preset": "Tampa STR under 400k",
  "location": "Ybor City, Tampa, FL",
  "tab": "investment",
  "listings": [
    {
      "property_id": "p_88120",
      "address": "1823 Schyler Ln, Tampa, FL",
      "price": 365000,
      "cash_on_cash": 13.1,
      "cap_rate": 9.4
    },
    {
      "property_id": "p_88151",
      "address": "910 E 8th Ave, Tampa, FL",
      "price": 389000,
      "cash_on_cash": 10.8,
      "cap_rate": 8.1
    },
    {
      "property_id": "p_88163",
      "address": "2204 N 15th St, Tampa, FL",
      "price": 329000,
      "cash_on_cash": 10.2,
      "cap_rate": 7.9
    }
  ]
}
```

## Get property analysis

`POST https://cotlet.dev/api/v1/mashvisor/get_property_analysis`

Access: read.

Returns the numbers of the Property Analytics page for one property: price, rental income, expenses, cash flow, cap rate and cash on cash return, for the Airbnb and the traditional rental strategy. Set strategy to get one of them. Figures are estimates from Mashvisor, as in the app.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |
| `strategy` | enum | no | airbnb, traditional or both. Default: both. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/get_property_analysis \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"p_88120","strategy":"both"}'
```

**Python**

```python
result = client.call("mashvisor", "get_property_analysis", {"property_id":"p_88120","strategy":"both"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'get_property_analysis', {"property_id":"p_88120","strategy":"both"});
```

**CLI**

```bash
cotlet call mashvisor get_property_analysis --data '{"property_id":"p_88120","strategy":"both"}'
```

### Example response

```json
{
  "property_id": "p_88120",
  "address": "1823 Schyler Ln, Tampa, FL",
  "price": 365000,
  "cash_invested": 91250,
  "airbnb": {
    "monthly_revenue": 4000,
    "monthly_operating_expenses": 1150,
    "monthly_mortgage": 1850,
    "monthly_cash_flow": 1000,
    "cap_rate": 9.4,
    "cash_on_cash": 13.1
  },
  "traditional": {
    "monthly_revenue": 2600,
    "monthly_operating_expenses": 650,
    "monthly_mortgage": 1850,
    "monthly_cash_flow": 100,
    "cap_rate": 6.4,
    "cash_on_cash": 1.3
  }
}
```

## Get property comps

`POST https://cotlet.dev/api/v1/mashvisor/get_property_comps`

Access: read.

Returns comparable listings near one property. short_term gives Airbnb comps with occupancy and nightly rate, long_term gives rentals with monthly rent, and sales gives sold or listed prices. Nearest comps come first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |
| `type` | enum | yes | short_term, long_term or sales. |
| `limit` | integer | no | 1 to 50. Default: 20. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/get_property_comps \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"property_8c41d2","type":"short_term"}'
```

**Python**

```python
result = client.call("mashvisor", "get_property_comps", {"property_id":"property_8c41d2","type":"short_term"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'get_property_comps', {"property_id":"property_8c41d2","type":"short_term"});
```

**CLI**

```bash
cotlet call mashvisor get_property_comps --data '{"property_id":"property_8c41d2","type":"short_term"}'
```

### Example response

```json
{
  "property_id": "p_90417",
  "type": "short_term",
  "comps": [
    {
      "address": "420 Oak Street, Austin, TX",
      "bedrooms": 3,
      "nightly_rate": 245,
      "occupancy": 68,
      "distance_miles": 0.2
    },
    {
      "address": "17 Elm Ave, Austin, TX",
      "bedrooms": 3,
      "nightly_rate": 229,
      "occupancy": 63,
      "distance_miles": 0.4
    }
  ]
}
```

## Search markets

`POST https://cotlet.dev/api/v1/mashvisor/search_markets`

Access: read.

Returns neighborhoods and cities from Market Finder, ranked by rental performance, with your filters applied. Filter by state, Mashmeter grade, minimum monthly revenue, minimum occupancy and property types. Without a state it searches nationwide.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `state` | string | no | Two-letter state code. Default: nationwide. |
| `mashmeter` | string[] | no | Grades to include: A, B, C, D. |
| `min_monthly_revenue` | integer | no | Minimum monthly rental revenue in USD. |
| `min_occupancy` | integer | no | Minimum occupancy rate in percent. |
| `property_types` | string[] | no | Property types to include. |
| `limit` | integer | no | 1 to 50. Default: 20. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/search_markets \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("mashvisor", "search_markets")
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'search_markets');
```

**CLI**

```bash
cotlet call mashvisor search_markets
```

### Example response

```json
{
  "markets": [
    {
      "market": "Gatlinburg, TN",
      "mashmeter": "A",
      "occupancy": 72,
      "monthly_revenue": 5400
    },
    {
      "market": "Destin, FL",
      "mashmeter": "A",
      "occupancy": 69,
      "monthly_revenue": 5100
    },
    {
      "market": "Pigeon Forge, TN",
      "mashmeter": "A",
      "occupancy": 67,
      "monthly_revenue": 4700
    }
  ]
}
```

## List Saved Homes

`POST https://cotlet.dev/api/v1/mashvisor/list_saved_homes`

Access: read.

Returns the properties in your Saved Homes with type, sale price and your rating. Properties added by analyze_unlisted_property or save_home are included. Use property_id with get_property_analysis, get_property_comps or remove_saved_home.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `limit` | integer | no | 1 to 100. Default: 50. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/list_saved_homes \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("mashvisor", "list_saved_homes")
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'list_saved_homes');
```

**CLI**

```bash
cotlet call mashvisor list_saved_homes
```

### Example response

```json
{
  "homes": [
    {
      "property_id": "p_88120",
      "address": "1823 Schyler Ln, Tampa, FL",
      "type": "single_family",
      "sale_price": 365000,
      "rating": 4
    },
    {
      "property_id": "p_90417",
      "address": "412 Oak Street, Austin, TX",
      "type": "single_family",
      "sale_price": 385000,
      "rating": null
    }
  ]
}
```

## List Property Alerts

`POST https://cotlet.dev/api/v1/mashvisor/list_property_alerts`

Access: read.

Returns your Property Alerts with their location, filters and email frequency. Use it before create_property_alert so your agent does not add a duplicate.

### Parameters

No parameters.

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/list_property_alerts \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("mashvisor", "list_property_alerts")
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'list_property_alerts');
```

**CLI**

```bash
cotlet call mashvisor list_property_alerts
```

### Example response

```json
{
  "alerts": [
    {
      "alert_id": "pa_58102",
      "name": "Tampa condos",
      "location": "Tampa, FL",
      "property_type": "condo",
      "price_max": 300000,
      "frequency": "weekly"
    }
  ]
}
```

## Export neighborhood data

`POST https://cotlet.dev/api/v1/mashvisor/export_neighborhood_data`

Access: read.

Creates the Excel export that the Export button gives in Map Property Finder, for one neighborhood and one tab. Without preset_id it exports all data; with a preset it exports only the matching listings. City-level export is not supported. Each call uses one of your plan's monthly exports, so it reads from Mashvisor but is not free of limits.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `neighborhood` | string | yes | Neighborhood name with city. City-level export is not supported. |
| `tab` | enum | yes | investment, airbnb_comps or rental_comps. |
| `preset_id` | string | no | Export only listings matching this preset. Default: all data. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/export_neighborhood_data \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"neighborhood":"neighborhood","tab":"investment"}'
```

**Python**

```python
result = client.call("mashvisor", "export_neighborhood_data", {"neighborhood":"neighborhood","tab":"investment"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'export_neighborhood_data', {"neighborhood":"neighborhood","tab":"investment"});
```

**CLI**

```bash
cotlet call mashvisor export_neighborhood_data --data '{"neighborhood":"neighborhood","tab":"investment"}'
```

### Example response

```json
{
  "neighborhood": "Ybor City, Tampa, FL",
  "tab": "airbnb_comps",
  "scope": "filtered",
  "file_name": "ybor-city-airbnb-comps.xlsx",
  "download_url": "https://files.cotlet.example/exports/ybor-city-airbnb-comps.xlsx",
  "rows": 38
}
```

## Download property report

`POST https://cotlet.dev/api/v1/mashvisor/download_property_report`

Access: read.

Creates the PDF analytics report from the download icon on a property page. With branded set to true it adds the company name and logo saved in your account. Mashvisor limits downloads by plan, and each call uses one.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |
| `branded` | boolean | no | Add the company branding saved in your account. Default: false. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/download_property_report \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"property_8c41d2"}'
```

**Python**

```python
result = client.call("mashvisor", "download_property_report", {"property_id":"property_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'download_property_report', {"property_id":"property_8c41d2"});
```

**CLI**

```bash
cotlet call mashvisor download_property_report --data '{"property_id":"property_8c41d2"}'
```

### Example response

```json
{
  "property_id": "p_88120",
  "branded": false,
  "file_name": "schyler-ln-tampa-report.pdf",
  "download_url": "https://files.cotlet.example/reports/schyler-ln-tampa-report.pdf"
}
```

## Analyze unlisted property

`POST https://cotlet.dev/api/v1/mashvisor/analyze_unlisted_property`

Access: write.

Runs the "look up not listed property" flow for an address and returns the rental analysis. It adds the property to your Saved Homes. This reaches no one and is undone with remove_saved_home, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `address` | string | yes | Full US street address. |
| `price` | integer | yes | Price in USD. |
| `property_type` | enum | yes | single_family, condo, townhouse, apartment or multi_family. |
| `bedrooms` | integer | yes | Number of bedrooms. |
| `bathrooms` | integer | yes | Number of bathrooms. |
| `sqft` | integer | yes | Square footage. |
| `unit` | string | no | Unit number for apartments, condos and townhomes. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/analyze_unlisted_property \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"412 Oak Street, Austin, TX","price":385000,"property_type":"single_family","bedrooms":3,"bathrooms":2,"sqft":1650}'
```

**Python**

```python
result = client.call("mashvisor", "analyze_unlisted_property", {"address":"412 Oak Street, Austin, TX","price":385000,"property_type":"single_family","bedrooms":3,"bathrooms":2,"sqft":1650})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'analyze_unlisted_property', {"address":"412 Oak Street, Austin, TX","price":385000,"property_type":"single_family","bedrooms":3,"bathrooms":2,"sqft":1650});
```

**CLI**

```bash
cotlet call mashvisor analyze_unlisted_property --data '{"address":"412 Oak Street, Austin, TX","price":385000,"property_type":"single_family","bedrooms":3,"bathrooms":2,"sqft":1650}'
```

### Example response

```json
{
  "property_id": "p_90417",
  "address": "412 Oak Street, Austin, TX",
  "saved_to_saved_homes": true,
  "price": 385000,
  "cash_invested": 96250,
  "airbnb": {
    "monthly_revenue": 4200,
    "monthly_operating_expenses": 1200,
    "monthly_mortgage": 1950,
    "monthly_cash_flow": 1050,
    "cap_rate": 9.4,
    "cash_on_cash": 13.1
  },
  "traditional": {
    "monthly_revenue": 2700,
    "monthly_operating_expenses": 650,
    "monthly_mortgage": 1950,
    "monthly_cash_flow": 100,
    "cap_rate": 6.4,
    "cash_on_cash": 1.2
  }
}
```

## Save home

`POST https://cotlet.dev/api/v1/mashvisor/save_home`

Access: write.

Adds one property to your Saved Homes. This reaches no one and is undone with remove_saved_home, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/save_home \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"property_8c41d2"}'
```

**Python**

```python
result = client.call("mashvisor", "save_home", {"property_id":"property_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'save_home', {"property_id":"property_8c41d2"});
```

**CLI**

```bash
cotlet call mashvisor save_home --data '{"property_id":"property_8c41d2"}'
```

### Example response

```json
{
  "property_id": "p_88144",
  "saved": true
}
```

## Remove saved home

`POST https://cotlet.dev/api/v1/mashvisor/remove_saved_home`

Access: write.

Removes one property from your Saved Homes. This reaches no one and the property can be added again with save_home, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/remove_saved_home \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"property_8c41d2"}'
```

**Python**

```python
result = client.call("mashvisor", "remove_saved_home", {"property_id":"property_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'remove_saved_home', {"property_id":"property_8c41d2"});
```

**CLI**

```bash
cotlet call mashvisor remove_saved_home --data '{"property_id":"property_8c41d2"}'
```

### Example response

```json
{
  "property_id": "p_88144",
  "saved": false
}
```

## Create Property Alert

`POST https://cotlet.dev/api/v1/mashvisor/create_property_alert`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a Property Alert in your account. Mashvisor then emails you new matching listings at the frequency you set, and only when there are any. Price runs from 5,000 to 5,000,000 USD. There is no tool to delete an alert, so you remove one in Mashvisor. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | Alert name. |
| `location` | string | yes | Address, neighborhood, city or zip code. |
| `property_type` | enum | no | all, single_family, condo, townhouse or multi_family. Default: all. |
| `price_min` | integer | no | Minimum price in USD, from 5,000. |
| `price_max` | integer | no | Maximum price in USD, up to 5,000,000. |
| `bedrooms` | integer | no | Minimum bedrooms, 1 to 5. |
| `financing` | enum | no | cash or mortgage. Default: cash. |
| `min_cap_rate` | integer | no | Minimum cap rate in percent. |
| `min_cash_on_cash` | integer | no | Minimum cash on cash return in percent. |
| `frequency` | enum | no | daily, weekly or monthly. Default: weekly. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/mashvisor/create_property_alert \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Cleveland SFH under 200k","location":"Cleveland, OH","property_type":"single_family","price_max":200000,"financing":"cash","min_cap_rate":8,"frequency":"weekly"}'
```

**Python**

```python
result = client.call("mashvisor", "create_property_alert", {"name":"Cleveland SFH under 200k","location":"Cleveland, OH","property_type":"single_family","price_max":200000,"financing":"cash","min_cap_rate":8,"frequency":"weekly"})
```

**Node.js**

```js
const result = await cotlet.call('mashvisor', 'create_property_alert', {"name":"Cleveland SFH under 200k","location":"Cleveland, OH","property_type":"single_family","price_max":200000,"financing":"cash","min_cap_rate":8,"frequency":"weekly"});
```

**CLI**

```bash
cotlet call mashvisor create_property_alert --data '{"name":"Cleveland SFH under 200k","location":"Cleveland, OH","property_type":"single_family","price_max":200000,"financing":"cash","min_cap_rate":8,"frequency":"weekly"}'
```

### Example response

```json
{
  "alert_id": "pa_58213",
  "name": "Cleveland SFH under 200k",
  "location": "Cleveland, OH",
  "frequency": "weekly",
  "email_to": "yourname@example.com",
  "status": "active"
}
```
