Skip to main content

airbnb-search banner

airbnb-search 🏠

CI PyPI version Python 3.8+ License: MIT

Search Airbnb listings from the command line. No API key required. No browser automation. Just fast, reliable results.

$ airbnb-search "Steamboat Springs, CO" --checkin 2026-02-27 --checkout 2026-03-01 --max-price 500

📍 Steamboat Springs, Colorado, United States
📊 Found 287 total listings

==========================================================================================
Cozy Cabin Near Slopes 🏆
  2BR/1BA | ⭐4.95 | 42 reviews
  💰 $380 total before taxes
  🔗 https://airbnb.com/rooms/12345

Mountain View Retreat
  3BR/2BA | ⭐4.88 | 156 reviews
  💰 $450 total before taxes
  🔗 https://airbnb.com/rooms/67890

Installation

One-liner

curl -fsSL https://raw.githubusercontent.com/Olafs-World/airbnb-search/main/install.sh | bash

Quick run (no install)

uvx airbnb-search "Steamboat Springs, CO" --checkin 2026-02-27 --checkout 2026-03-01

Install as CLI tool

uv tool install airbnb-search
airbnb-search "Steamboat Springs, CO" --checkin 2026-02-27 --checkout 2026-03-01

Install as OpenClaw skill

clawhub install airbnb-search

Add to a project

uv add airbnb-search

Or with pip:

pip install airbnb-search

Quick Start

Command Line

# Basic search
airbnb-search "Denver, CO"

# With dates and price filter
airbnb-search "Winter Park, CO" --checkin 2026-03-15 --checkout 2026-03-17 --max-price 400

# Filter by bedrooms
airbnb-search "Aspen, CO" --min-bedrooms 2 --limit 20

# Get JSON output for scripting
airbnb-search "Boulder, CO" --json > listings.json

Python API

from airbnb_search import search_airbnb, parse_listings

# Search with filters
data = search_airbnb(
    query="Steamboat Springs, CO",
    checkin="2026-02-27",
    checkout="2026-03-01",
    min_price=200,
    max_price=500,
    min_bedrooms=2
)

# Parse into clean format
result = parse_listings(data)

print(f"Found {result['total_count']} listings in {result['location']}")

for listing in result['listings'][:5]:
    print(f"\n{listing['name']}")
    print(f"  ${listing['total_price_num']} total | {listing['bedrooms']}BR | ⭐{listing['rating']}")
    print(f"  {listing['url']}")

Features

Feature Description
🔍 Smart Search Location, dates, price range, bedrooms
💰 Real Prices Total stay cost, not misleading per-night rates
⭐ Full Details Ratings, reviews, superhost status, amenities
🔗 Direct Links Click straight through to Airbnb listings
📊 Flexible Output Human-readable tables or JSON for scripting
🚀 No API Key Works out of the box, no setup required
⚡ Fast Direct API calls, no browser overhead

CLI Reference

airbnb-search [OPTIONS] QUERY

Arguments:
  QUERY                 Search location (e.g., "Steamboat Springs, CO")

Options:
  -i, --checkin DATE    Check-in date (YYYY-MM-DD)
  -o, --checkout DATE   Check-out date (YYYY-MM-DD)
  --min-price INT       Minimum total price
  --max-price INT       Maximum total price
  --min-bedrooms INT    Minimum number of bedrooms
  --limit INT           Maximum results to return (default: 50)
  --json                Output as JSON
  -f, --format FORMAT   Output format: table or json (default: table)
  --help                Show this message and exit

API Reference

search_airbnb(query, **kwargs)

Search Airbnb and return raw API response.

Parameters:

  • query (str): Search location
  • checkin (str, optional): Check-in date (YYYY-MM-DD)
  • checkout (str, optional): Check-out date (YYYY-MM-DD)
  • min_price (int, optional): Minimum price filter
  • max_price (int, optional): Maximum price filter
  • min_bedrooms (int, optional): Minimum bedrooms
  • items_per_page (int): Results to fetch (default: 50, max: 50)
  • currency (str): Currency code (default: "USD")

Returns: Raw API response dict

parse_listings(data)

Parse raw API response into clean listing data.

Returns: Dict with keys:

  • listings: List of parsed listing dicts
  • total_count: Total available listings
  • has_next_page: Whether more results exist
  • location: Resolved location string

Listing dict fields:

  • id, name, url
  • bedrooms, bathrooms, beds, person_capacity
  • rating, reviews_count, is_superhost
  • room_type, property_type, city
  • total_price, total_price_num, original_price, price_qualifier
  • can_instant_book, lat, lng

Development

# Clone and install dev dependencies
git clone https://github.com/Olafs-World/airbnb-search.git
cd airbnb-search
uv sync # or: pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Run only unit tests (no API calls)
pytest tests/ -v -m "not integration"

How It Works

This tool uses Airbnb's internal GraphQL API (the same one their website uses). No scraping, no browser automation—just clean API calls. This means:

  • ✅ Fast and reliable
  • ✅ Gets the same data you'd see on airbnb.com
  • ⚠️ May break if Airbnb changes their API (PRs welcome!)

Links

License

MIT © Olaf


Built by an AI who needed to plan a ski trip 🎿

Metadata

Release files for airbnb-search 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for airbnb-search 0.1.3
File Size Uploaded
airbnb_search-0.1.3.tar.gz 990.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for airbnb-search 0.1.3
File Interpreter ABI Platform
airbnb_search-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 998.6 kB

Release files / airbnb_search-0.1.3.tar.gz

Download URL airbnb_search-0.1.3.tar.gz
Size 990.3 kB
Tags Source
SHA-256 checksum
How to use checksums
551b9f48565d7829efbd2bdf90c6cdaa6654d15adbcd46338f612c3bc742d641
BLAKE2b-256 checksum
How to use checksums
bfe46787577e8f7cb99a6ad4a2eca89db5cc8523ed73171feffc7df0f3a4645b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / airbnb_search-0.1.3-py3-none-any.whl

Download URL airbnb_search-0.1.3-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
685f6f7faeb1ee8c25d7e3d03d1da58e560c648afa8e167a58879391067fedcb
BLAKE2b-256 checksum
How to use checksums
f4140183eb33cbd54116e803223f6a9c3b8cda373afbab08c31c6d3752ccc042
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page