# Recent Home Sales & New Homeowner Leads Scraper (`scrapebench/recent-home-sales-new-homeowner-leads-scraper`) Actor

Homes just sold in a city or town (CT, MA, NH, ME, RI, VT, VA) with the buyer's name and mailing address, seller, price, beds and baths. New homeowner leads, pay per sale.

- **URL**: https://apify.com/scrapebench/recent-home-sales-new-homeowner-leads-scraper.md
- **Developed by:** [ScrapeBench](https://apify.com/scrapebench) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.02 / sale found

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/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

## Recent Home Sales & New Homeowner Leads Scraper

### Pain points

- Every town keeps its own assessor database: Connecticut alone has 72 separate ones on this platform, so following new sales means searching them one town at a time.
- A town's sales search lists the address, date and price 20 sales a page; the buyer's name and mailing address are on a separate property page for every single sale.
- Sales lists mix $0 family transfers, commercial buildings and vacant land in with the home sales you actually want to reach.

### What we solve

- Searches every city and town you choose (or the whole state) in one run and returns one row per sale.
- Opens each sold property's record for you: buyer, seller, the owner's mailing address, deed book/page, beds, baths, year built and assessed value.
- Keeps only home sales by default (single-family, condo, multi-family) and leaves out $0 transfers, so the list is ready for a mailing.

### Summary

Pick a state and the cities or towns you serve (or leave them empty for the whole state) and a time window, and get every home sale the town's assessor has recorded: address, sale date, price, property type, style, living area and land area. With owner details on, each sale also carries the buyer, the seller, the new owner's mailing address (with an absentee flag for buyers who live elsewhere: investors, landlords, second homes), the deed book and page, the previous sale, and the house itself: bedrooms, bathrooms, rooms, year built, heating and air conditioning, assessed and appraised value, zoning and a link to the assessor's building photo. Covers 274 cities, towns and counties whose assessors publish on Vision Government Solutions databases: 72 in Connecticut, 77 in Massachusetts, 41 in New Hampshire, 35 in Maine, 19 in Rhode Island, 23 in Virginia, 4 in Vermont, 2 in Pennsylvania and 1 in Minnesota. You pay per sale delivered.

### Who it's for

- Home-service businesses that market to new homeowners: roofing, HVAC, solar, plumbing, landscaping, pest control, security, cleaning
- Insurance agents, mortgage and refinance lenders, and movers who reach people right after a purchase
- Local businesses running new-mover mailers and welcome offers
- Real-estate agents farming just-sold streets, and investors tracking who is buying (absentee and LLC buyers)

### How to use

Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:

```json
{
  "state": "CT",
  "cities": [
    "Bridgeport",
    "Fairfield",
    "Trumbull"
  ],
  "soldWithinDays": 30
}
```

See **Inputs** below for every available field.

### What you get

One row per record:

| Field | Description |
|---|---|
| `sale_date, sale_price` | When the sale was recorded and for how much |
| `city, state, address` | The property sold |
| `property_type` | single_family, condo, multi_family, vacant_land, commercial or other; plus the town's own model and style |
| `buyer` | The new owner, from the sale history on the property record |
| `owner_mailing_address` | Where the owner gets mail, also split into street, city, state and ZIP |
| `owner_is_buyer` | True when the owner of record (and the mailing address) is this sale's buyer; false when the town has not updated the record yet |
| `absentee_owner` | True when the buyer's mailing address is somewhere else: an investor, landlord or second-home buyer |
| `seller, previous_sale_price, previous_sale_date` | The previous owner and what they paid |
| `book_page` | The deed's book and page |
| `bedrooms, bathrooms, half_baths, total_rooms, year_built` | The house, from the assessor's record |
| `living_area_sqft, land_area_sqft, land_acres` | Size of the house and lot |
| `heat_type, ac_type` | Heating and air conditioning, as the assessor records them |
| `assessed_value, appraised_value, zoning, land_use` | The town's valuation and land facts |
| `photo_url` | Link to the assessor's photo of the building |
| `source_url` | The property's page on the assessor's database |

Sample:

```json
{
  "state": "CT",
  "city": "Branford",
  "address": "17 BALLOU RD",
  "sale_date": "2026-09-28",
  "sale_price": 340000,
  "property_type": "single_family",
  "model": "Residential",
  "style": "Ranch",
  "living_area_sqft": 710,
  "land_area_sqft": 10454,
  "buyer": "LUCY & DIANE DEVELOPERS LLC",
  "owner_is_buyer": true,
  "owner_mailing_address": "302 FIELD POINT RD, BRANFORD, CT 06405",
  "owner_mailing_zip": "06405",
  "absentee_owner": true,
  "book_page": "1436/0747",
  "previous_sale_price": 208000,
  "previous_sale_date": "2021-04-27",
  "year_built": 1950,
  "bedrooms": 2,
  "bathrooms": 1.0,
  "heat_type": "Hot Water",
  "assessed_value": 202400,
  "appraised_value": 289100,
  "photo_url": "https://gis.vgsi.com/photos/BranfordCTPhotos/0035/BALLOU%20RD%2017_35226.jpg",
  "source_url": "https://gis.vgsi.com/BranfordCT/Parcel.aspx?pid=8075"
}
```

### Inputs

| Field | Required | Type | Default | Description |
|---|---|---|---|---|
| `state` | no | string | `"CT"` | The state to search. Covered: the cities, towns and counties whose assessor publishes its records on a Vision Government Solutions online database (274 in all). |
| `cities` | no | array | `["Bridgeport", "Fairfield", "Trumbull"]` | City or town names, e.g. 'New Haven' or 'Canton'. In Virginia and Pennsylvania, a county or independent city, e.g. 'Gloucester County'. Leave empty to search every city and town in the state. A name that is not covered returns the free list of names that are. |
| `city` | no | string | — | One city or town; kept for saved tasks and API callers that send one value. Combined with 'Cities or towns'. |
| `soldWithinDays` | no | integer | `30` | Sales recorded in this many days up to today. Towns post sales on their own schedule: some within a week, most within a month or two, a few once a year. |
| `dateFrom` | no | string | — | Start date, YYYY-MM-DD. Overrides 'Sold within the last'. |
| `dateTo` | no | string | — | End date, YYYY-MM-DD. Defaults to today. |
| `propertyTypes` | no | array | `["single_family", "condo", "multi_family"]` | Which sales to return: single_family, condo, multi_family, vacant_land, commercial, other. Default: homes (single-family, condo, 2-4 family and larger). |
| `minPrice` | no | integer | `1` | The default of 1 leaves out $0 deeds (transfers between family members or into a trust), which are rarely new homeowners. Set 0 to include them. |
| `maxPrice` | no | integer | — | Optional upper price limit. |
| `includeOwnerDetails` | no | boolean | `true` | Open each property's record for the buyer, the seller, the owner's mailing address, beds, baths, year built and assessed value. Off: only what the sales list carries (address, date, price, type, living area, land area), which is faster. |
| `maxResults` | no | integer | `1000` | Spend cap for the WHOLE run, across every city and town, not per city. The run stops once it has delivered this many sales. A statewide Connecticut month was about 630 home sales in October 2026. |
| `proxyConfiguration` | no | object | `{"useApifyProxy": false}` | Off by default. Turn it on if a run reports that a database refused the search. |

### Pricing (Pay Per Event)

You pay per result (`sale-found`) — **no charge for empty runs**. Example: **630 home sales** at *$0.02/result* ≈ **$12.60**.

Example: every home sale recorded across Connecticut's 72 covered towns in one month (about 630 in October 2026) costs about $12.60. Apify platform usage is billed separately per your plan.

### Use cases

- New homeowner mailers: every home that sold in your service towns last month, with the new owner's name and mailing address.
- Contractor lead lists: older homes that just changed hands (year built, heating type, bedrooms) for roofing, HVAC, window and remodel offers.
- Just-sold farming: recent sales on and around a street, with price and size, for 'just sold in your neighborhood' cards.
- Investor tracking: sales to LLCs and buyers who mail elsewhere (absentee_owner), town by town.

### Why this actor

- The buyer's name and mailing address on the row, read from each property's own record, not just the sale price.
- Whole states in one run: all of a state's covered cities and towns, or just the ones you serve.
- Home sales only by default, with $0 transfers left out; switch on condos-only, land or commercial when you want them.
- Honest about lag: owner_is_buyer says when a town has not updated the record yet, so you never mail the seller by mistake.

### Limitations & updates

Covers only the 274 cities, towns and counties whose assessors publish on Vision Government Solutions databases; neighbouring towns on other systems are not included. Sales appear when each town records them, from within a week to once a year. Names and mailing addresses only, no phone numbers or emails. Some towns (e.g. Bloomington, MN) publish no sale history on the property record, so their rows have no buyer or seller. Building photos are links to the assessor's own files.

### FAQ

**Where does the data come from?**

From each city's or town's assessor, which publishes its property records on an online database hosted by Vision Government Solutions. The actor uses the database's own sales search, then opens each sold property's record.

**How recent are the sales?**

As recent as the town makes them. Towns post sales on their own schedule: in an October 2026 check some showed sales from the week before, most were a few weeks to two months behind, and a few update once a year. The run log shows each town's newest sale.

**Why is the buyer empty on some rows?**

The town has recorded the sale but has not yet put the new owner on the property record. The row then says owner_is_buyer: false, and the owner and mailing address shown are still the seller's. Run the same towns again in a few weeks.

**What does absentee_owner mean?**

The buyer's mailing address is not the property itself (or is in another state): usually an investor, a landlord, a second-home buyer or a company. False means the buyer gets mail at the house they bought.

**Which cities and towns are covered?**

The 274 whose assessors publish on a Vision Government Solutions database: 72 in Connecticut, 77 in Massachusetts, 41 in New Hampshire, 35 in Maine, 19 in Rhode Island, 23 in Virginia, 4 in Vermont, 2 in Pennsylvania and 1 in Minnesota. Type a name that is not covered and the run returns the free list of the ones that are.

**Can I get phone numbers or emails?**

No. Assessor records carry names and mailing addresses only, which is what direct mail needs.

**How am I charged?**

$0.02 per sale delivered. Notices are free: a town with no sales in your window, a database that did not answer, or a run cut short by its time or your maximum charge. Use 'Maximum sales' to cap the whole run.

### Which actor to choose

Related property tools in the same suite:

- **US Property Records Export & Owner Lookup** — You want every property (not just recent sales) in a county or ZIP, or an owner lookup by address.
- **Floor Plan Scraper: Home Floor Plans & Photos by Address** — You have an address and want that home's floor plans.

### Guides & use cases

Written up on **[scrapebench.dev](https://scrapebench.dev)** — the bench that runs and verifies this actor against the live source every night:

- **How-to:** [How to run Recent Home Sales & New Homeowner Leads Scraper](https://scrapebench.dev/guides/how-to-recent-home-sales-new-homeowner-leads-scraper/)
- **Use case:** [Fairfield County CT New Homeowner Leads](https://scrapebench.dev/use-cases/fairfield-county-ct-new-homeowners/)

More actors, coverage and nightly verification results: **[scrapebench.dev](https://scrapebench.dev)**

### Works with AI assistants (MCP)

Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the [MCP tab](https://apify.com/scrapebench/recent-home-sales-new-homeowner-leads-scraper/api/mcp) on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.

Then just ask:

> "Find homes sold in Salem, Connecticut in the last 45 days, with the new owners' mailing addresses."

That returned 6 sales, the newest 7 days old, each with the buyer and mailing address (test run, 2026-10-28). Runs started this way bill exactly like any other run.

### Data & lawful use

This actor collects publicly available information that the assessors' offices of the participating cities, towns and counties, which publish their property records through online databases hosted by Vision Government Solutions, Inc. publishes for public
lookup — licence records, business listings and the contact details professionals list there.
Some of it identifies individuals (sole proprietors, licence holders, agents), so treat any
names, phone numbers and emails in your results as personal data.

When you run this actor, you decide what is collected and what it is used for, so you are the
controller of that data and we act only as your processor (Apify Standard Actor Contract).
You need a lawful basis for your use, must honour opt-out and deletion requests, and must
follow the marketing rules that apply to you (CAN-SPAM, TCPA, GDPR, CCPA and similar).
Don't use the output for unsolicited bulk messaging, for screening covered by the FCRA, or
for anything the source's own terms forbid.

Your results are stored in your own Apify account. We don't keep a copy of your results and
don't sell or share them.

### Disclaimer

This is an independent tool. It is not affiliated with, endorsed by or sponsored by
the assessors' offices of the participating cities, towns and counties, which publish their property records through online databases hosted by Vision Government Solutions, Inc.. Names and marks are used only to describe the data source. Records are
provided as published by the source and may be out of date or incomplete. For anything
consequential (hiring, a permit, a legal decision), confirm the record with the issuing
agency. You are responsible for making sure your use complies with applicable law and the
source's terms.

### Need help?

Open an issue on this actor's **Issues** tab and we'll respond there. Bug reports, missing
fields and feature requests are all welcome. Guides and examples: [scrapebench.dev](https://scrapebench.dev).

If you are a person named in this data and want your record removed from our copy, email
apify-help@scrapebench.dev; the source agency remains the official record.

Your run may be used to improve our services. If something looks off, or you want this actor to fit your use better, please share your run data with us: [Apify Console → Settings → Security → Share run data with developers](https://console.apify.com/settings/security). It lets us see exactly what went wrong and keep improving the actor.

# Actor input Schema

## `state` (type: `string`):

The state to search. Covered: the cities, towns and counties whose assessor publishes its records on a Vision Government Solutions online database (274 in all).

## `cities` (type: `array`):

City or town names, e.g. 'New Haven' or 'Canton'. In Virginia and Pennsylvania, a county or independent city, e.g. 'Gloucester County'. Leave empty to search every city and town in the state. A name that is not covered returns the free list of names that are.

## `city` (type: `string`):

One city or town; kept for saved tasks and API callers that send one value. Combined with 'Cities or towns'.

## `soldWithinDays` (type: `integer`):

Sales recorded in this many days up to today. Towns post sales on their own schedule: some within a week, most within a month or two, a few once a year.

## `dateFrom` (type: `string`):

Start date, YYYY-MM-DD. Overrides 'Sold within the last'.

## `dateTo` (type: `string`):

End date, YYYY-MM-DD. Defaults to today.

## `propertyTypes` (type: `array`):

Which sales to return: single_family, condo, multi_family, vacant_land, commercial, other. Default: homes (single-family, condo, 2-4 family and larger).

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

The default of 1 leaves out $0 deeds (transfers between family members or into a trust), which are rarely new homeowners. Set 0 to include them.

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

Optional upper price limit.

## `includeOwnerDetails` (type: `boolean`):

Open each property's record for the buyer, the seller, the owner's mailing address, beds, baths, year built and assessed value. Off: only what the sales list carries (address, date, price, type, living area, land area), which is faster.

## `maxResults` (type: `integer`):

Spend cap for the WHOLE run, across every city and town, not per city. The run stops once it has delivered this many sales. A statewide Connecticut month was about 630 home sales in October 2026.

## `proxyConfiguration` (type: `object`):

Off by default. Turn it on if a run reports that a database refused the search.

## Actor input object example

```json
{
  "state": "CT",
  "cities": [
    "Bridgeport",
    "Fairfield",
    "Trumbull"
  ],
  "soldWithinDays": 30,
  "propertyTypes": [
    "single_family",
    "condo",
    "multi_family"
  ],
  "minPrice": 1,
  "includeOwnerDetails": true,
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per recorded sale.

# 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 = {
    "state": "CT",
    "cities": [
        "Bridgeport",
        "Fairfield",
        "Trumbull"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapebench/recent-home-sales-new-homeowner-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 = {
    "state": "CT",
    "cities": [
        "Bridgeport",
        "Fairfield",
        "Trumbull",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapebench/recent-home-sales-new-homeowner-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 '{
  "state": "CT",
  "cities": [
    "Bridgeport",
    "Fairfield",
    "Trumbull"
  ]
}' |
apify call scrapebench/recent-home-sales-new-homeowner-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapebench/recent-home-sales-new-homeowner-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/fc7V152Alc0Gxa51c/builds/PRmwzjSsUVH3DBS94/openapi.json
