Der Wochenreport für Kunden – jeden Montag von einem Agenten geschrieben, bevor du aufwachst

Ein Wochenreport, den ein Agent aus Shager zusammenstellt: was veröffentlicht wurde, was fehlschlug, Klicks pro Konto und Beitrag, Abgleich mit CRM-Leads.

Ein Agent kann den wöchentlichen Verteilungsreport eines Kunden schreiben, indem er drei Dinge aus Shager holt: die in der Woche veröffentlichten Beiträge mit ihrem Ergebnis pro Konto, die Klicks pro Konto und pro Beitrag aus get_analytics und die Liste aller Fehlschläge. Dann verknüpft er diese Klicks mit Leads aus dem CRM des Kunden – über den Wert utm_content, der jedes Konto kennzeichnet. Läuft das zeitgesteuert mit einem reinen Leseschlüssel, liegt der Report am Montagmorgen fertig im Ordner.

Nachdenken muss man dabei nicht über den Code. Sondern darüber, was der Kunde wirklich sehen muss – und darüber, ehrlich zu sagen, was die Zahlen messen.

Was gehört in einen wöchentlichen Verteilungsreport?

Vier Abschnitte reichen. Alles andere gehört in die monatliche Auswertung.

  1. Zustellung. Wie viele Beiträge rausgingen, auf wie viele Konten, und bei welchen Konten es fehlschlug. Kunden fragen selten danach, bis etwas fehlt – und dann fragen sie nach nichts anderem mehr.
  2. Klicks nach Konto. Welche Seiten, Filialen oder Kanäle Leute auf die Website geschickt haben. Dieser Abschnitt verschiebt Budgets.
  3. Klicks nach Beitrag. Welche Inhalte über alle Konten hinweg funktioniert haben.
  4. Aufgaben. Was der Kunde tun muss: ein Konto neu verbinden, die Entwürfe der nächsten Woche freigeben, fehlendes Material schicken.

Achte darauf, was fehlt: Reichweite, Impressionen, Likes. Shager misst Klicks auf seinen eigenen Tracking-Links, pro Konto und pro Beitrag. Es gibt sich nicht als Social-Analytics-Suite aus, und der Report sollte das auch nicht tun.

Balkendiagramm: Klicks auf die Tracking-Links von Shager pro Konto, damit man sieht, welche Seite Traffic gebracht hat.
Was der Agent von get_analytics bekommt. (Illustration, keine echten Daten)

Die Datenabfragen

Für einen Kunden-Workspace führt der Agent diese Abfolge aus. Die Tool-Namen sind die echten MCP-Tools; die REST-Entsprechungen stehen im OpenAPI-Dokument.

  1. list_workspaces, um den Workspace des Kunden über den Namen zu finden.
  2. list_posts mit status auf PUBLISHED, dann noch einmal mit PARTIALLY_PUBLISHED und FAILED. limit geht bis 100.
  3. get_post für jeden Beitrag der Woche, um Status pro Konto, Live-URLs und Fehlermeldungen zu bekommen.
  4. get_analytics mit from und to über die Woche.
  5. list_channels, um Kanal-IDs lesbaren Kontonamen zuzuordnen und Konten zu erkennen, deren Verbindungsstatus sich geändert hat.

Die Analytics-Abfrage per REST:

curl -s "https://app.shager.ai/api/v1/workspaces/ws_example/analytics?from=2026-09-14T00:00:00%2B03:00&to=2026-09-20T23:59:59%2B03:00" \
  -H "Authorization: Bearer $SHAGER_READ_KEY"

Zwei Details in dieser URL erwischen viele. Das + im Offset muss im Query-String als %2B kodiert werden, sonst liest der Server ein Leerzeichen. Und die Wochengrenzen sollten in der Zeitzone des Kunden berechnet werden, nicht in der des Servers. Fehlt from, nimmt get_analytics standardmäßig die letzten 30 Tage – und das ist nicht, was ein Wochenreport will.

Klicks sind keine Leads – also verknüpfe sie

Shager gibt jedem Konto einen eigenen Kurzlink und eigene UTM-Tags, wobei utm_content das Konto kennzeichnet. Genau das macht die Verknüpfung möglich. Das CRM speichert Leads mit den UTM-Werten, die das Formular auf der Landingpage erfasst; der Agent gleicht sie über denselben utm_content mit Shagers Klickzahlen pro Konto ab.

Die Tabelle, die dabei herauskommt, ist das Herzstück des Reports:

Konto Beiträge Klicks (Shager) Leads (CRM) Hinweis
Aurora Downtown 4 ... ...
Aurora Northside 4 ... ... neu verbinden

Die Abstände zwischen den Spalten sind eine Information. Viele Klicks und keine Leads sind ein Problem der Landingpage oder des Angebots, kein Verteilungsproblem. Unser älterer Leitfaden zur Lead-Zuordnung pro Konto beschreibt die Formularfelder und die CRM-Zuordnung, die die Lead-Spalte verlässlich machen, und Leads aus Agenten-Inhalten messen behandelt die Seite des Agenten.

Hast du keinen Zugriff aufs CRM, funktioniert der Report trotzdem, dann eben nur mit Klicks. Schreib das in den Kopf des Reports. Ein Report, der Klicks als „Ergebnisse“ ausweist, ist genau der Grund, warum Agenturen ein Quartal später das Vertrauen verlieren.

Unbeaufsichtigt laufen lassen mit Claude Code

Claude Code kann mit claude -p nicht interaktiv laufen, wie in der Headless-Dokumentation beschrieben. Damit wird der Wochenreport zum Cronjob.

