# Vocasa — Rental Property Analyzer (`nestcalc/rental-property-analyzer`) Actor

Analyze US rental property from your AI agent. Returns a 0–100 score, IRR over a 15-year hold, monthly cash flow, cap rate, cash-on-cash return and DSCR, with the source of every input shown. Your own rent, tax and insurance numbers replace our estimates. Plus NestCalc Deal Scores for Cincinnati.

- **URL**: https://apify.com/nestcalc/rental-property-analyzer.md
- **Developed by:** [NestCalc.ai LLC](https://apify.com/nestcalc) (community)
- **Categories:** Real estate, MCP servers, Business
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 analyses

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Vocasa — Rental Property Analyzer

**Rental property analysis your AI can call.**

Vocasa lets your AI assistant analyze US residential property as a rental investment. Ask about a listing or a property you're considering, and Vocasa returns an investment score, IRR over a 15-year hold, monthly cash flow, cap rate, cash-on-cash return and debt service coverage, with the source of every number shown. Any figure you know yourself, such as rent, taxes or insurance, replaces our estimate, so the analysis gets sharper the more you share.

Vocasa also looks up NestCalc's independent Deal Scores for for-sale listings in covered cities (Cincinnati today), including the current top-ranked deals. Scores are published for every listing, low ones included, and are never changed for anyone.

Vocasa provides estimates for research, not appraisals or financial advice. Vocasa is built by NestCalc.ai LLC. The full method is at [nestcalc.ai/methodology](https://nestcalc.ai/methodology).

### What it does

- Analyze a US rental property's IRR over a 15-year hold, cash flow, cap rate, cash-on-cash return and DSCR.
- Replace estimates with your own rent, tax and insurance numbers.
- Look up independent Deal Scores for for-sale listings in covered cities.
- List the current top-scoring deals in a covered city.

This Actor is an MCP server with two tools:

| Tool | What it does |
| --- | --- |
| `analyze_rental` | Analyzes any US residential property from its price and facts (address or ZIP, beds, baths, square feet, type, units). Your own rent, tax, insurance and HOA numbers override our estimates. |
| `deal_score` | Looks up the published Deal Score for a for-sale listing by address or listing id, or lists a covered city's current top deals. |

### How to connect

1. Get your Apify API token from **Settings → API & Integrations** in Apify Console.
2. Add this MCP server to your client. Most clients that take a remote MCP server accept this:

```json
{
  "mcpServers": {
    "vocasa": {
      "url": "https://nestcalc--rental-property-analyzer.apify.actor/mcp",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

3. Ask your assistant something like: *"Analyze a 3-bed in ZIP 45211 listed at $189,000. I expect $1,650 a month in rent."* or *"What are the top Deal Scores in Cincinnati right now?"*

You can also run the Actor directly from Apify Console: pick a tool, give its arguments as JSON, and the answer lands in the dataset.

### Pricing

**$0.02 per analysis.** An analysis is one answer that delivers a result: an `analyze_rental` score, a Deal Score found, or a city's list of top deals.

Never charged as an analysis: connecting, listing tools, errors (including invalid arguments and rate limits), and answers that deliver no analysis, such as a request for more information or a city we don't cover yet.

Platform usage depends on how you use the Actor. A direct run from Apify Console or the API costs only the analysis charge: platform usage is not passed on to you. Through the MCP endpoint, the Actor runs in Apify's Standby mode, and for Standby runs Apify bills its platform usage to you in addition to the analysis charge ([Apify pay-per-event docs](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event)).

### Input example

`analyze_rental` arguments:

```json
{ "list_price": 189000, "zip": "45211", "bedrooms": 3, "monthly_rent": 1650 }
```

`deal_score` arguments:

```json
{ "city": "Cincinnati", "limit": 3 }
```

### Output example

`analyze_rental` returns the score, the IRR, the other returns, and every input with its source (shortened here):

```json
{
  "outcome": "scored",
  "score": 52,
  "band": "fair",
  "summary": "Fair (52/100): 15.1% IRR over a 15-year hold, about $56 a month negative cash flow, 6.0% cap rate, -1.5% cash-on-cash return, DSCR 0.94.",
  "irr": 15.15,
  "irr_hold_years": 15,
  "monthly_cash_flow": -56,
  "cap_rate": 6,
  "cash_on_cash": -1.5,
  "dscr": 0.94,
  "inputs_used": {
    "monthly_rent": { "value": 1650, "source": "user" },
    "property_tax_annual": { "value": 2617, "source": "NestCalc estimate", "note": "County average rate at this price" },
    "insurance_annual": { "value": 1095, "source": "NestCalc estimate", "note": "Typical OH premium at this price" },
    "interest_rate": { "value": 6.95, "source": "NestCalc estimate", "note": "30-year fixed average, week of 2026-09-17" }
  },
  "disclaimer": "Not an appraisal.",
  "method_url": "https://nestcalc.ai/methodology"
}
```

`deal_score` for a city returns the current top deals, best first:

```json
{
  "outcome": "city",
  "summary": "Cincinnati: 52 current WINs, best first.",
  "wins_total": 52,
  "wins": [
    { "rank": 1, "address": "2268 Rice St, Cincinnati, OH 45219", "listing_id": "2268-rice-st", "list_price": 199900, "score": 99, "irr": 24.5, "irr_hold_years": 15 }
  ],
  "disclaimer": "Not an appraisal.",
  "method_url": "https://nestcalc.ai/methodology"
}
```

### FAQ

**Is this an appraisal?** No. Vocasa provides estimates for research, not appraisals or financial advice.

**What is IRR and why does it matter?** IRR (internal rate of return) is the yearly return on the cash you put in, counting everything the property pays back over the hold: monthly cash flow, loan paydown, tax savings from depreciation, and the sale at the end. Vocasa models a 15-year hold. Cap rate and cash-on-cash return describe a single year; IRR describes the whole investment, which makes it the best single number for comparing one rental with another, or with anything else you could do with the money. A property can run slightly negative each month and still earn a strong IRR, as in the example above. If a deal's cash flows have no meaningful IRR, Vocasa returns `null` and says why, never a made-up number.

**Where do the numbers come from?** Every input in an answer carries its source: your own number, the listing, a county record, HUD rent data, or a NestCalc estimate. The method is published at [nestcalc.ai/methodology](https://nestcalc.ai/methodology).

**Which places are covered?** `analyze_rental` covers US residential property in any ZIP. Deal Scores cover for-sale listings in Cincinnati today.

**Can a score be changed?** No. Scores are published for every listing, low ones included, and are never changed for anyone.

**Who makes Vocasa?** NestCalc.ai LLC. Questions: support@nestcalc.ai.

# Actor input Schema

## `tool` (type: `string`):

analyze_rental analyzes any US residential property. deal_score looks up NestCalc's Deal Score for a for-sale listing, or lists the current top deals in a covered city (Cincinnati today).

## `arguments` (type: `object`):

The tool's arguments as JSON. analyze_rental: list_price (required), and address or zip, bedrooms, bathrooms, square_feet, property_type, units; your own monthly_rent, property_tax_annual, insurance_annual or hoa_monthly replace our estimates; down_payment_pct, interest_rate, loan_term_years. deal_score: address, listing_id or city, and limit. Example for deal_score: {"city": "Cincinnati", "limit": 5}.

## Actor input object example

```json
{
  "tool": "analyze_rental",
  "arguments": {
    "list_price": 189000,
    "zip": "45211",
    "bedrooms": 3,
    "monthly_rent": 1650
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The default dataset: one item per tool call.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tool": "analyze_rental",
    "arguments": {
        "list_price": 189000,
        "zip": "45211",
        "bedrooms": 3,
        "monthly_rent": 1650
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nestcalc/rental-property-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "tool": "analyze_rental",
    "arguments": {
        "list_price": 189000,
        "zip": "45211",
        "bedrooms": 3,
        "monthly_rent": 1650,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("nestcalc/rental-property-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tool": "analyze_rental",
  "arguments": {
    "list_price": 189000,
    "zip": "45211",
    "bedrooms": 3,
    "monthly_rent": 1650
  }
}' |
apify call nestcalc/rental-property-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nestcalc/rental-property-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ifINSeW6JmBbD5daM/builds/EFOYJXP5IWu4GwLD8/openapi.json
