# Airbnb New Listings & Price Drops by City (`wellbuilt_zythem/airbnb-new-listings`) Actor

Airbnb listings for any city with two signals other scrapers skip: which listings are new (no reviews yet, or not seen in your last run) and which dropped their price (Airbnb's own 'originally' price, plus the change since your last run). Host name and Superhost on request. Schedule it for a feed.

- **URL**: https://apify.com/wellbuilt_zythem/airbnb-new-listings.md
- **Developed by:** [Carlos Escanez](https://apify.com/wellbuilt_zythem) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 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?

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

## Airbnb New Listings & Price Drops by City

Airbnb listings for any city, with the two signals the other Airbnb scrapers skip:

- **New listings**: the ones Airbnb itself shows as "New" (no reviews yet), and the ones that were not in your previous run of this feed.
- **Price drops**: the discount Airbnb prints on the result ("$2,539 total, originally $3,791"), plus the change against the price your last run saw.

Schedule it weekly and you get the hosts who just opened a listing (the people who are choosing a property manager, a cleaner, a photographer or an insurer right now) and the listings that just got cheaper. Host name, host id and Superhost badge on request.

More Airbnb data from the same publisher: [Airbnb Multi-Listing Hosts by City](https://apify.com/wellbuilt_zythem/airbnb-host-portfolio), [Airbnb Reviews Scraper by City or Listing, Translated](https://apify.com/wellbuilt_zythem/airbnb-reviews) and [Airbnb License Check & US Short-Term Rental Licenses](https://apify.com/wellbuilt_zythem/airbnb-license-check).

### What you get

One row per listing (measured on 2026-10-14 over 88 listings in Austin and Nashville):

| Field | Example | Filled |
|---|---|---|
| `roomId`, `url`, `name` | `1516344059006265040`, `5BR Downtown Luxury Oasis...` | 100 % |
| `searchLocation` | `Austin, TX` | 100 % |
| `isNewListing` | `true` when Airbnb shows "New": no rating, no reviews | 6 of 40 in Austin |
| `isNewSinceLastRun`, `firstSeenAt` | `true`, `2026-10-14T06:27:11Z` | 100 % |
| `price`, `currency`, `priceLabel` | `2539`, `$`, `$2,539 total, originally $3,791` | 100 % |
| `originalPrice`, `discountPct` | `3791`, `-33` (only when Airbnb prints a discount) | 33 % |
| `previousPrice`, `priceChangePct` | `2700`, `-6` (from the second run on) | when seen before |
| `rating`, `reviews` | `4.98`, `80` | 100 % of listings that have reviews |
| `isGuestFavorite`, `isLuxe` | `true`, `false` | 100 % |
| `latitude`, `longitude` | `30.25496`, `-97.73195` | 100 % |
| `hostId`, `hostName`, `hostUrl`, `isSuperhost`, `propertyType`, `personCapacity` | with **Include host** | 75 % of listing pages opened without proxy; higher with Apify proxy |

The run summary (`RUN_SUMMARY` in the key-value store) counts, per city, listings found, new listings, new since last run, price drops and Airbnb discounts.

#### What Airbnb does not publish, so this Actor does not promise

- **Phone, email or the host's full name.** Airbnb shows a first name on the listing page and nothing else.
- **A "new listing" date.** Airbnb marks a listing as "New" until it gets its first reviews; `firstSeenAt` is the first time *this feed* saw it.
- **Comparable prices without dates.** Without check-in and check-out, Airbnb prices a stay on dates it picks, which change. Give dates to compare prices between runs.
- **Every listing in a city.** Search pages show about 18 listings each (30 on the first); 15 pages is the cap. For a whole city, split it into neighbourhoods or add dates and guests.

#### Honest note on "new since last run"

Airbnb's ranking moves between runs: a listing that was on page 4 yesterday can be on page 2 today. With 2 pages per city, a second run minutes after the first found 5 of 42 listings "new since last run" (measured). Read more pages, or combine with `isNewListing`, when you want listings that are genuinely new on Airbnb.

### Input

| Field | What it does |
|---|---|
| **Cities** | As typed in Airbnb's search box: `Austin, TX`, `Lisbon, Portugal`. |
| **Pages per city** | 1 to 15, default 3 (about 66 listings). |
| **Check-in / Check-out / Adults** | Price the stay you care about; needed for price comparisons. |
| **Currency** | `USD` by default. |
| **Only new listings and price drops since the last run** | Feed mode: delivers only what changed. Off by default: every listing, with the signals as columns. |
| **Price drop %** | Threshold for a price drop, default 10. |
| **Include host** | Opens each listing page: host name, id, Superhost, property type, capacity. One request per listing. |
| **Feed memory name** | Key-value store that remembers listings and prices between runs. |
| **Forget previous runs** | Starts the memory from scratch. |

```json
{
  "locations": ["Austin, TX", "Nashville, TN"],
  "pagesPerLocation": 5,
  "checkin": "2026-11-07",
  "checkout": "2026-11-10",
  "adults": 2,
  "onlyChanges": true,
  "includeHost": true
}
```

### Speed and limits

- A search page takes 1 to 10 seconds through Apify proxy; a listing page (host details) about 2 seconds, three at a time.
- The run stops 45 seconds before its timeout and delivers what it read, with a warning.
- Airbnb refuses some data-center addresses; Apify proxy is on by default. If many listing pages come back without a host, switch the proxy to residential.

### Pricing

You pay per listing delivered (`listing` event) plus the platform's start fee. In feed mode, listings that did not change are not delivered and not charged.

# Actor input Schema

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

Places as you would type them in Airbnb's search box, one per line: "Austin, TX", "Nashville, TN", "Lisbon, Portugal".

## `pagesPerLocation` (type: `integer`):

Search pages to read per city (about 18 listings each, 30 on the first). 1 to 15.

## `checkin` (type: `string`):

Date like 2026-11-07. With dates, prices are for that stay and comparable between runs. Without dates Airbnb shows a total for dates it picks.

## `checkout` (type: `string`):

Date like 2026-11-10. Give both dates or neither.

## `adults` (type: `integer`):

Guests for the price. Empty: Airbnb's default.

## `currency` (type: `string`):

USD, EUR, GBP...

## `onlyChanges` (type: `boolean`):

Deliver only listings not seen in the previous run of this feed, or whose price fell at least "Price drop %". Off: every listing found, with the same signals as columns.

## `priceDropThresholdPct` (type: `integer`):

A listing counts as a price drop when its price is at least this much lower than in the last run.

## `includeHost` (type: `boolean`):

Open each listing page for the host name, host id, Superhost badge, property type and capacity. One extra request per listing.

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

Cap for the run. Empty for no cap.

## `stateStoreName` (type: `string`):

Key-value store that remembers the listings and prices seen. One name per feed; the same name every run.

## `resetState` (type: `boolean`):

Start the feed memory from scratch in this run: everything will count as new.

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

Airbnb refuses some data-center addresses; Apify proxy is on by default.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "pagesPerLocation": 2,
  "currency": "USD",
  "onlyChanges": false,
  "priceDropThresholdPct": 10,
  "includeHost": false,
  "stateStoreName": "airbnb-new-listings-seen",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

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

No description

# 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"
    ],
    "pagesPerLocation": 2,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wellbuilt_zythem/airbnb-new-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"],
    "pagesPerLocation": 2,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("wellbuilt_zythem/airbnb-new-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"
  ],
  "pagesPerLocation": 2,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call wellbuilt_zythem/airbnb-new-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wellbuilt_zythem/airbnb-new-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/Z9t00maY4cKVkVYAX/builds/rzD6trMlTyYZiWmd3/openapi.json
