← Back to Skills Marketplace
reighlan

Client Reporting Automation

by Tyler Hill · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
630
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install client-reporting
Description
Automated client reporting for agencies and freelancers using OpenClaw. Pull data from Google Analytics, Google Search Console, social media platforms, and c...
README (SKILL.md)

Client Reporting Automation

Pull metrics from multiple sources, generate branded reports, and auto-deliver to clients. Built for agencies and freelancers who need consistent, professional reporting without manual work.

Setup

Dependencies

pip3 install requests jinja2

API Keys (configure in config.json)

  • Google Analytics 4GA4_PROPERTY_ID + service account key
  • Google Search Console — service account key (see seo-audit-suite references)
  • Social platforms — same credentials as social-media-autopilot skill
  • SendGrid — for email delivery (SENDGRID_API_KEY)

Workspace

client-reports/
├── config.json           # Global settings, API keys
├── clients/              # Per-client configuration
│   └── client-name/
│       ├── config.json   # Client-specific settings (property IDs, branding)
│       ├── reports/      # Generated reports
│       └── data/         # Cached metrics data
├── templates/            # Report templates (Jinja2 HTML)
└── schedules.json        # Automated delivery schedule

Run scripts/init-workspace.sh to create this structure.

Core Workflows

1. Add a Client

scripts/add-client.sh --name "acme-corp" --domain "acme.com" --email "[email protected]"

Creates client directory with config template. Edit clients/acme-corp/config.json to add:

  • GA4 property ID
  • Search Console site URL
  • Social media handles
  • Branding (logo URL, brand colors)
  • Report preferences (metrics to include, frequency)

2. Pull Metrics

Fetch fresh data for a client:

scripts/pull-metrics.sh --client "acme-corp"                    # All sources
scripts/pull-metrics.sh --client "acme-corp" --source ga4       # Google Analytics only
scripts/pull-metrics.sh --client "acme-corp" --source gsc       # Search Console only
scripts/pull-metrics.sh --client "acme-corp" --source social    # Social metrics
scripts/pull-metrics.sh --client "acme-corp" --period 30d       # Last 30 days

Data sources and metrics:

Google Analytics 4:

  • Sessions, users, new users, bounce rate
  • Top pages by views
  • Traffic sources breakdown
  • Conversion events
  • Device/browser breakdown

Google Search Console:

  • Total clicks, impressions, CTR, avg position
  • Top queries by clicks
  • Top pages by impressions
  • Position changes vs previous period

Social Media:

  • Followers/following changes
  • Post engagement (likes, shares, comments)
  • Top performing posts
  • Reach/impressions

3. Generate Reports

scripts/generate-report.sh --client "acme-corp" --type monthly
scripts/generate-report.sh --client "acme-corp" --type weekly --format html
scripts/generate-report.sh --client "acme-corp" --type custom --metrics "traffic,rankings,social"

Report types:

  • weekly — 7-day snapshot with week-over-week changes
  • monthly — 30-day deep dive with month-over-month trends
  • quarterly — 90-day strategic overview
  • custom — pick specific metrics

Output formats:

  • Markdown — default, good for Slack/email
  • HTML — branded, professional, email-ready
  • PDF — via HTML-to-PDF conversion (requires wkhtmltopdf or similar)

4. Auto-Deliver Reports

scripts/deliver-report.sh --client "acme-corp" --latest         # Send most recent
scripts/deliver-report.sh --client "acme-corp" --via email      # Email delivery
scripts/deliver-report.sh --client "acme-corp" --via slack      # Slack webhook

5. Schedule Recurring Reports

Configure in schedules.json:

{
  "schedules": [
    {
      "client": "acme-corp",
      "type": "weekly",
      "day": "monday",
      "time": "09:00",
      "timezone": "America/Los_Angeles",
      "deliver_via": "email",
      "enabled": true
    },
    {
      "client": "acme-corp",
      "type": "monthly",
      "day_of_month": 1,
      "time": "09:00",
      "timezone": "America/Los_Angeles",
      "deliver_via": "email",
      "enabled": true
    }
  ]
}

Use with OpenClaw cron to automate: check schedules daily, generate and deliver due reports.

6. KPI Dashboard

Quick terminal dashboard for any client:

scripts/dashboard.sh --client "acme-corp"

Shows current period vs previous: traffic, rankings, social growth, conversions.

Report Template System

Templates use Jinja2 and live in templates/:

\x3C!-- templates/monthly.html -->
\x3Chtml>
\x3Chead>\x3Cstyle>/* brand styles */\x3C/style>\x3C/head>
\x3Cbody>
  \x3Ch1>Monthly Report — {{ client.name }}\x3C/h1>
  \x3Cp>{{ period.start }} to {{ period.end }}\x3C/p>
  
  \x3Ch2>Traffic Overview\x3C/h2>
  \x3Ctable>
    \x3Ctr>\x3Ctd>Sessions\x3C/td>\x3Ctd>{{ ga4.sessions }}\x3C/td>\x3Ctd>{{ ga4.sessions_change }}%\x3C/td>\x3C/tr>
    \x3Ctr>\x3Ctd>Users\x3C/td>\x3Ctd>{{ ga4.users }}\x3C/td>\x3Ctd>{{ ga4.users_change }}%\x3C/td>\x3C/tr>
  \x3C/table>
  
  \x3Ch2>Search Performance\x3C/h2>
  \x3C!-- ... -->
