home / skills / openclaw / skills / client-reporting

client-reporting skill

/skills/reighlan/client-reporting

This skill automates client reporting by pulling data from analytics and social sources to generate branded PDFs or HTML reports delivered automatically.

npx playbooks add skill openclaw/skills --skill client-reporting

Review the files below or copy the command above to add this skill to your agents.

Files (10)
SKILL.md
5.8 KB
---
name: client-reporting
description: "Automated client reporting for agencies and freelancers using OpenClaw. Pull data from Google Analytics, Google Search Console, social media platforms, and custom sources to generate branded weekly/monthly reports. Auto-deliver via email or Slack. Use when: (1) generating client reports, (2) pulling analytics data for reporting, (3) automating recurring reports, (4) creating branded PDF or HTML reports, (5) scheduling report delivery, or (6) tracking client KPIs over time."
---

# 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

```bash
pip3 install requests jinja2
```

### API Keys (configure in `config.json`)

- **Google Analytics 4** — `GA4_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

```bash
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:

```bash
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

```bash
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

```bash
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`:

```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:

```bash
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/`:

```html
<!-- templates/monthly.html -->
<html>
<head><style>/* brand styles */</style></head>
<body>
  <h1>Monthly Report — {{ client.name }}</h1>
  <p>{{ period.start }} to {{ period.end }}</p>
  
  <h2>Traffic Overview</h2>
  <table>
    <tr><td>Sessions</td><td>{{ ga4.sessions }}</td><td>{{ ga4.sessions_change }}%</td></tr>
    <tr><td>Users</td><td>{{ ga4.users }}</td><td>{{ ga4.users_change }}%</td></tr>
  </table>
  
  <h2>Search Performance</h2>
  <!-- ... -->
</body>
</html>
```

Customize templates per client by placing overrides in `clients/<name>/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

Overview

This skill automates client reporting for agencies and freelancers using OpenClaw. It pulls analytics from Google Analytics 4, Search Console, social platforms, and custom sources, then generates branded weekly, monthly, or custom reports. Reports can be rendered as HTML, PDF, or Markdown and auto-delivered via email or Slack. The workflow focuses on reliable, repeatable reporting and KPI tracking over time.

How this skill works

Configure global and per-client settings including GA4 property IDs, Search Console sites, social credentials, and branding. Scheduled tasks pull metrics, cache data, and render Jinja2 templates into the requested format. Delivery scripts send the generated report by SendGrid email or Slack webhook, and an optional cron integration automates pulling, generation, and delivery on a schedule.

When to use it

  • Generating consistent weekly or monthly reports for multiple clients.
  • Automating recurring report delivery by email or Slack to stakeholders.
  • Pulling cross-platform analytics (GA4, Search Console, social) into a single report.
  • Creating branded HTML or PDF reports for client presentations.
  • Tracking client KPIs and trends over time with scheduled snapshots.

Best practices

  • Store API keys and client-specific IDs in secure config files and limit access.
  • Start with a minimal template; iterate branding and metrics per client to avoid scope creep.
  • Cache raw metric pulls in the client data folder to enable re-generation without repeated API calls.
  • Use the scheduling JSON to align report timing with client timezones and reporting cadences.
  • Validate GA4 and Search Console service account permissions before scheduling automated pulls.

Example use cases

  • Weekly performance snapshot for an e-commerce client showing sessions, conversions, and top pages.
  • Monthly SEO review combining Search Console clicks/impressions with top-ranking pages and position changes.
  • Social media summary delivered to a client Slack channel with follower growth and top-performing posts.
  • Quarterly executive PDF that combines traffic, conversions, and strategic recommendations for a retainer client.
  • Custom ad-hoc report for a campaign window using a custom metric set and branded HTML output.

FAQ

Which formats are supported for final reports?

Markdown, HTML (branded), and PDF via HTML-to-PDF conversion.

How are recurring reports scheduled and delivered?

Define schedules in a JSON file with client, frequency, timezone, and delivery method; run an OpenClaw cron job to generate and deliver due reports.