# Realtor.com New Listings Scraper (`schnellscrapers/realtor-new-listings-scraper`) Actor

Scrape Realtor.com for-sale listings published in the last 14 days with price, address, beds, baths, sqft, brokerage, photo, and price-reduction flags. Search cities, ZIP codes, or states, filter before billing, and export fresh property leads without a login or API key for outreach campaigns.

- **URL**: https://apify.com/schnellscrapers/realtor-new-listings-scraper.md
- **Developed by:** [Nate Schnell](https://apify.com/schnellscrapers) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 fresh listings

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?

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

### What does Realtor.com New Listings Scraper do?

Realtor.com New Listings Scraper finds recent for-sale property listings in US cities, ZIP codes, and states. It returns one clean row per property with the listing date, current price, address, property facts, brokerage, photos, and source flags so agents, investors, and lead-generation teams can act on fresh inventory.

### What data can you extract from Realtor.com?

- Property identity — property ID, listing ID, listing URL, status
- Freshness and pricing — listed date, last update, days since listed, current price, price-reduced flag, reduction amount
- Location — address, city, state, ZIP code, county, latitude, longitude
- Property facts — type, bedrooms, bathrooms, square feet, new-construction flag, feature tags
- Business context — brokerage, source ID, primary photo URL

The actor keeps source values as `null` when Realtor.com does not publish a field for a listing. No values are guessed or filled from unrelated properties.

### How to use Realtor.com New Listings Scraper

1. Open Realtor.com New Listings Scraper and click **Try for free**.
2. Add one or more locations such as `Austin, TX`, `78701`, or `TX` in **Search locations**.
3. Choose a listing age window. Use `1` for a daily feed or `14` for a broader fresh-listing sweep.
4. Add optional property, price, bedroom, bathroom, or price-reduction filters.
5. Click **Run** and download the dataset as JSON, CSV, or Excel, or connect it through the Dataset API.

### How much does it cost?

The actor uses pay-per-event pricing: `$0.0015` per emitted fresh listing, plus a one-time `$0.005` actor-start event. An empty or dry run still incurs the actor-start event because the search request consumes platform compute. Filters run before dataset writes, so excluded listings are not billed as listing events. Start with `maxItems: 20` and one location while checking a market, then raise the limit for scheduled feeds.

### Input

The required input is `searchLocations`, an array of city/state strings, ZIP codes, or two-letter state codes. The remaining fields narrow the freshness window and property shape without requiring a Realtor.com login or API key.

```json
{
  "searchLocations": ["Austin, TX", "78701"],
  "newerThanDays": 7,
  "propertyTypes": ["single_family", "condos"],
  "minPrice": 300000,
  "minBeds": 2,
  "priceReducedOnly": false,
  "maxItems": 100
}
```

### Output

Each dataset row is a normalized fresh Realtor.com listing.

```json
{
  "propertyId": "8994351851",
  "listingId": "2999962986",
  "listingUrl": "https://www.realtor.com/realestateandhomes-detail/6403-Bluesky-Way_Austin_TX_78745_M89943-51851",
  "status": "for_sale",
  "price": 425000,
  "priceReducedAmount": 24000,
  "isNewListing": true,
  "isPriceReduced": true,
  "listDate": "2026-08-21T21:26:30.000Z",
  "daysSinceListed": 8,
  "address": "6403 Bluesky Way",
  "city": "Austin",
  "state": "TX",
  "postalCode": "78745",
  "propertyType": "single_family",
  "beds": 4,
  "baths": 2,
  "sqft": 1610,
  "brokerage": "Keller Williams Realty",
  "tags": ["central_air", "swimming_pool"],
  "sourceUrl": "https://www.realtor.com/realestateandhomes-search/Austin_TX",
  "scrapedAt": "2026-08-30T20:00:00.000Z"
}
```

### Integrations

Use the Apify API or official integrations for Make, n8n, Zapier, webhooks, and scheduled runs. Send the resulting Dataset to a CRM, spreadsheet, warehouse, or alerting workflow through the [Apify integrations](https://docs.apify.com/platform/integrations) and [Apify API](https://docs.apify.com/api/v2) documentation.

### Related actors

- [Zillow Price Drop Scraper](https://apify.com/schnellscrapers/zillow-price-drop-scraper) — find price-reduced Zillow listings with normalized drop amounts and percentages.
- [Airbnb Listing Extractor](https://apify.com/schnellscrapers/airbnb-listing-extractor) — collect short-term rental listing prices, ratings, and booking URLs.
- [Booking.com Review Monitor](https://apify.com/schnellscrapers/booking-review-monitor) — collect recent hotel reviews for property and hospitality workflows.

### FAQ

#### How does Realtor.com New Listings Scraper work?

It sends a summary search request to the public Realtor.com search data surface, paginates the returned result set, normalizes listing fields, and keeps rows whose source `list_date` is inside your selected window. It does not visit a separate detail page for each listing.

#### Can I use Realtor.com New Listings Scraper as an API?

Yes. Start a run through the Apify REST API or `apify-client`, then read the run's default Dataset. The actor page's API tab provides ready-to-copy JavaScript, Python, and cURL examples.

#### Can I use Realtor.com New Listings Scraper in Python or Node.js?

Yes. For Node.js, install `apify-client`, call `client.actor('schnellscrapers/realtor-new-listings-scraper').call({ searchLocations: ['Austin, TX'] })`, and read `run.defaultDatasetId`.

#### What does this actor access?

The actor accesses public for-sale search data returned for the locations supplied in the input. It does not require a Realtor.com account, session cookies, or a third-party API key, and it does not open contact forms or other interactive controls.

#### How fresh can the listing feed be?

Set `newerThanDays` to `1` for a daily feed, then schedule the actor hourly or daily in Apify. The result is a current snapshot; cross-run history and alert delivery belong in your Dataset, webhook, or downstream automation.

#### Is it legal to scrape Realtor.com?

The actor is designed for publicly displayed listing information. Whether a particular collection, storage, or outreach use is permitted depends on your jurisdiction, agreements, and intended use, so review the applicable requirements before running a large or commercial workflow.

### Your feedback

If a field is missing, a location returns an unexpected shape, or you want another filter, report it through the Issues tab on the actor page. Feature requests that improve fresh listing feeds are welcome.

# Actor input Schema

## `searchLocations` (type: `array`):

Enter one or more US locations such as `Austin, TX`, `78701`, or `TX`. Each location is searched independently and deduplicated by property ID.

## `newerThanDays` (type: `integer`):

Keep listings whose source `list_date` is within this many days of the run. Use `1` for a daily feed or `14` for a wider fresh-listing sweep.

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

Keep only matching Realtor.com property types, such as `single_family`, `condos`, or `townhomes`. Leave empty for every type returned by the search.

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

Keep listings priced at or above this USD amount. Leave empty for no minimum.

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

Keep listings priced at or below this USD amount. Leave empty for no maximum.

## `minBeds` (type: `integer`):

Keep listings with at least this many bedrooms. Listings with no bedroom value are excluded when this filter is set.

## `minBaths` (type: `integer`):

Keep listings with at least this many bathrooms. Listings with no bathroom value are excluded when this filter is set.

## `priceReducedOnly` (type: `boolean`):

Return only fresh listings where Realtor.com exposes a price reduction flag or amount. Useful for motivated-seller outreach.

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

Hard cap on emitted listings across all locations. Start with `20` to validate a market before increasing the limit.

## `maxPages` (type: `integer`):

Maximum 42-result search pages fetched for each location. Increase this for dense markets; the actor stops earlier when Realtor.com reports the end of the result set.

## `dryRun` (type: `boolean`):

Fetch and filter listings without writing dataset records. Logs report matched versus written counts for safe input checks.

## Actor input object example

```json
{
  "searchLocations": [
    "Austin, TX"
  ],
  "newerThanDays": 14,
  "propertyTypes": [],
  "priceReducedOnly": false,
  "maxItems": 100,
  "maxPages": 5,
  "dryRun": false
}
```

# Actor output Schema

## `records` (type: `string`):

Recent Realtor.com listings ready for real-estate lead generation, market monitoring, and CRM workflows.

# 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 = {
    "searchLocations": [
        "Austin, TX"
    ],
    "propertyTypes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("schnellscrapers/realtor-new-listings-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 = {
    "searchLocations": ["Austin, TX"],
    "propertyTypes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("schnellscrapers/realtor-new-listings-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 '{
  "searchLocations": [
    "Austin, TX"
  ],
  "propertyTypes": []
}' |
apify call schnellscrapers/realtor-new-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,schnellscrapers/realtor-new-listings-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/QeaQ2tbl2IEKh7qyK/builds/F4QSnBdvqJ0Ofdlno/openapi.json
