Marketing Report Skill
A reporting playbook, not a new API integration: it composes the ga4, gsc, listmonk, and
postiz skills (whichever are configured — skip sections cleanly for ones that aren't), writes
the result to the shared marketing directory, and sends a short highlights summary.
This skill has no environment variables of its own. It inherits whatever subset of
GOOGLE_APPLICATION_CREDENTIALS/GA4_PROPERTY_ID/GSC_SITE_URL/LISTMONK_*/POSTIZ_* is set —
if a sibling skill's env is missing, report that section as "not connected" rather than failing
the whole report.
Workflow
- Pick the period. Weekly report = last 7 full days; monthly = last full calendar month.
Compute the date range explicitly (don't rely on a model's sense of "today" — use the
actual current date).
- Pull each data source that's configured:
ga4 skill → sessions/users/conversions by channel, top landing pages, week-over-week
or month-over-month deltas.
gsc skill → top queries and pages by clicks/impressions, average position movement,
any new/lost top-10 rankings.
listmonk skill → subscriber growth/churn, campaigns sent in the period and their
open/click/bounce rates.
postiz skill → posts published in the period per network, and engagement if the
connected network's integration surfaces it (not all do — note when it's unavailable).
seo-audit skill → only for the monthly report's SEO section (see below).
- Fill
references/report-template.md with the pulled numbers. Keep prose minimal — this
is a numbers-first report. Call out anomalies (a metric that moved >20% in either direction)
explicitly rather than burying them in a table.
- Write the file to:
STATE_DIR="${MARKETINGCLAW_STATE_DIR:-$HOME/.marketingclaw}"
OUT_DIR="$STATE_DIR/marketing/REPORTS"
mkdir -p "$OUT_DIR"
# Weekly: weekly-YYYY-WW.md (ISO week number). Monthly: monthly-YYYY-MM.md.
Use the Write tool to create $OUT_DIR/weekly-<year>-<ISO-week>.md (or
monthly-<year>-<month>.md), resolving $STATE_DIR to its actual value first — do not leave
the literal $STATE_DIR string in the path you pass to the tool.
- Send highlights, not the whole report, via the available message tool: 3-5 bullet points
(biggest win, biggest concern, one number that moved a lot) plus a pointer to the full file
path. Only escalate/flag loudly for real anomalies; a normal, uneventful week gets a short,
calm summary.
Monthly SEO section
For the monthly report only, run the seo-audit skill against 2-3 key pages (homepage plus
whatever the gsc data shows as top-traffic or most-changed) and fold a "top 3 SEO actions"
list into the report, sourced from that audit plus any notable gsc query/position movement.
Notes
- Never invent numbers for a data source that isn't configured — write "not connected (no
LISTMONK_URL set)" or similar instead of a placeholder.
- Keep the report file itself append-only across the archive (one file per period); don't
overwrite a prior period's file when generating a new one.
- If
$STATE_DIR/marketing/ doesn't exist yet (team not provisioned via setup-marketing),
create the REPORTS/ subdirectory but flag to the human that BRAND.md and the rest of the
shared directory look unset up.
1---2name: marketing-report3description: Producing the weekly/monthly marketing report — pulling GA4, Search Console, Listmonk, and Postiz numbers via the sibling skills, writing it to the shared REPORTS/ directory from a template, and sending the highlights.4---56# Marketing Report Skill78A reporting playbook, not a new API integration: it composes the `ga4`, `gsc`, `listmonk`, and9`postiz` skills (whichever are configured — skip sections cleanly for ones that aren't), writes10the result to the shared marketing directory, and sends a short highlights summary.1112This skill has no environment variables of its own. It inherits whatever subset of13`GOOGLE_APPLICATION_CREDENTIALS`/`GA4_PROPERTY_ID`/`GSC_SITE_URL`/`LISTMONK_*`/`POSTIZ_*` is set —14if a sibling skill's env is missing, report that section as "not connected" rather than failing15the whole report.1617## Workflow18191. **Pick the period.** Weekly report = last 7 full days; monthly = last full calendar month.20 Compute the date range explicitly (don't rely on a model's sense of "today" — use the21 actual current date).222. **Pull each data source that's configured:**23 - `ga4` skill → sessions/users/conversions by channel, top landing pages, week-over-week24 or month-over-month deltas.25 - `gsc` skill → top queries and pages by clicks/impressions, average position movement,26 any new/lost top-10 rankings.27 - `listmonk` skill → subscriber growth/churn, campaigns sent in the period and their28 open/click/bounce rates.29 - `postiz` skill → posts published in the period per network, and engagement if the30 connected network's integration surfaces it (not all do — note when it's unavailable).31 - `seo-audit` skill → only for the monthly report's SEO section (see below).323. **Fill `references/report-template.md`** with the pulled numbers. Keep prose minimal — this33 is a numbers-first report. Call out anomalies (a metric that moved >20% in either direction)34 explicitly rather than burying them in a table.354. **Write the file** to:36 ```bash37 STATE_DIR="${MARKETINGCLAW_STATE_DIR:-$HOME/.marketingclaw}"38 OUT_DIR="$STATE_DIR/marketing/REPORTS"39 mkdir -p "$OUT_DIR"40 # Weekly: weekly-YYYY-WW.md (ISO week number). Monthly: monthly-YYYY-MM.md.41 ```42 Use the Write tool to create `$OUT_DIR/weekly-<year>-<ISO-week>.md` (or43 `monthly-<year>-<month>.md`), resolving `$STATE_DIR` to its actual value first — do not leave44 the literal `$STATE_DIR` string in the path you pass to the tool.455. **Send highlights**, not the whole report, via the available message tool: 3-5 bullet points46 (biggest win, biggest concern, one number that moved a lot) plus a pointer to the full file47 path. Only escalate/flag loudly for real anomalies; a normal, uneventful week gets a short,48 calm summary.4950## Monthly SEO section5152For the monthly report only, run the `seo-audit` skill against 2-3 key pages (homepage plus53whatever the `gsc` data shows as top-traffic or most-changed) and fold a "top 3 SEO actions"54list into the report, sourced from that audit plus any notable `gsc` query/position movement.5556## Notes5758- Never invent numbers for a data source that isn't configured — write "not connected (no59 `LISTMONK_URL` set)" or similar instead of a placeholder.60- Keep the report file itself append-only across the archive (one file per period); don't61 overwrite a prior period's file when generating a new one.62- If `$STATE_DIR/marketing/` doesn't exist yet (team not provisioned via `setup-marketing`),63 create the `REPORTS/` subdirectory but flag to the human that `BRAND.md` and the rest of the64 shared directory look unset up.