airbnb-search 🏠
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 locationcheckin(str, optional): Check-in date (YYYY-MM-DD)checkout(str, optional): Check-out date (YYYY-MM-DD)min_price(int, optional): Minimum price filtermax_price(int, optional): Maximum price filtermin_bedrooms(int, optional): Minimum bedroomsitems_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 dictstotal_count: Total available listingshas_next_page: Whether more results existlocation: Resolved location string
Listing dict fields:
id,name,urlbedrooms,bathrooms,beds,person_capacityrating,reviews_count,is_superhostroom_type,property_type,citytotal_price,total_price_num,original_price,price_qualifiercan_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)
| File | Size | Uploaded | |
|---|---|---|---|
| airbnb_search-0.1.3.tar.gz | 990.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|