All documentation

Weekly report

A dated report for each week, built from your own numbers with no model in the loop, readable on screen, by email, and on paper.

Weekly report screen showing the brand visibility scorecard, share of voice, and a checklist of recommended actions

What this is

Weekly report is a dated report built once a week for every project it runs for: one hero number, the prompts that moved, where you stand against competitors, and a short list of what to do next, assembled automatically rather than something you have to go generate yourself (api/services/weekly_report.py#generate_weekly_report). It is gated on your plan; see Pricing. A project on a plan the report is not included in sees a locked screen instead, with no report and no history to browse (api/routers/insights.py#get_latest_insight).

No model in the loop

The generator never calls a language model. It reads the same numbers the rest of the product already computes, by calling the dashboard, AI referral traffic, and Search Console handlers directly, then formats the results in plain Python: build_headline writes the one-sentence summary from rounded deltas, build_scorecard reshapes the dashboard's own hero metrics into the stored scorecard, and _movers sorts prompts into risen or fallen by the sign of their change (api/services/weekly_report.py#generate_weekly_report, #build_headline, #build_scorecard, #_movers). Neither that call graph nor the task that runs it imports the platform's LLM gateway anywhere.

The week, and when it runs

A report's week is exactly seven calendar days: week_start is seven days before the day the generator runs, and week_end, six days after week_start, is the day immediately before that run (api/services/weekly_report.py#week_bounds). There is exactly one path that builds a report: a systemd timer fires every Monday at 06:30 UTC, which enqueues one generation job for every paid, active project without a report for that week yet, and each job runs the generator for its one project (discoveredby-cli@enqueue-weekly-report.timer, api/tasks.py#_enqueue_weekly_report_for_eligible_projects, #generate_weekly_report_task). There is no on-demand trigger: nothing in the app, and nothing in the internal admin panel, builds a report outside that weekly run. A project with no AI-search snapshot recorded since the week began is skipped rather than shown an empty or partial week (api/services/weekly_report.py#_enough_data).

What's on the screen

The hero is brand visibility when the report carries a real reading for it; a report generated before that metric existed, or a week that happens to read as entirely zero on it, falls back to citation rate instead, each with its own one-line definition and a note of how it moved from the week before (frontend/src/routes/(app)/insights/+page.svelte#heroValue, #hasBrandVisibility). Beneath it sit three tiles, share of voice, average best position, and prompts tracked, joined by one more tile repeating the hero's own brand visibility figure once that same guard clears; average position reads blank for a week where nothing of yours was cited at all (frontend/src/routes/(app)/insights/+page.svelte#avgRank).

A "Do this next" checklist holds the five highest-impact citation gap opportunities on file for your project (api/services/weekly_report.py#select_recommendations). Editors and owners can check one off as done; a viewer sees each check circle disabled, with a role notice above the list explaining why, rather than a click that would be rejected (api/routers/insights.py#toggle_recommendation, frontend/src/routes/(app)/insights/+page.svelte#writable). What gets checked off carries forward: next week's report shows how many of that list got done (api/services/weekly_report.py#progress_from_prior). Further down: the prompts that gained or lost ground (frontend/src/routes/(app)/insights/+page.svelte#rising, #declining), how you compare engine by engine and against your tracked competitors, each with its own message when there is nothing to compare yet (#engines, #hasEngineData, #competitors), and, only when there is something to show, AI referral traffic from Google Analytics (#revenue), striking-distance Search Console queries (#quickWins), a sentiment breakdown (#sentiment, #hasSentiment), and a receipt of articles published, pages optimized, and prompts added that week (#receipt, #shipped).

Screen, email, and paper

The same report reaches you three ways. On screen, at the Weekly report page linked above. By email, sent the moment a report first finishes generating, built from the same stored numbers and summary sentence (api/tasks.py#_email_weekly_report, api/services/email.py#send_weekly_report_email). And on paper: a "Printable" link opens a second page built for print, reading the same stored numbers and hiding the app's own navigation chrome behind a print stylesheet. It is a one-page digest rather than the whole screen: the hero, which prints citation rate with brand visibility above it when the report carries a real reading for that (frontend/src/routes/(app)/insights/report/+page.svelte#hasBrandVisibility), where you stand engine by engine, what shipped that week if anything did, and the top three moves from that week's "Do this next" list. The tiles, the prompts that moved, the competitor comparison, the AI referral traffic and Search Console sections, and the sentiment breakdown stay on screen. There is no PDF file the product builds. Turning that printable page into a PDF means using your browser's own print dialog, the same as printing any other web page.

History

Past weeks are one click away once more than one exists: a dropdown lists every week with a generated report (frontend/src/routes/(app)/insights/+page.svelte#availableWeeks), and picking one fetches that specific week without changing anything else on screen (api/routers/insights.py#get_insight_for_week). A project not on a plan the report is included in cannot reach a past week either, the same gate as the latest one.

  • Metrics defined: the formulas behind brand visibility, citation rate, and the other figures on the scorecard
  • Citation gaps: how the opportunities behind "Do this next" are found and scored
  • Competitors: the comparison this report's "against competitors" section reuses
  • Search performance: where this report's striking-distance queries come from

Last verified 2026-08-11

Start monitoring your AI visibility.

See how AI search engines talk about your brand.

Free to start. No credit card required.