Zuerst ein Projektordner für Reports mit einer .mcp.json, die den Schlüssel aus der Umgebung liest. Die MCP-Dokumentation von Claude Code unterstützt ${VAR}-Ersetzung in Headern:

{
  "mcpServers": {
    "shager": {
      "type": "http",
      "url": "https://app.shager.ai/api/mcp",
      "headers": { "Authorization": "Bearer ${SHAGER_READ_KEY}" }
    }
  }
}

Dann die Anweisungen, gespeichert als Skill, damit die Logik in einer Datei steckt und nicht in einer Crontab-Zeile. Claude Code lädt Projekt-Skills aus .claude/skills/<name>/SKILL.md, so steht es in der Skills-Dokumentation:

---
name: weekly-report
description: Compile the weekly distribution report for one client workspace from Shager. Use when asked for a weekly client report.
---

The argument is the client workspace name: $ARGUMENTS

1. Resolve the workspace with list_workspaces. Read its timezone.
2. Compute last Monday 00:00 to Sunday 23:59:59 in that timezone, with offsets.
3. Collect posts with list_posts (PUBLISHED, PARTIALLY_PUBLISHED, FAILED) and
   keep those published in the window. Call get_post for each.
4. Call get_analytics for the window. Map channel ids to names with list_channels.
5. If crm/<workspace>.csv exists, join leads on utm_content.
6. Write reports/<workspace>/<YYYY-MM-DD>.md with four sections: Delivery,
   Clicks by account, Clicks by post, Actions. Use tables. No adjectives about
   performance; numbers and one plain sentence per section.
7. Never call any tool that creates, schedules or cancels anything.

Und der zeitgesteuerte Befehl, der nur die Lese-Tools und das Schreiben von Dateien vorab genehmigt:

cd ~/agency-reports && claude -p "/weekly-report Aurora" \
  --allowedTools "mcp__shager__list_*,mcp__shager__get_*,mcp__shager__whoami,Write" \
  --output-format json > logs/aurora-$(date +%F).json

Die Syntax für Erlaubnisregeln mit dem Präfix mcp__<server>__ und einem Platzhalter am Ende ist in der Berechtigungsreferenz von Claude Code dokumentiert. Was nicht auf dieser Liste steht, wird in einem unbeaufsichtigten Lauf nicht automatisch genehmigt.

Diagramm: Ein Beitrag geht an mehrere Konten, und jedes Konto erhält einen eigenen Kurzlink und ein eigenes utm_content-Tag.
Tracking-Links zeigen Klicks pro Konto. Für Conversions brauchst du dein Analytics-Tool oder CRM. (Illustration)

Warum hier ein reiner Leseschlüssel wichtig ist

Der Skill sagt dem Modell, dass es nichts schreiben soll. Der Schlüssel macht es unmöglich. Erstelle im Agenten-Dashboard einen eigenen Schlüssel nur mit dem Scope read fürs Reporting und nutze ihn nirgendwo sonst. Sollte dieser Schlüssel je durchsickern, kann im schlimmsten Fall jemand Klickzahlen lesen. Das komplette Scope-Modell gehen wir in API-Schlüssel, Scopes und Audit durch.

Jeder Aufruf des Report-Agenten erscheint außerdem im Audit-Log auf diesem Dashboard. So kannst du an den ersten Montagen prüfen, dass er genau das aufruft, was du erwartest – und nichts darüber hinaus.

Der erzählende Teil

Lass den Agenten ein, zwei Sätze pro Abschnitt schreiben, aber setz ihm Grenzen. Ohne Regeln beschreiben Modelle eine Veränderung von 4 Prozent als „deutlichen Anstieg“. Meine Anweisung ist unverblümt: die Zahl nennen, mit der Vorwoche vergleichen, falls verfügbar, und nichts über Ursachen sagen, solange die Daten sie nicht zeigen. Hatte eine Filialseite null Klicks, weil ihre Verbindung am Dienstag abgelaufen ist, ist das eine Ursache, die die Daten zeigen. „Ermüdung beim Publikum“ ist keine.

FAQ

Kann der Agent den Report direkt an den Kunden schicken?

Mit einem E-Mail-Tool schon, aber am ersten Tag würde ich das nicht tun. Lass ihn die Datei schreiben, prüf ein paar Wochen lang die Ergebnisse und automatisiere dann den Versand. Der Report ist der Blick des Kunden auf deine Arbeit, und eine falsche Zahl, die automatisch verschickt wird, kostet mehr als die gesparte Zeit.

Enthält get_analytics auch Leads?

Nein. Es liefert die Klicks auf Shagers Tracking-Links pro Konto und pro Beitrag in einem Zeitraum. Leads kommen aus dem CRM oder Formular-Tool des Kunden und werden über utm_content abgeglichen. Der Report sollte die beiden Quellen sichtbar getrennt halten.

Wie weit kann der Report zurückblicken?

get_analytics akzeptiert jedes from und to, das du schickst; fehlt from, gelten standardmäßig die letzten 30 Tage. Für Vergleiche mit dem Vormonat lässt du denselben Skill mit einem anderen Zeitfenster laufen, statt alte Reports als maßgebliche Quelle aufzubewahren.

Wie es weitergeht

Falls du noch keinen Schlüssel hast: Die Einstiegsseite für Agenten zeigt, wie du einen erstellst oder einen Agenten sich selbst registrieren lässt. Fang mit einem Kunden an, lies drei Montage lang die Reports selbst und nimm erst dann die übrigen dazu.

Probier’s aus – mit deinen eigenen Konten.

Kostenlos in der Launch-Phase, ohne Karte. Verbinden, einmal schreiben, und Shager veröffentlicht und misst.