# Realtor Autocomplete Scraper (Cheap) (`data_api/realtor-autocomplete-scraper-cheap`) Actor

Realtor.com location autocomplete scraper that returns addresses, cities, ZIP codes, schools, and neighborhoods for any search query, so developers can build autofill UIs and validate locations affordably.

- **URL**: https://apify.com/data\_api/realtor-autocomplete-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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/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

## Realtor Autocomplete Scraper

Realtor.com finishes your sentence the moment you start typing in its search bar — half an address, three letters of a city, a stray ZIP code, and it offers up matching places. This scraper taps that same suggestion feed directly. Hand it a search term and it returns every location Realtor.com would have suggested: the formatted label, the city and state, the ZIP, GPS coordinates, and a property or MLS ID where one exists. Pass a single term or a list of thousands, and toggle off the categories you don't care about so the output stays clean.

![Realtor Autocomplete Scraper](cover.jpg)

### What you get

Every suggestion comes back as one flat row with the same shape, so your columns line up whether you open the results in a spreadsheet or load them into a database. If a term matches nothing, you still get a row carrying that term and a note, so nothing silently disappears. Each record holds:

- **Match basics** — `queryText`, `suggestionType`, `locationLabel`, `streetLine`
- **Place details** — `townName`, `stateAbbr`, `zipCode`, `nationCode`, `gpsLat`, `gpsLng`
- **Identifiers** — `mlsListingId`, `realtorPropertyId`, `urlSlug`
- **Run metadata** — `collectedAt`, `errorNote`

### Quick start

1. Hit **Try for free** and open the input form.
2. Type one or more terms into **Search terms** — a partial address, a city, a ZIP, a school, anything.
3. Untick any location types you don't want under **Which location types to keep**, and set a **Suggestions per term** cap if you only need the top hits.
4. Press **Start**, then download the rows as JSON, CSV, Excel, or XML once it wraps.

![How it works](how-it-works.jpg)

### Use cases

