Intermediate
15 min

Airbnb Booking Pace and Future Demand

Read forward-looking fill rates and competitor pricing to build a data-driven pricing strategy for your short-term rental.

1

Call the Future Pacing Endpoint

The /markets/metrics/future/pacing endpoint returns daily booking pace data for the next ~90 days. Send a POST request with a market object specifying country, region, and locality, along with num_months to control how far ahead you want to look.

Python

import requests

API_KEY = "your_api_key"
url = "https://api.airroi.com/v1/markets/metrics/future/pacing"

payload = {
    "market": {
        "country": "us",
        "region": "florida",
        "locality": "miami"
    },
    "num_months": 3
}

response = requests.post(url, json=payload, headers={
    "X-API-KEY": API_KEY,
    "Content-Type": "application/json"
})

pacing_data = response.json()
print(f"Got {len(pacing_data)} days of pacing data")
print(pacing_data[0])

2

Understand the Pacing Data

Each data point in the response represents a single future date and contains six key fields that tell you exactly how demand is shaping up.

json

{
  "date": "2025-07-04",
  "booked_count": 1842,
  "available_count": 614,
  "booked_rate_avg": 285.50,
  "available_rate_avg": 342.00,
  "fill_rate": 0.75
}

booked_count — Number of listings already booked for this date.

available_count — Number of listings still available for this date.

booked_rate_avg — Average nightly rate of already-booked listings.

available_rate_avg — Average nightly rate of still-available listings.

fill_rate — The key demand signal. Calculated as booked_count / (booked_count + available_count). A fill rate of 0.75 means 75% of the market’s inventory is already booked for that date. The higher the fill rate, the stronger the demand.

3

Identify High-Demand Dates

Dates with a fill rate above 0.7 signal strong demand — these are the dates where you should price UP. Filter and sort by fill rate descending to see which dates are filling fastest.

Python

# Filter for high-demand dates (fill_rate > 0.7)
high_demand = [d for d in pacing_data if d["fill_rate"] > 0.7]

# Sort by fill_rate descending (hottest dates first)
high_demand.sort(key=lambda d: d["fill_rate"], reverse=True)

print(f"Found {len(high_demand)} high-demand dates\n")
for d in high_demand[:10]:
    print(f"  {d['date']}: fill_rate={d['fill_rate']:.0%}, "
          f"booked={d['booked_count']}, "
          f"avg_rate=${d['booked_rate_avg']:.0f}")

4

Identify Low-Demand Dates

Dates with a fill rate below 0.3 indicate weak demand. These are dates where you should consider lowering your nightly rate, reducing minimum-night requirements, or adding last-minute discounts to avoid empty nights.

Python

# Filter for low-demand dates (fill_rate < 0.3)
low_demand = [d for d in pacing_data if d["fill_rate"] < 0.3]

# Sort by fill_rate ascending (weakest dates first)
low_demand.sort(key=lambda d: d["fill_rate"])

print(f"Found {len(low_demand)} low-demand dates\n")
for d in low_demand[:10]:
    print(f"  {d['date']}: fill_rate={d['fill_rate']:.0%}, "
          f"available={d['available_count']}, "
          f"avg_rate=${d['available_rate_avg']:.0f}")

# Suggestion: reduce price or lower min-night requirement
print("\nConsider lowering prices or min-night stays on these dates.")

5

Pull Competitor Future Rates

Use the /listings/future/rates endpoint to see a competitor’s pricing for every day over the next 365 days. Each entry tells you whether the listing is available, its nightly rate, and minimum-night requirement. Cross-reference with your high-demand dates to see how competitors are pricing the same periods.

Python

# Pull competitor future rates for a specific listing
competitor_id = "abc123"  # Replace with actual listing ID
url = f"https://api.airroi.com/v1/listings/future/rates?id={competitor_id}&currency=usd"

response = requests.get(url, headers={"X-API-KEY": API_KEY})
competitor = response.json()

rates = competitor["rates"]
print(f"Got {len(rates)} days of competitor rates\n")

# Compare competitor pricing on high-demand dates
high_demand_dates = {d["date"] for d in high_demand}
for r in rates:
    if r["date"] in high_demand_dates and r["available"]:
        print(f"  {r['date']}: competitor rate=${r['rate']:.0f}, "
              f"min_nights={r['min_nights']}")

6

Build a Pricing Adjustment Model

Combine the fill rate (demand signal) with competitor rates (supply pricing) to calculate an optimal nightly rate. The formula is: base_rate * demand_multiplier * competitive_adjustment. The demand multiplier scales your price up or down based on fill rate, while the competitive adjustment prevents you from being too far above or below the competition.

Python

# Build a pricing adjustment model
base_rate = 200  # Your base nightly rate

def calculate_optimal_rate(date_info, competitor_rate=None):
    fill_rate = date_info["fill_rate"]

    # Demand multiplier based on fill rate
    if fill_rate > 0.8:
        demand_multiplier = 1.3   # Very high demand: +30%
    elif fill_rate > 0.6:
        demand_multiplier = 1.15  # High demand: +15%
    elif fill_rate > 0.4:
        demand_multiplier = 1.0   # Normal demand: no change
    elif fill_rate > 0.2:
        demand_multiplier = 0.85  # Low demand: -15%
    else:
        demand_multiplier = 0.7   # Very low demand: -30%

    # Competitive adjustment (if competitor data available)
    competitive_adj = 1.0
    if competitor_rate:
        price_ratio = base_rate * demand_multiplier / competitor_rate
        if price_ratio > 1.15:
            competitive_adj = 0.95  # We're too expensive, pull back
        elif price_ratio < 0.85:
            competitive_adj = 1.05  # We're cheap, push up

    optimal = base_rate * demand_multiplier * competitive_adj
    return round(optimal, 2)

# Apply to all future dates
for d in pacing_data[:14]:
    rate = calculate_optimal_rate(d)
    print(f"  {d['date']}: fill={d['fill_rate']:.0%} -> ${rate}")

Continue Learning

Keep exploring the AirROI API with these related tutorials.

Frequently Asked Questions

Booking pace (or fill rate) measures how quickly available dates are being booked for a future period. A high fill rate means dates are filling up fast, signaling strong demand. AirROI's pacing data shows this at a daily level for the next ~90 days, letting you see exactly which dates are in high demand.

The /markets/metrics/future/pacing endpoint returns daily pacing data for approximately 90 days into the future (controlled by the num_months parameter, default 3). Each day includes booked count, available count, average rates, and fill rate.

Fill rate is calculated as booked_count / (booked_count + available_count). A fill rate of 0.7 means 70% of listings that were either booked or available for that date are already booked. This is a direct measure of demand pressure for a specific future date.

Yes. Pacing data is one of the most actionable inputs for dynamic pricing. High fill rates indicate dates where you can raise prices, while low fill rates suggest dates where lowering prices or relaxing minimum night requirements may help fill gaps. This tutorial walks through exactly how to build a pricing adjustment model.

booked_rate_avg is the average nightly rate of listings that have already been booked for that date, while available_rate_avg is the average nightly rate of listings still available. Comparing the two reveals pricing insights: if available rates are much higher than booked rates, the remaining inventory may be overpriced.

Pacing data is updated daily as new bookings are made and availability changes. We recommend pulling fresh data at least weekly if you are using it for pricing decisions, and daily during high-demand periods like holidays or local events.

Ready to Build?

Get your API key and start making calls in minutes.
made with