How to Analyze Campaign Performance with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

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.yml for 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.md files) 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 .env files, 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

npm install -g openclaw

gspread

6.x

pip install gspread

slack_sdk

3.x

pip install slack_sdk

Paradime workspace

Active

paradime.io

Step 1 — Install OpenClaw

Step 2 — Set Up Google Sheets API Credentials

  1. Go to Google Cloud Console → Create or select a project.

  2. Enable the Google Sheets API.

  3. Create a Service Account under IAM → Service Accounts → Create.

  4. Download the JSON key file.

  5. Share your campaign metrics spreadsheet with the service account email (found as client_email in the JSON key).

Step 3 — Create an Incoming Slack Webhook

  1. Go to Slack API Apps → Create New App.

  2. Under Incoming Webhooks, activate and add a new webhook to your #campaign-insights channel.

  3. 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

GOOGLE_CREDENTIALS_JSON

Base64-encoded Google service account JSON key

Google Cloud Console → IAM → Service Accounts → Keys

OPENCLAW_API_KEY

API key for the LLM provider powering OpenClaw (e.g., Anthropic, OpenAI)

Your LLM provider's dashboard

SLACK_WEBHOOK_URL

Incoming webhook URL for your Slack channel

Slack API → Apps → Incoming Webhooks

CAMPAIGN_SHEET_ID

The Google Sheets spreadsheet ID

From the sheet URL: https://docs.google.com/spreadsheets/d/{SHEET_ID}/edit

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 Key and Value columns and upload all variables at once.

Setting Variables in OpenClaw

OpenClaw uses a layered environment variable system. The precedence order (highest first):

  1. Process environment (shell/daemon)

  2. .env in working directory

  3. Global ~/.openclaw/.env

  4. Config 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

0

At minute 0

Hour

8

At 08:00

Day of month

*

Every day

Month

*

Every month

Day of week

1

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, and sla events 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

paradime_schedules.yml not on default branch

Merge to main or click "Parse Schedules"

Schedule shows "OFF"

schedule: 'OFF' in YAML

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

  1. Google Sheets as the source of truth for campaign metrics — accessible to marketing teams, no SQL required.

  2. OpenClaw as the analytical agent — classifies campaigns, generates natural-language insights.

  3. Paradime Bolt as the scheduler — cron-based, with SLA monitoring, Slack/email alerts, and environment variable management.

  4. 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: paradime_schedules.yml, SKILL.md, campaign_report.py. No click-ops.

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 TARGETS dict 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_PCT based 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.

Useful links

Interested to Learn More?
Try Out the Free 14-Days Trial

Stop Managing Pipelines. Start Shipping Them.

Join the teams that replaced manual dbt™ workflows with agentic AI. Free to start, no credit card required.

Stop Managing Pipelines. Start Shipping Them.

Join the teams that replaced manual dbt™ workflows with agentic AI. Free to start, no credit card required.

Stop Managing Pipelines. Start Shipping Them.

Join the teams that replaced manual dbt™ workflows with agentic AI. Free to start, no credit card required.

Copyright © 2026 Paradime Labs, Inc. Made with ❤️ in San Francisco ・ London

*dbt® and dbt Core® are federally registered trademarks of dbt Labs, Inc. in the United States and various jurisdictions around the world. Paradime is not a partner of dbt Labs. All rights therein are reserved to dbt Labs. Paradime is not a product or service of or endorsed by dbt Labs, Inc.

Copyright © 2026 Paradime Labs, Inc. Made with ❤️ in San Francisco ・ London

*dbt® and dbt Core® are federally registered trademarks of dbt Labs, Inc. in the United States and various jurisdictions around the world. Paradime is not a partner of dbt Labs. All rights therein are reserved to dbt Labs. Paradime is not a product or service of or endorsed by dbt Labs, Inc.

Copyright © 2026 Paradime Labs, Inc. Made with ❤️ in San Francisco ・ London

*dbt® and dbt Core® are federally registered trademarks of dbt Labs, Inc. in the United States and various jurisdictions around the world. Paradime is not a partner of dbt Labs. All rights therein are reserved to dbt Labs. Paradime is not a product or service of or endorsed by dbt Labs, Inc.