- **Address validation** — confirm a user-typed address actually exists on Realtor.com before you spend on a deeper property pull
- **Autocomplete for your own app** — power a search dropdown in a real estate product with genuine Realtor.com suggestions
- **Lead enrichment** — take rough city names or half-addresses from a CRM and expand them into clean, verified locations
- **Geographic research** — list the neighborhoods, schools, and parks tied to a town or region
- **MLS cross-checks** — test MLS IDs against Realtor.com's index
- **Input cleanup** — turn messy entries like "nyc" or "Manhattan NY" into tidy city, state, and ZIP records

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerms` | array of strings | Yes | Terms to look up, one autocomplete call each. Mix addresses, cities, ZIPs, schools freely. Example: `["Seattle", "742 Evergreen Terrace", "60614", "Denver CO", "Harvard University"]`. |
| `resultsLimit` | integer | No | Suggestions kept per term, up to 10,000. Default `50`. |
| `showAddresses` | boolean | No | Keep street-address matches. Default `true`. |
| `showNeighborhoods` | boolean | No | Keep named neighborhoods and subdivisions. Default `true`. |
| `showCities` | boolean | No | Keep city-wide matches. Default `true`. |
| `showCounties` | boolean | No | Keep county-wide matches. Default `true`. |
| `showZipCodes` | boolean | No | Keep ZIP and postal code matches. Default `true`. |
| `showStreets` | boolean | No | Keep full-street matches with no house number. Default `true`. |
| `showSchools` | boolean | No | Keep individual schools. Default `true`. |
| `showSchoolDistricts` | boolean | No | Keep school district matches. Default `true`. |
| `showUniversities` | boolean | No | Keep colleges and universities. Default `true`. |
| `showParks` | boolean | No | Keep parks and recreation areas. Default `true`. |
| `showStates` | boolean | No | Keep state-wide matches. Default `true`. |
| `showMlsIds` | boolean | No | Keep MLS listing ID matches. Default `true`. |
| `runTimeoutSeconds` | integer | No | Cap on total run time in seconds. Default `300`; raise to `600` for big batches. |
| `requestTimeoutSeconds` | integer | No | Seconds to wait on the server per term. Default `45`. |
| `proxyConfiguration` | object | No | Proxies for requests. Defaults to US datacenter. |

#### Example input

```json
{
    "searchTerms": [
        "Seattle",
        "742 Evergreen Terrace",
        "60614",
        "Denver CO",
        "Harvard University"
    ],
    "resultsLimit": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
}
```

### Output

Each suggestion is pushed as one flat JSON record. Every field is always present — values that don't apply to a given match come back empty or `null`, so the dataset stays rectangular.

#### Example output

```json
{
    "queryText": "Denver CO",
    "suggestionType": "city",
    "locationLabel": "Denver, CO",
    "streetLine": "",
    "townName": "Denver",
    "stateAbbr": "CO",
    "zipCode": "",
    "nationCode": "US",
    "gpsLat": 39.7392,
    "gpsLng": -104.9903,
    "mlsListingId": "",
    "realtorPropertyId": "",
    "urlSlug": "Denver_CO",
    "collectedAt": "2026-06-29T10:30:00.000000+00:00",
    "errorNote": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `queryText` | string | The term you submitted. Always present, even on an empty match. |
| `suggestionType` | string | Category: `address`, `city`, `neighborhood`, `county`, `postal_code`, `street`, `school`, `school_district`, `university`, `park`, `state`, or `mlsid`. |
| `locationLabel` | string | Full formatted location string as Realtor.com displays it. |
| `streetLine` | string | Street portion (house number plus street). Empty for non-address types. |
| `townName` | string | City or town name. |
| `stateAbbr` | string | Two-letter US state abbreviation. |
| `zipCode` | string | ZIP or postal code. |
| `nationCode` | string | Country code, usually `US`. |
| `gpsLat` | number | Latitude. `null` when unavailable. |
| `gpsLng` | number | Longitude. `null` when unavailable. |
| `mlsListingId` | string | MLS listing ID. Filled only for MLS matches. |
| `realtorPropertyId` | string | Realtor.com property ID. Filled only for address matches. |
| `urlSlug` | string | URL-safe slug for the location. |
| `collectedAt` | string | ISO 8601 timestamp of when the row was pulled. |
| `errorNote` | string | Failure reason, or "No suggestions found" on an empty match. `null` on success. |

### Tips for best results

- Partial text is enough. Typing "aus" gets you "Austin, TX" and "Australia" — you never have to spell out the full name.
- When you only want one or two categories, switch the rest off with the boolean toggles. Fewer types means less clutter to sift through.
- `queryText` rides along on every row, so joining results back to your source list is easy even when a term returns nothing.
- Most terms land 10 to 50 suggestions, so a `resultsLimit` of 50 covers nearly everything. Drop it lower when you only want the strongest matches.
- For large batches, lift `runTimeoutSeconds` so the run isn't cut short before every term is processed.

### How can I use Realtor.com autocomplete data?

**How can I use the Realtor Autocomplete Scraper to validate addresses at scale?**
Feed your list of raw addresses into `searchTerms` and turn off everything except `showAddresses`. Each entry that Realtor.com recognizes comes back with a clean `locationLabel`, `zipCode`, and coordinates, so you can flag the ones that resolve and quarantine the ones that don't before running any pricier lookups.

**How can I build a Realtor.com search autocomplete for my own app?**
Send the partial text a user has typed as a single term and read back the suggestions in order. Each row gives you `locationLabel` to show in the dropdown plus `suggestionType`, `townName`, and `stateAbbr` to group or filter by — the same data that drives Realtor.com's own search box.

**How can I pull GPS coordinates for a batch of US locations?**
List your cities, ZIPs, or addresses in `searchTerms` and read `gpsLat` and `gpsLng` off each result. Because `queryText` is stamped on every row, you can map coordinates straight back to the location you asked for and drop them onto a map or into a geospatial dataset.

**How can I look up MLS listing IDs on Realtor.com?**
Leave `showMlsIds` on and type an MLS ID as your term. When Realtor.com knows it, the match comes back with `mlsListingId` and `realtorPropertyId` populated, giving you a quick way to check IDs against the live index.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `searchTerms` (type: `array`):

One or more things to look up. Every term fires its own autocomplete request, so you can mix partial addresses, town names, ZIP codes, neighborhoods, or schools in a single run — whatever you'd type into the Realtor.com search box. For instance: \['Seattle', '742 Evergreen Terrace', '60614', 'Denver CO', 'Harvard University'].

## `resultsLimit` (type: `integer`):

How many suggestions to keep for each search term. Realtor.com can hand back thousands, but in practice a term usually has 10 to 50 worthwhile hits. We default to 50 here. Bump it to 5 if you only want the top picks.

## `showAddresses` (type: `boolean`):

Bring back specific street addresses, like '123 Main St, Springfield, IL'. On by default.

## `showNeighborhoods` (type: `boolean`):

Bring back named neighborhoods and subdivisions, such as 'SoHo, New York, NY'. On by default.

## `showCities` (type: `boolean`):

Bring back city-wide matches, such as 'Houston, TX'. On by default.

## `showCounties` (type: `boolean`):

Bring back county-wide matches, such as 'Los Angeles County, CA'. On by default.

## `showZipCodes` (type: `boolean`):

Bring back ZIP and postal code hits, such as '90210'. On by default.

## `showStreets` (type: `boolean`):

Bring back full-street matches with no house number, such as 'Sunset Blvd, Los Angeles, CA'. On by default.

## `showSchools` (type: `boolean`):

Bring back individual schools, such as 'Lincoln High School, Portland, OR'. On by default.

## `showSchoolDistricts` (type: `boolean`):

Bring back school district matches, such as 'Los Angeles Unified School District'. On by default.

## `showUniversities` (type: `boolean`):

Bring back colleges and universities, such as 'Stanford University, Stanford, CA'. On by default.

## `showParks` (type: `boolean`):

Bring back parks and recreation areas, such as 'Central Park, New York, NY'. On by default.

## `showStates` (type: `boolean`):

Bring back state-wide matches, such as 'California'. On by default.

## `showMlsIds` (type: `boolean`):

Bring back MLS listing ID matches, such as 'OC22183456'. On by default.

## `runTimeoutSeconds` (type: `integer`):

The longest the run is allowed to take, in seconds. Once this is hit the actor wraps up whatever it has. Defaults to 300 (five minutes); push it to 600 for bigger batches.

## `requestTimeoutSeconds` (type: `integer`):

How long to wait on Realtor.com's autocomplete server for any single term before giving up. Defaults to 45 seconds.

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

Which proxies to route requests through. Out of the box this uses Apify's US datacenter proxies.

## Actor input object example

```json
{
  "searchTerms": [
    "Seattle",
    "742 Evergreen Terrace",
    "60614",
    "Denver CO",
    "Harvard University"
  ],
  "resultsLimit": 50,
  "showAddresses": true,
  "showNeighborhoods": true,
  "showCities": true,
  "showCounties": true,
  "showZipCodes": true,
  "showStreets": true,
  "showSchools": true,
  "showSchoolDistricts": true,
  "showUniversities": true,
  "showParks": true,
  "showStates": true,
  "showMlsIds": true,
  "runTimeoutSeconds": 300,
  "requestTimeoutSeconds": 45,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "searchTerms": [
        "Seattle",
        "742 Evergreen Terrace",
        "60614",
        "Denver CO",
        "Harvard University"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/realtor-autocomplete-scraper-cheap").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 = {
    "searchTerms": [
        "Seattle",
        "742 Evergreen Terrace",
        "60614",
        "Denver CO",
        "Harvard University",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/realtor-autocomplete-scraper-cheap").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 '{
  "searchTerms": [
    "Seattle",
    "742 Evergreen Terrace",
    "60614",
    "Denver CO",
    "Harvard University"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call data_api/realtor-autocomplete-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/realtor-autocomplete-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/F3WZ24gtIc2d1lW5b/builds/IAOePEpc74aYSoJdU/openapi.json
