Weekly report by e-mail and Slack

The weekly report brings Pulse to your inbox or a Slack channel: leads (or purchases and revenue in shop projects), cost per lead, the best campaigns, open recommendations and tasks, and – when Search Console is connected – clicks and queries from Google Search. Each member subscribes for themselves; a report never shows more than the member may see in the dashboard, and it never contains names or contact details of leads, whatever the member's role.

In the dashboard

  • Einstellungen › Wochenbericht of a project lists your reports that cover this project (the project itself, its client or all your projects) and sets up a new one pre-filled for it.
  • Konto › Wochenberichte (/account/reports) lists all your reports.

The wizard asks four questions – what the report covers, where it goes (your e-mail or a Slack channel), when (weekday, time, time zone, language) and which parts it contains – and then shows a preview with the numbers of the last full week. Every member can subscribe, viewers included; the public demo shows the page read-only.

The table of your reports can be sorted by every column, filtered by channel and status, searched, and its columns can be shown or hidden. Each row offers Test senden (live status: queued, sending, sent or failed – the button stays disabled until the test is done), Verlauf (the last deliveries with status, attempts and the problem in plain words), Bearbeiten, Pausieren / Fortsetzen and Löschen.

Subscribe

POST /v1/me/report-subscriptions
{
  "channel": "email",
  "scope": "project",
  "projectId": "…",
  "weekday": 1,
  "time": "08:00",
  "timezone": "Europe/Berlin",
  "locale": "de",
  "sections": ["kpis", "campaigns", "recommendations", "tasks", "traffic"]
}
  • scope: project (one project, needs projectId), org (every project of an organization you see, needs orgId) or portfolio (all your projects, neither id).
  • channel: "slack" takes webhookUrl – a Slack incoming webhook (https://hooks.slack.com/services/…) – and an optional slackLabel such as #marketing. The URL is stored encrypted and shown only as a label plus its last four characters afterwards.
  • weekday is the ISO weekday (1 = Monday … 7 = Sunday); time is local time in timezone. The send time follows daylight saving: 08:00 stays 08:00 local time all year.
  • Sections: kpis, campaigns, sources, recommendations, tasks, traffic (Besucher), search (Search Console). Without sections a new subscription gets kpis, campaigns, recommendations, tasks and traffic.
  • Subscriptions are personal: the endpoints under /v1/me/ need a dashboard session; another person's subscription answers 404. One e-mail subscription per subject (a second one answers 409 conflict with the existing subscriptionId), at most 50 per person.

GET /v1/me/report-subscriptions lists yours, PATCH /v1/me/report-subscriptions/{id} changes the schedule, sections, language or webhook or pauses it (enabled: false), DELETE removes it with its history. Resuming a subscription whose projects you can no longer see answers 409 conflict.

Content

SectionWhat it shows
kpisLeads (shop projects: purchases and revenue), qualified leads, ad spend, cost per lead or per purchase, each with the previous week; organization and portfolio reports add one line per project (best first, at most 10)
campaignsThe five campaigns with the most leads, with cost per lead
sourcesLeads and cost per platform (Google, Meta, LinkedIn, TikTok, without ads)
recommendationsUp to three open recommendations per project with the reason; members without access to ad costs see a note instead
tasksOpen alerts („Braucht Dich“) with a link to each
traffic„Besucher“ (project reports): Ø Besucher pro Tag with its change, Besuche and the share without ads with the previous week, the reason for the change („Warum?“: the channel group that moved most, its main source and the visits without ads), the best day, the visits from search engines (plus Google clicks when Search Console is connected), same-day returns (30-minute rule; returns on other days only above their consent gate). The first measured week has no comparison; a week under the project's minimum number of visits says so instead of showing figures
searchClicks, impressions, CTR and average position from Search Console with the previous week, plus the top queries

With a lead target for the month and „Im Wochenbericht zeigen“ switched on, the key numbers end with one line: „Im Oktober bisher 10 Anfragen, Ziel 25.“ Subscriptions that already showed the key numbers received the traffic section once when it was introduced; removing it in the wizard keeps it removed.

The report covers the last full ISO week (Monday to Sunday) before the send day, in the time zone of the subscription. Missing data is explained instead of left out: a week without visits says to check the installation, missing ad accounts or costs of one platform are named, and the search block says whether Search Console is not connected, expired, without permission or still syncing. Projects in different currencies are never summed. Demo projects are never sent.

Preview and test

POST /v1/me/report-preview renders exactly what would be sent – subject, text, HTML and the Slack message – without sending anything (week such as 2026-W41 picks another week). POST /v1/me/report-subscriptions/{id}/test answers 202 at once and sends right after, marked as a test; it does not replace the week's regular report. At most 10 tests per person and hour (429 rate_limited). GET /v1/me/report-subscriptions/{id}/deliveries shows recent deliveries with their status (queued, sending, sent, failed, skipped), attempts and error.

Errors of a delivery start with a code:

CodeMeaningWhat happens
destination_rejectedSlack refused the webhook (deleted, revoked, channel archived)Not retried – enter a new webhook and send a test
slack_unavailableSlack did not answer, answered 429 or 5xxRetried with backoff
mail_failedThe SMTP server did not accept the mailRetried with backoff
mail_not_configuredThe server has no SMTP (X3_SMTP_URL) in productionSkipped
no_accessYou lost access to the report's projectsSkipped, subscription paused
demo_onlyThe report would only contain demo projectsSkipped
missedThe scheduler did not run for more than three days after the send timeSkipped, the next week is sent normally

A successful delivery clears the last error of the subscription.

Delivery

The scheduler job reports.weekly runs every 5 minutes and sends every subscription whose time has come. Each report is sent at most once per subscription and week: a retried, repeated or overlapping run never sends twice. Failed deliveries are retried by reports.retry after 5 minutes, 30 minutes, 2 hours and 6 hours (at most 5 attempts).

E-mails go through the server's SMTP connection (X3_SMTP_URL, sender X3_MAIL_FROM); without it, development servers write the mail to the log and production servers skip it with mail_not_configured – see environment variables. Slack messages use incoming webhooks; no Slack app or extra configuration is needed.

Unsubscribe

Every e-mail carries an unsubscribe link and the List-Unsubscribe / List-Unsubscribe-Post headers, so mail clients offer one-click unsubscribe (RFC 8058). The link's token is the credential; opening the link shows what it refers to and unsubscribes only on the button:

EndpointPurpose
GET /v1/reports/unsubscribe/{token}What the link refers to (channel, scope, weekday and time)
POST /v1/reports/unsubscribe/{token}Unsubscribe (idempotent; also the one-click target)

Unsubscribing pauses the subscription; you can resume it under Konto › Wochenberichte.

Claude and MCP

ToolWhat it does
reports_previewRenders the weekly report of a project, an organization or all your projects (subject, text and Slack message) without sending
reports_listYour own subscriptions with schedule, status and next send – needs a personal sign-in (OAuth), not an API key

Subscribing and test sends stay in the dashboard.