Recurring reports — the weekly ops summary, the monthly account review, the quarterly compliance digest — share a shape: fixed structure, fresh data, and a narrative layer that explains what changed and why it matters. The data pull is already automatable with ordinary scripts. The narrative layer is what kept a human in the loop every week, and it is exactly the part Claude does well. The trap is letting the model do more than narrate. A trustworthy report generator is a pipeline in which code gathers and computes everything, and Claude only turns verified facts into readable prose.
The architecture: facts first, prose second
The reliable design has four stages. Gather: scheduled code queries your systems — warehouse, ticketing, CRM — and computes every figure that will appear in the report: totals, deltas, top movers. No model involved. Draft: a Claude call receives those computed facts as structured data plus a report template, and writes the narrative sections — "what changed, what stands out, what needs attention" — under an explicit instruction to use only the numbers provided and never to derive new ones. Check: code validates the draft before anyone sees it (more below). Deliver: the report goes to a named owner for a skim-and-approve, then out to its audience.
This entire pattern runs on the core Messages API, available on all four platforms — Bedrock, Vertex AI, Foundry, and Claude Platform on AWS. If you plan to generate hundreds of per-account variants in one overnight run, note that the Batch API is not available on Bedrock or Vertex AI; there, high-volume generation means looping ordinary requests, which works fine but is worth planning around in batch vs. real-time terms.
The guardrails that make it trustworthy
Every number is injected, never generated. The single most important rule. If the draft must say revenue grew 4.2%, the 4.2% was computed by SQL and handed to the model. LLMs paraphrasing arithmetic is how plausible-but-wrong figures end up in front of executives.
Verify numbers survived the trip. After drafting, a deterministic check extracts every figure in the output and confirms it appears in the input facts. Any number the model introduced — rounded differently, unit-shifted, or invented — fails the build, and the pipeline retries or flags rather than delivering.
Template as contract. Fixed section headings, required sections present, length bounds per section, banned phrases (whatever your compliance team says a report must never assert). Structure checks are cheap code; run them every time.
A human owner with skin in the game. The report should still be "Dana's report, drafted by AI" — not "the AI's report." Named ownership keeps review real and gives errors somewhere to escalate.
A concrete example: the weekly ops report
A mid-size logistics team replaces its Friday ritual: a scheduled job computes on-time rate, exception counts by cause, and week-over-week deltas; Claude receives the facts plus last week's report (for continuity of narrative) and drafts the summary, callouts, and next-week risks; the checker verifies the figures and structure; the ops lead gets the draft at 3 p.m., edits two sentences, and sends. The measurable win is not headcount — it is that the report now takes fifteen minutes instead of three hours, ships every week including vacation weeks, and reads consistently. Sensible model choice follows the stakes: Claude Sonnet 5 is a strong default for narrative drafting; Haiku 4.5 handles high-volume, low-stakes variants; Opus 4.8 earns its price on dense, high-visibility analyses.
Pitfalls
Automating a report nobody reads. Automation makes zombie reports cheaper to produce, not more useful. Confirm the audience exists before building.
Letting the model editorialize on trends. "Explain the drop" invites speculation. Have it describe what the data shows and explicitly attribute causes only when a cause is provided in the input facts.
Skipping version pinning. A model upgrade can shift tone and structure across every report you publish. Pin versions and test upgrades against saved examples — see version pinning.
Review theater. If the owner never edits anything, the review has decayed into a rubber stamp. Rotate reviewers occasionally and track edit rates; a zero edit rate is a warning sign, not a triumph.
Where to go next
The fact-injection technique leans on structured outputs for clean handoffs between code and model, and human-in-the-loop design covers making the review gate real. For platform basics, start at the quickstart.