# Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent (`cliqtomedia/us-property-listings`) Actor

Get US homes for sale, recently sold or for rent from Redfin or Realtor.com in one flat table: price, beds, baths, sq ft, address, ZIP, coordinates, listing date, photos and (on Realtor.com) the listing office. Search by city, ZIP or county. No login.

- **URL**: https://apify.com/cliqtomedia/us-property-listings.md
- **Developed by:** [Cliqto Media](https://apify.com/cliqtomedia) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.38 / 1,000 saved listings

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

Redfin & Realtor Listings Scraper reads public US home listings from [Realtor.com](https://www.realtor.com/) or [Redfin](https://www.redfin.com/) for the cities, ZIP codes or counties you add. It returns one row per listing with price, beds, baths, square feet, address, ZIP, coordinates, listing date, photos and (on Realtor.com) the listing office name. You do not need a login or an API key.

It is for real estate investors, agents, analysts and proptech teams who need a clean table of homes for sale, recently sold or for rent. The smallest run is one city: `Austin, TX` with 10 listings finishes in about 5 seconds and costs about $0.007.

![Redfin and Realtor listings scraper: search a US city by status, price and portal, get homes with price, beds, baths, sq ft and address in one table, export JSON or CSV](https://api.apify.com/v2/key-value-stores/tDNTQqCoiN4pxJobf/records/HERO-20261015.png)

### Table of contents

- [What it does](#what-it-does)
- [Quick start](#quick-start)
- [Use cases](#use-cases)
- [Input](#input)
- [Output](#output)
- [Pricing and limits](#pricing-and-limits)
- [API and integrations](#api-and-integrations)
- [Use with AI agents (MCP)](#use-with-ai-agents-mcp)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Support](#support)

### What it does

The Actor searches one portal for each location you add, reads the result pages and saves each listing to a Dataset. Both portals return the same columns, so you can join or compare the tables later. You choose:

- **Locations** (`locations`): up to 20 places, for example `Austin, TX`, ZIP `78704` or `Travis County, TX`. For Redfin you can also paste a redfin.com city, county or neighborhood link.
- **Website** (`source`): Realtor.com (default) or Redfin.
- **Listing status** (`status`): for sale now, recently sold, or for rent.
- **Price range** (`minPrice`, `maxPrice`) in US dollars. For rentals this is the monthly rent.
- **Max listings** (`maxItems`): how many rows to save in total.

At the end the Actor writes a short summary to the Key-value store record `RUN_SUMMARY`: what it found for each location and why a location gave no rows.

#### Good fit

- Track asking prices, new listings and days on market in a city or ZIP code.
- Collect recent sales (sold price, sold date) for a price comparison.
- Build a rental list with monthly rent, beds and square feet.
- Get the same columns from Realtor.com and Redfin to check one against the other.

#### Not a fit / limits

- No agent names, phone numbers, e-mails or listing descriptions. Only the public name of the listing office, and only on Realtor.com.
- Only the United States. Only the two portals above; Zillow is not supported.
- One Realtor.com search returns at most 10,000 results. For a bigger area, split it into ZIP codes or cities.
- The data is what the portal shows at the time of the run. Some fields can be empty when the portal does not show them (see [Output](#output)).

### Quick start

1. Open the **Input** tab.
2. In **Locations** (`locations`), keep the prefilled `Austin, TX` or add your own place, for example `78704` or `Miami, FL`.
3. Keep **Website** = Realtor.com and **Listing status** = For sale (the defaults), and **Max listings** = 10 (the prefill).
4. Click **Start**.
5. Open the **Output** tab. The **Listings** view shows address, price, beds, baths and the link for each home.

Expected result: 10 homes for sale in Austin, TX, with price, beds, baths, sq ft, address and photo links.

### Use cases

| Buyer job | Input path | Output entity | Key fields | Next integration |
| --- | --- | --- | --- | --- |
| New listings in a city | `locations` + `status: for_sale` | Listing | `price`, `listedAt`, `daysOnMarket`, `url` | Schedule + Google Sheets |
| Sales comps | `status: sold` + `soldWithinDays` | Sold listing | `price`, `listPrice`, `soldAt`, `sqft` | CSV export |
| Rental market check | `status: for_rent` + `maxPrice` | Rental | `price` (monthly rent), `beds`, `sqft`, `buildingName` | API / JSON |
| Portal check | same `locations`, run once with each `source` | Listing | `mlsId`, `address`, `price` | Join by `mlsId` or address |

### Input

#### Input fields

| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `locations` | Locations | array of strings | yes | prefill `["Austin, TX"]` | 1–20 items: `City, ST`, 5-digit ZIP, `X County, ST`; Redfin also takes a redfin.com link | Places to search | `["Austin, TX", "78704"]` | Use the 2-letter state code. Repeated places are searched once. |
| `source` | Website | string | no | default `realtor` | `realtor`, `redfin` | Which portal to read | `"redfin"` | Realtor.com gives the office name and up to 10,000 results per search. |
| `status` | Listing status | string | no | default `for_sale` | `for_sale`, `sold`, `for_rent` | Which listings to get | `"sold"` | For rentals, the price is per month. |
| `maxItems` | Max listings | integer | no | default 100, prefill 10 | 1–10,000 | Total rows for the whole run, shared by all locations | `500` | You pay per saved listing, so set what you need. |
| `minPrice` | Min price (USD) | integer | no | none | 0–1,000,000,000 | Lowest price or monthly rent | `300000` | Listings without a price are left out when a price filter is set. |
| `maxPrice` | Max price (USD) | integer | no | none | 1–1,000,000,000 | Highest price or monthly rent | `900000` | Must not be lower than `minPrice`. |
| `soldWithinDays` | Sold within (days) | integer | no | default 90 | 1–1,095 | Only for `sold`: how far back to look | `30` | Ignored for other statuses. |

`locations` cannot be empty. With `source: redfin`, free text that is not a city, ZIP, county or Redfin URL (for example `downtown`) stops the run before any search with a message that shows the right format. With `source: realtor`, such text goes to the Realtor.com place search; if it finds nothing, the location gets `not_found` and still counts as one location search.

#### Interacting settings

| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
| --- | --- | --- | --- | --- | --- |
| Several places | `locations` | `maxItems` | Each place first gets an equal share of `maxItems`. If a place has fewer homes, the rest goes to the other places. | 2 places, `maxItems: 20` → 10 + 10 | Total rows never go above `maxItems`. |
| Price filter set | `minPrice` / `maxPrice` | `status` | For `for_rent` the range is monthly rent; for `sold` it is the sale price. | `for_rent`, `maxPrice: 2500` | Homes without a price are left out. |
| Sold homes | `status: sold` | `soldWithinDays` | Only homes sold in the last N days. | `soldWithinDays: 30` | Fewer days, fewer rows. |

#### Input examples

##### Homes for sale in a price range (Redfin)

```json
{
  "source": "redfin",
  "locations": ["Boise, ID", "Nashville, TN"],
  "status": "for_sale",
  "minPrice": 300000,
  "maxPrice": 900000,
  "maxItems": 20
}
```

Expected behavior: the Actor searches Boise and Nashville on Redfin and saves up to 10 homes from each place.
Expected output: listings with `price`, `beds`, `baths`, `sqft`, `mlsId` and `url`.
Limit or cost note: Redfin does not show the office name, so `brokerName` is empty.

##### Recent sales in a ZIP code (Realtor.com)

```json
{
  "locations": ["78704"],
  "status": "sold",
  "soldWithinDays": 30,
  "maxItems": 100
}
```

Expected behavior: homes sold in ZIP 78704 in the last 30 days.
Expected output: `price` (sale price), `soldAt`, `listPrice`, `sqft`.
Limit or cost note: some states do not show the sale price; then `price` is empty and `listPrice` keeps the last asking price.

### Output

#### Output fields

| Field | Meaning | Type | Can be empty? | Example / enum | Notes |
| --- | --- | --- | --- | --- | --- |
| `id` | Unique row ID: portal + property ID | string | no | `realtor:8335975485` | Stable between runs |
| `source` | Portal | string | no | `realtor`, `redfin` | |
| `propertyId` | The portal's property ID | string | no | `8335975485` | |
| `listingId` | The portal's listing ID | string | yes | `3001860367` | |
| `mlsId` | MLS number of the listing | string | yes | `84517392` | Use it to match the same home on both portals |
| `url` | Link to the listing page | string | no | `https://www.realtor.com/...` | |
| `status` | Status you asked for | string | no | `for_sale`, `sold`, `for_rent` | |
| `sourceStatus` | Status as the portal shows it | string | yes | `Active`, `Closed` (Redfin), `for_sale`, `pending` (Realtor.com) | |
| `address` | Street address with unit | string | yes | `1704 Cherry Orchard Dr` | |
| `city` | City | string | yes | `Austin` | |
| `state` | 2-letter state code | string | yes | `TX` | |
| `zip` | ZIP code | string | yes | `78745` | |
| `lat`, `lng` | Coordinates | number | yes | `30.201456`, `-97.803077` | |
| `price` | Price in USD | number | yes | `315000` | For sale: asking price. Sold: sale price (empty where hidden). Rent: monthly rent, the lowest unit for buildings |
| `priceMin`, `priceMax` | Price range | number | yes | `1055`, `1600` | Only when the portal shows a range (buildings, new homes) |
| `listPrice` | Asking price | number | yes | `315000` | For sold homes: the last asking price |
| `beds` | Bedrooms | integer | yes | `3` | Smallest unit for buildings |
| `baths` | Bathrooms | number | yes | `2.5` | A half bath counts as 0.5 |
| `sqft` | Living area, sq ft | number | yes | `934` | |
| `lotSqft` | Lot size, sq ft | number | yes | `7675` | |
| `yearBuilt` | Year built | integer | yes | `1971` | |
| `propertyType` | Home type | string | yes | `single_family`, `condo`, `townhouse`, `multi_family`, `apartment`, `manufactured`, `co_op`, `farm`, `land`, `other` | Same names for both portals |
| `listedAt` | When the listing went on the portal | string (ISO) | yes | `2026-10-15T05:36:33.000Z` | Redfin: estimated to the minute; empty when Redfin does not show the listing age |
| `soldAt` | Sale date | string | yes | `2026-09-18` | Only sold homes |
| `daysOnMarket` | Whole days on the market | integer | yes | `0` | Empty for sold homes |
| `photos` | Full-size photo links | array | can be `[]` | `["https://ap.rdcpix.com/...jpg"]` | |
| `photoCount` | Number of photos | integer | yes | `13` | |
| `brokerName` | Listing office name | string | yes | `Houston Elite Properties LLC` | Realtor.com only. No agent names, phones or e-mails |
| `buildingName` | Building or community name | string | yes | `Cascade Apartments` | Mostly rentals |
| `searchLocation` | Input place that found this row | string | no | `Austin, TX` | |
| `fetchedAt` | When the row was saved | string (ISO) | no | `2026-10-15T05:57:50.503Z` | |

The Dataset has two views: **Listings** (main columns) and **All fields**.

#### Output entities and surfaces

| Situation | Where | Result shape | User action |
| --- | --- | --- | --- |
| Normal run | Dataset + `RUN_SUMMARY` | One row per listing; status `complete` | Open the Listings view or export |
| Place exists, but no homes match | `RUN_SUMMARY` | 0 rows; run SUCCEEDED, status `no_results` | Change the price range or status |
| Place not known to the portal | `RUN_SUMMARY` | 0 rows for that place; status `not_found` with the place name | Use `City, ST`, a ZIP or `X County, ST` |
| Stopped early | Dataset + `RUN_SUMMARY` | Rows saved so far; status `partial`, reason `TIME_LIMIT` or `CHARGE_LIMIT` | Give a longer timeout or a higher cost limit |
| Portal error | `RUN_SUMMARY` + run status | No rows: run FAILED with the reason. Some rows: status `partial`, reason `SOURCE_ERROR` | Try again later |
| Wrong input | Run status | FAILED with a message that shows the right format | Fix the input |

`RUN_SUMMARY` has one entry per place with `status`, `items`, `totalOnSite` (how many listings the portal reports), `filteredOut` and `duplicates`, plus `warnings`.

#### Output example

Input: the prefill (`locations: ["Austin, TX"]`, `maxItems: 10`). One row, photo list shortened:

```json
{
  "id": "realtor:8335975485",
  "source": "realtor",
  "propertyId": "8335975485",
  "listingId": "3001860367",
  "mlsId": "84517392",
  "url": "https://www.realtor.com/realestateandhomes-detail/1704-Cherry-Orchard-Dr_Austin_TX_78745_M83359-75485",
  "status": "for_sale",
  "sourceStatus": "for_sale",
  "address": "1704 Cherry Orchard Dr",
  "city": "Austin",
  "state": "TX",
  "zip": "78745",
  "lat": 30.201456,
  "lng": -97.803077,
  "price": 315000,
  "priceMin": null,
  "priceMax": null,
  "listPrice": 315000,
  "beds": 3,
  "baths": 1,
  "sqft": 934,
  "lotSqft": 7675,
  "yearBuilt": 1971,
  "propertyType": "single_family",
  "listedAt": "2026-10-15T05:36:33.000Z",
  "soldAt": null,
  "daysOnMarket": 0,
  "photos": [
    "https://ap.rdcpix.com/c98353ff63623b72d8afed1653f828ffl-m296950462s-w1280_h960.jpg"
  ],
  "photoCount": 13,
  "brokerName": "Houston Elite Properties LLC",
  "buildingName": null,
  "searchLocation": "Austin, TX",
  "fetchedAt": "2026-10-15T05:57:50.503Z"
}
```

`null` means the portal does not show this value for this listing. Every row has all fields; the Actor does not drop columns.

### Pricing and limits

#### Pricing unit

This Actor uses pay-per-event pricing. You pay for:

| Event | When | Price |
| --- | --- | ---: |
| Actor start | Once per run (one event per GB of memory, at least one) | $0.002 |
| Location searched | Once for each place searched, also when the portal does not know the place | $0.0005 |
| Saved listing | Once for each row in the Dataset | $0.00045 (Free plan) down to $0.00038 (Gold plan and above) |

Repeated listings and listings removed by your price filter are not charged. Places that are skipped because `maxItems` was already reached are not charged. A run with no rows still pays the start and the location searches. Platform usage is included in these prices.

Saved listing price by Apify plan: Free $0.00045, Bronze $0.00043, Silver $0.0004, Gold / Platinum / Diamond $0.00038.

#### Cost examples

Measured on real runs with the default 512 MB memory (Free plan prices):

| Scenario | Input scope | Rows | Time | Charge |
| --- | --- | ---: | ---: | ---: |
| Prefill | Realtor.com, `Austin, TX`, 10 listings | 10 | ~5 s | $0.0070 |
| Two cities | Redfin, Boise + Nashville, 20 listings | 20 | ~9 s | $0.0120 |
| Unknown places | Realtor.com, 20 places that do not exist | 0 | ~28 s | $0.0120 |
| Large county | Realtor.com, Los Angeles County, 10,000 listings | 9,550 | ~89 s | $4.30 (Gold: $3.63) |

To control cost, set **Max listings**. You can also set a maximum cost for the run in the run options; the Actor stops cleanly at that limit and keeps the rows it saved.

#### Limits

- Up to 20 places and 10,000 listings per run.
- Realtor.com returns at most 10,000 results for one search, and some of them repeat. A very large place gives about 9,500 unique rows. The run log tells you when you hit this limit; split the place into ZIP codes.
- Redfin city search uses the official city boundary from the US Census and saves only homes inside it. ZIP, county and redfin.com links work as Redfin defines them.
- Redfin does not show the office name, so `brokerName` is empty for Redfin.
- In some regions Redfin does not show how long a home has been listed; then `listedAt` and `daysOnMarket` are empty.
- `baths` counts a half bath as 0.5 (for example 2 full + 1 half = 2.5).
- If the portal blocks or fails for two places in a row, the run stops and skips the rest, so you do not pay for a long run with no data. Try again later.

### API and integrations

- **API:** start the Actor with the [Apify API](https://docs.apify.com/api/v2) and the same JSON input. Read rows from the run's default Dataset.
- **Export:** download the Dataset as JSON, CSV, Excel or XML from the **Output** tab or the API.
- **Scheduling:** run the same input every day with an Apify schedule to collect new listings. Use `id` to find rows you already have.
- **Integrations:** send results to Google Sheets, Make, Zapier or a webhook with the standard Apify integrations.

### Use with AI agents (MCP)

AI agents can run this Actor through the Apify MCP server. Server URL with only this Actor:

`https://mcp.apify.com?tools=cliqtomedia/us-property-listings`

Smallest useful input:

```json
{
  "locations": ["Austin, TX"],
  "maxItems": 10
}
```

Key output fields:

- `price`: asking price, sale price or monthly rent in USD.
- `beds`, `baths`, `sqft`: home size.
- `address`, `city`, `state`, `zip`: where the home is.
- `url`: link to the listing page.
- `listedAt`: when the home was listed.

A run with 10–100 listings usually finishes in 5–15 seconds and costs about $0.007–$0.05. Limits: up to 20 places and 10,000 listings per run; places must be `City, ST`, a 5-digit ZIP or `X County, ST`.

### Troubleshooting

#### The run says "No such location"

Symptom: 0 rows and a `not_found` message with the place name.
Likely reason: the portal does not know the place, or the place is written as free text.
Check: the place format in `RUN_SUMMARY` → `locations`.
Action: use `City, ST` with the 2-letter state code, a 5-digit ZIP or `X County, ST`.

#### The run SUCCEEDED but has 0 rows

Symptom: status `no_results`.
Likely reason: the portal knows the place, but no home fits the status and price range.
Check: `totalOnSite` and `filteredOut` in `RUN_SUMMARY`.
Action: widen the price range or try another status.

#### I got fewer rows than Max listings

Symptom: fewer rows than `maxItems`, status `complete`.
Likely reason: the place has fewer listings that match, or (Realtor.com) the 10,000 results limit for one search.
Check: `totalOnSite` and `warnings` in `RUN_SUMMARY`.
Action: add more places or split a big place into ZIP codes.

#### The run stopped early

Symptom: status `partial` with reason `TIME_LIMIT` or `CHARGE_LIMIT`.
Likely reason: the run timeout or your maximum cost was reached.
Action: give the run a longer timeout or a higher cost limit. The rows already saved stay in the Dataset.

#### The run failed with a portal error

Symptom: FAILED, or `partial` with reason `SOURCE_ERROR`.
Likely reason: the portal blocked or did not answer.
Action: try again later. After two places in a row fail, the run stops on purpose.

### FAQ

#### Do I need a Realtor.com or Redfin account?

No. The Actor reads public search results. You do not need a login, cookies or an API key.

#### Can I get agent phone numbers or e-mails?

No. The Actor does not collect agent names, phones, e-mails or listing descriptions. It gives only the public name of the listing office on Realtor.com.

#### Why is the sale price empty for some sold homes?

Some states do not make sale prices public, and the portal hides them. Then `price` is empty and `listPrice` shows the last asking price.

#### Why do Realtor.com and Redfin give different numbers for the same city?

Each portal has its own listings, area borders and order. Use `mlsId` or the address to match the same home on both portals.

#### How fresh is the data?

Each row is read live from the portal during your run. `fetchedAt` shows when the row was saved.

### Support

For bugs, questions or feature requests, open an issue on the **Issues** tab of this Actor. Add the run ID, your input (without private data) and the error message. Never send tokens, cookies or billing data.

# Changelog

This Actor's version history is a separate document: https://apify.com/cliqtomedia/us-property-listings/changelog.md

# Actor input Schema

## `locations` (type: `array`):

Places to search, one per line: "Austin, TX", a 5-digit ZIP like "78704", or "Travis County, TX". For Redfin you can also paste a redfin.com city, county or neighborhood link. Up to 20 places; the listings limit is shared between them.

## `source` (type: `string`):

Which site to read. Realtor.com is the default. Both return the same columns.

## `status` (type: `string`):

Homes for sale now, homes sold recently, or rentals (price is the monthly rent).

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

Maximum listings to save in total, across all locations. You pay per saved listing.

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

Lowest price in US dollars. For rentals: monthly rent. Listings without a price are left out when a price filter is set.

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

Highest price in US dollars. For rentals: monthly rent.

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

Only for "Recently sold": how far back to look. 90 days by default.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "source": "realtor",
  "status": "for_sale",
  "maxItems": 10,
  "soldWithinDays": 90
}
```

# Actor output Schema

## `listings` (type: `string`):

One row per home: address, price, beds, baths, sq ft, status, listing date, broker and link.

## `details` (type: `string`):

Coordinates, ZIP, lot size, year built, MLS number, sold date, photos and more.

## `runSummary` (type: `string`):

Status, reason, counts per location, warnings and request statistics.

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

// Run the Actor and wait for it to finish
const run = await client.actor("cliqtomedia/us-property-listings").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 = {
    "locations": ["Austin, TX"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("cliqtomedia/us-property-listings").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 '{
  "locations": [
    "Austin, TX"
  ],
  "maxItems": 10
}' |
apify call cliqtomedia/us-property-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cliqtomedia/us-property-listings"
        }
    }
}
```

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/Zsoif2aM0mgxmPPda/builds/Myq40UTqJcz9IBsn5/openapi.json
