Skill: Time-Series Plotting

Usage trends in the right shape for the reader, without fake drops from half-loaded months.

Overview

Show adoption trends in a shape a CRO can read at a glance. Claude only plots data that is really a series (monthly install detection), drops the incomplete current month and partly loaded months that would fake a collapse, and picks a labelled sparkline, a compact table, a line chart or one line of prose depending on the points and the question. Intent and spend stay snapshots, never invented history.

Use cases

  • Adoption trends that don't show a collapse that never happened

    Before plotting monthly detection days, Claude removes the current month and any partly loaded month after the last verification, so a CSM doesn't escalate a churn risk caused by missing data.

  • A sparkline when the trend matters, a table when the values do

    Six months of detection days render as a labelled sparkline scaled 0 to 31 with the momentum figure beside it, or as a month-by-month table when an audit needs exact numbers.

  • No invented intent history

    Asked for intent over time, Claude shows the current snapshot with its trend value and last-seen date and says no history is available, instead of drawing a line the data doesn't contain.

View full skill

Time-Series Plotting

When to use

  • Authoring a workflow output that includes a trend over time, such as monthly product detection from company_install_time_series.
  • Reviewing a generated chart that's the wrong shape for its audience.

Which data is a series

Only company_install_time_series returns a series: one point per month per product, where data_points[].intensity is the number of days the product was detected that month (1 to 31). Intent (company_intent), headcount and spend are snapshots. Never draw them as a line over time, and never fill in past values. If the user asks for intent over time, show the current snapshot with its trend value and last_seen_at, and say no history is available.

Prepare the series before plotting

  1. Drop the current month. The last point is a null tail because the month is incomplete.
  2. Drop partial months. The last complete month is often only partly loaded: detection stops at product_last_verified_date. Drop the month containing that date (unless it is at month end) and any later month. Plotted as-is, it looks like a collapse.
  3. Mid-series null = no detection that month. Plot it as 0 and say so; don't interpolate.
  4. Never mix scales. current_intensity is an all-time aggregate, not on the 1 to 31 scale. Keep it off the chart.
  5. One country scope per chart. With granularity:"country" the same product repeats per country_code; plot one country per line or use the global rows.

Shape decision rule

Data ShapeBest Representation
3 to 12 points, single series, trend mattersSparkline (▁▂▃▅▇)
3 to 12 points, single series, exact values matterCompact table (month / value)
12+ points, single seriesLine chart (image or rendered)
Multiple seriesMulti-line chart (rendered)
Comparing 2 or 3 specific monthsInline prose ("detection fell from 29 to 8 days a month between May and Aug")

Sparkline conventions

When the shape of the trend matters more than the exact values:

Product X detection days, Mar to Aug 2026: █▇▇▅▃▂

Use the Unicode block characters ▁▂▃▄▅▆▇█, scaled to 0 to 31 days so sparklines for different products are comparable. Always prefix with the metric name and the time window. Don't use sparklines without labels.

Table conventions

When the exact values matter (an audit or a follow-up question):

MonthDetection Days
Mar 202630
Apr 202628
May 202629
Jun 202621
Jul 202612
Aug 20268
  • Prefer "Jan 2026" month format; avoid "1/26", which is ambiguous between day and month.
  • Title Case for table headers.
  • Add intensity_momentum beside the table or in its caption: it is the direction signal (-20 or below = declining, +20 or above = growing).

Axis labeling for non-technical readers

A non-technical reader includes most CROs and AEs.

  • Time axis: months or quarters, never timestamps.
  • Value axis: include units: "Days detected per month (0 to 31)". Core products saturate at 28 to 31, so a flat line at the top means steady use, not a lack of growth.
  • Annotations: when a sourced event explains a change (an acquisition, a migration announcement), annotate inline and cite it: "Jun 2026: migration announced [web_search]". Don't annotate with guesses.

Common pitfalls

  1. Plotting the null current month or a partly loaded month as 0. It creates a fake collapse.
  2. Charting intent or headcount over time. No tool returns those as a series.
  3. Rendering a 30-row table when a sparkline would do. The table buries the trend.
  4. Rendering a sparkline when the reader needs a specific value. "Did detection drop below 10 days?" can't be answered from ▁▂▄▅▇█.
  5. Unitless axes. "Went from 30 to 8": thirty what?

Reference