agentsclimarketplace

Stayingapi portfolio feed

Skill stayingapi/travel-skills/skills/stayingapi-portfolio-feed

Portable AI-agent skills (SKILL.md) for accommodation search, availability, pricing, cross-OTA comparison & reviews via StayingAPI. Works with Claude, MCP and more. MIT-0.

Install
npx -y skills add stayingapi/travel-skills --skill stayingapi-portfolio-feed

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

A daily digest across a saved set of listings — price, rating and recent reviews per listing in one report. Powered by the StayingAPI REST API / MCP server.

The file declares its own license as Proprietary — see https://stayingapi.com/terms. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.5 KB, as published. Nobody here has run it

Portfolio price & occupancy feed

Owners and property managers watch a fixed set of listings — their own units, or the ones a client cares about — and want one daily readout instead of opening each app. This feed takes your saved "platform:listingId" set, and for each listing pulls full detail (GET /v1/listing/{platform}/{id}), a real nightly price for your dates (GET /v1/price) and the latest reviews (GET /v1/reviews), then consolidates everything into a single report you can drop into Slack, email, a Google Sheet or a BI tool — the same shape across Airbnb, Booking.com and Vrbo.

Steps

  1. List the portfolio and the dates — Set your saved listings as "platform:listingId" pairs plus the check-in / check-out to price against. A Code node fans the set out into one item per listing.
  2. Pull detail, price and reviews per listing — For each listing the pipeline calls GET /v1/listing/{platform}/{id} (name, rating, amenities), GET /v1/price (a real nightly + total for your dates) and GET /v1/reviews (the latest few).
  3. Consolidate into one digest — A Code node correlates the three responses per listing, computes the portfolio median nightly, and formats one report — price, rating and recent-review count per listing.
  4. Deliver daily — Post the digest to Slack or email, or append rows to a Google Sheet / BI feed for tracking over time. Runs on a daily schedule.

When to use this

A host, owner or property manager wants one daily readout across a fixed set of listings — their own units or a client's — instead of opening each platform's app.

How to do it

For each saved platform:listingId in the set, make three calls and join them:

  1. GET /v1/listing/{platform}/{id} (pass checkIn/checkOut to embed a best-effort price) → name, guestRating, ratingScale, amenities.
  2. GET /v1/price?platform=&listingId=&checkIn=&checkOut= → a real nightlyPrice + totalPrice for the exact dates.
  3. GET /v1/reviews?platform=&listingId=&limit=5&sort=recent → the latest guest reviews.

Roll one row per listing (price, rating, recent-review count) plus a portfolio median into a single digest. Use @stayingapi/sdk (scout.listing, scout.price, scout.reviews) or the REST endpoints directly.

Reliability

Live calls run asynchronously — the SDK auto-polls; raw REST callers poll GET /v1/jobs/{id}. A blocked or empty call is charged 0 and simply shows as "price n/a" for that listing, so one bad platform never sinks the whole digest. Current per-call credit costs are on the pricing page.

Example — REST

# For each saved listing: detail, a real price for your dates, and recent reviews.
curl -sS "https://api.stayingapi.com/v1/listing/airbnb/42307961?checkIn=2026-07-13&checkOut=2026-07-20" \
  -H "Authorization: Bearer $STAYINGAPI_KEY"
curl -sS "https://api.stayingapi.com/v1/price?platform=airbnb&listingId=42307961&checkIn=2026-07-13&checkOut=2026-07-20" \
  -H "Authorization: Bearer $STAYINGAPI_KEY"
curl -sS "https://api.stayingapi.com/v1/reviews?platform=airbnb&listingId=42307961&limit=5&sort=recent" \
  -H "Authorization: Bearer $STAYINGAPI_KEY"

Example — @stayingapi/sdk

import { StayingApiClient } from '@stayingapi/sdk';

const scout = new StayingApiClient({ apiKey: process.env.STAYINGAPI_KEY });

const portfolio = [
  { platform: 'airbnb', listingId: '42307961' },
  { platform: 'booking', listingId: 'abramovic2' },
];
const dates = { checkIn: '2026-07-13', checkOut: '2026-07-20' };

const digest = [];
for (const { platform, listingId } of portfolio) {
  const [{ data: listing }, { data: price }, { data: reviews }] = await Promise.all([
    scout.listing(platform, listingId, dates),
    scout.price({ platform, listingId, ...dates }),
    scout.reviews({ platform, listingId, limit: 5, sort: 'recent' }),
  ]);
  digest.push({
    name: listing.name,
    nightly: price?.nightlyPrice ?? null,
    rating: listing.guestRating,
    recentReviews: reviews.length,
  });
}
console.table(digest);

Async & partial failures

A live call that has to scrape returns 202 + a jobId; poll GET /v1/jobs/{jobId} (free) until data.status is completed, then read data.result. The @stayingapi/sdk auto-polls. On a fan-out, check meta.partial and meta.platformResults[] — report what succeeded and note any meta.warnings[].

Credit awareness

Costs are per-endpoint and metered by result (v3). Failed, empty and blocked calls are never billed, and sandbox (stay_test_) calls are always free. The exact, current costs live only in https://stayingapi.com/pricing and the machine-readable https://api.stayingapi.com/openapi.json — read them there, don't assume.


Get your free key → https://stayingapi.com/signup · Docs: https://stayingapi.com/docs · Workflow: https://stayingapi.com/workflows/portfolio-feed

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.