Changelog

Follow up on the latest improvements andย updates.

RSS

Plugin Library
TL;DR โ†’
  • The
    Wheelhouse Plugin Library
    is live!
  • Our plugin library contains a
    growing set of Revenue Management skills
    that you can leverage (STLY pacing, price-change attribution, portfolio leaderboards, and more)
  • These can be
    installed in one step
    in
    Claude, Cursor, Codex, Grok Build, ChatGPT,
    etc.
  • This significantly
    improves the efficiency of our MCP
    , in some cases reducing the resources (tokens) required for common requests
    by 96%
    (i.e. pulling all reservations from WH is hugely improved)
  • Think of this as
    version control
    for our APIs & MCP.
  • We updated our RM API docs, to
    better serve agents & LLMs
    .
  • ๐Ÿ“ฝ๏ธ Loom walkthrough for getting started today.
๐Ÿ”Œ The Wheelhouse Plugin Library
Today, weโ€™re sharing the Wheelhouse Plugin Library โ€” a public, growing collection of Revenue Management skills you can connect straight into your AI client.
If youโ€™re already using the Wheelhouse MCP, you know it gives your agent direct access to your portfolio โ€” listings, pricing, reservations, preferences, and more.
The Plugin Library goes a step further: it packages that MCP connection together with the actual workflows our Revenue Management team builds, so your agents can do real analysis, faster & easier.
A few of the skills already in the library:
  • STLY pacing
    โ€” on-the-books pacing for any listing or segment, over any date range, compared to the same time last year
  • Price-change attribution
    โ€” checks whether a recent rate or preference change actually correlated with bookings
  • Future rate overpricing
    โ€” flags months where your posted rates look out of line with what actually transacted last year
  • Custom rate attribution
    โ€” a fast check on whether a custom rate you set actually got booked
  • Portfolio leaderboards
    โ€” ranks your whole portfolio by pacing, market position, expiring inventory, and more
You donโ€™t have to name a skill or remember which one to use โ€” ask in plain English and your agent picks the right one:
  • โ€œHow is this listing pacing versus last year?โ€ โ†’ STLY pacing
  • โ€œDid that rate change actually drive bookings?โ€ โ†’ Price-change attribution
  • โ€œAre next seasonโ€™s rates too high?โ€ โ†’ Future rate overpricing
  • โ€œWho needs attention across my portfolio?โ€ โ†’ Portfolio leaderboard
๐Ÿฅณ Pro Tip!
Once youโ€™re connected, ask for STLY pacing on any listing โ€” or a whole segment, across any date range you choose โ€” and get back the same pacing logic our own team relies on, already vetted by Wheelhouse.
๐Ÿš„ A Faster, More Efficient MCP
Under the hood, weโ€™ve also made a real efficiency improvement to how the Wheelhouse MCP handles complex, data-heavy requests.
Previously, when your agent needed to work through a lot of data, it worked one step at a time: call a tool, wait for the full result to come back through the model, decide what to do next, call the next tool. Every one of those round trips costs tokens and time.
Now, for multi-step, data-heavy requests, your agent can write a short piece of code that calls the tools it needs, loops through the results, and filters everything down โ€” all before anything comes back into its context. Instead of pulling every reservation or every dayโ€™s pricing data through the model just to produce a summary, only the answer you actually asked for makes the trip.
As an example, this enabled us to reduce pulling reservations by 96%!
๐Ÿฅณ Pro Tip!
Try asking your agent to pull reservations across your entire market or portfolio in one go โ€” this request that used to hit a wall and now runs end-to-end.
Getting Started:
Connecting is a one-step install, and our Plugin Library is supported everywhere: Claude Code, Cursor, Codex, Grok Build, and ChatGPT (Enterprise/Work, via admin-managed import) can all run the library.
And, the plugin library updates automatically as we ship new changes โ€” there is nothing to reinstall/update/etc.
Hereโ€™s how easy it is in Claude Code, as an example โ€” two lines, pointing at one repo:
/plugin marketplace add pricemethod/wheelhouse-plugin
/plugin install wheelhouse-plugin@wheelhouse-plugin
See a full walkthrough of connecting it in Claude here:
๐Ÿ”— Links:
Instructions for Cursor, Codex, Grok Build, and ChatGPT are linked at the bottom of this post.
grok plugin marketplace add pricemethod/wheelhouse-plugin
grok plugin install pricemethod/wheelhouse-plugin --trust
And, for more, you can always review our API docs:
Pricing Chart Enhancements
TL;DR โ†’
  • There are
    20+ new data series
    (now 43 total!) available on your Pricing Chart.
  • New
    Your Settings
    category (8 series) lets you overlay each individual setting โ€” Base Price, Seasonality, Day of Week, Last Minute, Far Future, Gaps & Adjacencies, Demand Sensitivity, Historical Anchoring โ€” directly on your chart
  • New
    Pricing Engine Breakdown
    category (5 series) shows our model's own recommendation for each of those components, so you can compare your settings against the model's raw math, side by side
  • New
    Neighborhood Data
    and expanded
    Market Data
    and
    Set Data
    categories bring in comp-set, neighborhood, and market context โ€” median, range, and occupancy โ€” alongside your own price.
  • New
    Pricing Modifiers
    :
    Custom Rates (Dynamic)
    and
    Fees (Preview)
    - enable you to see how your overrides & fees impact your pricing.
  • All of these Series are available now in your Calendar Charts.
  • All of these Series are available now in your API/MCP.
