Blog / Web data by industry

Vacation Rental Pricing Data: Fields That Matter

Vacation rental pricing data is the advertised price of a stay, for specific dates and guests, as a listing site shows it. For nightly-rate analysis, the fields that matter are the stay total and its breakdown, the dates and party it was quoted for, the listing's size and location, and its availability and reviews over time. What the data can't give you is the booked rate: an advertised price shows what a host asks, not what a guest paid.

What does a vacation rental price actually measure?

The price a listing site quotes for one stay: these dates, this many guests, this currency, at the moment you asked. Change any of them and the price can change, because hosts price by night, by season and by length of stay. That makes vacation rental prices different from hotel rack rates or rents: there's no single "price of the listing", only prices of stays.

Since April 2025, Airbnb shows guests the total price of a stay, including all fees before taxes, from the start of their search; in some countries taxes are included too (Airbnb Newsroom, 2025). So a total from search is close to what a guest sees before checkout, but whether taxes are in it depends on the market. Store the market with the price.

Which fields matter for nightly-rate analysis?

Five groups: the price and its basis, the stay you asked about, the listing's size, its location, and its demand signals. Our recorded Airbnb search for Paris, 10 to 14 November 2026, 2 adults, in EUR, shows most of them on each result. Here is the first result, trimmed with …:

{
  "id": "1669612146929039736",
  "title": "Apartment in Paris",
  "rating": 5,
  "review_count": 17,
  "price": { "amount": 714, "currency": "EUR", "nights": 4, "qualifier": "for 4 nights" },
  "price_breakdown": [{ "description": "4 nights x €178.34", "amount": 713.37 }],
  "bedrooms": 1,
  "beds": 1,
  "bathrooms": 1,
  "latitude": 48.84223,
  "longitude": 2.29241,
  "badges": ["Guest favorite"],
  …
}
Field Why it matters Watch out for
price.amount, price.nights, price.currency The stay total and its basis It's a total; divide by nights for a nightly figure
price_breakdown Shows the nightly rate behind the total Text such as "4 nights x €178.34"; 713.37 against a 714 total shows rounding
checkin, checkout, guests (your request) The price is for this stay only Not in the result; store it with every row
bedrooms, beds, bathrooms The main drivers of price within an area Compare like with like: 1-bedroom against 1-bedroom
latitude, longitude Location, the other main driver Use for distance bands, not exact addresses
rating, review_count Quality signal, and a proxy for past bookings Missing on the second recorded result, which has no rating yet
badges Site labels such as "Guest favorite" A label, not a measured quality

Divide price.amount by price.nights for the nightly rate: 714 ÷ 4 = 178.50 EUR, against 178.34 in the breakdown. Use the total for "what would this stay cost" and the breakdown's nightly rate when you compare across stay lengths. The other two results in the recording are 765 EUR and 435 EUR for the same 4 nights, so three Paris apartments for the same stay span 108.75 to 191.25 EUR a night. The third has no bedrooms field at all, so expect gaps.

Vrbo adds what Airbnb's three endpoints don't: an availability calendar per property. /v1/vrbo/listing-availability takes a property_id with optional start_date and end_date, and /v1/vrbo/search requires check_in and check_out and takes price_type (nightly or total). Our recorded Vrbo search, for Lake Tahoe, 10 to 13 December 2026, 2 adults, maps onto the same table with different names. One property's price block, trimmed:

{
  "property_id": "33933784",
  "property_type": "House",
  "bedrooms": 2,
  "beds": 4,
  "rating": 9.8,
  "rating_scale": 10,
  "review_count": 161,
  "price": {
    "currency": "USD",
    "nightly": 280,
    "nightly_original": 289,
    "stay_total": 839,
    "stay_total_text": "$839 for 3 nights",
    "nights": 3,
    "fees_note": "All fees included"
  },
  …
}

Vrbo gives the nightly rate and the stay total as separate numbers, flags a discount with nightly_original, and says fees are included. Its ratings are out of 10, not 5, so rescale before you put the two sites in one column. We haven't recorded a Vrbo availability calendar, so check listing-availability in the playground on the Vrbo API page before you design its table.

Why aren't advertised rates booked rates?

Because nothing in public listing data says a stay was booked, or at what price. A host can ask 178 EUR a night and accept a discount, or leave dates unsold. Analysts infer demand from two indirect signals, and both carry assumptions you should state when you publish a number.

The first is the availability calendar. A date that turns from open to blocked may be a booking, or the host blocking it for their own use. A calendar can't tell you which, so treat blocked nights as an upper bound on bookings. The second is review counts. Inside Airbnb, which publishes short-term rental data for many cities, estimates occupancy from reviews by assuming 50% of stays leave a review, applying an average stay of 3 nights where no published figure exists, and capping the estimate at 70% (Inside Airbnb, 2026). Its own page explains why it picked 50% and calls the alternative figure probably not conservative enough.

So report what you measured. "Median advertised nightly rate for 1-bedroom apartments in the 15th arrondissement, for stays booked 30 days ahead" is a fact you can stand behind. "Average daily rate" implies booked stays and needs those assumptions spelled out.

How do you build a weekly price panel?

Fix the stays you quote and the listings you track, then repeat the same requests every week. A panel answers "how did prices for the same stay change", which a fresh search each week can't, because the search returns different listings. Pick a small set of reference stays, such as Friday to Sunday four weeks ahead and Monday to Friday six weeks ahead, and quote each tracked listing for each one.

