Skip to main content
Glama
jlucasmcrell

Apify Public Data & Leads

Airbnb Short-Term Rental Rates and Property Search

airbnb_listings_search
Read-only

Search vacation rental listings by destination to compare nightly prices, occupancy ratings, and property classifications for short-term rental market research and hospitality pricing.

Instructions

Search vacation rental listings, nightly prices, occupancy ratings, and property classifications from Airbnb.

Behavioral Transparency:

  • Execution: Network call executed synchronously in the cloud via Apify Actor 'captainhandsome/airbnb-listings-search'.

  • Side Effects: Reads public sources and creates a billed Actor run and dataset on your Apify account.

  • Authentication: Requires APIFY_TOKEN environment variable.

  • Latency & Limits: Typical run duration is 15-40 seconds; timeout capped at 120 seconds.

Usage Guidelines:

  • When to use: Use for short-term vacation rental market research, hospitality pricing comparisons, and regional accommodation rate benchmarking.

  • When NOT to use: Do not use for long-term residential apartment leases, MLS residential home sales, or commercial office leasing.

  • Named alternatives: Use 'google_maps_search' for hotel and lodging business contacts, 'glassdoor_jobs_search' for hospitality employment, or 'sec_edgar_filings' for public REIT financial filings.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
locationYesDestination metropolitan city, tourist region, or geographic market (e.g. 'Austin, TX', 'Miami, FL', or 'Denver, CO').
max_resultsNoMaximum number of rental properties to retrieve. Integer between 1 and 100. Defaults to 10.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
runNo
errorNo
statusYes
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed32 schema fields changedv1.1.0
    • addedInput schema / additionalProperties
      Added value: +false
    • addedOutput schema / properties / error
      Added value: +{
      +  "type": "object"
      +}
    • removedOutput schema / properties / results / description
      Removed value: -"Collection of short-term vacation rental property listings extracted from Airbnb."
    • addedOutput schema / properties / results / items / properties / area
      Added value: +{
      +  "description": "City, borough or neighbourhood named alongside the property type. A home card names its city or town; a hotel-brand card names its neighbourhood.",
      +  "title": "Area",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / badge
      Added value: +{
      +  "description": "Promotional badge shown on the card image, when there is one: Guest favorite, Top guest favorite, Superhost or Featured hotel.",
      +  "title": "Card badge",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / checkin_date
      Added value: +{
      +  "description": "Check-in date the card's price is quoted for, in YYYY-MM-DD. Airbnb picks a different window per card when the search itself carries no dates, so prices are only comparable once you read this column.",
      +  "title": "Check-in date",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / checkout_date
      Added value: +{
      +  "description": "Check-out date the card's price is quoted for, in YYYY-MM-DD.",
      +  "title": "Check-out date",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / description
      Added value: +{
      +  "description": "Displayed summary such as room type, beds, or date context.",
      +  "title": "Listing-card description",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / image_url
      Added value: +{
      +  "description": "Direct URL of the listing's first card photo.",
      +  "title": "Cover image URL",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / listingName
      Removed value: -{
      -  "description": "Headline property title or host description.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / results / items / properties / listingUrl
      Removed value: -{
      -  "description": "Canonical HTTPS link to the Airbnb listing reservation page.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / results / items / properties / listing_id
      Added value: +{
      +  "description": "Numeric Airbnb room ID taken from the listing URL. Stable per listing, so it is the key to join this dataset against later runs or your own records.",
      +  "title": "Listing ID",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / listing_name
      Added value: +{
      +  "description": "Host-written name of the listing, on its own without the beds, baths and date text that share the card's subtitle block.",
      +  "title": "Listing name",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / nights
      Added value: +{
      +  "description": "Number of nights the displayed price covers, from the card's own price qualifier.",
      +  "title": "Nights covered by the price",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / photos_count
      Added value: +{
      +  "description": "Number of photos in the listing's card carousel.",
      +  "title": "Photo count",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / price
      Added value: +{
      +  "description": "Price text exactly as displayed for the selected search context.",
      +  "title": "Displayed price",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / pricePerNight
      Removed value: -{
      -  "description": "Nightly accommodation tariff rate in local currency.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / results / items / properties / price_total
      Added value: +{
      +  "description": "The payable price figure on the card, with its currency symbol as displayed. On discounted cards this is the reduced price, not the struck-through original.",
      +  "title": "Price figure",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / property_type
      Added value: +{
      +  "description": "Accommodation type as Airbnb prints it: Apartment, Home, Room, Loft, Villa, Guesthouse, Cabin, Treehouse, Tiny home, Farm stay or Hotel. Read from the card title for homes and from the card subtitle for hotel-brand cards.",
      +  "title": "Property type",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / properties / rating / description
      Previous value: -"Aggregate guest cleanliness and satisfaction score on a 1.0 to 5.0 scale."New value: +"Average guest rating out of 5. Empty for listings with no reviews yet, which show 'New' on the card instead."
    • addedOutput schema / properties / results / items / properties / rating / title
      Added value: +"Average rating"
    • changedOutput schema / properties / results / items / properties / rating / type
      Previous value: -"number"New value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / reviewCount
      Removed value: -{
      -  "description": "Total number of verified guest reviews posted for the property.",
      -  "type": "integer"
      -}
    • addedOutput schema / properties / results / items / properties / reviews_count
      Added value: +{
      +  "description": "Number of guest reviews behind the average rating. Empty for listings with no reviews yet.",
      +  "title": "Review count",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / roomType
      Removed value: -{
      -  "description": "Accommodation category (e.g. Entire home, Private room, Hotel room).",
      -  "type": "string"
      -}
    • addedOutput schema / properties / results / items / properties / room_details
      Added value: +{
      +  "description": "Capacity facts printed on the card, joined with a middle dot. Which of the three Airbnb prints varies by listing and by page render, so a listing may show only bedrooms and beds.",
      +  "title": "Bedrooms, beds and baths",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / title
      Added value: +{
      +  "description": "Public title displayed on the Airbnb listing card.",
      +  "title": "Listing title",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / url
      Added value: +{
      +  "description": "Canonical public Airbnb room URL.",
      +  "title": "Listing URL",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / required
      Removed value: -[
      -  "listingName",
      -  "pricePerNight"
      -]
    • addedOutput schema / properties / run
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "success",
      +    "empty_unverified",
      +    "partial",
      +    "error"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "results"
      -]New value: +[
      +  "results",
      +  "status"
      +]
  2. Changed6 schema fields changedv1.0.6
    • changedInput schema / properties / location / description
      Previous value: -"e.g. 'Austin, TX' or 'Miami, FL'"New value: +"Destination metropolitan city, tourist region, or geographic market (e.g. 'Austin, TX', 'Miami, FL', or 'Denver, CO')."
    • addedInput schema / properties / location / minLength
      Added value: +2
    • addedInput schema / properties / max_results / description
      Added value: +"Maximum number of rental properties to retrieve. Integer between 1 and 100. Defaults to 10."
    • addedInput schema / properties / max_results / maximum
      Added value: +100
    • addedInput schema / properties / max_results / minimum
      Added value: +1
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "results": {
      +      "description": "Collection of short-term vacation rental property listings extracted from Airbnb.",
      +      "items": {
      +        "properties": {
      +          "listingName": {
      +            "description": "Headline property title or host description.",
      +            "type": "string"
      +          },
      +          "listingUrl": {
      +            "description": "Canonical HTTPS link to the Airbnb listing reservation page.",
      +            "type": "string"
      +          },
      +          "pricePerNight": {
      +            "description": "Nightly accommodation tariff rate in local currency.",
      +            "type": "string"
      +          },
      +          "rating": {
      +            "description": "Aggregate guest cleanliness and satisfaction score on a 1.0 to 5.0 scale.",
      +            "type": "number"
      +          },
      +          "reviewCount": {
      +            "description": "Total number of verified guest reviews posted for the property.",
      +            "type": "integer"
      +          },
      +          "roomType": {
      +            "description": "Accommodation category (e.g. Entire home, Private room, Hotel room).",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "listingName",
      +          "pricePerNight"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "results"
      +  ],
      +  "type": "object"
      +}
  3. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations: it discloses that execution is a synchronous network call via a specific Apify Actor, that it creates a billed Actor run and dataset on the user's Apify account, that it requires APIFY_TOKEN, and that latency is 15-40 seconds with a 120-second timeout. This is rich behavioral context that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Behavioral Transparency, Usage Guidelines) and front-loads the core purpose. It is slightly longer than strictly necessary, but every section earns its place by providing actionable guidance. The formatting aids scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 params, 1 required, output schema present), the description covers the essential operational context: what it searches, when to use it, what side effects occur, auth requirements, and latency. The output schema handles return-value documentation, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters (location and max_results) with types, defaults, and constraints. The description adds no additional parameter-level meaning beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Search') and resource ('vacation rental listings, nightly prices, occupancy ratings, and property classifications from Airbnb'). It clearly distinguishes this from siblings by naming the domain (Airbnb short-term rentals) and the data fields returned. The title reinforces the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides 'When to use' and 'When NOT to use' sections, and names three sibling alternatives (google_maps_search, glassdoor_jobs_search, sec_edgar_filings) with the conditions for choosing them. This is exactly the kind of routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.