Vehicle depreciation and value retention analysis. Triggers: "depreciation rate", "value retention", "residual value", "how fast is it losing value", "which cars hold value", "EV depreciation", "price trend over time", "brand value ranking", "depreciation curve", "residual forecast", "MSRP parity", "price over sticker", "incentive effectiveness", "geographic value variance", "which states have higher prices", residual value forecasting, segment value comparisons, brand retention rankings, MSRP-to-transaction price tracking across new and used vehicles.
Date anchor: Today's date comes from the
# currentDatesystem context. Compute ALL relative dates from it. Example: if today = 2026-03-14, then "prior month" = 2026-02-01 to 2026-02-28, "current month" (most recent complete) = February 2026, "three months ago" = December 2025. Never use training-data dates.
get_sold_summaryparameter safety:
- Always set
inventory_typeexplicitly (NeworUsed) — omitting it defaults toNew, returning zero results for used-vehicle queries- Always set
limit: 5000— the default (1000) silently truncates when (months × states × ranking combos) exceeds 1000 rows- For volume totals, use
ranking_dimensions: dealership_group_name(or the single relevant dimension) — never use the defaultmake,model,body_typewhich creates ~150K rows for national 3-month queries
Load the marketcheck-profile.md project memory file if exists. Extract: state, franchise_brands, dealer_type, country. If missing, ask. US-only skill (get_sold_summary, search_active_cars). If UK, inform: "Depreciation tracking requires US sold data and is not available for UK." Confirm: "Using profile context: [state]"
Dealer tracking how quickly inventory/target models lose value for stocking and pricing decisions.
| Required | Field | Source |
|---|---|---|
| Yes | Make/Model or segment, model year(s) | Ask |
| Auto/Ask | State/ZIP, dealer_type | Profile or ask |
| Optional | Inventory type (New/Used), comparison dimension (EV vs ICE, etc.), time horizon | Ask |
Clarify: used vehicle depreciation vs new vehicle MSRP parity — different workflows.
Use this when a user asks "how fast is the RAV4 losing value" or "show me the depreciation curve for a 2022 Civic."
Get current period sold data — Call get_sold_summary with make, model, inventory_type=Used, date_from (first of prior month), date_to (end of prior month), limit=5000. Include state if specified.
→ Extract only: average_sale_price, sold_count. Discard full response.
Get historical sold data at multiple intervals — Make separate calls to get_sold_summary for each lookback period (all with inventory_type=Used, limit=5000):
average_sale_price at each point. Adjust dates based on today's date.
→ Extract only: average_sale_price, sold_count per interval. Discard full response.Get current active market asking price — Call search_active_cars with year, make, model, car_type=used, stats=price, rows=0. Include zip/state if available.
→ Extract only: mean, median, min, max, count for price. Discard full response.
Get original MSRP baseline — Call search_active_cars with same YMMT, rows=1, sort_by=price, sort_order=desc. Decode the VIN for MSRP. Fallback: highest 1-year-ago sold price.
→ Extract only: msrp from decode. Discard full response.
Build the depreciation curve — Calculate at each time interval:
Use this when a user asks "are SUVs holding value better than sedans" or "how is EV depreciation compared to ICE."
Get current period segment data — Call get_sold_summary with ranking_dimensions=body_type, ranking_measure=average_sale_price, date_from (first of prior month), date_to (end of prior month), inventory_type=Used, top_n=10, limit=5000.
→ Extract only: per body_type — average_sale_price, sold_count. Discard full response.
Get prior period segment data — Same call with dates shifted back 3 months (or user's chosen comparison window), limit=5000.
→ Extract only: per body_type — average_sale_price, sold_count. Discard full response.
Get fuel type comparison — Call get_sold_summary with fuel_type_category=EV, current period dates, inventory_type=Used, limit=5000. Repeat with fuel_type_category=ICE. Repeat both for prior period.
→ Extract only: average_sale_price, sold_count per fuel_type per period. Discard full response.
Calculate segment trends — For each body type and fuel type:
Deliver the segment comparison — Present a ranked table from strongest retention to weakest. Highlight the EV vs ICE gap specifically (this is the most commonly requested comparison). Include volume context — a segment with strong prices but falling volume may be about to soften.
Use this when a user asks "which brands hold value best" or "rank the automakers by residual value."
Get current period brand prices — Call get_sold_summary with ranking_dimensions=make, ranking_measure=average_sale_price, ranking_order=desc, date_from (first of prior month), date_to (end of prior month), inventory_type=Used, top_n=25, limit=5000.
→ Extract only: per make — average_sale_price. Discard full response.
Get prior period brand prices — Same call with dates shifted back 6 months (or user's preferred comparison window), limit=5000.
→ Extract only: per make — average_sale_price. Discard full response.
Get volume context — Call get_sold_summary with ranking_dimensions=make, ranking_measure=sold_count, ranking_order=desc, current period dates, inventory_type=Used, top_n=25, limit=5000.
→ Extract only: per make — sold_count. Discard full response.
Calculate brand retention scores — For each make:
Present the brand ranking — Show a ranked table with: Rank, Make, Current Avg Price, Prior Avg Price, Retention %, Volume, Tier. Highlight notable movers (brands that jumped or dropped tiers since the last period).
Use this when a user asks "where do Tacomas hold value best" or "which states have the highest used car prices."
Get state-level transaction data — Call get_sold_summary with make, model, summary_by=state, date_from (first of prior month), date_to (end of prior month), inventory_type=Used, limit=5000.
→ Extract only: per state — average_sale_price, sold_count. Discard full response.
Get national baseline — Same call without summary_by for national average.
→ Extract only: average_sale_price, sold_count. Discard full response.
Calculate geographic variance — For each state:
Identify patterns — Group states into:
Deliver the geographic map — Present as a ranked table: State, Avg Transaction Price, National Avg, Price Index, Premium/Discount $, Sold Count. Highlight the top 5 and bottom 5 states for the specific vehicle.
Use this when a user asks "which new cars are selling over sticker" or "are markups coming down" or "incentive effectiveness."
Get current MSRP parity data — Call get_sold_summary with inventory_type=New, ranking_dimensions=make,model, ranking_measure=price_over_msrp_percentage, ranking_order=desc, date_from (first of prior month), date_to (end of prior month), top_n=30, limit=5000.
→ Extract only: per make/model — price_over_msrp_percentage. Discard full response.
Get prior period parity data — Same call with dates shifted back 3 months, limit=5000.
→ Extract only: per make/model — price_over_msrp_percentage. Discard full response.
Get volume context — Call get_sold_summary with inventory_type=New, ranking_dimensions=make,model, ranking_measure=sold_count, ranking_order=desc, current period dates, top_n=30, limit=5000.
→ Extract only: per make/model — sold_count. Discard full response.
Classify parity status — For each make/model:
Present the parity report — Show a table: Make/Model, Current % Over/Under MSRP, Prior Period %, Change Direction, Sold Volume. Highlight:
Present: summary headline, depreciation curve/trend table (period, avg price, retention %, monthly rate, volume), comparison context (segment/brand/geographic), key signals (bullets), and one actionable recommendation with quantified business impact.