Skip to main content

crewai-stayingapi

StayingAPI: the accommodation data API for AI agents. CrewAI tools edition. Also available as an n8n community node and a native MCP server.

This package gives CrewAI agents six tools over StayingAPI, so a crew can work with real accommodation data instead of guessing: live search, day by day availability, real prices, cross platform price comparison and normalized reviews across Airbnb, Booking.com, Vrbo and Google Hotels, all in one unified schema.

Tool What it does Credits
search_stays Find listings across platforms by place, dates and occupancy from 5 per platform (Airbnb 2 per result, Booking.com and Vrbo 1 per result, Google Hotels 15 per page)
check_availability Day by day availability for a known listing from 5 per listing, scales with the date range (Vrbo from 12)
get_listing Full normalized detail for one listing 3 per call (Vrbo 15)
get_price Real price quote for one listing and one stay 3 per call
compare_prices Cross platform comparison for the same property 30 in name and location mode, or 3 per listing in direct mode
get_reviews Normalized guest reviews for a known listing from 5 per platform (Airbnb 5 per review, Booking.com and Vrbo 1 per review)

Installation

pip install crewai-stayingapi

Credentials

You need a StayingAPI key. Live keys start with stay_live_, sandbox keys start with stay_test_.

  1. Create an account at stayingapi.com/signup: 300 free credits to start, no card required. Full plan details on the pricing page.
  2. Create a key on the keys page of your dashboard.
  3. Export it:
export STAYINGAPI_API_KEY="stay_live_..."

Sandbox first

A stay_test_ sandbox key returns deterministic sample data on the exact same schema, synchronously, and costs 0 credits. Build and test your crew against a sandbox key, then swap in a live key with no code changes.

Usage

from crewai import Agent
from crewai_stayingapi import (
    StayingAPISearchTool,
    StayingAPIAvailabilityTool,
    StayingAPIListingTool,
    StayingAPIPriceTool,
    StayingAPIPriceCompareTool,
    StayingAPIReviewsTool,
)

travel_researcher = Agent(
    role="Travel researcher",
    goal="Find good places to stay and the cheapest way to book them",
    backstory="Researches real accommodation options across booking platforms.",
    tools=[
        StayingAPISearchTool(),
        StayingAPIAvailabilityTool(),
        StayingAPIListingTool(),
        StayingAPIPriceTool(),
        StayingAPIPriceCompareTool(),
        StayingAPIReviewsTool(),
    ],
)

The usual flow is: search_stays to discover properties and collect their platformListingId values, then get_listing, check_availability, get_price or get_reviews on the ones that matter, and compare_prices when the crew has settled on a property and wants the best offer for it.

# Discover: a city and a set of dates, no ids needed
StayingAPISearchTool().run(
    location="Split, HR",
    check_in="2026-09-10",
    check_out="2026-09-14",
    platforms="airbnb,booking",
    adults=2,
    limit=5,
)

# Compare: one property, every booking site that sells it
StayingAPIPriceCompareTool().run(
    name="Hotel Esplanade Zagreb",
    location="Zagreb, Croatia",
    check_in="2026-09-10",
    check_out="2026-09-14",
)

Tool reference

search_stays (StayingAPISearchTool)

Argument Type Default Description
location str required City, region or address, for example "Split, HR"
check_in str none Check in date, YYYY-MM-DD
check_out str none Check out date, YYYY-MM-DD
platforms str all enabled Comma separated: airbnb, booking, vrbo, google
adults int 2 Number of adults, 1 to 30
children int 0 Number of children; requires child_ages
child_ages str none One age per child, for example "4,9"
rooms int 1 Number of rooms
currency str "USD" ISO 4217 code
limit int 10 Results per platform, 1 to 40
cursor str none Cursor from meta.pagination.nextCursor
sort str none recommended, price_asc, price_desc, rating_desc

limit applies per platform, so three platforms with limit=5 can return 15 results and bills each platform separately.

check_availability (StayingAPIAvailabilityTool)

Argument Type Default Description
platform str required airbnb, booking, vrbo or google
start_date str required First date of the window, YYYY-MM-DD
end_date str required Last date of the window, YYYY-MM-DD
listing_id str one of three Platform listing id
listing_ids str one of three Comma separated ids on the same platform
url str one of three Full listing URL
only_available bool none Return only the available dates

Pass exactly one of listing_id, listing_ids or url.

get_listing (StayingAPIListingTool)

Argument Type Default Description
platform str required airbnb, booking or vrbo
listing_id str required Platform listing id, or a full listing URL
country str none Two letter code, needed for a bare Booking.com slug
check_in str none Add dates to get a live price with the detail
check_out str none Check out date, YYYY-MM-DD
currency str "USD" ISO 4217 code

get_price (StayingAPIPriceTool)

Argument Type Default Description
platform str required airbnb, booking, vrbo or google
listing_id str required Platform listing id
check_in str required Check in date, YYYY-MM-DD
check_out str required Check out date, YYYY-MM-DD
currency str "USD" ISO 4217 code

Booking.com slugs are not globally unique, so outside get_listing (which has its own country argument) pass the country qualified id, for example "hr/esplanade-zagreb", or the full listing URL. A bare slug returns needs_country and costs nothing.