For Airbnb, /v1/airbnb/listing takes the listing_id with checkin, checkout and adults, so one call prices one listing for one stay. For Vrbo, /v1/vrbo/listing takes the property_id with check_in, check_out and adults, and listing-availability returns the calendar. This script prices a list of Airbnb listings for one reference stay and appends rows to a CSV, keeping the request with each price:

import csv
import datetime as dt
import os
import requests

URL = "https://api.perceptlayer.com/v1/airbnb/listing"
HEADERS = {"X-API-Key": os.environ["API_KEY"]}
LISTINGS = ["1669612146929039736"]  # your tracked listing IDs
today = dt.date.today()
checkin = today + dt.timedelta(days=(4 - today.weekday()) % 7 + 28)  # a Friday ~4 weeks out
checkout = checkin + dt.timedelta(days=2)

with open("airbnb_panel.csv", "a", newline="") as f:
    out = csv.writer(f)
    for lid in LISTINGS:
        r = requests.get(URL, headers=HEADERS, timeout=60, params={
            "listing_id": lid, "checkin": checkin.isoformat(),
            "checkout": checkout.isoformat(), "adults": 2})
        status = r.status_code
        body = r.text if status == 200 else r.json()["error"]["code"]
        out.writerow([today.isoformat(), lid, checkin, checkout, 2, status, body])

We haven't run this script live for this article. The script stores the whole listing response, because we haven't recorded /v1/airbnb/listing and you should check where its price sits before you parse it. A failed call stores its error code and costs nothing. To discover listings for the panel in the first place, run /v1/airbnb/search with place, dates and room_type (entire_home, private_room or hotel_room), and page with the returned next_cursor passed back as cursor.

What does tracking 200 listings weekly cost?

Each successful call is 1 credit, so the cost is calls per week. Split 200 listings evenly: 100 Airbnb listings priced for one reference stay, and 100 Vrbo properties checked with listing-availability. That's 100 + 100 = 200 calls a week. Add reviews monthly, one call per listing, and a monthly search sweep to replace delisted properties.

Step Calls Credits a month
Airbnb listing, 100 listings × 1 stay, weekly 100 a week 400
Vrbo listing-availability, 100 properties, weekly 100 a week 400
Reviews for all 200, monthly 200 a month 200
Total 1,000

Without the monthly reviews, it's 800 credits, inside the 1,000 free credits every verified account gets. With them it's exactly 1,000. A second reference stay doubles the pricing rows to 1,600 credits a month, within the Starter pack's 10,000. Failed calls cost nothing. The credits docs explain the balance, and pricing has what packs cost.

What are the limits of this data?

Three to keep in front of anyone who reads your analysis. Prices are advertised prices as found at the time of the call, not booked rates, and they move with demand, so a weekly panel shows asking-price trends. Coverage is the listings you chose: a panel of 200 is a sample of a market, and new or removed listings change it. And fees and taxes vary by market, so compare totals only within one market and currency.

For the endpoint details behind the Airbnb half, the Airbnb listings data guide covers search, listing and reviews; the Vrbo API guide covers search, availability and reviews. For hotels rather than private rentals, see hotel price data for rate monitoring. To start, run a Paris search for your own dates in the playground on the Airbnb API page.

APIs in this post

Frequently asked questions

Can I get booked rates or occupancy from Airbnb or Vrbo data?

Not directly. Listing data shows advertised prices, availability calendars and reviews. Blocked calendar nights may be bookings or owner blocks, and review-based occupancy estimates depend on assumptions such as the share of stays that leave a review. State those assumptions, or report advertised rates and calendar availability as what they are.

Why does the same listing show different prices?

Prices are for a stay, so dates, length of stay, number of guests and currency all change them. Hosts can price weekends, holidays and short stays differently. Always store the checkin, checkout, guests and currency you requested with each price, and compare only prices quoted for the same kind of stay.

Does the Airbnb price include fees?

Airbnb says it has shown guests the total price including all fees before taxes since April 2025, with taxes included in some countries. The recorded search returns price.amount as a total for 4 nights with a nightly breakdown. Whether taxes are included depends on the market you searched.

How much does a weekly price panel cost?

One credit per successful call. Pricing 100 Airbnb listings and checking availability for 100 Vrbo properties weekly is 200 credits a week, about 800 a month, inside the 1,000 free monthly credits. Failed calls cost nothing. The pricing page has what credit packs cost beyond the free tier.

Should I store host names or guest reviews?

Keep what you need for pricing analysis: ratings, review counts and review dates. Host names and reviewer names identify people and rarely help a pricing model, so drop them unless you have a reason and a lawful basis to keep them, and never use them to contact anyone.

  1. Vrbo API: Vacation Rental Listings and Availability

    Search Vrbo with required check_in and check_out, then pull a listing's availability and reviews by property_id. Parameters, cURL and the cost of 50 listings.

  2. Job Posting Data for Labour-Market Research

    Which Indeed posting fields support trend analysis, where postings mislead versus hires, and a weekly collection plan that costs 3,000 credits a month.

  3. Salary Data from Job Sites: Reading Ranges Without Bias

    Glassdoor's salaries endpoint returns p10 to p90 total pay, a currency and a national count. How to read those ranges and the biases of self-reported pay.

Start with 1,000 free credits

No password to set. We email you a sign-in link, and your key works on every API.

No credit card. 1,000 free credits a month.