๐ŸŽฅ
Video Overview
๐Ÿฉป
Get the full picture
Your Pricing Chart just got much more robust. It now features 43 series, which includes major new series such as the:
  • Pricing Series
    (4 new series) we added a number of new pricing series (e.g. "Model Only") so you can much
  • Custom Rates
    (2 improved series) before you could only see Fixes Rates. Now, you can see every custom override on your pricing chart. And, even better, these series are "fills", meaning you can easily see their exact impact on your pricing.
  • Your Settings
    (8 new series) lets you overlay each individual setting โ€” Base Price, Seasonality, Day of Week, Last Minute, Far Future, Gaps & Adjacencies, Demand Sensitivity, Historical Anchoring โ€” directly on your chart
  • Pricing Engine Breakdown
    (5 new series) shows our model's own recommendation for each of those components, so you can compare your settings against the model's raw math, side by side
Screenshot 2026-08-26 at 9
Your series are now organized into 9 categories โ€” Pricing Series, Pricing Modifiers, Limits & Controls, Bookings & Blockings, Your Settings, Pricing Engine Breakdown, Set Data, Neighborhood Data, and Market Data โ€” each expandable, each with its own set of series you can turn on or off. You control exactly how much (or how little) is on screen at once.
โš™๏ธ
Your Settings vs. the Model's Recommendation
We made it much easier to compare each of your settings to the Pricing Engine Recommendations.
For example, if you have a custom Seasonality setting, you can easily see how it compares to our Pricing Engine's current Seasonal Recommendation.
We think this view will be very helpful both now, and when evaluating or updating to future Pricing Engine versions (e.g. 9.1, 10.0).
๐Ÿ“Š
Market, Neighborhood, and Set โ€” now with Occupancy
Comparing your price to comps just got more useful. Neighborhood Data now includes Occupancy and Occupancy (Adj.), not just price median and range โ€” so you can see whether a market is actually filling up, not just what it's asking. Set Data (your Dynamic Sets) gets the same Occupancy additions, and Market Data now supports Occupancy alongside its existing Median and Range series.
๐Ÿงฎ
Clearer names for what you're already using
A few series were renamed so the label matches what the number actually is:
  • Your current nightly price is now
    Prices (Asking Rate)
    โ€” the price after the pricing engine, your settings, your limits, and any custom rates, which is what gets pushed to your PMS (fees, premiums, or discounts may be applied after that, depending on your channel).
  • Prices (Model & Settings Only)
    and
    Prices (Model Only)
    let you isolate the engine's output with and without your own overrides in the mix.
Learn More:
  • ๐Ÿ“ƒ Help Center article - link
  • ๐Ÿ“ฝ๏ธ Watch a demo - link
-----
Full Series Reference
Pricing Series
  • Prices (Observed)
    (Line) โ€” Your last observed price for this listing on your PMS or Channel (if no PMS), or the price of the listing when it was booked or blocked.
  • Prices (Asking Rate)
    ๐Ÿ†• (Line) โ€” Your current nightly prices, including pricing engine, your settings, limits & custom rates. This is what's pushed to your PMS, where other fees, premiums, or discounts may be applied.
  • Prices (Model & Settings Only)
    (Line) โ€” Your current nightly prices derived from the pricing engine and your settings (ignoring your min prices, max prices, and custom rates).
  • Prices (Model Only)
    ๐Ÿ†• (Line) โ€” Our pricing engine's raw recommendations for each stay date (ignoring your settings & custom rates).
  • Prices (Preview)
    (Line) โ€” A preview of your potential nightly prices, based on your pending updates.
  • Prices (Last Year, Observed)
    (Line) โ€” The final nightly price we observed (unavailable or booked), from one year ago.
  • Price (Last Year Last Posted)
    (Line) โ€” Shows stay dates & posted price for last year's reservations.
Pricing Modifiers
  • Custom Rates (Fixed)
    (Fill, Stacked) โ€” Your date-specific fixed overrides (e.g. $220).
  • Custom Rates (Dynamic)
    ๐Ÿ†• (Fill, Stacked) โ€” Your date-specific "dynamic" overrides (e.g. +10%).
  • Estimated Fees (Preview)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current fee configuration (from your Rent + Fee Settings).
Limits & Controls
  • Minimum Price (Fill)
    โ€” Your current Min Price Setting. Our pricing engine will never go below this minimum, unless you create a specific custom rate.
  • Minimum Price (Absolute)
    ๐Ÿ†• (Fill) โ€” Your current Absolute Minimum โ€” a hard floor that can never be overridden, even if you create a specific custom rate.
  • Maximum Price (Fill)
    โ€” Your current Max Price Setting. Our pricing engine will never go above this level, unless you create a specific custom rate.
  • Minimum Stays (Fill)
    โ€” Your current Min Stay Settings for each stay date.