\x3C/body>
\x3C/html>

Customize templates per client by placing overrides in clients/\x3Cname>/templates/.

Cron Integration

  • Daily: Pull fresh metrics for all active clients
  • Weekly: Generate and deliver weekly reports (Monday AM)
  • Monthly: Generate and deliver monthly reports (1st of month)
  • Quarterly: Generate quarterly reviews

References

  • references/ga4-setup.md — Google Analytics 4 API setup and available metrics
  • references/report-customization.md — How to customize templates and metrics
Usage Guidance
This skill appears to do what it says, but review and control where your credentials live before installing: 1) Prefer pointing to an isolated service-account JSON on disk (ga4_credentials_file / search_console_credentials_file) rather than embedding secrets into config.json checked into source control. 2) Use a dedicated SendGrid API key with limited scopes and verify recipient addresses. 3) Slack delivery relies on webhooks — ensure webhook URLs are kept secret. 4) HTML templates reference client-provided logo URLs; external images in emails can leak metadata when recipients open them — consider inlining assets or hosting images on trusted storage. 5) Run the scripts in a controlled workspace (set CLIENT_REPORTS_DIR) and set restrictive file permissions on config/credential files. If you want higher assurance, request maintainer provenance (homepage/author) and a short security readme describing secret handling.
Capability Analysis
Type: OpenClaw Skill Name: client-reporting Version: 1.0.0 The skill bundle contains multiple critical vulnerabilities that could lead to remote code execution (RCE), data exfiltration, and server-side request forgery (SSRF). Specifically, `scripts/add-client.sh` is vulnerable to shell injection via the `--name` argument. Path traversal vulnerabilities exist across `scripts/dashboard.sh`, `scripts/deliver-report.sh`, `scripts/generate-report.sh`, and `scripts/pull-metrics.sh` due to unsanitized client names, which could allow reading arbitrary files. This is particularly critical in `scripts/deliver-report.sh`, where arbitrary file content could be exfiltrated via SendGrid or Slack. Furthermore, `scripts/generate-report.sh` is susceptible to server-side template injection (SSTI) via the `client_name` field in `config.json`, potentially leading to RCE. Finally, `scripts/pull-metrics.sh` has an SSRF vulnerability in its GSC fallback mechanism, allowing HTTP requests to arbitrary domains specified in `client_config.json`.
Capability Assessment
Purpose & Capability
Name/description (agency/freelancer client reporting) matches the code and instructions: scripts pull GA4/GSC/social placeholders, render templates with Jinja2, and deliver via SendGrid or Slack. Required tools (requests, jinja2, optional wkhtmltopdf) are appropriate for the stated functions.
Instruction Scope
SKILL.md and the bundled scripts give concrete commands and reference where credentials live (global config.json or env). The SKILL.md references using service account keys and SendGrid; scripts read global config.json and allow env fallbacks (e.g., SENDGRID_API_KEY, SLACK_WEBHOOK_URL, CLIENT_REPORTS_DIR). One minor mismatch: SKILL.md refers to 'social-media-autopilot' for social credentials (external skill convention) which may be confusing but not malicious.
Install Mechanism
No install spec; this is instruction-only plus shipped scripts. The runtime dependencies are Python packages installed via pip (requests, jinja2) — expected and low risk. There are no remote download-or-extract steps or third-party binary fetches in the repository.
Credentials
The skill requires credentials appropriate to its purpose (GA4 service account, GSC key, social API keys, SendGrid API key). The registry metadata shows no required env vars, but the scripts do accept env fallbacks (SENDGRID_API_KEY, SLACK_WEBHOOK_URL, CLIENT_REPORTS_DIR). Be aware secrets can be stored in the workspace config.json or as file paths to service-account JSON; storing credential files in project folders can be risky if the workspace is shared or checked into VCS.
Persistence & Privilege
Skill is not marked always:true, does not modify other skills or system-wide settings, and has no install step that persists new daemons or services. It writes files only within its workspace (clients/, templates/, data/, reports/).
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install client-reporting
  3. After installation, invoke the skill by name or use /client-reporting
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release: GA4, Search Console, branded reports, email/Slack delivery
Metadata
Slug client-reporting
Version 1.0.0
License
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Client Reporting Automation?

Automated client reporting for agencies and freelancers using OpenClaw. Pull data from Google Analytics, Google Search Console, social media platforms, and c... It is an AI Agent Skill for Claude Code / OpenClaw, with 630 downloads so far.

How do I install Client Reporting Automation?

Run "/install client-reporting" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Client Reporting Automation free?

Yes, Client Reporting Automation is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Client Reporting Automation support?

Client Reporting Automation is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Client Reporting Automation?

It is built and maintained by Tyler Hill (@reighlan); the current version is v1.0.0.

💬 Comments