← Marketing systems

Weekly client reporting suite

Joins advertising, sales, and budget data into the weekly client deliverable. Claude writes the narrative; a human checks it at the one point a hallucinated number could reach a client.

System
Python report generators plus a Claude Code working session over an MCP-connected data stack. The scripts compute every number; the model explains them; a human signs the story before it ships.
Stack
PythonpandasopenpyxlKeepa APIClaude CodeIntentwise MCP
Validation
Hard boundary between computation and language. The model has no path to invent a figure, only to misread one, and the review step catches that. Rollup math was verified against hand-built reports from prior weeks before the system took over.
Outcome
The weekly deliverable went from a day of spreadsheet assembly to minutes of review, and the budget-opportunity flag routinely surfaces reallocations that used to be found only by accident.

The loop

human checkpoint

  1. scaffold

    A new-week command stamps out the week's folder with a checklist and auto-detects the newest data exports by glob, so nobody does filename bookkeeping.

    Python

  2. compute

    Deterministic code joins the ad platform export with sales data, maps child listings to parents via Keepa, and emits Excel with parent-level rollups, week-over-week top movers by sales delta, and a color-coded scorecard of ad-spend efficiency against each brand's target.

    pandasopenpyxlKeepa API

  3. flag

    A second script joins budget caps against campaign performance to flag campaigns that are budget-limited while already beating their efficiency target. That's the week's free-money list.

    Python

  4. narrate

    In a Claude Code session with the Intentwise MCP attached, the computed outputs become the client-facing story. What moved, why, and what to do next week.

    Claude CodeIntentwise MCP

  5. review + send

    A human reads the narrative against the Excel before anything reaches the client.

    why a human here This is the hallucination gate. Every number is produced by deterministic code, never by the model; the model only interprets a table it was handed. The checkpoint verifies the interpretation matches the table, because a wrong claim in a client deliverable costs trust that no time savings buys back.

The problem

Export from three systems, join in a spreadsheet, eyeball for movers, write the email. Most of a day per client, every week, and the analysis got shallower as the account list grew.

Design decisions worth explaining

Numbers and narrative come from different machinery. Pandas code computes every figure; the LLM’s only job is to explain a table it’s given. A hallucination can’t mint a number under that split. The worst failure left is a misreading, which is what the human review catches.

Parent-level rollups via market data. Amazon reports at the child-listing level, but clients think in products. Joining Keepa’s parent/child mapping into the pipeline gives every report a product-level view that the ad platform’s own exports can’t produce.

The scaffold is part of the system. The new-week command creates the folder, the checklist, and the export detection. A teammate ran their first week without me in the room.

Where the human sits, and why

One checkpoint, at review-and-send. Everything upstream either computes deterministically or drafts against computed inputs. A wrong answer only becomes a client-facing claim at send, so that’s where the person is.