Insights feed and weekly Action Plan

How the 'What changed' timeline detects movement and turns it into specific actions you can take this week.

6 min read

After every scan we run two parallel passes over the new data:

  1. Insights — detect movement in your visibility numbers and post it to the What changed timeline on Overview.
  2. Actions — turn the gap each insight surfaces into one or more specific things you can do this week, rendered as cards in the Actions tab.

Insights say what happened. Actions say what to do about it. They share the same scan data but live in different parts of the dashboard on purpose — readers and doers move at different paces.

The five insight types

Every insight is one of:

TypeWhen it fires
visibility_gapA monitored query has zero mentions across all engines in the latest scan, but had ≥1 in a recent prior scan.
competitor_displacementAn answer that previously cited you now cites a tracked competitor and not you, on the same query.
trend_dropShare of Voice fell sharply between consecutive scans (threshold scales with sample size — see below).
trend_recoveryThe opposite — Share of Voice climbed sharply. Any unread trend_drop from the last 24 hours is dismissed when it posts.
repeated_absenceThe same query has been "not mentioned" for 3+ consecutive scans — a chronic gap, worth its own action.

Each insight stores the trigger conditions, the affected query (or queries), and a short human-readable headline. Click any timeline entry to jump to the relevant Actions row.

Sample-aware thresholds

A scan with only a handful of measurements in it is noisy: if the run produced 5 results, one of them flipping moves the rate by 20 points on its own, and a trend_drop on a flat 10pp threshold would fire constantly on nothing. So the threshold scales with how much evidence the comparison actually has.

The sample size is the number of measurements in the smaller of the two scans being compared — not the number of prompts you track. One prompt produces one measurement per engine, per rep, so a Pro account (four engines, three reps) turns ten monitored prompts into up to 120 measurements and lands in the bottom row of this table, not the top one.

Measurements in the smaller scantrend_drop thresholdtrend_recovery threshold
< 1030 percentage points30 pp
10–1925 pp20 pp
≥ 2020 pp15 pp

The metric being compared is Share of Voice — the share of that scan's measurements that mentioned you — not the GEO Score. Share of Voice is a plain ratio, so a threshold in percentage points means the same thing on every plan; the GEO Score adds quality lift and confidence weighting on top and would not behave linearly here. The math is in lib/scan/insights.ts.

Decay rules — what stays unread

Three rules keep the timeline from filling with stale or contradictory entries:

  1. Contradictory pair dedup. When a new trend_drop fires, any unread trend_recovery from the previous 24 hours is auto-dismissed (and vice-versa). The inbox always reflects the current direction, not back-and-forth swings.
  2. Stale unread collapse. Insights older than 14 days that you haven't marked read move into an Older unread section that collapses by default. Forgetting to dismiss a 3-week-old alert doesn't crowd out fresh signal.
  3. Single source of truth. Each insight links to its corresponding Action card via View action plan →. The two views never disagree.

Action cards

The six templates below are the Action Engine v0 core. The live system emits nineteen visible kinds — the six here plus crawlability and schema fixes (fix_robots_block, fix_missing_meta, fix_missing_jsonld, schema_fix), citation-gap and outreach drafts (citation_gap, reddit_comment, github_pr, email_pitch, content_publish, listicle_update), prompt-quality nudges (edit_off_target_question, track_high_demand_query), and your own manual_todo rows.

KindWhen it's generatedWhat it asks you to do
add_to_listicleQuery where you're not mentioned but ≥2 competitors are cited as a roundup.Pitch yourself for inclusion in the cited listicle pages or publish your own competitor comparison.
add_social_proofQuery where you're mentioned with weak quality (mentioned, not recommended).Ship a customer story, case study, or G2-style proof point that AI engines can find.
sharpen_differentiatorRepeated absence on a query you'd expect to win — your positioning isn't reaching AI.Rewrite the homepage / feature page hero to lean into the differentiator the question is asking about.
add_faq_schemaQuestion-shaped query (how/what/why/when…) where you have a relevant page but no FAQPage JSON-LD.Use the FAQ schema generator on the relevant page and publish.
reinforce_brand_tokenYou're mentioned but as a domain-only citation (no brand name in prose).Ensure your brand name (not just URL) appears in titles, metadata, and the first paragraph of cited pages.
improve_page_readinessDiscovery Readiness score below 70 on a page that ranks for at least one monitored query.Open the page-health drawer (we deep-link straight to it) and fix the highest-impact issues — bad meta description, missing JSON-LD, weak heading flow.

Each card carries:

  • Title — short imperative ("Add JSON-LD to /pricing").
  • Why — one sentence connecting the gap to the data ("Query X has been not_mentioned 3 weeks running and your competitor is in the top citation.").
  • Impact level (high / medium / low) for sorting.
  • Trigger — the originating scan + prompt, so you can drill back into Scans.
  • Deep link — a direct URL into the right page-health drawer or JSON-LD generator dialog where applicable.

The cadence

Insights and actions are recomputed at the end of every scan (manual, pulse, or deep). The Overview What changed feed shows the last 30 days; the Actions tab shows the currently-active items (unresolved + not auto-dismissed by decay rules above).

When you mark an action done (or hide it), the system stops surfacing it for that specific query/scan combination — but if the underlying gap reappears in a future scan, the action regenerates.

Honest limits

Read further

  • GEO Score — what the trend deltas actually measure.
  • Competitor tracking — how competitor_displacement insights pick the rival to call out.
  • Content audit — where the improve_page_readiness action sources its readiness scores.