# Propwire Real Estate Leads: Distressed, Absentee & Wholesale (`madeingermany/propwire-leads-scraper`) Actor

Get comprehensive property data: estimated equity, foreclosure status (auction dates/lenders), mortgage and transfer history, owner portfolios, and tax assessments.

- **URL**: https://apify.com/madeingermany/propwire-leads-scraper.md
- **Developed by:** [Made In Germany](https://apify.com/madeingermany) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Propwire Real Estate Leads — Distressed Properties, Absentee Owners & Wholesale Deals

A high-performance, production-grade Apify Actor for extracting nationwide off-market real estate leads, owner intelligence, and distress signals directly from [Propwire.com](https://propwire.com).

Extract motivated seller leads including **absentee owners**, **vacant properties**, **high equity**, **free & clear**, **pre-foreclosures**, **auctions**, **tired landlords**, and **cash buyers** — complete with equity estimates, property values, building specifications, and transaction histories.

***

### ⚡ Why Propwire Leads Scraper Beats Alternatives

- **🚀 Pure HTTP Fast-Path Architecture**: Unlike sluggish, resource-draining Puppeteer/Playwright browser scrapers that crash or consume gigabytes of RAM, this actor operates over pure HTTP with TLS fingerprinting (Chrome 130+) and HTTP/2 multiplexing.
- **🛡️ Built-in Anti-Bot Bypass**: Transparently negotiates guest session tokens and session cookies with automatic routing failover between Propwire's internal JSON API and web-proxy endpoints.
- **🎯 Granular Motivated Seller Filtering**: Automatically parses lead criteria from natural language queries (e.g. `"Dallas County, TX Absentee Owners"`) or deep search URLs.
- **💎 Rich Intelligence in Every Record**: Delivers over 25 enriched fields per property, including owner name, address, estimated equity, equity percentage, property type, living area SF, year built, bedrooms, bathrooms, and historical sale prices.

***

### 💰 Pricing (Pay-Per-Event)

This actor operates on a pay-as-you-go **Pay-Per-Event (PPE)** pricing model. You only pay for what you extract:

| Event Name | Purpose | Price (USD) | Description |
|---|---|---|---|
| **`apify-default-dataset-item`** | result | `$0.002` | Single result in the default dataset. |
| **`market-analysis`** | AI market analysis | `$0.15` | Charged per area analyzed with the AI market pass (median values, local rents, gross yield, short-let potential, demand signals, risks). Cached 90 days — repeat lookups of the same area are charged only once per fresh analysis. Only when marketAnalysis is enabled and the user is on a paid plan. |
| **`additional-data`** | Additional data | `$0.001` | Charged for additional data |
| **`apify-actor-start`** | Actor Start | `$0.05` | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |

***

### 📋 Input Configuration

The Actor accepts flexible inputs via the Apify Console or API:

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `startUrls` | `Array<Object>` | `[{"url": "https://propwire.com/"}]` | Propwire URLs to scrape. Accepts homepage, `/search?filters=...`, or individual property links. |
| `searchQuery` | `String` | `"Dallas County, TX Absentee Owners"` | Free-text search filter. Supports state codes (e.g. `TX`, `FL`, `CA`), counties (e.g. `Dallas County`), and lead types. |
| `maxItems` | `Integer` | `50` | Maximum number of property records to extract (up to 50,000). |
| `proxy` | `Object` | `{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }` | Apify Proxy configuration. Residential proxy rotation is recommended when running in production. |

#### Sample JSON Input

```json
{
  "startUrls": [
    {
      "url": "https://propwire.com/"
    }
  ],
  "searchQuery": "Dallas County, TX Absentee Owners",
  "maxItems": 25,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### 📊 Output Schema

Each extracted property is pushed as a structured record to the default dataset:

| Field | Type | Description |
| :--- | :--- | :--- |
| `propertyAddress` | `String` | Formatted street address, city, state, and ZIP. |
| `ownerName` | `String` | Name of owner, company, or ownership entity. |
| `estimatedEquity` | `Number` | Estimated owner equity in USD. |
| `leadType` | `String` | Comma-separated list of active motivated seller distress flags. |
| `estimatedValue` | `Number` | Propwire estimated property market value in USD. |
| `id` | `Number` | Unique Propwire parcel ID. |
| `streetAddress` | `String` | Street name and number. |
| `city` | `String` | City name. |
| `state` | `String` | Two-letter US state code. |
| `zip` | `String` | 5-digit ZIP code. |
| `bedrooms` | `Number` | Bedroom count. |
| `bathrooms` | `Number` | Bathroom count. |
| `buildingAreaSf` | `Number` | Building size in square feet. |
| `lotSizeSf` | `Number` | Lot size in square feet. |
| `yearBuilt` | `Number` | Year constructed. |
| `propertyType` | `String` | Category (`CONDO`, `SFR`, `LAND`, `COMMERCIAL`, etc.). |
| `companyOwned` | `Boolean` | Flag indicating corporate or LLC ownership. |
| `lastSoldDate` | `String` | Date of most recent recorded sale (`YYYY-MM-DD`). |
| `lastSoldPrice` | `Number` | Price paid in last recorded transaction. |
| `leadTypes` | `Array<String>` | Array of all active lead categories. |
| `url` | `String` | Direct Propwire link to property details. |
| `scrapedAt` | `String` | ISO timestamp of when the record was extracted. |

#### Sample JSON Output

```json
{
  "propertyAddress": "9302 Forest Ln, Dallas, TX 75243",
  "ownerName": "TFG WOODSIDE LLC",
  "estimatedEquity": 100226,
  "leadType": "absentee_owner, free_and_clear, high_equity, tired_landlord",
  "estimatedValue": 100226,
  "id": 240281,
  "streetAddress": "9302 Forest Ln",
  "city": "Dallas",
  "state": "TX",
  "zip": "75243",
  "bedrooms": 1,
  "bathrooms": 1,
  "buildingAreaSf": 686,
  "lotSizeSf": 153157,
  "yearBuilt": 1981,
  "propertyType": "CONDO",
  "companyOwned": true,
  "lastSoldDate": "2001-03-13",
  "lastSoldPrice": 22500,
  "leadTypes": [
    "absentee_owner",
    "free_and_clear",
    "high_equity",
    "tired_landlord"
  ],
  "url": "https://propwire.com/realestate/9302-Forest-Ln/240281",
  "scrapedAt": "2026-09-28T00:31:19.949Z"
}
```

***

### 🎯 Primary Use Cases

- **Real Estate Wholesaling**: Generate targeted motivated seller lists (tired landlords, vacant homes, absentee owners) ready for skip tracing and direct marketing campaigns.
- **Investor Acquisitions**: Underwrite off-market opportunities by evaluating equity margins, loan-to-value ratios, and price per square foot against neighborhood medians.
- **Foreclosure & Pre-Foreclosure Tracking**: Identify distressed homeowners before properties reach public auctions.
- **Portfolio Landlord Outreach**: Uncover corporate and multi-property owners for portfolio acquisitions.

***

### 🏷️ Keywords & SEO Tags

`propwire`, `real estate leads`, `property scraper`, `off market properties`, `motivated sellers`, `absentee owners`, `preforeclosures`, `real estate investor`, `property equity`, `skip tracing`, `wholesale real estate`, `lead generation`

# Actor input Schema

## `startUrls` (type: `array`):

Propwire search URLs or property detail URLs.

## `searchQuery` (type: `string`):

Free-text search filter, county, city, or market area.

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

Maximum number of property lead records to extract.

## `proxy` (type: `object`):

Apify Proxy configuration. Residential proxy rotation is recommended for Propwire.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://propwire.com/"
    }
  ],
  "searchQuery": "Dallas County, TX Absentee Owners",
  "maxItems": 50,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://propwire.com/"
        }
    ],
    "searchQuery": "Dallas County, TX Absentee Owners",
    "maxItems": 50,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("madeingermany/propwire-leads-scraper").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 = {
    "startUrls": [{ "url": "https://propwire.com/" }],
    "searchQuery": "Dallas County, TX Absentee Owners",
    "maxItems": 50,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("madeingermany/propwire-leads-scraper").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 '{
  "startUrls": [
    {
      "url": "https://propwire.com/"
    }
  ],
  "searchQuery": "Dallas County, TX Absentee Owners",
  "maxItems": 50,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call madeingermany/propwire-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,madeingermany/propwire-leads-scraper"
        }
    }
}
```

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/CUuSbsp9ygNU0qu5T/builds/WaAUvWTQF000h5f0h/openapi.json
