Skip to main content

Search Airbnb listings from the command line

Project description

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 🎿

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

airbnb_search-0.1.2.tar.gz (990.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

airbnb_search-0.1.2-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file airbnb_search-0.1.2.tar.gz.

File metadata

  • Download URL: airbnb_search-0.1.2.tar.gz
  • Upload date:
  • Size: 990.3 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for airbnb_search-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f1ce350c1121ed713558f2cabe219188ed78d0702a4f9409ce5e75c48a505b38
MD5 088e6e33af3057010a94d3577f02f620
BLAKE2b-256 044545d844c8780849b90ed833194a017f5361015e374060a93044023f4c5ce6

See more details on using hashes here.

File details

Details for the file airbnb_search-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: airbnb_search-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for airbnb_search-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1ccc1f2fc59163c9173b084ff0620a3f1939781c5e3bd1b431b03ee5e753dcda
MD5 fc07e2c640b69ec1f8396172dd2f750c
BLAKE2b-256 cb3f922d210a6a0f012c0ecd9acbfd880edd8d522b0364e487e94332f1131af7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page