compare_prices (StayingAPIPriceCompareTool)

Argument Type Default Description
check_in str required Check in date, YYYY-MM-DD
check_out str required Check out date, YYYY-MM-DD
name str one mode Property name, when you have no listing ids
location str one mode Location hint for that name
google_hotel_id str one mode Google hotel id, instead of name and location
listings str one mode 2 to 6 platform:listingId pairs for the same property
adults int 2 Number of adults
children int 0 Number of children
currency str "USD" ISO 4217 code

Two modes, one response shape. Pass name with location (or google_hotel_id) when you have no ids: the property is resolved for you and every offer it surfaces is returned, for 30 credits. Pass listings when you already have ids from search_stays: each listing is priced for real and the comparison is normalized, billed as 3 credits per listing.

Fee coverage differs per platform. Airbnb reports cleaning, service and taxes, Booking.com reports taxes, Vrbo and Google Hotels report none. Compare on totalPrice, which is present everywhere. A null fee means it could not be read, not that the platform does not charge it. min and median only summarize offers quoted in the requested currency.

get_reviews (StayingAPIReviewsTool)

Argument Type Default Description
platform str required airbnb, booking or vrbo
listing_id str one of two Platform listing id
url str one of two Full listing URL
limit int 20 Reviews to return, 1 to 100
cursor str none Cursor from meta.pagination.nextCursor
language str none Two letter language filter, for example "en"
sort str none recent, rating_desc, rating_asc

Ratings keep the native scale of each platform, so read ratingScale before comparing numbers across platforms.

Platform coverage

Operation Airbnb Booking.com Vrbo Google Hotels
search_stays yes yes yes yes
check_availability yes yes yes yes
get_listing yes yes yes no
get_price yes yes yes yes
compare_prices yes yes yes yes
get_reviews yes yes yes no

Asking for a platform that does not serve an operation returns the error code platform_not_enabled and costs nothing.

Response envelope

Every tool returns a stable JSON string and never raises:

{
  "success": true,
  "data": [{"id": "stays_airbnb_42307961", "platform": "airbnb", "name": "..."}],
  "meta": {"creditsCharged": 5, "platforms": ["airbnb"], "cached": false, "partial": false}
}
{
  "success": false,
  "error": {
    "code": "credit_balance_too_low",
    "message": "Not enough credits for this request.",
    "fix": "The account is out of credits. Top up or upgrade at https://stayingapi.com/pricing. Nothing was charged for this call.",
    "creditsCharged": 0
  }
}

meta.creditsCharged is the real cost of that request and meta.platformResults[].creditsCharged breaks it down per platform, so a crew can measure its own spend. Every error carries a fix field with the next step.

Error codes

missing_api_key, invalid_api_key, revoked_api_key, email_unverified, subscription_required, credit_balance_too_low, rate_limit_exceeded, missing_parameter, invalid_parameter, invalid_date_range, date_in_past, child_ages_mismatch, stay_too_long, window_too_long, invalid_listing_url, invalid_language, invalid_sort, invalid_cursor, limit_out_of_range, mutually_exclusive_params, platform_not_enabled, no_enabled_platform, needs_country, listing_not_found, job_not_found, all_actors_failed, actor_blocked, upstream_degraded, actor_timeout, internal_error, plus the client side codes network, bad_response, job_timeout, job_failed and http_<status>. Each service code has a page at https://stayingapi.com/docs/errors/<code>.

Failed, empty, blocked and not-found calls are never billed.

Long running calls

A live key answers a long running request with a job id and the tool polls that job for you, free of charge, until the result is ready. Sandbox keys answer synchronously. Set STAYINGAPI_MAX_WAIT_SECONDS to change how long the tool waits before returning job_timeout (default 180).

Resources

Disclosure

StayingAPI is an independent service for accommodation data. StayingAPI is not affiliated with, endorsed by, or sponsored by Airbnb, Booking.com, Vrbo, or Google Hotels. These are trademarks of their respective owners, used here descriptively to indicate the data sources StayingAPI can query.

Use of these tools is subject to the StayingAPI terms.

License

MIT

Download files

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

Source Distribution

crewai_stayingapi-0.1.0.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

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

crewai_stayingapi-0.1.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file crewai_stayingapi-0.1.0.tar.gz.

File metadata

  • Download URL: crewai_stayingapi-0.1.0.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for crewai_stayingapi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0d92c69a828c7c56b2907216255022b6521e4464e95e3ee00a5d3413a18f82de
MD5 261bdcdb905d6d2b3e781662d23236db
BLAKE2b-256 d6cdad25249208a3cdda13961ef652a6c02fc6cac2eba6dbf972af93a7d9d46b

See more details on using hashes here.

File details

Details for the file crewai_stayingapi-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for crewai_stayingapi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 62bfef4e708cd2a21e5fe9c5673c02ac324e3f35cfb4a98a243310e62889875c
MD5 d9ff8f3a14e81ac6df4bd4533c642954
BLAKE2b-256 b669dbdc70935d1b27e9c19fb37d106743a062f3885cc38b9aed869f56d411e7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 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