---
title: "How to Scrape Realtor.com Listings | Scrape.ly"
description: "Scrape Realtor.com listings by city, ZIP or URL: prices, sale and tax history, schools and flood and wildfire risk. A real run, its cost, API and MCP code."
url: https://scrape.ly/blog/scrape-realtor-com
markdown: https://scrape.ly/blog/scrape-realtor-com.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Realtor.com Listings: Prices, History, Taxes and Risk Scores

Scrape Realtor.com listings for sale, for rent or recently sold by city, ZIP code or URL: price, beds, baths, square feet, sale and price history, tax records, schools and flood and wildfire risk. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.

[Roam & Roof Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/roamandroof.md)

- Published

  Oct 27, 2026

- Reading time

  7 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a red house icon off two houses at night, in front of which a yard sign shows the red Realtor.com house logo, and drops it into a crate](https://scrape.ly/media/scrape-realtor-com.png?w=1080)

To scrape Realtor.com, give a ready-made Actor a city, ZIP code, county or neighborhood, or paste Realtor.com search or property URLs, and it returns one row per home: price, beds, baths, square feet, lot size, listing and sale history, tax records, nearby schools, and flood, wildfire and noise risk. On Scrape.ly that's a preset and one click, or one API call, with no login and no browser.

This guide covers the fields you get, the no-code steps, the same job in curl, Python, Node.js and through an AI agent, a real run from 27 October 2026 (ten homes for sale in Las Vegas ZIP 89166), its log and exact cost, and how to get past Realtor.com's 10,000-result cap.

## What data you can get from Realtor.com

The [Realtor.com Scraper](https://scrape.ly/store/roamandroof/realtor-scraper.md) returns one row per property. With **Full property details** on (the default), a row holds:

| Field                                                                        | What it holds                                                            |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| `id`, `listingId`, `url`, `status`                                           | Property and listing IDs, the page, and `for_sale`, `for_rent` or `sold` |
| `listPrice`, `priceReducedAmount`, `lastSoldPrice`, `soldOn`                 | Asking price, the latest cut, and the previous sale                      |
| `beds`, `baths`, `sqft`, `lotSqft`, `yearBuilt`, `garage`, `stories`, `type` | Property facts                                                           |
| `address`, `coordinates`                                                     | Street, city, ZIP, county with FIPS code, and latitude and longitude     |
| `history`, `taxHistory`, `buildingPermitsHistory`                            | Listing and sale events, yearly tax and assessments, permits             |
| `nearbySchools`                                                              | Schools with ratings, distance and level                                 |
| `local`                                                                      | Flood (with FEMA zone), wildfire and noise risk                          |
| `photos`, `virtualTours`, `matterport`                                       | Media                                                                    |
| `agents`, `advertisers`, `branding`                                          | Listing agents, offices and brokerages                                   |
| `floorplans`                                                                 | Floor plans for apartment communities, with **Floor plans** on           |

With details off, each row is a lighter summary (price, size, photos, flags and location) at a quarter of the price.

## How to scrape Realtor.com without code

1. Open the Realtor.com Scraper in the Scrape.ly Store.
2. Pick the [Homes for sale in ZIP 89166, 10 listings](https://scrape.ly/store/roamandroof/realtor-scraper/presets/search-zip-details.md) preset. It fills in this input:

```json
{
  "search": "89166",
  "maxItems": 10,
  "includeDetails": true,
  "startUrls": []
}
```

3. Type your own location, or paste Realtor.com URLs, and click **Start**. Our run took 6 seconds.
4. Open the dataset and export it as JSON, CSV, Excel or HTML.

The input fields that matter most:

- `search`: a city, ZIP, county or neighborhood; several on separate lines.
- `startUrls`: search URLs (filters in the URL are applied), rental `/apartments/...` searches, `/show-recently-sold` searches or property pages.
- `mode`: `BUY`, `RENT` or `SOLD` for the location search, with `soldWithin` for how far back sold homes go.
- `type`, `minPrice`, `maxPrice`, `minBed`, `minSqft`, `minLotSqft`, `minYearBuilt`: property filters. In sold mode, price filters use the sold price.
- `daysOnMarket`, `keyword`, `tags`, `radius`, `includePending`: listing filters, such as only listings that mention "solar" or have a pool.
- `includeDetails`: full records (default) or faster summary rows.

Other presets show [3+ bed homes sold in Gilbert](https://scrape.ly/store/roamandroof/realtor-scraper/presets/sold-mode-filters.md), [apartments for rent with floor plans](https://scrape.ly/store/roamandroof/realtor-scraper/presets/rent-floorplans.md) and [homes with a pool in two areas](https://scrape.ly/store/roamandroof/realtor-scraper/presets/multi-location-keyword.md).

Scrape.ly Store Realtor.com Scraper Realtor.com listings for sale, for rent or recently sold by location or URL: prices, sale and tax history, schools and flood, wildfire and noise risk, with no login.

[Try it free](https://scrape.ly/store/roamandroof/realtor-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Realtor.com with the API

Create a token under **Settings → API & Integrations** in the dashboard and store it as `SCRAPELY_TOKEN`. Ten detailed listings took 3.5 seconds of scraping, so the synchronous endpoint fits for small pulls:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/roamandroof~realtor-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"search": "Gilbert, AZ", "mode": "SOLD", "soldWithin": "3", "minBed": 3, "maxItems": 100}'
```

Add `?format=csv` for a CSV. For thousands of listings, start the run asynchronously (`POST /v2/actors/roamandroof~realtor-scraper/runs`), poll `/v2/actor-runs/RUN_ID?waitForFinish=60`, then read `/v2/actor-runs/RUN_ID/dataset/items?format=csv`. The [API docs](https://scrape.ly/docs/api-actors.md) cover each step.

In Python (`pip install scrapely-client-python`), this market check reads every home for sale in a ZIP code and reports price cuts and the gain since each home last sold:

```python
import os

from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

run = client.actor("roamandroof/realtor-scraper").call(
    run_input={"search": "89166", "mode": "BUY", "maxItems": 700, "includeDetails": True}
)
homes = list(client.dataset(run.default_dataset_id).iterate_items())
cut = [h for h in homes if h.get("priceReducedAmount")]
print(f"{len(homes)} for sale, {len(cut)} with a price cut")
for h in homes:
    if h.get("lastSoldPrice"):
        gain = h["listPrice"]  h["lastSoldPrice"]  1
        print(f"{h['listPrice']:>10,}  last sold {h['soldOn']}  {gain:+.0%}  {h['url']}")
```

In JavaScript or Node.js (`npm install scrapely-client`), screen listings for wildfire and flood risk before you look closer:

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('roamandroof/realtor-scraper').call({
  search: 'Las Vegas, NV',
  type: ['single-family-home'],
  minBed: 3,
  maxPrice: 700000,
  maxItems: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const h of items) {
  console.log(h.listPrice, h.local?.flood?.severity, h.local?.wildfire?.severity, h.url);
}
```

The [Realtor.com API](https://scrape.ly/api/realtor-com-api.md) page shows the same Actor as a ready-made API, and the [Python client](https://scrape.ly/docs/client-python.md) docs cover paging through large datasets.

### With an AI agent (MCP)

Scrape.ly runs a hosted MCP server at `https://mcp.scrape.ly`. In Cursor, add it to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://mcp.scrape.ly",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://mcp.scrape.ly`, then `/mcp` to sign in with OAuth. Then ask: "Use scrapely to get 100 homes for sale in 89166 from Realtor.com and list the ones with a price cut, the size of the cut and how long they've been listed." The [MCP docs](https://scrape.ly/docs/mcp.md) list ChatGPT, VS Code, Windsurf and the other clients.

## A real run: ten homes for sale in ZIP 89166

We ran the preset as-is on 27 October 2026. Realtor.com reported 663 matching listings; the run saved the first 10 with full details in 6 seconds. Addresses and agents are left out here:

| Price      | Beds / baths | Sq ft | Built     | Listed     | Last sold           | Price cut | Wildfire risk |
| ---------- | ------------ | ----- | --------- | ---------- | ------------------- | --------- | ------------- |
| $629,900   | 5 / 3        | 2,542 | 2010      | 2026-09-02 | $380,000 (2019)     | $20,100   | Minor         |
| $650,000   | 4 / 3        | 2,404 | 2008      | 2026-10-19 | $375,000 (2018)     | none      | Minor         |
| $775,000   | 5 / 4.5      | 3,190 | 2019      | 2026-10-20 | $506,616 (2019)     | none      | Moderate      |
| $515,000   | 3 / 2        | 1,939 | 2019      | 2026-08-03 | $520,000 (2023)     | $18,900   | Minor         |
| $3,450,000 | 5 / 3.5      | 4,419 | 2009      | 2026-05-09 | $1,010,000 (2023)   | $300,000  | Extreme       |
| $381,000   | 3 / 2.5      | 1,531 | new build | 2026-09-24 | none                | none      | Extreme       |
| $380,000   | 3 / 2.5      | 1,649 | 2007      | 2026-10-15 | $364,364 (Sep 2026) | none      | Minor         |

```plaintext
20261027T17:17:32.651Z [scrapely.actor] INFO  Searching 89166 (BUY) from offset 0
20261027T17:17:33.444Z [scrapely.actor] INFO  '89166': 663 matching listings
20261027T17:17:35.514Z [scrapely.actor] INFO  Loaded 10 property details in 2.1s
20261027T17:17:36.067Z [scrapely.actor] INFO  Requests: 11, response bytes: 320288
20261027T17:17:36.069Z [scrapely.actor] INFO  Saved 10 properties in 3.5s.
```

What the ten rows show:

- **Sale history tells the story.** One 5-bedroom bought for $380,000 in 2019 is listed at $629,900, a 66% gain. Another, bought for $520,000 in 2023, is now asking $515,000 after an $18,900 cut, below what its owner paid.
- **You can spot iBuyer flips.** A 3-bedroom sold on 15 September 2026 for $364,364 was relisted a month later at $380,000 by Opendoor's brokerage, 4% higher. `soldOn` and `branding` together make that a one-line filter.
- **Price cuts are a field, not a guess.** Three of the ten had `priceReducedAmount` set, from $18,900 to $300,000, the last on a 10-acre property listed since May.
- **Risk scores differ house by house.** Flood risk was minimal everywhere, but wildfire risk ranged from Minor to Extreme in the same ZIP code, including on a new build. That's due-diligence data most listing exports don't have.
- **Fresh supply.** Five of the ten carried the `isNewListing` flag, and annual property tax ran from $2,160 to $6,261 where it was recorded.

Eleven requests and 320 KB of responses for ten full records, on datacenter proxies with no browser, which is why the per-listing price stays low.

## What it costs

The Actor charges per property saved, platform usage (compute and proxy) included. Prices checked on the Store page on 27 October 2026: **$0.000108 per listing**, plus **$0.000429** for its full detail record when **Full property details** is on. That's $0.108 per 1,000 summary rows or $0.537 per 1,000 detailed ones.

**Our run:** 10 × ($0.000108 + $0.000429) = $0.00537 at list price ($0.004296 charged, because our plan has a Store discount).

**At scale:** all 663 detailed listings in that ZIP code cost about $0.36. A daily summary-only snapshot of 10,000 listings costs $1.08. The Free plan's $5 of monthly usage covers about 9,300 detailed listings, or 46,000 summary rows.

## What to watch out for

- **10,000 results per search.** Realtor.com stops there, and deep pages repeat listings, which the Actor removes. Split big markets by ZIP code, price band or property type.
- **Empty fields are normal.** Land has no beds, many listings have no virtual tour, rentals often have no tax history; our new build had no year built or last sale.
- **Sold-mode prices.** In sold mode the price filter uses the sold price, and summary rows show the sold price in `price` with the asking price in `listPrice`.
- **US only.** Realtor.com covers US listings.
- **Agents are personal data.** Names, phone numbers and emails of agents and owners fall under privacy laws; keep them out of anything you publish.

## Is it legal to scrape Realtor.com?

The Actor reads public listing data that anyone can open without an account. Realtor.com's [Terms of Service](https://www.realtor.com/terms-of-service/) (read on 27 October 2026) say that, except with Move's express written permission, you shall not "access, collect, text mine or data mine, by automated means" the site's content, and they list "screen scraping" and "database scraping" among the prohibited practices. Whether and how those terms bind you depends on your jurisdiction, whether you have an account that accepted them, and your use.

Agent contacts and owner-linked addresses are personal data under the GDPR, the CCPA and similar laws. For market analysis you rarely need them; our [GDPR and web scraping](https://scrape.ly/blog/gdpr-web-scraping.md) guide explains the basics. This is not legal advice; for a commercial project, ask a lawyer about your case.

## Why Scrape.ly for Realtor.com

- **Full records in seconds.** Sale and price history, tax records, permits, schools and climate risk from Realtor.com's own data feed, ten listings in about 2 seconds.
- **Pay for depth only when you need it.** Summary rows at $0.108 per 1,000 for daily price tracking, full records for due diligence.
- **Every filter Realtor.com has.** Price, size, lot, year, type, amenities, keywords, radius, days on market and sold windows, or a pasted filtered URL.
- **The rest of the market on one token.** [Redfin](https://scrape.ly/blog/scrape-redfin.md) for Redfin Estimates and comps, [Zillow](https://scrape.ly/blog/scrape-zillow-data.md) for Zestimates, and the [Zillow scrapers](https://scrape.ly/scrapers/zillow.md) page to compare them; see [real estate data scraping](https://scrape.ly/blog/real-estate-data-scraping.md) for the full picture.

## FAQ

### Can you scrape Realtor.com for free?

Yes. The Free plan includes $5 of usage credit every month with no credit card, which covers about 9,300 detailed listings at list price.

### Does Realtor.com have an API?

Realtor.com doesn't offer a public listings API for developers. The Actor returns its listings as JSON through the Scrape.ly API, and the [Realtor.com API](https://scrape.ly/api/realtor-com-api.md) page shows it as a ready product.

### How do I scrape recently sold homes?

Set `mode: "SOLD"` and `soldWithin` (1 to 36 months), or paste a Realtor.com `/show-recently-sold` search URL.

### Can I get more than 10,000 listings for a city?

Not from one search, because Realtor.com stops at 10,000. Run one search per ZIP code or price band in the same run; the Actor removes listings that appear twice.

### Does it include flood and wildfire risk?

Yes. With full details on, `local` carries flood risk with the FEMA zone, wildfire risk and noise, as Realtor.com shows them.

### Can I scrape Realtor.com with Python?

Yes. Install `scrapely-client-python` and call `roamandroof/realtor-scraper`, as in the market-check script above. The scraping runs in the cloud, so you don't manage proxies or Realtor.com's internal data feed.

Scrape.ly Store Start with the ZIP 89166 preset Run the preset as-is or type your own city or ZIP. Prices, history, taxes, schools and risk scores from $0.108 per 1,000 listings, platform usage included.

[Try it free](https://scrape.ly/store/roamandroof/realtor-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Roam & Roof](https://scrape.ly/blog/author/roamandroof.md) Actor publisher on the Scrape.ly Store

Homes, stays, trips and cars: listings from 40+ property portals, the big travel and booking sites and the main car marketplaces. For agents, investors, travel analysts and dealers. A Scrapely studio.

- [Website](https://scrape.ly/users/roamandroof.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a red house icon off a house at night, beside a yard sign with the red Redfin logo and a green bush, and drops it into a crate](https://scrape.ly/media/scrape-redfin.png?w=750)](https://scrape.ly/blog/scrape-redfin.md)
  ### [How to Scrape Redfin Listings: Prices, Redfin Estimates, History and Schools](https://scrape.ly/blog/scrape-redfin.md)
  [Scrape Redfin listings for sale, sold or for rent from any Redfin search URL, city or ZIP code: price, Redfin Estimate, beds, baths, square feet, price and tax history, schools and coordinates. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-redfin.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls an image pin with a red save button off a cork board topped with the red Pinterest logo and covered in photo pins of different heights, and drops it into a crate](https://scrape.ly/media/scrape-pinterest.png?w=750)](https://scrape.ly/blog/scrape-pinterest.md)
  ### [How to Scrape Pinterest: Pins, Boards, Profiles, Search Results and Comments](https://scrape.ly/blog/scrape-pinterest.md)
  [Scrape Pinterest pins, boards, profiles, idea pages and search results without a login: title, description, images, source domain, likes, saves, board, comments and profile stats. No-code presets, curl, Python, Node.js and MCP, plus a real run, exact costs and the limits that matter.](https://scrape.ly/blog/scrape-pinterest.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a job card with a briefcase off a cork job board topped with the black Upwork logo and pinned with job cards, and drops it into a crate](https://scrape.ly/media/scrape-upwork-jobs.png?w=750)](https://scrape.ly/blog/scrape-upwork-jobs.md)
  ### [How to Scrape Upwork Jobs: Titles, Budgets, Skills and Client Stats](https://scrape.ly/blog/scrape-upwork-jobs.md)
  [Scrape Upwork jobs by keyword or search URL: title, description, budget or hourly range, skills, experience level, posting time and the client's country, rating and spend. No-code steps, curl, Python, Node.js and MCP, with a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-upwork-jobs.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