Bookings & Blockings
  • Bookings (This Year)
    (Fill, full Y axis) โ€” Shows stay dates & revenue for this year's reservations.
  • Bookings (Last Year)
    (Fill, full Y axis) โ€” Shows stay dates & revenue for last year's reservations.
  • Nights (Booked)
    (Fill, full Y axis) โ€” Shows stay dates that have booked.
  • Nights (Blocked)
    (Fill, full Y axis) โ€” Shows stay dates that have been marked unavailable.
Your Settings
  • Base Price (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Base Price Setting.
  • Seasonality (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Seasonality Setting.
  • Day of Week (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Day of Week Setting.
  • Last Minute & Far Future (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Last Minute Setting.
  • Gaps & Adjacencies (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Gaps & Adjacencies Setting.
  • Demand Sensitivity (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Demand Sensitivity Setting.
  • Historical Anchoring (Settings)
    ๐Ÿ†• (Fill, Stacked) โ€” Your current Historical Anchoring Setting.
Pricing Engine Breakdown
  • Base Price (Model)
    ๐Ÿ†• (Fill, Stacked) โ€” Our model's recommended Base Price.
  • Seasonality (Model)
    ๐Ÿ†• (Fill, Stacked) โ€” Our model's recommended Seasonality Impact.
  • Local Demand (Model)
    ๐Ÿ†• (Fill, Stacked) โ€” Our model's recommended Local Demand Impact. You can adjust this by changing Demand Sensitivity.
  • Last Minute & Far Future (Model)
    ๐Ÿ†• (Fill, Stacked) โ€” Our model's recommended Last Minute & Far Future pricing impacts.
  • Gaps & Adjacencies (Model)
    ๐Ÿ†• (Fill, Stacked) โ€” Our model's recommended Gaps & Adjacencies Impact.
Set Data
  • Listing Breakout (Set)
    (Lines) โ€” A breakout of Asking Rates (+ Fees) for each listing in your current Dynamic Set.
  • Median (Set)
    (Line) โ€” The 50th percentile of Asking Rates (+ Fees) for listings in your current Dynamic Set.
  • Range (Set)
    (Fill) โ€” The 25thโ€“75th percentile of Asking Rates (+ Fees) for listings in your current Dynamic Set.
  • Occupancy (Set)
    (Fill) โ€” The daily Occupancy for listings in your current Dynamic Set.
  • Occupancy (Set Adj.)
    (Fill) โ€” The daily Occupancy (Adj.) rate for listings in your current Dynamic Set.
Neighborhood Data
  • Median (Neighborhood)
    (Line) โ€” The 50th percentile of Asking Rates (+ Fees) for listings in your neighborhood.
  • Range (Neighborhood)
    (Fill) โ€” The 25thโ€“75th percentile of Asking Rates (+ Fees) for listings in your neighborhood.
  • Occupancy (Neighborhood)
    (Fill) โ€” The daily Occupancy rate for listings in your neighborhood.
  • Occupancy (Neighborhood Adj.)
    (Fill) โ€” The daily Occupancy (Adj.) rate for listings in your neighborhood.
  • Bookings (Neighborhood Expected Range)
    (Fill) โ€” The range of expected bookings for your neighborhood.
  • Bookings (Neighborhood Expected)
    (Line) โ€” The expected booking count for your neighborhood.
  • Bookings (Neighborhood Observed)
    (Line) โ€” The actual observed booking count for your neighborhood.
Market Data
  • Median (Market)
    (Line) โ€” The 50th percentile of Asking Rates (+ Fees) for listings in your broader market.
  • Range (Market)
    (Fill) โ€” The 25thโ€“75th percentile of Asking Rates (+ Fees) for listings in your broader market.
Renamed Series:
19 series have been renamed, but the data is unchanged.
We renamed these series to make it easier to find & leverage the right data sets for you.
Often, we made Series names more explicit. Sometimes, we shortened them, and moved data to the descriptions you see when you hover on a series name.
The full list of updated names is here:
Series Name Mapping-selection (2)
Daily Performance Metrics
TL;DR โ†’
  • New
    Aggregate Performance Rows
    on your Portfolio Calendar show daily
    Occupancy
    ,
    Asking Rate
    ,
    ADR
    , and
    Pickup
    โ€” aggregated across every listing currently in view
  • Rows respect your filters, so applying a
    Filter
    or selecting a different
    Segment
    gives you an aggregate performance just for that slice of your portfolio.
  • You can toggle these metrics
    on/off from the Display dropdown
    , and change your currency for these metrics, as well.
  • This view is only available for views with
    fewer than 250 listings
    .
๐ŸŽฅ Video Overview:
๐Ÿ—“๏ธ Daily Performance Metrics, Right In Your Calendar:
For a while, understanding daily performance for a group of listings required heading to your Performance page.
Now, we're bringing daily performance information where you need it - right to the top of your Portfolio Calendar. That means you can easily see:
  • Occupancy
    โ€” the average occupancy across your current view, for that date
  • Asking Rate
    โ€” the average asking rate across your current view, for that date
  • ADR
    โ€” average daily rate across booked nights, for that date
  • Pickup
    โ€” the number of new booked nights for that date in the last 14 days.
Hover over any value for a full definition โ€” no more guessing which flavor of a metric you're looking at.
๐Ÿ” Auto-Update for Filters & Segments
Here's where it gets useful at scale.
  • If you have multiple markets, you can easily toggle between your markets, getting a clear picture of daily performance.
  • If you leverage tags or segments, same same!
Whatever slice of your portfolio you're looking at, the aggregate performance numbers for that slice are already sitting at the top of the calendar.
๐Ÿ”‘ Why This Matters
Recently, we launched many new metrics, so you can better unpack how any listing is performing.
However, another important view is how performance is rolling up to a daily level.
Adding these metrics to your calendar view is step one of helping you think about pricing strategies tied to how each day is performing... not just each listing.
For teams managing large portfolios, that means faster triage, without ever leaving the calendar.
๐Ÿš€ Where to Find It
Aggregate Performance Rows are on by default in your Portfolio Calendar. To show or hide them:
  1. Open the
    Display
    dropdown
  2. Find
    Aggregate Performance
    under the
    Other
    section
  3. Toggle it on or off
๐Ÿšจ Alert!
As noted in the intro, due to data loading, we currently ONLY show the aggregated rows for views that contain
fewer than 250 listings
.
More Details:
๐Ÿ“ฝ๏ธ Link here
image
TL;DR โ†’
  • We've shipped updated
    More conservative
    curves for
    Last Minute Discount
    and
    Far Future Premium
    โ€” live now.
  • If your listings were already on More conservative, nothing changed automatically: we moved those listings to a
    Custom rule
    that matches your previous curve, so your strategy stayed exactly where you left it.
  • The new Last Minute curve discounts deeper closest to arrival, then tapers more gradually as you move farther out.
  • The new Far Future curve starts building a premium around
    180 days out
    (vs. ~365 days before) and gradually increases toward roughly
    25%
    .
  • Want the new behavior? Switch to More conservative anytime in
    Portfolio Settings
    .
๐ŸŒ™
What's New โ€” Last Minute Discount
We've refined how the More conservative option handles last-minute pricing. The updated curve applies deeper discounts as arrival gets closer, then tapers those discounts more gradually the farther out you go โ€” reflecting real-world discounting patterns we've seen across operators.
๐Ÿ”ญ
What's New โ€” Far Future Premium
The More conservative option for Far Future Premium got the same treatment. Previously, it didn't start adding a meaningful premium until roughly 365 days before arrival. The new curve starts building a modest premium around
180 days out
, gradually increasing toward approximately
25%
the farther into the future you price.
๐Ÿ›ก๏ธ
Your Strategy Didn't Change Automatically
If one or more of your listings were already using More conservative for either setting, we didn't flip you onto the new curve. Instead, we moved those listings to a
Custom rule
that closely matches the
old
More conservative curve โ€” so the pricing behavior you were already relying on stayed consistent.
In other words: improving the data-driven option doesn't mean your live strategy changed out from under you. If you did nothing, you're exactly where you were.
๐Ÿš€
Getting Started
No action is needed if you're happy with how your pricing has been working. If the new curve sounds like a better fit for your listing(s):
  1. Go to
    Portfolio Settings
  2. Find
    Last Minute Discount
    and/or
    Far Future Premium
  3. Switch back to
    More conservative
    to pick up the new curve
๐Ÿฅณ
Pro Tip!
Not sure whether the new curve or your current Custom rule is the better fit? Try switching one listing over first and compare pacing over the next few weeks before rolling it out portfolio-wide.
Questions? Reach out to our 24/7 live chat โ€” we're happy to walk through it.
Screenshot 2026-08-16 at 12
Yes.
It is
exceptionally rare
for us to endorse tech platforms for our users.
However, having spent time with the Wander team, in our opinion, this platform has reached the point that it is well worth highlighting to you.
So, why learn about Wander?
Our hot takes...
  • Wander recently launched
    WanderOS
    .
  • WanderOS is the most
    ambitious
    Direct Booking
    Machine
    we've seen.
  • In the age of AI, both Wander & Wheelhouse are
    bullish
    on Direct Bookings.
  • We've spent time with the Wander team, and have been
    very impressed
    with the breadth of tools they have built (Cart abandonment retargeting? Check!) to empower your direct business.
  • We'd recommend getting some time on the calendar to say hello.
Learn a LOT more about Wander here.
(And especially exciting to us... the Wander & Wheelhouse teams have spent lots of time thinking through collabs that will benefit our shared customers)
MCP_ Segment Aggregation
TL;DR โ†’
  • A new
    GET /segments/{segment_id}/aggregated_metrics
    endpoint returns monthly performance metrics rolled up across every listing your segment currently matches
  • This is the same aggregated view you'd see reporting on that segment inside the Wheelhouse app โ€” now available directly to your integration
  • Works across owned and shared/managed listings, and converts every monetary metric to whichever currency you request
  • Available two ways: call the endpoint directly from your integration, or just ask any MCP-connected AI assistant in plain English
---
๐Ÿ“Š What's New
Segments are your saved, dynamic portfolio filters โ€” bedroom count, market, tags, occupancy thresholds, whatever criteria matters to how you organize your portfolio.
The RM API and MCP already let you list your segments and pull the listings each one matches.
Now you can also pull the rolled-up performance for the whole segment, in one call or chat.
GET /segments/{segment_id}/aggregated_metrics
returns one row per month, covering:
  • Occupancy
    โ€” both raw and adjusted for blocked nights
  • Revenue, ADR, RevPar
    โ€” raw and adjusted
  • Asking rate
    , lead time, and length of stay
  • Booking counts
    and night-level detail (available, blocked, booked, bookable)
By default, the response covers every period Wheelhouse has data for โ€” a segment built today can still return months of trailing history for the listings it matches. Pass one or more
dates
to restrict the response to specific months (send as
?dates=2026-05-01&dates=2026-06-01
, always the first of the month).
Launch_  Segment Aggregation
๐Ÿงฎ A Concrete Scenario
Say you manage a segment called "4BR+ Mountain Cabins" โ€” 40 listings across three markets, grouped by a bedroom-count filter. Instead of pulling listing-level performance data for all 40 and aggregating it yourself, you can now call the new endpoint once and get:
  • January's blended occupancy and RevPar across all 40 listings
  • The trend across the last 12 months, to spot seasonality
  • A single ADR figure to compare against your other segments
That's the exact math Wheelhouse runs when you view that segment's performance chart in the app โ€” now yours to pull into a dashboard, an owner report, or an internal alert without re-deriving it.
๐Ÿค– Or Just Ask
You don't have to write any code to use this. If you've connected an AI assistant to Wheelhouse via MCP, you can just ask for it in plain English.
Screenshot 2026-08-16 at 4
Under the hood, that's the same aggregated_metrics endpoint โ€” the assistant calls it, then reasons over the monthly numbers to answer the actual question you asked, instead of you scanning a table yourself.
Ask it to compare two segments, flag which months are underperforming last year, or summarize a segment's trend for an owner update, and it'll pull the data and do the synthesis in one step.
In short, direct integrations get the raw monthly rows, and MCP-connected assistants turn those rows into an answer.
๐Ÿ—๏ธ Why This Matters
Segments are flexible by design โ€” you can build one around almost any combination of listing attributes, tags, or performance thresholds. That flexibility is most useful when you can act on it programmatically, and aggregation was the missing piece.
Before this release, getting a segment-level number meant pulling every matched listing's data and rolling it up client-side โ€” doable, but it meant re-implementing logic Wheelhouse already runs.
Now the aggregation lives on our side. Combine this with the existing
GET /segments
and
GET /segments/{segment_id}/listings
endpoints and you have the full loop: define the filter, see what it matches, and get the rolled-up numbers for it โ€” all through the API.
And, with your MCP up-to-date, all you need to do is ask.
"Can you tell me how my Segment "New Owner, Occupancy Pacing Flag" is performing?"
๐ŸŒ Managed Listings & Currency: API Notes
Two parameters worth knowing about:
  • include_managed_listings
    (default
    true
    for RM API keys) โ€” a segment's filter is evaluated against listings you own
    and
    listings shared with you to manage. Set this to
    false
    to scope the aggregation to owned listings only. Channel integration keys default to
    false
    , since those act on the one account they're connected to.
  • currency
    โ€” since a segment itself has no inherent currency, monetary values default to the currency of the most common market among the segment's listings (falling back to USD). Pass an ISO-4217 code to convert to whatever currency your integration standardizes on.
๐Ÿš€ Getting Started
The endpoint is live now under your existing RM API key โ€” no new authentication or setup required.
  1. Call
    GET /segments
    to see the segments available for your account and grab a
    segment_id
  2. Call
    GET /segments/{segment_id}/aggregated_metrics
    to pull the rolled-up monthly performance
  3. Optionally narrow the response with
    dates
    , or adjust scope/currency with
    include_managed_listings
    and
    currency
If you're connecting through an MCP client, authenticate with OAuth through your client's sign-in flow โ€” the same credentials you use in the Wheelhouse app.
๐Ÿฅณ
Pro Tip!
Loop this endpoint across every segment returned by
GET /segments
to build a lightweight performance dashboard that stays current as your segment filters (and the listings they match) change โ€” no manual re-aggregation, ever.
๐Ÿ“ฝ๏ธ Watch a demo โ€” [TODO: confirm if a video walkthrough exists for this release]
Launch_  Webhooks
TL;DR โ†’
  • Wheelhouse can now push revenue intelligence, wherever you need it.
  • Three event types at launch โ€”
    recommendations.updated
    ,
    reservations.ingested
    , and
    flags.detected
    โ€” covering your entire portfolio from a single subscription.
  • Build instant owner alerts, a real-time booking feed for your data warehouse, or an auto-triage workflow for flagged listings.
  • Built-in reliability: a subscription that fails repeatedly pauses itself.
  • Demo Iink here
๐Ÿ””
What Shipped
Until now, keeping your system in sync with Wheelhouse meant polling โ€” calling an endpoint on a schedule and diffing the results to see what changed. Webhooks flip that: you register an HTTPS endpoint once, and Wheelhouse pushes events to it as they happen.
Setting one up is a single call: give us a URL and the event types you want, and you're covered. One subscription spans your entire portfolio โ€” every listing you own plus every listing shared with you to manage โ€” so there's no per-listing setup, and no need to maintain multiple subscriptions as your portfolio grows.
๐Ÿ“ฌ
The Three Events (For Now)
Every event at launch is scoped to a listing:
  • recommendations.updated
    โ€” a listing's price recommendation changed.
  • reservations.ingested
    โ€” new reservation data landed for a listing.
  • flags.detected
    โ€” a listing tripped one of Wheelhouse's flags.
All three are batched: instead of firing the instant something happens, events collect for 5 minutes, then go out together. So if pickup on 40 listings triggers
reservations.ingested
within the same few minutes, you get one delivery covering all 40 โ€” not 40 separate webhook calls to process.
๐Ÿง‘โ€๐Ÿ’ป
What You Can Build Now
A few things this actually looks like:
  • Instant owner alerts.
    Listen for
    flags.detected
    and fire off a Slack message or an owner email the moment a listing trips a flag โ€” instead of finding out at your next weekly check.
  • Live price sync to your own systems.
    Listen for
    recommendations.updated
    and push the new number straight into your PMS, channel manager, or internal dashboard โ€” no more polling on a schedule and hoping you didn't miss a change.
  • A booking feed for your data warehouse.
    Listen for
    reservations.ingested
    and stream new reservations into your BI tool or warehouse in near real-time, instead of running a nightly export job.
  • An auto-triage workflow for flagged listings.
    Listen for
    flags.detected
    , pull the listing's full KPI history, and auto-create a ticket or task for your RM team โ€” with the context already attached, so nobody's starting from a cold open.
  • A Telegram or Slack bot for your team.
    Route any of the three event types into a bot that posts to a channel, so pricing changes and new flags show up where your team is already working.
๐Ÿ”
Signing & Security
When you create a subscription, the response includes a signing secret โ€” and that's the only time you'll see it. Store it immediately; it can't be read back later. If you lose it, or it leaks, rotate it and you'll get a new one on the spot. Just know the old secret stops working the moment you rotate, so have your endpoint ready to verify against the new one before you do.
๐Ÿ› ๏ธ
Debugging & Reliability
Every delivery attempt is logged โ€” the HTTP status your endpoint returned, and the reason for any failure โ€” retained for 7 days and pullable up to 200 at a time. If your endpoint starts timing out or rejecting deliveries, this is where you go to see exactly what Wheelhouse sent and how your side responded.
And if your endpoint goes down for a while, Wheelhouse won't keep hammering it forever: a subscription that fails repeatedly pauses itself automatically. Once your endpoint's healthy again, re-enable the subscription and the failure count clears โ€” it starts fresh rather than counting against you from before the fix.
You're also in control directly: pause a subscription with
enabled: false
any time you need to do maintenance on your end, and resume it the same way when you're ready.
๐Ÿฅณ
Pro Tip!
Wire a
flags.detected
webhook into your workflow, and pair it with a Scoreboards call the moment it fires. The webhook tells you a listing just got flagged โ€” Scoreboards tells you where that listing actually ranks against the rest of your portfolio on the metric that matters, so you're not reacting to one signal in isolation.
๐Ÿ“ฝ๏ธ Demo here:
Launch_  Scoreboards
TL;DR โ†’
  • Scoreboards
    is a new endpoint that enable you to
    efficiently analyze your portfolio
    .
  • Scoreboards
    is designed for action: "Show me which listing have the most owner blocks, and prepare an email for each owner"*
  • With one command, you can get a ranked list of your portfolio properties for
    any metric
    (30+ options) and
    any window
    (next/trailing 7 days, year, etc)
  • You can request
    any filter
    (bedroom count, tag, etc) and/or
    any order
    ("Top 5," "15 worst") โ€” no extra calls.
  • We updated our
    MCP
    as well, meaning you can now
    ask your LLM,
    "What are my least occupied 2-bedroom listings in November?" and get a live, ranked answer in seconds.
  • ๐Ÿ“ฝ๏ธ Video linked here
๐Ÿ†
The Why
A few weeks ago, Wheelhouse added dozens of new performance stats.
And, with our RM API live, we wanted to make it easier to analyze your whole portfolio quickly, instead of pulling all data for your listings.
Therefore, we built a new endpoint we call "Scoreboards", so you send one request telling us which stat you care about, and we send back every listing you manage, ranked from best to worst on that stat โ€” in seconds.
Because it's part of our API, you can plug the results you get from Scoreboard straight into whatever tools you already use.
For example: pull the listings losing the most money to blocked dates, and automatically email their owners. Or pull the premium listings that haven't booked in a week, and flag them for a price change.
๐Ÿ”ง
How Scoreboards Works
Before Scoreboards, getting one stat across your whole portfolio meant looking it up one listing at a time, then doing the ranking yourself. That's fine for 5 listings. It's painful for 500.
Scoreboards does the ranking for you. You tell it which stat and which time period you want, and it hands back every listing you manage, already sorted from best to worst โ€” in one request.
๐Ÿ“ฝ๏ธ Watch a demo:
Learn more in this 4 minute video:
๐Ÿงฎ
Any Metric, Any Time Period
When you make the request, you only need to tell us two things: which stat you want (we call this the
metric
), and what time period to look at (the
window
).
There are more than 30 stats to choose from. Roughly, they fall into a few buckets:
  • Pricing
    โ€” your nightly rate and asking rate, plus a few variations of each.
  • Booking activity
    โ€” occupancy, nights booked vs. available, how far out guests are booking, how long they're staying.
  • Revenue
    โ€” total revenue, revenue lost to blocked dates, and RevPAR.
  • How you stack up locally
    โ€” occupancy compared to nearby listings.
  • Recent momentum
    โ€” how many nights you've picked up in the last week, month, etc.
For the time period, you can look forward or backward โ€” anywhere from the next/last 7 days out to a full year.
๐Ÿ”
Any Order, Any Filter
For API calls, you will get an array back you can easily sort. And, for chats (Claude, Open, Gemini) you can simply ask for a "top 5" or "worst 10" โ€” to return a specific number of listings.
Additionally, you can easily filter this list - narrowing your request down to one market, one bedroom count, or anything else you track, on your end.
If your listings are priced in more than one currency, Scoreboards can convert dollar-based stats (like ADR or revenue) into a single currency before ranking, so you're not comparing apples to oranges.
๐Ÿค–
Chat with your Portfolio
You can access Scoreboard via our MCP as well, enabling you to more quickly analyze your portfolio.
"What are my top 5 listings in terms of occupancy?"
Your LLMs will use Scoreboards and answers in seconds.
"Now pull me my bottom 5, and let me know their rank in the portfolio for days since last booking too."
We think this looks like the foundation of a better workflow: use Scoreboards to zoom out and find the listings that need attention, then zoom in to fix the ones that need it.
๐Ÿฅณ
Pro Tip!
Once Scoreboards has narrowed your portfolio down to a handful of listings worth a closer look, pull each listings full stats history to understand exactly what's going on before you make a change.
๐Ÿ“‹
Endpoint Details
You'll find more in our documentation, but for some quick hits, here's how you use this endpoint.
Request
GET /listings/kpis
Authorization: RmApiKey (send your key in the X-Integration-Api-Key header)
Query parameters
  • metric
    (string, required) โ€” the stat to return. Example:
    metric=occupancy_adjusted
  • window
    (string, required) โ€” the time period, as
    0_N
    (forward) or
    N_0
    (trailing). Enum:
    0_7
    ,
    0_14
    ,
    0_21
    ,
    0_30
    ,
    0_60
    ,
    0_90
    ,
    0_180
    ,
    0_365
    ,
    7_0
    ,
    14_0
    ,
    21_0
    ,
    30_0
    ,
    60_0
    ,
    90_0
    ,
    180_0
    ,
    365_0
    . Example:
    window=0_30
Full metric list:
  • Pricing:
    adr
    ,
    adr_fees
    ,
    asking_rate
    ,
    asking_rate_fees
    ,
    asking_rate_highest
    ,
    asking_rate_lowest
  • Booking activity:
    occupancy
    ,
    occupancy_adjusted
    ,
    nights_available
    ,
    nights_blocked
    ,
    nights_bookable
    ,
    nights_booked
    ,
    nights_calendar
    ,
    nights_percent_open
    ,
    bookings
    ,
    lead_time
    ,
    length_of_stay
    ,
    last_booked_days
    ,
    min_price_occurrence
  • Revenue:
    revenue
    ,
    revenue_available
    ,
    revenue_blocked
    ,
    revenue_fees
    ,
    revenue_fees_taxes
    ,
    revpar
    ,
    revpar_fees
    ,
    revpar_adjusted_occupancy
    ,
    revpar_adjusted_occupancy_fees
  • Forward-only (valid with
    0_N
    windows only):
    occupancy_neighborhood
    and its adjusted/percentile variants,
    revenue_score
  • Backward-only (valid with
    N_0
    windows only):
    pickup
    ,
    pickup_bookings
Ask for a metric/window pairing that isn't valid (e.g.
pickup
with a
0_N
window) and you'll get back a
400
rather than a bad number.
A listing with no data for the requested window still shows up, with
value: null
, so it sorts to the bottom instead of disappearing.
A listing with no stats generated at all is left out entirely.
Notes
  • Monetary metrics (
    adr
    ,
    asking_rate
    ,
    revenue
    ,
    revpar
    families) are stored in the listing's market currency, falling back to the listing's own currency if it has no market.
  • This endpoint pulls from the same underlying data as
    GET /listings/{listing_id}/kpis
    โ€” so the two will always agree.
  • Use
    GET /listings/{listing_id}/kpis
    when you want every metric and window for a single listing; use Scoreboards when you want one metric and window across your whole portfolio.
Listing Optimizer (2)
TL;DR โ†’
  • We've partnered with Otamiser to bring you a free Airbnb listing audit tool
  • The listing audit tool scores your listing title, content, photos, reviews, availability settings, booking pace, and more ranking signals Airbnb uses to decide who guests see first
  • This is 100% free to use โ€” our teams cover the cost.
  • Check it out on Otamiser
  • And, Bart (the awesome CEO of Otamiser) built a demo video here.
  • Simply add any Airbnb listing URL and get a detailed breakdown of where your profile has room to improve
๐Ÿ” Why Listing Optimization Matters Alongside Pricing
Wheelhouse handles the revenue management side of your business โ€” but Airbnb's algorithm is weighing a lot more than your nightly rate when deciding who shows up on page one.
Your listing title, photo quality, description strength, review velocity, and availability configuration all factor into how Airbnb ranks and distributes your property to potential guests. A perfectly priced listing that ranks poorly is leaving money on the table โ€” and most of those ranking signals are fixable once you know where the gaps are.
That's the problem AutoRank by Otamiser was built to solve. Their tool audits the listing-level factors that influence your Airbnb ranking, and we've partnered to make it available to Wheelhouse users at no cost.
๐Ÿงฎ What Gets Scored
Drop in any Airbnb URL and the tool evaluates:
  • Listing title โ€” how well-optimized your title is for Airbnb's search ranking algorithm
  • Listing content โ€” whether your description is structured and written in a way that drives visibility and conversion
  • Photo quality and coverage โ€” whether your images are earning their spot (quality, count, and composition all matter)
  • Reviews โ€” how your review volume and recency stack up as a ranking signal
  • Availability settings โ€” how your calendar configuration affects your search visibility
  • Booking pace โ€” how demand signals around your listing influence where Airbnb surfaces you to guests
You walk away with a clear, scored breakdown of where your listing profile is strong and where it has room to improve.
๐Ÿช„ How to Use It
Screenshot 2026-07-27 at 3
Getting started takes about 60 seconds (Video proof here!)
  • Grab any Airbnb listing URL from your portfolio
  • Head to Otamiser
  • Drop in the URL and run the audit
  • Review the breakdown and start optimizing
No signup required to run the audit. It's fully standalone and free.
๐Ÿฅณ Pro Tip! Start with your highest-traffic listings
If you're managing a large portfolio, start with your top-revenue properties or those in your most competitive markets. That's where small ranking improvements compound fastest โ€” and where a stronger listing profile has the most to add on top of your pricing strategy.
New API Endpoints (2)
TL;DR โ†’
  • You can now create Dynamic Sets entirely through the RM API
  • A new
    GET /segments/{segment_id}/aggregated_metrics
    endpoint returns monthly performance rolled up for any saved segment
  • New notification_settings endpoints let you read and update your alert preferences programmatically
  • We've raised the default rate limit for RM API keys to 60 requests/minute
  • With this release, every known gap between the Wheelhouse app and the RM API is closed
๐Ÿงฉ Dynamic Sets, End to End
Dynamic Sets (comp sets built from real market listings) have been available in the app for a while โ€” now you can build the entire workflow through the API, from search to upgrade.
Here's the full lifecycle:
  1. Find candidates
    โ€” call
    GET /sets/candidates
    with either a
    lat
    /
    long
    /
    radius
    or one or more
    market_ids
    . Results come back nearest-first, each with trailing-year performance metrics, so you can filter by bedrooms, bathrooms, room type, and occupancy before you ever create the set.
  2. Create the set
    โ€” take the
    listing_id
    s you want and pass them to
    POST /sets
    . The set is created on the free plan, with your chosen listings added as active members.
  3. Upgrade it
    โ€” call
    POST /sets/{set_id}/upgrade
    to purchase the paid Dynamic Sets plan for that set, which unlocks its KPI endpoints: aggregated_metrics, time_series, distribution, and report.
Say you manage a portfolio of 3BR cabins near a specific trailhead and want a comp set for one of them. You can now search candidates by lat/long/radius, filter to
min_bedrooms: 3
, review trailing-year occupancy on the results, add the ones you want, and upgrade the set โ€” all without leaving your integration.
๐Ÿ“Š Segment Aggregated Metrics
Segments (your saved, dynamic portfolio filters) already return listing-level data via the API. Now you can also pull rolled-up performance for the whole segment.
GET /segments/{segment_id}/aggregated_metrics
returns monthly metrics aggregated across every listing the segment's filter currently matches.
This is the same aggregated view you'd see reporting on that segment in-app โ€” now available directly to your integration, so you can more easily build dashboards or alerts on top of any segment.
๐Ÿ”” Notification Settings, Programmatically
You can now read and manage a user's alert preferences without going through the app:
  • GET /notification_settings
    returns the event/channel pairs a user currently has enabled โ€” the same settings that control what shows up via
    GET /notifications
    and email.
  • PUT /notification_settings
    lets you enable or disable specific alerts. Only the event/channel pairs you include are affected โ€” everything else is left as-is.
Supported events include:
  • price_posting_error
  • market_report_updated
  • reminder
  • sub_user_invite
  • new_listing_created
  • report_shared
  • report_comment_reply
  • report_comment_mention
  • comp_set_v2_shared
If you're building a custom notification center or want to route specific alerts to your own system, this is the endpoint pair for that.
๐Ÿš„ A Higher Default Rate Limit
We've raised the default rate limit for RM API keys to
60 requests/minute
. If you're running higher-throughput integrations โ€” syncing large portfolios, polling multiple endpoints, or backfilling historical data โ€” this gives you meaningfully more headroom out of the box.
Getting Started
If you're using the RM API directly, generate or check your API key from your Wheelhouse account under "Api Key," and start with
GET /sets/candidates
or
GET /segments
to see what's available for your account.
If you're connecting through an MCP client, authenticate with OAuth through your client's sign-in flow โ€” the same credentials you use in the Wheelhouse app.
๐Ÿฅณ
Pro Tip!
Pair the new
aggregated_metrics
endpoint with your existing Segments to build a lightweight performance dashboard for any saved filter โ€” no need to pull and re-aggregate listing-level data yourself.
Load More
โ†’