# UK Property Deal Finder — BTL & Auction ROI, Cashflow, Payback (`memo23/uk-property-deal-finder`) Actor

Ranked UK & German property investment deals: every listing scored for ROI, monthly cashflow, payback and best strategy (buy-to-let vs serviced accommodation) against real local rent comps. Includes live UK auction lots and an AI photo-condition read. Filter by area, budget, ROI and condition.

- **URL**: https://apify.com/memo23/uk-property-deal-finder.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, AI
- **Stats:** 10 total users, 10 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 scored deals

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UK Property Deal Finder — ROI, Cashflow & Payback on Every Listing

Most property scrapers hand you listings. This one hands you **deals** — every property already scored for **ROI, monthly cashflow, payback period and the better strategy** (buy-to-let vs serviced accommodation), ranked best-first.

Set your filters, hit Run, get a spreadsheet of what's actually worth viewing.

### What makes a "deal"

Each row is a public listing — Rightmove, ImmobilienScout24, or a **live UK auction lot** — run through standard investor maths (75% LTV, interest-only, purchase and operating costs) against **real local rent comps** for that postcode.

| Field | What it tells you |
|---|---|
| `roiPct` | Annual cash-on-cash return on the money you put in |
| `cashflowMonthly` | What lands in your account each month after mortgage and costs |
| `paybackMonths` | How long until your cash comes back out |
| `cashInvested` | Deposit + fees (+ furnishing for serviced accommodation) |
| `strategy` | `btl` (long let) or `r2sa` (short let) — whichever returns more |
| `rentConfidence` | Whether the rent behind that ROI is from **real comps** or an estimate |
| `condition` | AI read of the listing photos: refurbished / cosmetic / project |
| `listingSource` | `portal` or `auction` (with auction house + auction date) |
| `url` | Straight to the listing |

### Why the extra fields matter

**`rentConfidence`** — an ROI is only as good as the rent behind it. `confident` means the median of 8+ real rental listings at the same outcode *and* bedroom count. `directional` means 3+ real comps. `estimate` is a fallback and can flatter the numbers. Filter to comps-backed when the figures need to hold up.

**`condition`** — a vision pass over the listing photos separates let-ready stock from cosmetic refreshes from full projects, so a refurb hunter can shortlist in one query. It is deliberately **not** a refurb-cost estimate: damp, wiring and roofs don't show up in photographs.

**Auction lots** — auction stock is where a lot of the return lives, and it's priced off a **guide**. A guide is a marketing bracket, not a price; lots routinely sell well above it. Treat any auction ROI as a **ceiling**, never an expectation. Guide-priced lots are flagged as such, and implausible ones are filtered out of the default feed.

### Example runs

**Cheap northern buy-to-lets that actually cashflow**

```json
{ "market": "uk", "maxPrice": 150000, "minRoiPct": 8, "strategy": "btl", "minRentConfidence": "directional" }
```

**Refurb projects at auction**

```json
{ "listingSource": "auction", "condition": "project", "maxPrice": 120000 }
```

**Everything in Manchester, ranked**

```json
{ "area": "M", "maxItems": 500 }
```

Leave the filters empty for the top-returning deals nationwide. Tick **coverage summary** to see how many deals and areas are currently covered.

### Honest limits

- Rents are modelled per outcode (and per bedroom count where comps allow), not per individual property.
- Scoring is as-is: no refurb uplift, no refinance. A BRRR deal's real return comes from work this model can't see.
- Auction guides are brackets, not prices.
- Figures are indicative estimates for shortlisting, **not financial advice**. Verify anything before you buy it.

### Coverage

UK (Rightmove + live auction lots) and Germany (ImmobilienScout24), across ~1,700 postcode areas, refreshed on a schedule — auction stock daily, since lots expire fast.

***

⚠️ **Disclaimer:** this actor returns modelled estimates from public listing data for research and shortlisting. It is not financial, investment or valuation advice. Always carry out your own due diligence.

# Actor input Schema

## `area` (type: `string`):

UK outcode (`M14`, `LS6`, `BS3`) or a whole postcode area (`M` = every Manchester outcode, `SW`, `LS`). German deals use a PLZ-3 Leitregion (`101` Berlin-Mitte, `802` München). Leave empty for everywhere.

## `market` (type: `string`):

UK covers Rightmove listings plus UK auction lots (GBP). Germany covers ImmobilienScout24 (EUR).

## `listingSource` (type: `string`):

Auction lots price off a GUIDE, which is a marketing bracket rather than a sale price — lots routinely sell well above it, so an auction ROI is a ceiling, not an expectation. Portal listings are ordinary asking prices.

## `minRoiPct` (type: `integer`):

Annual cash-on-cash return. 8 means only deals returning 8%+ on the cash you put in.

## `maxPrice` (type: `integer`):

Maximum asking / guide price, in the market's currency.

## `minPrice` (type: `integer`):

Defaults to 40,000 to filter out shared-ownership shares, plots and parking spaces.

## `minBedrooms` (type: `integer`):

Smallest number of bedrooms to include.

## `maxPaybackMonths` (type: `integer`):

How long until the cash invested comes back out of cashflow.

## `strategy` (type: `string`):

Buy-to-let is a long let to a tenant. Serviced accommodation is short-let / nightly. Leave on Best to let each deal pick whichever returns more.

## `condition` (type: `string`):

An AI vision pass over the listing photos: Refurbished = let-ready, Cosmetic = sound but dated, Project = major works (the BRRR / refurb shortlist). This is a shortlisting signal to decide what is worth viewing — it is NOT a refurb-cost estimate, because damp, wiring and roofs do not show up in photos. Only matches deals already triaged.

## `minRentConfidence` (type: `string`):

How the rent behind the ROI was derived. Confident = median of 8+ real rental listings at the same outcode AND bedroom count. Directional = 3+ real comps. Estimate-backed deals can show inflated ROI, so tighten this when the numbers need to be trustworthy.

## `includeFlagged` (type: `boolean`):

Off by default. Flagged deals are auction guide-price bait, shared-ownership shares, retirement/age-restricted units, and listings whose modelled return is implausible. Turn on only if you want to inspect them.

## `maxItems` (type: `integer`):

How many deals to return, ranked best-ROI-first. Free plans are capped at 25.

## `includeSummary` (type: `boolean`):

Appends one `rowType: "summary"` row: total deals, areas covered, average ROI by strategy and the best-returning areas. Useful for checking whether an empty result means 'no deals like that' or 'this area is not covered yet'.

## Actor input object example

```json
{
  "market": "uk",
  "listingSource": "",
  "strategy": "",
  "condition": "",
  "minRentConfidence": "",
  "includeFlagged": false,
  "maxItems": 100,
  "includeSummary": false
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/uk-property-deal-finder").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("memo23/uk-property-deal-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call memo23/uk-property-deal-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/uk-property-deal-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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