Skip to main content

Skills in Insights

How to save a recurring analysis as a reusable Skill, run it by name anytime, and build one from scratch or from an uploaded file.

Written by Ashley Dehertogh

Skills let you save an analysis you run often as a reusable shortcut, so you can trigger it again anytime without retyping the same request. Once you've saved a Skill, run it by typing its name in chat, opening it from the Skills page, or picking it from the actions menu.

What is a Skill?

A Skill is a saved set of instructions for the Agent. Instead of writing out the same multi-step request every time, you save it once, give it a short name, and run it whenever you need that analysis again.

Skills work well for anything you find yourself asking for on a repeating basis, for example:

  • A daily or weekly briefing — pick-up, pacing, or performance vs. plan, formatted the same way every time

  • A review that references a file you upload — like a list of your corporate accounts and their negotiated terms, checked against current production each time

  • An ongoing tracker — a running comparison you update on a regular cadence, like current performance against a prior period or against a set benchmark

  • A configuration or data quality check — like comparing your rates against your configured price floors and ceilings to catch anything out of line

  • A guided lookup — an analysis that asks you a quick question first (like which property or date range) before running

Creating a Skill

There are three ways to create a Skill:

  1. Create with AI. Ask the Agent to turn a conversation or a description of what you want into a Skill. This is the fastest way to start — the Agent will draft the name, description, and instructions for you.

  2. Write your own. Go to Skills in the left-hand menu and select New skill > Write your own. You'll set a name, a short description, and the instructions the Agent should follow each time the Skill runs.

  3. Upload a skill. Select New skill > Upload a skill to bring in instructions from a file.

Every Skill has:

  • A name (up to 48 characters) — how it appears on the Skills page

  • An identifier (up to 48 characters) — the short handle you type to run it, like /morning-briefing

  • A description (up to 1,024 characters) — a one-line summary of what it does

  • Instructions (up to 20,000 characters) — the step-by-step process the Agent follows, written in plain language

A detailed, multi-step analysis (several metrics, edge cases, and a synthesis step) can add up faster than expected — write instructions as tightly as the analysis allows, and trim restated context or redundant phrasing if you're approaching the limit.

Skills you create are visible only to you — no one else on your team will see them on their own Skills page.

A few things that make a Skill's instructions more reliable:

  • Be specific: name the exact fields, time ranges, groupings, and metrics you want, rather than describing them loosely

  • If the Skill needs something only you would know, like a property or a date range, write the instructions to ask for it upfront

  • For a multi-step process, write it as numbered steps so the Agent follows the order you intend

  • State the output format you want (a table, a short narrative, a specific set of sections) so results come back consistent every time

  • Give each Skill one clear job. A Skill that tries to cover several unrelated questions at once (say, pick-up, corporate accounts, and pricing checks all in one) tends to run slower and return murkier results than a few focused Skills you run separately, one for each question

A Skill is the right shape for a request with a fixed, repeatable structure. If what you're asking tends to change shape each time, or the analysis grows to cover more ground than a single saved set of instructions can hold, it's often faster to work it through directly in chat instead, where you can follow the conversation wherever it leads, or to turn it into a dashboard if what you really want is an always-current, multi-page view rather than a single on-demand run.

While you're building a Skill, run it from its page to see how the Agent interprets the instructions, then adjust and run it again until it's doing what you want.

Running a Skill

Once a Skill is saved, you can run it any of these ways:

  • Type its name in chat — start typing / to see a list of your Skills, or type the identifier directly (e.g. /morning-briefing)

  • From the Skills page — open the Skill and select Run

  • From the actions menu — select the + icon next to the chat input, then choose the Skill

If a Skill is written to ask for input first (like a property name or date range), the Agent will prompt you for it before running the rest of the analysis.

You can also narrow a Skill on the fly without editing it. Anything you type when you run it, like a specific property or a shorter date range, is combined with the Skill's saved instructions, so the Agent applies both together. For example, running /morning-briefing for the Austin property uses the Skill as written while giving it the one piece of information it would otherwise ask for.

Example: a daily morning briefing, in full

