How to Analyze Campaign Performance with OpenClaw in Paradime
Feb 26, 2026
How to Automate Campaign Performance Reporting with Paradime, OpenClaw, and Bolt
Marketing and analytics teams drown in campaign metrics scattered across spreadsheets, dashboards, and ad platforms. When performance dips, the first question is always: "How long before someone noticed?" This guide builds an automated campaign performance pipeline that reads metrics from Google Sheets, identifies top and bottom performers using OpenClaw's agentic intelligence, and fires a structured insight report to Slack — every Monday morning, hands-free.
We follow an incident-friendly approach: structured steps, a decision tree for diagnosing failures, and a relentless focus on time to first clue when something breaks. Every configuration is reproducible, every fix is minimal.
What is Paradime
Paradime is an AI-native data engineering platform — often described as "Cursor for Data" — that replaces dbt Cloud™. Teams use Paradime to code, ship, fix, and scale data pipelines for analytics and AI.
The three pillars of Paradime:
Pillar | What it does |
|---|---|
Code IDE | AI-assisted dbt™ and Python development with DinoAI, reducing rote-work by 83%+ |
Bolt | Production orchestration for dbt™ and Python pipelines — scheduling, CI/CD, alerts, and SLA monitoring |
Radar | FinOps layer to cut Snowflake and BigQuery costs |
For this guide, Bolt is the workhorse. It runs your campaign-performance script on a cron schedule, injects environment variables (secrets, API keys), and notifies you via Slack when runs succeed or fail.
A quick flavour of what a Bolt schedule looks like as code:
Paradime auto-checks
paradime_schedules.ymlfor changes every 10 minutes, or you can trigger an immediate parse from the Bolt UI.
What is OpenClaw
OpenClaw is an open-source, self-hosted AI agent platform (formerly known as Clawdbot). You run an always-on process called the Gateway on a machine you control — a Mac mini, a VPS, or a Cloudflare Worker — and it connects to messaging apps, runs agent turns, invokes tools, and sends responses back.
Key concepts:
Skills: Markdown-defined capabilities (in
SKILL.mdfiles) that teach the agent how to use tools — Google Sheets reading, Slack posting, data analysis.Tools: Low-level primitives like shell access, browser automation, or API calls.
Channels: Integrations with Slack, Telegram, Discord, WhatsApp, and more.
Environment variables: API keys and secrets managed via
.envfiles, config JSON, or process environment with a strict precedence chain.
For campaign performance, OpenClaw acts as the analytical brain — it reads structured metrics, compares them against targets, and generates a natural-language insight report.
Figure 1: End-to-end campaign performance pipeline — Bolt triggers OpenClaw, which reads from Google Sheets, analyzes, and posts to Slack.
Setup: openclaw-sdk + Google Sheets API + Slack SDK
Prerequisites
Component | Version | Install |
|---|---|---|
Python | 3.10+ | System package manager |
Node.js | 18+ | Required for OpenClaw Gateway |
OpenClaw | Latest |
|
gspread | 6.x |
|
slack_sdk | 3.x |
|
Paradime workspace | Active |
Step 1 — Install OpenClaw
Step 2 — Set Up Google Sheets API Credentials
Go to Google Cloud Console → Create or select a project.
Enable the Google Sheets API.
Create a Service Account under IAM → Service Accounts → Create.
Download the JSON key file.
Share your campaign metrics spreadsheet with the service account email (found as
client_emailin the JSON key).
Step 3 — Create an Incoming Slack Webhook
Go to Slack API Apps → Create New App.
Under Incoming Webhooks, activate and add a new webhook to your
#campaign-insightschannel.Copy the webhook URL.
Step 4 — Install Python Dependencies
Step 5 — Create the OpenClaw Campaign Analysis Skill
Create the skill directory and SKILL.md:
Refresh skills:
Script: Campaign Metrics Pipeline
Below is the complete Python script that forms the core of the pipeline. It reads campaign metrics from Google Sheets, compares against targets, identifies top and bottom performers, and sends a formatted insight report to Slack.
scripts/campaign_report.py
Decision Tree: Campaign Classification Logic
Figure 2: Decision tree for classifying campaigns as top/bottom performers based on multi-metric scoring.
Environment Variables
All secrets live in environment variables — never in code, never in Git. Configure these in Paradime Bolt (Settings → Workspaces → Environment Variables → Bolt Schedules section) or in OpenClaw's ~/.openclaw/.env.
Variable | Description | Where to get it |
|---|---|---|
| Base64-encoded Google service account JSON key | Google Cloud Console → IAM → Service Accounts → Keys |
| API key for the LLM provider powering OpenClaw (e.g., Anthropic, OpenAI) | Your LLM provider's dashboard |
| Incoming webhook URL for your Slack channel | Slack API → Apps → Incoming Webhooks |
| The Google Sheets spreadsheet ID | From the sheet URL: |
Setting Variables in Paradime Bolt
Navigate to Settings → Workspaces → Environment Variables → Bolt Schedules → Add New:
Tip: You can also use Paradime's Bulk Upload feature — prepare a CSV with
KeyandValuecolumns and upload all variables at once.
Setting Variables in OpenClaw
OpenClaw uses a layered environment variable system. The precedence order (highest first):
Process environment (shell/daemon)
.envin working directoryGlobal
~/.openclaw/.envConfig env block in
~/.openclaw/openclaw.json
Or in openclaw.json:
Bolt Schedule: Cron Weekly Monday
Here is the complete paradime_schedules.yml that triggers the campaign report pipeline every Monday at 8:00 AM UTC:
Schedule Breakdown
Cron field | Value | Meaning |
|---|---|---|
Minute |
| At minute 0 |
Hour |
| At 08:00 |
Day of month |
| Every day |
Month |
| Every month |
Day of week |
| Monday only |
Use crontab.guru to visualize and validate your cron expressions.
How Bolt Picks Up Changes
Paradime reads paradime_schedules.yml from your default branch (main or master). It auto-detects changes every 10 minutes. For immediate updates, click "Parse Schedules" in the Bolt UI.
Figure 3: Sequence diagram showing the Monday morning execution cycle — from Git merge to Slack report delivery.
Monitoring and Debugging
An incident-friendly monitoring setup means you can go from "something broke" to "here's the root cause" in under 5 minutes. Here's how.
Bolt Run Monitoring
Paradime Bolt provides built-in observability:
Run History: View all past executions, their status (passed/failed/running), duration, and SLA compliance in the Bolt UI.
Notifications: Configure per-schedule alerts for
passed,failed, andslaevents to email, Slack, or Microsoft Teams.Alert Templates: Customize the content and structure of Slack/Teams notifications using Bolt Alert Templates.
System Alerts: Workspace-level notifications for parse errors, OOM kills, Git clone failures, and 24-hour run timeouts.
dbt™ Debugging
When dbt run or dbt test fails inside a Bolt schedule:
Paradime's DinoAI provides AI-powered debugging directly inside the Bolt UI — it reads your error logs and suggests fixes, reducing MTTR by up to 70%.
OpenClaw Debugging
Using dbt™-llm-evals for Quality Monitoring
If your pipeline includes AI-generated content (e.g., campaign copy suggestions), you can layer in dbt™-llm-evals to monitor output quality:
After running, query the evaluation results:
Troubleshooting Common Issues
Use this decision tree to triage failures fast. The goal: time to first clue under 2 minutes.
Figure 4: Troubleshooting decision tree — follow the path from failure to fix.
Issue-by-Issue Reference
1. EnvironmentError: GOOGLE_CREDENTIALS_JSON is not set
Time to first clue: Check Bolt env vars.
Root cause: Variable not configured in Bolt, or set only in Code IDE (dev) instead of Bolt Schedules (production).
Minimal fix: Add the variable in Bolt Schedules section. No code changes needed.
2. gspread.exceptions.APIError: 403 PERMISSION_DENIED
Time to first clue: 30 seconds — check sheet sharing.
Root cause: The Google Sheet isn't shared with the service account email.
Minimal fix: Open the sheet → Share → paste the service account email → Viewer permission.
3. RuntimeError: Slack webhook failed: 404
Time to first clue: Test the webhook URL directly.
Root cause: Webhook URL is invalid, expired, or the Slack app was uninstalled.
Minimal fix: Regenerate the webhook in Slack API → Apps → Incoming Webhooks. Update the env var in Bolt.
4. ValueError: No data found in sheet
Time to first clue: Open the sheet manually.
Root cause: Wrong CAMPAIGN_SHEET_ID, wrong worksheet name, or the sheet is genuinely empty.
Minimal fix: Verify the sheet ID from the URL (https://docs.google.com/spreadsheets/d/{THIS_PART}/edit). Confirm the worksheet tab is named Sheet1 or update the range_name parameter.
5. Bolt Schedule Not Running
Time to first clue: Check the Bolt UI → Schedules list.
Symptom | Likely cause | Fix |
|---|---|---|
Schedule not listed |
| Merge to |
Schedule shows "OFF" |
| Change to a valid cron expression |
Schedule listed but never fires | Wrong cron expression | Validate at crontab.guru |
Schedule fires but fails immediately | Git clone error | Check Bolt System Alerts; verify branch exists |
6. OpenClaw Skill Not Triggering
Root cause: Skill directory not in the correct path, or SKILL.md has invalid YAML frontmatter.
Minimal fix: Verify the path is ~/.openclaw/skills/campaign-analyzer/SKILL.md and the frontmatter includes name and description.
Wrapping Up
This pipeline gives you a reproducible, incident-friendly campaign performance monitoring system:
Figure 5: The two operational modes — the happy path (weekly cycle) and the incident path (failure → fix → re-trigger).
What you built
Google Sheets as the source of truth for campaign metrics — accessible to marketing teams, no SQL required.
OpenClaw as the analytical agent — classifies campaigns, generates natural-language insights.
Paradime Bolt as the scheduler — cron-based, with SLA monitoring, Slack/email alerts, and environment variable management.
Slack as the delivery channel — every Monday, your team gets a formatted report without lifting a finger.
Key principles followed
Principle | How we applied it |
|---|---|
Reproducibility | Everything is code: |
Time to first clue | Decision tree maps every failure to a diagnostic command in under 2 minutes. |
Minimal fixes | Each issue has a single, scoped fix. No "rebuild everything" advice. |
Incident-friendly | Bolt notifications fire on failure + SLA breach. Alert templates let you customize what the on-call sees. |
Next steps
Add more metrics: Extend
TARGETSdict with new KPIs (e.g.,Impressions,Click Volume).Multi-sheet support: Read from multiple sheets (one per ad platform) and merge before classification.
Historical tracking: Store weekly results in a dbt™ model for trend analysis over time.
Threshold tuning: Adjust
THRESHOLD_PCTbased on your team's tolerance — start strict, loosen as you learn.LLM-powered insights: Point OpenClaw at historical data to generate forward-looking recommendations, not just retrospective reports.

