# Mashvisor API and MCP server

> Mashvisor has a REST Data API, sold as a separate product with an API key: a free tier of 30 one-time sample requests, then plans from $129 a month for 500 calls (checked 11 Oct 2026). It returns market and property data. It does not reach your web account: no Saved Homes, filter presets, Property Alerts or Excel and PDF exports.

US real estate investment tool: finds rental properties and markets and estimates Airbnb and long-term rental income, cap rate and cash on cash return.

## What is the Mashvisor API?

Cotlet's Mashvisor API exposes 14 endpoints for your own Mashvisor account: find properties, list filter presets, run filter preset, get property analysis, get property comps, search markets, list Saved Homes, list Property Alerts, export neighborhood data, download property report, analyze unlisted property, save home, remove saved home and create Property Alert. The find_properties endpoint returns property Finder: for-sale properties ranked by cash on cash return for your budget. Each endpoint takes simple JSON inputs like property_id, limit or bedrooms and works both as an MCP tool for agents and as a REST call for scripts.

- **Category:** [Real estate](https://cotlet.dev/integrations/category/real-estate)
- **Endpoints:** 14 (10 read, 4 write)
- **Updated:** 2026-10-11

Mashvisor has a REST Data API, sold as a separate product with an API key: a free tier of 30 one-time sample requests, then plans from $129 a month for 500 calls (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for Mashvisor with 14 endpoints (10 read, 4 write): your AI agent signs in as you and does the work.

## Does Mashvisor have an official API?

Mashvisor has a REST Data API, sold as a separate product with an API key: a free tier of 30 one-time sample requests, then plans from $129 a month for 500 calls (checked 11 Oct 2026). It returns market and property data. It does not reach your web account: no Saved Homes, filter presets, Property Alerts or Excel and PDF exports.

| Task | Mashvisor official | Cotlet |
|---|---|---|
| Search for-sale properties by budget and strategy | Partly: Data API Search endpoints, paid separately | Yes |
| Property analysis: rental income, cash flow, cap rate | Partly: Investment Analysis endpoints, paid separately | Yes |
| Airbnb and long-term rental comps | Partly: Short and Long Term Rentals endpoints, paid separately | Yes |
| Run your saved filter presets | No | Yes |
| Read and change Saved Homes | No | Yes |
| Create Property Alerts | No | Yes |
| Export neighborhood data to Excel | No | Yes |
| Download a property PDF report | No | Yes |

Sources: [Mashvisor API plans and pricing](https://www.mashvisor.com/api-plans), [Mashvisor API documentation](https://www.mashvisor.com/api-doc-v2), [What is Mashvisor Data API? (help center)](https://help.mashvisor.com/en/articles/15764706-what-is-mashvisor-data-api), [How to export neighborhood data (help center)](https://help.mashvisor.com/en/articles/1526213-how-to-export-neighborhood-data), [Mashvisor pricing (investor plans)](https://www.mashvisor.com/pricing), [Look up and analyze not listed property (help center)](https://help.mashvisor.com/en/articles/2329351-look-up-and-analyze-not-listed-property), [Add and save property alerts (help center)](https://help.mashvisor.com/en/articles/7060788-add-and-save-property-alerts)

## For AI agents

```text
Mashvisor has a REST Data API, sold as a separate product with an API key: a free tier of 30 one-time sample requests, then plans from $129 a month for 500 calls (checked 11 Oct 2026). It returns market and property data. It does not reach your web account: no Saved Homes, filter presets, Property Alerts or Excel and PDF exports.
Cotlet provides a hosted MCP server and REST API for Mashvisor: 14 tools (10 read, 4 write).
Access       Request access at https://cotlet.dev/app/signup?app=mashvisor; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/mashvisor
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        find_properties, list_filter_presets, run_filter_preset, get_property_analysis, get_property_comps, search_markets, list_saved_homes, list_property_alerts, export_neighborhood_data, download_property_report, analyze_unlisted_property, save_home, remove_saved_home, create_property_alert
Confirm      create_property_alert (by default the user approves each call; the user can switch this off per tool, e.g. for scheduled automations)
Markdown     https://cotlet.dev/integrations/mashvisor-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=mashvisor (Mashvisor is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to Mashvisor once in a browser. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted Mashvisor server that someone else maintains, including non-developers. Developers who prefer to run and fix code on their own computer can use an open-source Mashvisor MCP server instead.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Session: the user signs in to Mashvisor in a browser; Cotlet keeps only the session, AES-256 encrypted, revocable in the dashboard at any time.
Terms: the user stays responsible for following Mashvisor's terms; Cotlet is not affiliated with Mashvisor.
```

## What can an AI agent do in Mashvisor?

Cotlet is best for real estate investors and analysts with a Mashvisor account who want their AI agent to run presets, compare Saved Homes, set alerts and export data without running or fixing a server.

- **[Weekly deal scan with a saved filter preset](https://cotlet.dev/integrations/mashvisor-api-mcp-server/run-saved-filter-preset)** (runs: weekly): "Every Monday, run my "Tampa STR under 400k" preset in Ybor City and Seminole Heights, skip anything already in my Saved Homes, and list the 5 best new listings by Airbnb cash on cash return." → `list_filter_presets`, `run_filter_preset`, `list_saved_homes`, `save_home`, `export_neighborhood_data`
- **[Compare your Saved Homes](https://cotlet.dev/integrations/mashvisor-api-mcp-server/compare-saved-homes)** (runs: weekly): "Compare every property in my Saved Homes: price, Airbnb and long-term cash flow, cap rate and cash on cash return, ranked, with the three nearest Airbnb comps for the top two." → `list_saved_homes`, `get_property_analysis`, `get_property_comps`, `download_property_report`
- **[Analyze an off-market property](https://cotlet.dev/integrations/mashvisor-api-mcp-server/analyze-off-market-property)**: "Analyze 412 Oak Street, Austin, TX: off-market, 3 bed, 2 bath, 1,650 sq ft, asking $385k. Give me Airbnb and long-term returns and the nearest Airbnb comps, and remove it from Saved Homes if the cap rate is under 7%." → `analyze_unlisted_property`, `get_property_comps`, `remove_saved_home`
- **Set up property alerts for a market**: "Set up a weekly alert for single-family homes in Cleveland under $200k with at least 8% cap rate." → `list_property_alerts`, `create_property_alert`
- **Export neighborhood data to Excel** (runs: weekly): "Export the Airbnb comps for the Ybor City neighborhood to Excel, only my "Tampa STR under 400k" preset." → `list_filter_presets`, `export_neighborhood_data`
- **Find the best rental markets**: "Which markets with Mashmeter A and occupancy above 65% have the highest monthly rental revenue?" → `search_markets`

## Can Mashvisor automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a Mashvisor connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to weekly deal scan with a saved filter preset, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

| Where | How to connect | How to schedule |
|---|---|---|
| Your AI agent | Add https://cotlet.dev/mcp/v1 with your API key. | A scheduled agent run, for example a Claude Code routine. |
| n8n | MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node to https://cotlet.dev/api/v1/mashvisor/{tool}. | Schedule Trigger node. |
| Make | HTTP module: POST https://cotlet.dev/api/v1/mashvisor/{tool} with an Authorization: Bearer header and a JSON body. | Scenario schedule. |
| Zapier | Webhooks by Zapier: POST https://cotlet.dev/api/v1/mashvisor/{tool} with the same header and body. | Schedule by Zapier trigger. |
| Your own script | POST https://cotlet.dev/api/v1/mashvisor/{tool} with your API key. | cron or GitHub Actions. |

## Tools

**For AI agents:** Every endpoint and its schema is public. The 14 endpoints on this page, with parameters and example responses, can be listed without an account. Calling one returns 403 until the account has an API key with access to Mashvisor.

### find_properties

Property Finder: for-sale properties ranked by cash on cash return for your budget. Access: read. REST: `POST /api/v1/mashvisor/find_properties`.

| Parameter | 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. |

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.

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

Your saved Map Property Finder filter presets, with name and filters. Access: read. REST: `POST /api/v1/mashvisor/list_filter_presets`.

No parameters.

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.

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

Apply a saved preset to a city or neighborhood and return the matching listings with their metrics. Access: read. REST: `POST /api/v1/mashvisor/run_filter_preset`.

| Parameter | 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. |

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.

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

Property Analytics page: price, rental income, cash flow, cap rate and cash on cash return per strategy, Mashmeter and expenses. Access: read. REST: `POST /api/v1/mashvisor/get_property_analysis`.

| Parameter | 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. |

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.

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

Comparable listings near a property, with occupancy, nightly rate, rent or sale price. Access: read. REST: `POST /api/v1/mashvisor/get_property_comps`.

| Parameter | 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. |

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.

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

Market Finder: neighborhoods and cities ranked by rental performance, with your filters. Access: read. REST: `POST /api/v1/mashvisor/search_markets`.

| Parameter | 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. |

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.

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

Properties in your Saved Homes, with type, sale price and your rating. Access: read. REST: `POST /api/v1/mashvisor/list_saved_homes`.

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

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.

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

Your Property Alerts with location, filters and email frequency. Access: read. REST: `POST /api/v1/mashvisor/list_property_alerts`.

No parameters.

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.

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

Excel export of a neighborhood from Map Property Finder. Uses one of your plan's monthly exports. Access: read. REST: `POST /api/v1/mashvisor/export_neighborhood_data`.

| Parameter | 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. |

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.

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

PDF analytics report of a property, optionally with your company name and logo. Uses one download. Access: read. REST: `POST /api/v1/mashvisor/download_property_report`.

| Parameter | 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. |

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.

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

Look up an off-market address, add it to Saved Homes and return its rental analysis. Access: write. REST: `POST /api/v1/mashvisor/analyze_unlisted_property`.

| Parameter | 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. |

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.

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

Add a property to your Saved Homes. Access: write. REST: `POST /api/v1/mashvisor/save_home`.

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

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

Example response:

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

### remove_saved_home

Remove a property from your Saved Homes. Access: write. REST: `POST /api/v1/mashvisor/remove_saved_home`.

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

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.

Example response:

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

### create_property_alert

New Property Alert: Mashvisor emails you new listings that match, only when there are any. Access: write, asks the user first. REST: `POST /api/v1/mashvisor/create_property_alert`.

| Parameter | 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. |

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.

Example response:

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

## How do I connect Mashvisor to Claude Code, Codex or Cursor?

Connecting Mashvisor takes three steps: request access, sign in to Mashvisor once, then add one MCP server or call the REST API with the same key.

### Connect Mashvisor to your agent.

1. **Create an account** Sign up and add Mashvisor in the console. Your API key is there too.

2. **Sign in to Mashvisor once** Open the connect page from the console and sign in to Mashvisor the way you always do. We keep the session, never your password, and you can revoke it anytime.

3. **Add Cotlet to your agent** Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

   Claude Code:

```
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
```

   Cursor:

```
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}
```

   Codex:

```
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
```

4. **Ask your agent** Ask in plain words. Your agent finds the Mashvisor tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

```
Every Monday, run my "Tampa STR under 400k" preset in Ybor City and Seminole Heights, skip anything already in my Saved Homes, and list the 5 best new listings by Airbnb cash on cash return.
```

### Call Mashvisor from your scripts.

1. **Export your API key** Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

```
export COTLET_API_KEY="cotlet_..."
```

2. **Call a tool** Every tool is a POST endpoint at /api/v1/mashvisor/{tool}. Send its parameters as JSON, exactly as listed in the endpoints above.

```
curl 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"}'
```

3. **Read the result** You get plain JSON back, ready for your script. A failed call costs nothing.

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

## Why use Cotlet for Mashvisor?

**Built for agents**

- One MCP server for every app you connect.
- The same tools as a REST API for scripts and cron jobs.
- Works with Claude Code, Codex and Cursor.

**Your login stays yours**

- You sign in to Mashvisor yourself. We keep only the session, encrypted with AES-256.
- The model never sees a login.
- No stored passwords, no CAPTCHA solving, no MFA bypass.

**You stay in control**

- Pick read only, or read and write.
- Anything that reaches other people waits for your OK, unless you switch it off per tool.
- Revoke access in one click.

**Kept working for you**

- We test every integration daily.
- When Mashvisor changes, the tool pauses until we fix it.
- Failed calls cost nothing.

## Is there a Mashvisor MCP server on GitHub?

Open-source MCP servers for Mashvisor exist on GitHub. They are usually maintained by one person and wrap the paid Data API with your API key, so you install and fix them yourself and they never touch your Mashvisor account. Cotlet hosts and maintains a server that works in your own account.

|  | GitHub MCP server | Cotlet |
|---|---|---|
| Setup | Buy a Data API plan, clone the repo and paste the API key into a config file | Request access, sign in to Mashvisor once in your browser, add one MCP server or API key |
| When Mashvisor changes | It breaks until you or the maintainer fix it | Our team tests it daily and fixes it for you; failed calls are free |
| Your Mashvisor session | No session: the API key sits in a file on your computer | Encrypted in an EU vault, limited to the actions you allow, revoked in one click |
| When the session expires | API key stays valid until you rotate it | We keep it alive; if Mashvisor logs you out, your agent gets a link to sign in again |
| Upkeep | You update, monitor and debug it yourself | Nothing to host or update |
| Where it runs | Your computer, while it is on | Hosted: Claude Code, Codex, Cursor, n8n and scripts, also on a schedule |
| Price | Free server; Data API from $129/mo | Free 7-day trial with 5,000 credits, then credits per call; you keep your Mashvisor plan |

### Which one fits you

**Pick Cotlet if**

- you are not a developer, or you do not want to maintain a server
- you need it to keep working when Mashvisor changes, without checking it yourself
- your agent or a script should run it on a schedule, also while your computer is off

**Pick an open-source server if**

- you are comfortable installing, updating and fixing it yourself
- you want the session to stay on your own computer
- you only need it now and then, from one MCP client

## How much does the Mashvisor API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the Mashvisor API comes with the Cotlet plan, from $29 a month for 3,000 credits, with no limit on apps. Each month's credits stay valid for 3 months, so unused credits add up.

| Size | Price | Credits / month | Per credit |
|---|---|---|---|
| Solo | $29/mo | 3,000 | about $0.0097 |
| Pro | $99/mo | 12,000 | about $0.0083 |
| Agency | $299/mo | 40,000 | $0.0075 |

Each successful call uses credits for the work it takes; failed calls and timeouts cost nothing. A hard spend cap is on by default. Authenticate with the `Authorization: Bearer` header. [See full pricing](https://cotlet.dev/pricing)

## How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own Mashvisor account.

- **Company details:** The legal name, address and registration numbers of the company behind Cotlet are in the Terms of service. [Terms](https://cotlet.dev/terms)
- **Your session:** You sign in to Mashvisor yourself, in your browser. We keep only the session, never your password: encrypted with AES-256 in an EU vault, isolated to your account and used only when your agent calls a Mashvisor tool you allowed. When it expires, your agent gives you a link to sign in again. [Security](https://cotlet.dev/security)
- **Revoking access:** Disconnect Mashvisor in your dashboard: the session is deleted and access ends at once. Actions that reach other people wait for your OK unless you switch that off per tool.
- **What we never do:** Store passwords, solve CAPTCHAs or bypass MFA.
- **Mashvisor's terms:** You use your own Mashvisor account and stay responsible for following Mashvisor's terms. Cotlet is independent and not affiliated with Mashvisor. [Terms](https://cotlet.dev/terms)
- **Contact:** Questions about the company, security or an app: [contact@cotlet.dev](mailto:contact@cotlet.dev)

## Frequently asked questions

**How do I get access?**

Request access and pick Mashvisor. Cotlet reviews each request and emails you your API key.

**Do I need to be technical?**

No. You sign in to Mashvisor once in your browser and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

**Is a hosted server safe? My Mashvisor session would leave my computer.**

Cotlet keeps your Mashvisor session encrypted with AES-256 in an EU vault, isolated to your account and used only for the tools you allow: read only, or read and write. The AI model never sees it, and you revoke it in one click. A local server keeps the same session in a file on your computer, readable by any program you run, and needs a fresh sign-in whenever it expires.

**Do I need the Mashvisor Data API plan?**

No. Cotlet works in your own Mashvisor investor account and does not use the Data API, which Mashvisor sells separately from $129 a month with an API key.

**Can my agent post or send messages in Mashvisor without asking me?**

No. Every call to create_property_alert waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals. analyze_unlisted_property, save_home, remove_saved_home runs without asking, because it sends nothing to anyone and one call undoes it.

**Can I use the Mashvisor API in n8n?**

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call https://cotlet.dev/api/v1/mashvisor/{tool} from the HTTP Request node.