Skill instructions can be as detailed as you need them to be. Here's a real one, written for a single property, exactly as it was saved. It's long because it's doing real analytical work every time it runs: risk classification, pattern detection, and a guardrail against overstepping into pricing advice. This is the level of detail that makes a Skill worth saving instead of re-explaining from scratch every morning.

You don't need to read every line to get the idea, the takeaway is in the intro above this callout. Skim the numbered steps for a sense of the structure, or jump to the "corporate account review" example below if you'd rather see a shorter one.

Name: Morning briefing

Identifier: /morning-briefing

Description: Produces a daily morning briefing for a property covering yesterday's pick-up, forecast/budget attainment risk, peak/valley pick-up quality, and overall OTB state, synthesized into a scannable narrative.

Instructions:

When this skill is invoked, ask which property the briefing is for if not already given in the request (e.g. "/morning-briefing for Austin"), and use anything already given. If the name given is ambiguous or matches more than one property, confirm the exact property before proceeding rather than guessing. Always scope every query below to this property.Definitions to apply exactly:
- OTB (on the books) = current confirmed Units, ADR, and Revenue for the stay period, as of today.
- STLP (same time last period) = last year's OTB snapshot at the same relative point in the booking curve as today's OTB, used for pace comparison. Always use STLP for pace, never a prior-period actual.
- Pace Trend = whether current OTB is ahead of, at, or behind STLP for the same stay period.
- Gap to plan (Forecast or Budget) = Plan Units - OTB Units, and Gap % = Gap / Plan Units.Run the following analysis, in order:1. Yesterday's pick-up
Use the Pick-Up topic. Filter Update Date to yesterday. For the Stay Date filter, do NOT limit to the current month or a short forward window, set Stay Date to start from yesterday's date and extend five years into the future, so every stay date that received pick-up activity yesterday is captured, however far out it lands. Pull Units Pick-up, ADR Pick-up, and Accommodation Revenue Pick-up (net of cancellations), broken out by Stay Month (or Stay Date if pick-up is concentrated in the near term) so it's clear which future periods picked up. Include Day Use Pick-up separately if non-zero (per Day Use routing rules, never blend into Units Pick-up). If yesterday had zero pick-up across every stay date, say so plainly as the finding itself (a quiet day is a real result, not missing data) and skip straight to step 4 for the current state snapshot, since steps 2 and 3 have nothing to analyze without any pick-up to evaluate.2. Forecast & Budget attainment risk
Use the Forecasts & Budgets topic for the stay period(s) that actually picked up in step 1 (typically current month + next 1-2 months, but follow whatever step 1 shows, if pick-up was concentrated further out, extend this analysis to match). Pull User Forecast and User Budget for Units/ADR/Revenue, alongside OTB (current) and OTB STLP (these are non-past/straddling periods, always use STLP, never Previous, unless the user has explicitly asked for finalized actuals).For each stay month, compute Gap % to Forecast and Gap % to Budget (see definitions above), and Pace Trend against STLP, then use them to classify attainment risk:Apply this heuristic risk tiering (state explicitly that this is a directional heuristic, not a statistical probability, Insights has no predictive attainment model):
- Low risk: gap to plan < 15% AND pacing at or ahead of STLP
- Moderate risk: gap to plan 15-30%, OR pacing behind STLP by up to 5%
- High risk: gap to plan > 30% AND pacing behind STLP by more than 5%
- If gap to plan is >30% but pacing is ahead of STLP (a mismatch not cleanly covered by the tiers above), classify as Moderate and explicitly note the large percentage gap is likely a normal function of how much of the booking curve/lead time has elapsed, tempered by the favorable pacing signal, do not call it High risk when pacing is ahead.State the risk tier per stay month per plan type (Forecast, Budget) explicitly in the response (e.g. "[Stay Month]: Moderate risk to Budget, Low risk to Forecast").Frame yesterday's pick-up volume against these gaps, e.g., "yesterday's pick-up closed roughly X% of the remaining gap to budget for [Stay Month]", using only the actual gap and pick-up figures already retrieved; do not invent a projected attainment date or precise probability.3. Peak/valley pick-up pattern (internal analysis, summarize conclusions only, never list raw dates to the user)
Goal: determine whether yesterday's pick-up landed on high-occupancy ("peak") dates, low-occupancy ("valley") dates, or the middle of the curve, and at what rate relative to what's already on the books for those same dates.Steps: a. From the Bookings topic, pull daily Occupancy % (or Units against Capacity) by Stay Date for the property across the same stay-date window identified in step 1 (yesterday's date forward, do not artificially cap this to a short window if step 1 showed pick-up landing further out). b. Identify peak dates: occupancy >= 90%. c. Identify valley dates: the lowest-occupancy dates in that same window (e.g. bottom decile, or a low absolute threshold such as <40% if the property's occupancy distribution warrants it, use judgment based on the data's actual range). d. From the Pick-Up topic, pull yesterday's net Units Pick-up and ADR Pick-up by Stay Date for the same window. e. Cross-reference: for peak dates, sum pick-up units and compare pick-up ADR to the current on-books ADR for those same dates (from Bookings topic). Do the same for valley dates.Report only the takeaways, not the underlying date list:
- Did meaningful pick-up land on peak dates? If so, state the volume and whether the pick-up rate is at, above, or below the current on-books rate for those dates. Flag, neutrally, without recommending any pricing action, if pick-up on already-high-occupancy dates is coming in below the current book rate, since that's discounting on dates already in demand.
- Did meaningful pick-up land on valley dates? If so, call this out positively (it smooths the occupancy curve) and note the rate secured there relative to the current on-books rate for those dates.
- If pick-up was concentrated in the middle of the curve rather than at either extreme, say so briefly and do not force a peak/valley narrative.
- Never recommend or imply a pricing/config change from this pattern, describe it descriptively only, per pricing guardrails. Do not use "reverse yielding" or causal language.4. Overall state of affairs
Use the Bookings topic for a current OTB snapshot of the property (Units, ADR, Accommodation Revenue, Total Revenue) for the current month and the next 1-2 months, with STLP comparisons (classify each stay period as straddling/future per the topic's comparison rules). Break out by Segment or Macro Segment to spot where the property is over- or under-performing relative to STLP.5. Synthesize the narrative (core value of the briefing, do not skip)
- Lead with each stay month's attainment risk tier (Forecast and Budget) and whether yesterday's pick-up is, directionally, narrowing or widening those specific gaps.
- Weave in the peak/valley finding from step 3 as context on pick-up quality, not just volume, e.g. note if pick-up is filling valleys (positive) or discounting peaks (worth a closer look), without prescribing action.
- Call out 1-2 specific bright spots (segments/periods pacing ahead of STLP or budget, or lower-risk attainment tiers) and suggest where that success might be replicable, only if the data supports it.
- Call out 1-2 specific soft spots (higher attainment-risk periods, or segments pacing behind STLP/forecast/budget) as areas that may need a strategy revisit. Do not prescribe specific pricing or config changes, describe the gap and risk tier, and suggest it's worth a closer look.
- Keep the whole briefing tight and scannable, short sections or bullets, not a sprawling report. This is a daily habit, not a deep-dive.Do not add period-over-period comparisons beyond what's specified above. Do not use Previous measures for any straddling or future period, only STLP. Follow all standard terminology rules (Units vs Occupancy, User-set vs System-set, etc.) and the Bookings/Pick-Up topic routing and Day Use rules throughout.

Typing /morning-briefing again the next day, for the same property or a different one, runs this exact process from scratch. Everything above, the risk thresholds, the peak/valley logic, the synthesis rules, only had to be written once.

Example: a corporate account review built around an uploaded file

Skills aren't limited to instructions you type. Insights doesn't know what rate you've contracted with a corporate account, what upgrade eligibility you've promised, or what concessions are on the table, that's information that only exists in whatever file your team already tracks it in. Upload that file as part of the Skill, and the Agent can check it against real production data every time it runs.

Name: Corporate account review

Identifier: /corporate-account-review

Description: Reviews a property's corporate accounts against a customer-uploaded file of contracted rates and terms, giving a bird's-eye read on production trends, cancellation risk, and rate compliance across the whole account list.

Instructions:

When this skill is invoked, ask for the review period if not already given (default: this year, filtered by Stay Date, broken down by month), and ask for the corporate accounts file if not attached. Accept an optional property filter; use anything already given.Read the uploaded file as the account list, in whatever layout it's actually in - not a fixed template, and it may vary row to row. Per account, identify what's given: name, contracted rate, rate scope, upgrade eligibility, other concessions, contract stay-date range, contract end date. If something's genuinely unclear or missing, ask before proceeding with that account - unless the file itself gives an explicit override (e.g. a note that a company name appears under multiple production values and should be combined) - follow that directly, it's already resolved. If a rate scope doesn't state "run of house" explicitly, treat it as a specific room type and confirm the exact match against real property data before using it - don't assume the file's spelling matches.Definitions to apply exactly:
- Contract stay-date range (per account) = the stay dates the contracted rate applies to, as stated in the file. An RFP-negotiated rate commonly applies to stay dates one or more years beyond the contract's own start/end dates (e.g. a rate negotiated in 2026 for contract year 2027 can validly cover stay dates into 2028+) - never assume the range matches the contract's own dates. If not stated, default to the contract's own dates as the range, say so plainly, and ask if that default seems inconsistent.
- TRevPAR (per account, per month) = Total Revenue / available room nights for that stay month.
- Achieved ADR (per account, per month) = Accommodation Revenue / Units, blended and unfiltered across all bookings and room types - a directional check, not the exact overnight-only figure the contracted rate represents (see Rate Gap %).
- Rate Gap % (per account, per month) = (Achieved ADR - Contracted Rate) / Contracted Rate. Flag a notable gap in either direction, never just negative - the contracted rate is specifically an overnight ADR, while Achieved ADR above is blended/unfiltered, so a gap either way can simply reflect that difference rather than true under- or over-performance. A gap worth flagging always needs a closer look (booking mix, rate availability, or other products blending in - see deep-dive (e) in Synthesize), not a standalone conclusion in either direction.
- Cancellation rate (per account) = cancelled units / total booked units, for the stay period in scope.
- Ancillary share of Total Revenue (per account) = Ancillary Revenue / Total Revenue, for the review period. Total contribution isn't just accommodation revenue/ADR - an account with modest room revenue can still be a strong contributor if it drives disproportionate ancillary spend; a notably high ancillary share is a distinct strength, not a footnote to accommodation revenue.
- Volume Commitment attainment (per account) = actual Units for the review period / the file's stated Volume Commitment (Room Nights/Year), as a %. Only compute if the file provides this field for the account. This is distinct from YoY - an account can hit its committed volume while declining YoY, or miss its commitment while still growing.
- Account concentration = each account's share of total Units (or Revenue, state which) across all accounts on the file, for this property, for the review period. Used once, in Synthesize, not per-account elsewhere.QUERIES (run exactly these 3, each once - not per account, not per batch)Every query below groups by Company Name (or Channel Name if an account is channel-tracked - see step 1) alongside the query's own time grain - no other dimension. Do not add Segment/Macro Segment or Inventory Name/Group: which rate plan/segment the business landed in, and inventory-scoped ADR, are both distinct deeper questions, out of scope here (see the Achieved ADR definition and deep-dive suggestions (d)/(e) in Synthesize).1. Monthly production, this year and last year (Bookings topic, group by Company Name x Stay Month, for this year and the same query re-run for last year as the YoY benchmark): Units, ADR, Accommodation Revenue, Ancillary Revenue, Cancellation Revenue, Total Revenue, TRevPAR, Avg Length of Stay, Avg Booking Window (lead time). Confirm the exact prior-year date range before running - don't assume it returns automatically; if the prior-year pull comes back empty or partial, say so explicitly rather than treating a same-period comparison as unavailable without checking why (e.g. wrong Stay Date year filter, or Update Date excluding out-of-window activity).
2. Day-of-week production, this year (Bookings topic, group by Company Name x Day of Week): same metric set as query 1, to show weekday-heavy vs. weekend-heavy booking patterns per account.
3. Booked and cancelled units, last 5 years, stay dates in the review period (Pick-Up topic, group by Company Name): the base for Cancellation rate. A 5-year Update Date floor avoids under-counting cancellation activity logged well before the stay date.Before running, confirm the exact account name matches once up front - not once per account. If a query's result exceeds ~100 rows and can't be read exhaustively, split by Company Name into two narrower queries and re-run rather than summarizing a heavily sampled result - but this should be rare at 3 fixed queries covering the whole account list at once, not the routine case.Do not approximate, estimate, or substitute a simpler proxy for any defined metric. If query 1's prior-year pull genuinely returns nothing for an account after confirming the date range is correct, state plainly that YoY comparison is unavailable for that account and say why - never fabricate a YoY figure.ANALYSISUsing the 3 queries above, for every account on the file:1. Production and YoY context
Pull each account's row(s) from query 1. If Company Name doesn't capture an account (zero rows after a case-insensitive check - case and minor spelling/punctuation differences between the file and production are common, never grounds alone to call an account zero-production), try Channel Name next, also case-insensitively, before concluding there's no match; confirm the exact matching value either way. If a clearly distinct, separately-named company shows up alongside a close match (e.g. a differently-suffixed entity), don't blend it in without a quick gut-check - but this is a light sanity check for this pass, not an exhaustive dedup exercise.Report Units, Total Revenue, Accommodation vs. Ancillary Revenue split, Ancillary share of Total Revenue, and TRevPAR, by month, this year vs. last year. State the YoY change plainly - up, down, or flat, with the actual %. If Ancillary share is notably high, say so directly - this is a total-contribution story, not just a room-revenue one, and an account can be a strong contributor even with modest accommodation revenue/ADR alone.2. Booking pattern
From query 1, report Avg Length of Stay and Avg Booking Window by month. From query 2, report the day-of-week distribution - weekday-heavy, weekend-heavy, or mixed. State plainly what kind of business this is: short-lead, short-stay weekday volume reads differently than long-lead, longer-stay weekend business.3. Cancellation rate
From query 3, compute Cancellation rate for the review period. Report separately from volume - a high-volume account with a high cancellation rate is a different risk than one with steady, low-cancellation production. Note any single-month spike distinctly from a sustained trend.4. Rate compliance
For each account with a contracted rate on file, compute Achieved ADR and Rate Gap % by month from query 1. Flag a notable gap in either direction (see Rate Gap % definition) - negative separately from a plain volume shortfall, they're different problems - and note whether it's a one-month anomaly or persistent.5. Synthesize (core value - do not skip)
- Lead with one line: accounts reviewed for this property, and account concentration (e.g. "top 5 accounts = 62% of this property's corporate production" - flag if notably concentrated, since a shock to 1-2 of these accounts would be disproportionately felt).
- Assign every account a tier - this report is as much about showing what's working as what isn't, don't only list problems:
  - Doing well: growing or flat YoY, no notable rate gap, low/no cancellation concern, meeting or exceeding Volume Commitment where stated, or a notably high Ancillary share of Total Revenue (this account's total contribution goes well beyond its room revenue alone - call this out even if accommodation revenue/ADR alone looks unremarkable). Name these accounts plainly, don't bury them behind a bare count.
  - Watch: one moderate signal (e.g. a single-month rate gap in either direction, a cancellation uptick, YoY roughly flat) - not urgent, but worth keeping an eye on.
  - Needs attention: a persistent or worsening rate gap in either direction, a high/worsening cancellation rate, a notable YoY decline, missing Volume Commitment by a wide margin, or a combination.
- For every Watch or Needs attention account, state the specific issue with actual figures and whether it's a one-off or a sustained trend - never a vague "needs attention." For every Doing well account, a one-line reason is enough (e.g. "+12% YoY, no rate gap, low cancellation").
- For each Watch or Needs attention account, suggest which deep-dive would clarify it, if any of these fit - this pass gives the bird's-eye view, not the resolution: (a) stay-date compression - how often the account books over-compressed (high-occupancy) vs. under-compressed dates, and over which periods; (b) lead time by stay period - whether booking pace concentrates around specific stay dates; (c) inventory mix - which room types the account actually books vs. its contracted scope; (d) rate plan/segment mix - whether the account's business is landing in its expected rate plan/segment or elsewhere; (e) rate gap driver - for a notable Rate Gap % in either direction, whether it traces to booking mix, rate availability, or other products blending into Achieved ADR. Name the specific suggestion per account, don't offer all five generically to every one.
- Never recommend a specific rate or concession decision - this surfaces what's happening against current terms, not what to offer next. Say "worth a closer look," not what the outcome should be.
- If every account is Doing well, say the book looks stable rather than manufacturing a Watch/Needs attention flag.Never invent a contracted rate, concession, or stay-date range not in the file. Never compare across properties unless the file itself spans multiple properties for the same account. No period comparisons beyond month-over-month and YoY as defined above.

Running the Skill again later in the year checks the same accounts against fresh production data and an updated monthly trend, using the same uploaded file as the reference. If your negotiated terms change, upload the updated file and run it again.

Example: a GM brief run across multiple properties

A Skill doesn't have to be scoped to one property. If you already send the same fixed report to a GM every week, one for each property you manage, a Skill can run that exact sequence for whichever property you name each time:

Name: GM weekly brief

Identifier: /gm-weekly-brief

Description: Produces a fixed 7-part weekly brief for a single property (OTB vs. STLY, segment breakdown, channel comparison, forward view), scannable and ready to hand off to a GM.

Instructions:

When this skill is invoked, ask for the property name if not already given. Scope every part of this brief to bookable and overnight revenue only, exclude Day Use and non-overnight revenue throughout. This is the standing weekly GM document for a single property, run once per property, it is not the portfolio-wide Weekly Revenue Meeting Pack, which compares multiple properties in one view, run this skill once per property instead.Definitions to apply exactly:
- OTB (on the books) = current confirmed Units, ADR, and Revenue for the stay period, as of today.
- STLY (same time last year) = the equivalent OTB figures for the same stay period one year earlier, on a same-point-in-booking-curve basis, not simply the final actuals for that period last year.
- STLP (same time last period) = last year's OTB snapshot at the same relative point in the booking curve as today's OTB, used for pace comparison. Always use STLP for pace, never a prior-period actual.
- Pace = whether current OTB is ahead of, at, or behind STLP for the same stay period.
- Delta (segment breakdown) = this period's OTB minus STLY, per segment, in both units and percentage terms.Produce the following 7 parts, in order, for the named property. Lead the entire brief with one line: overall Pace (ahead of, at, or behind STLP) for the property this week.1. Overall OTB vs. STLY, summarized in roughly 100 words. If STLY is unavailable (e.g. the property wasn't open last year), say so and substitute STLP for the comparison instead, note explicitly which basis is being used.
2. The same OTB vs. STLY comparison broken into a table (Units, ADR, Revenue), with a 50-word brief above it.
3. Segment breakdown: OTB, STLY, and Delta by segment, with a 50-word brief and a table. If a segment has no STLY data, exclude it from the delta calculation and say so rather than showing an undefined percentage.
4. Direct vs. indirect channel comparison on OTB and Pace against STLP.
5. A table of in-month pick-up and cancellations.
6. Synthesize (core value of the brief, do not skip): three good points about the month, and one point to work on, stated plainly using the actual figures from parts 1-5, not softened into a single blended takeaway. Lower confidence in this section if STLY had to be substituted with STLP for this property, or if the current week falls in a low-booking-volume period where week-to-week figures are noisy. This brief reports the month's shape for the GM to act on, it doesn't prescribe a pricing or operational decision itself.
7. A forward view from next month through the end of the calendar year.Keep each part's brief text close to its stated word count, this is meant to be a scannable weekly document, not an extended narrative. After producing all 7 parts, ask if the user would like this saved as a dashboard so it can be reused without re-running the Skill each week, or sent as-is. Don't build the dashboard unprompted, only offer it. Do not invent OTB, STLY, or pick-up figures for any period the data doesn't cover.

Run /gm-weekly-brief for one property, then run it again immediately for the next in a new chat, same structure, same word counts, different property each time.

Editing and managing Skills

Go to Skills in the left-hand menu to see everything you've created — name, identifier, and when it was last updated. Open a Skill to view or edit its instructions, or to run it directly.

Note: Asking the Agent to revise a Skill mid-conversation currently creates a new Skill rather than updating the existing one. To edit a Skill in place, open it from the Skills page and edit it directly.

Questions?

If you have any questions or want help exploring this, click the ? icon at the bottom of the left-hand menu — we're happy to help.

Did this answer your question?