How to Generate Executive Dashboards with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

How to Build an Automated Executive KPI Dashboard with Paradime, OpenClaw, and Slack

Every Monday morning, the same ritual plays out across data teams: someone manually pulls numbers from spreadsheets, pastes them into a document, writes a narrative, and pushes it to Slack before the leadership standup. By the time it lands, the data is stale and the analyst is exhausted.

What if that entire workflow — measure → identify → fix → validate — ran itself while you slept?

This guide walks you through building an automated executive KPI dashboard that reads live metrics from Google Sheets, uses OpenClaw to generate an AI-powered narrative with trends, highlights, and concerns, and delivers it to Slack every Monday at 7 AM via Paradime Bolt. No vague "optimize your reporting" advice here — every step is a concrete, repeatable action.

Figure 1: End-to-end automation flow — from KPI spreadsheets to executive Slack briefing, orchestrated by Paradime Bolt on a weekly cron schedule.

What Is Paradime?

Paradime is an all-in-one AI platform that replaces dbt Cloud™. It lets you code, ship, fix, and scale data pipelines for analytics and AI from a single workspace. For this project, we care about three capabilities:

  • Code IDE — An AI-native development environment with full terminal access, Python support, and DinoAI-powered code generation that cuts dbt™ and Python development time by 83%+.

  • Bolt — A production orchestration engine that runs dbt™ commands and Python scripts on configurable cron schedules, with Slack/email notifications, environment variable management, and 99.9% uptime guarantee.

  • Radar — FinOps tooling for Snowflake and BigQuery cost optimization (relevant when your dashboards later need warehouse queries).

Bolt is the workhorse of this build. It lets you define schedules as YAML code committed to your Git repo, run Python scripts alongside dbt™ commands, and store secrets as environment variables — all without leaving the platform.

Why Paradime over raw cron + a VM? Bolt gives you version-controlled scheduling, built-in notification routing, AI-powered error debugging (DinoAI resolves failures in ~10 seconds), and a full run-history dashboard. You configure once and forget.

What Is OpenClaw?

OpenClaw is an open-source AI agent framework (formerly Moltbot/Clawdbot) with 68,000+ GitHub stars. It runs as a local Node.js service that connects large language models to real-world tools — files, APIs, chat apps, browsers, and custom plugins.

For our use case, OpenClaw acts as the narrative engine: we register a custom tool that accepts raw KPI data and returns a structured executive summary with trend analysis, highlights, and risk flags. The key architectural features we leverage:

  • Plugin SDK — Register custom tools via api.registerTool() that the AI agent can invoke during execution.

  • Model-agnostic — Bring your own API key for Anthropic Claude, OpenAI GPT, or run local models.

  • Cron + Slack integration — Native cron scheduler and Slack channel plugin for automated delivery.

  • Persistent memory — Maintains context across sessions so the agent can compare this week's KPIs against last week's.

Figure 2: OpenClaw's plugin architecture — the Python script sends KPI data to the gateway, which routes it through the registered tool to the LLM, returning a structured executive narrative.

Setup: openclaw-sdk + Google Sheets API + Slack SDK

Prerequisites

Component

Purpose

Install

Python 3.11+

Script runtime

System / pyenv

Poetry

Dependency management

pip install poetry

OpenClaw

AI narrative generation

npm install -g openclaw@latest

Google Service Account

Sheets API access

Google Cloud Console

Slack App

Webhook delivery

Slack API Portal

Step 1: Initialize Your Project

Inside your Paradime-connected dbt™ project repo, create the dashboard script directory:

Step 2: Configure Poetry Dependencies

Create a pyproject.toml at your project root (or extend your existing one):

Step 3: Set Up Google Sheets API

  1. Create a service account in Google Cloud Console with the Sheets API enabled.

  2. Download the JSON credentials file.

  3. Share each KPI spreadsheet with the service account email (e.g., dashboard-bot@your-project.iam.gserviceaccount.com).

Authentication in Python uses gspread with service account credentials:

Step 4: Register an OpenClaw KPI Analyzer Tool

Create an OpenClaw plugin that accepts structured KPI data and returns an executive narrative. In your OpenClaw workspace, create a plugin file:

Add the plugin to your OpenClaw config:

Step 5: Configure the Slack Webhook

  1. Create a Slack app at api.slack.com/apps.

  2. Enable Incoming Webhooks and create one for your #exec-dashboard channel.

  3. Copy the webhook URL — it will look like https://hooks.slack.com/services/T00000000/B00000000/XXXX.

Quick test from Python:

The Script: Read KPIs, Generate Narrative, Deliver to Slack

Here is the complete Python script that ties everything together. Save it as scripts/executive_dashboard/run.py:

Figure 3: Sequence diagram showing the full execution flow — Bolt triggers the script, which reads from Sheets, calls OpenClaw for narrative generation, and delivers via Slack.

Environment Variables

All secrets and configuration live as Paradime Bolt environment variables — never hardcoded. Here's the complete list:

Variable

Description

Where to Get It

GOOGLE_CREDENTIALS_JSON

Full JSON content of Google service account key

Google Cloud Console → IAM → Service Accounts

OPENCLAW_API_KEY

Bearer token for OpenClaw gateway HTTP endpoint

OpenClaw config: openclaw config get gateway.apiKey

OPENCLAW_GATEWAY_URL

URL of your OpenClaw gateway (default: http://localhost:18789)

Your deployment URL

SLACK_WEBHOOK_URL

Incoming webhook URL for your Slack channel

Slack App → Incoming Webhooks

REVENUE_SHEET_KEY

Google Sheets spreadsheet ID for Revenue

From the sheet URL

MARKETING_SHEET_KEY

Google Sheets spreadsheet ID for Marketing

From the sheet URL

PRODUCT_SHEET_KEY

Google Sheets spreadsheet ID for Product

From the sheet URL

SUPPORT_SHEET_KEY

Google Sheets spreadsheet ID for Support

From the sheet URL

Adding Variables in Paradime

  1. Navigate to Settings → Workspaces → Environment Variables.

  2. In the Bolt Schedules section, click Add New.

  3. Enter the key name (e.g., GOOGLE_CREDENTIALS_JSON) and paste the value.

  4. Click the save icon (💾).

For bulk upload, prepare a CSV with Key,Value columns and use the Bulk Upload button.

Pro tip: For the GOOGLE_CREDENTIALS_JSON variable, paste the entire JSON content of your service account key file as a single-line string. The Python script parses it with json.loads().

Reference: Paradime Bolt Schedule Environment Variables

Bolt Schedule: Cron Monday 7 AM

Option A: Schedules as Code (Recommended)

Add the following to your paradime_schedules.yml file at the root of your dbt™ project:

Cron expression breakdown:

Important: Paradime uses standard cron syntax with days 0–6 (Sunday=0, Monday=1). Validate your expression at crontab.guru. The first command in any Bolt schedule using Python must be poetry install to set up the virtual environment.

Option B: UI-Based Schedule

  1. Navigate to Bolt → Create Schedule.

  2. Set the name to executive-kpi-dashboard.

  3. Under Command Settings, add:

  4. Under Trigger Type, select Scheduled Run and enter cron: 0 7 * * 1.

  5. Set timezone to America/New_York.

  6. Configure notifications for failure events.

Deployment

Paradime reads paradime_schedules.yml from your default branch (main/master) and checks for changes every 10 minutes. For immediate deployment, navigate to Bolt and click Parse Schedules.

Figure 4: Bolt schedule lifecycle — from YAML commit to conditional execution and notification routing.

Reference: Paradime Schedules as Code

Monitoring and Debugging

Once your schedule is live, Paradime Bolt provides comprehensive observability without any additional tooling.

Run History Dashboard

Navigate to Bolt → Schedules → executive-kpi-dashboard → Run History to see:

  • Execution Time History — A 30-day graph showing success/error rates, execution duration trends, and total run counts.

  • Run History Table — Every execution with Run ID, status (Success/Error/Skipped), trigger source (Scheduler/Manual), branch, commit, timestamp, and duration.

Click any Run ID to drill into the detailed log, which shows stdout/stderr from each command in sequence.

DinoAI-Powered Debugging

When a run fails, Paradime's DinoAI automatically analyzes the error and provides actionable fix suggestions — reducing mean time to resolution (MTTR) from 30 seconds to ~10 seconds. This is especially useful when:

  • A Google Sheets API rate limit is hit (300 requests/60s per project)

  • The OpenClaw gateway is unreachable

  • A Slack webhook URL has been rotated

OpenClaw Monitoring

On the OpenClaw side, monitor agent execution with:

Alerting Strategy

Event

Alert Channel

Threshold

Bolt run failure

Slack #data-alerts + email

Any failure

SLA breach (>15 min)

Email to owner

sla_minutes: 15

OpenClaw gateway down

OpenClaw heartbeat → Slack

Heartbeat interval miss

Google Sheets API 429

Script stderr in Bolt logs

Rate limit error

Figure 5: Monitoring and alerting architecture — Bolt, DinoAI, and OpenClaw each feed into unified Slack and email alert channels.

Reference: Viewing Run Log History

Troubleshooting Common Issues

Paradime Bolt Issues

Error

Cause

Fix

PARA-1000: Missing production warehouse connection

No production warehouse configured

Add connection in Settings → Connections (docs)

poetry install fails

Missing pyproject.toml in repo root

Ensure pyproject.toml is committed to your default branch

Python script not found

Wrong path in command settings

Verify path relative to repo root: python scripts/executive_dashboard/run.py

Environment variable empty

Variable set in Code IDE, not Bolt

Move variable to Settings → Environment Variables → Bolt Schedules section

Schedule not triggering

YAML not on default branch

Merge paradime_schedules.yml to main; click Parse Schedules to force sync

PARA-1003: Could not read from remote repository

GitHub API down

Check githubstatus.com; manually trigger run after recovery

OpenClaw Issues

Error

Cause

Fix

cron: scheduler disabled

Cron not enabled in config

Run openclaw config set cron.enabled true and restart gateway

cron: timer tick failed

Scheduler crash

Check openclaw logs --follow for stack trace; restart with openclaw gateway restart

Gateway timeout on /v1/chat/completions

HTTP endpoint disabled by default

Enable in config: openclaw config set gateway.http.enabled true

Delivery target missing/invalid

Channel not properly configured

Run openclaw channels status --probe to verify Slack channel connection

Wrong execution time

Timezone mismatch

Cron without --tz uses gateway host timezone; set explicitly: openclaw cron add --tz America/New_York

Empty narrative returned

API key invalid or model unavailable

Verify key with openclaw agent --message "ping" --thinking low; check model availability

Google Sheets API Issues

Error

Cause

Fix

gspread.exceptions.APIError: 403

Spreadsheet not shared with service account

Share sheet with service account email

gspread.exceptions.APIError: 429

Rate limit exceeded

Add time.sleep(1) between sheet reads; use batch_get() to reduce calls

json.JSONDecodeError

Malformed GOOGLE_CREDENTIALS_JSON

Ensure the full JSON is stored as a single-line string; validate with python -c "import json; json.loads('''...*''')"

Slack Webhook Issues

Error

Cause

Fix

404 Not Found

Webhook URL deleted or rotated

Regenerate webhook in Slack app settings; update SLACK_WEBHOOK_URL env var

message too long

Narrative exceeds Slack block limit (3000 chars)

Add truncation logic in post_to_slack() or split into multiple blocks

channel_not_found

Channel was archived or renamed

Recreate webhook for the current channel

Figure 6: Troubleshooting decision tree — quickly isolate which stage of the pipeline failed and apply the targeted fix.

Wrapping Up

You now have a fully automated executive KPI dashboard that follows a disciplined measure → identify → fix → validate workflow:

  1. Measure — The Python script authenticates with Google Sheets and pulls the latest KPI data from four department spreadsheets using gspread.

  2. Identify — OpenClaw's AI agent analyzes the raw data and generates a structured executive narrative with trends, highlights, and concerns.

  3. Fix/Deliver — The narrative is formatted as rich Slack blocks and posted to #exec-dashboard via webhook.

  4. Validate — Paradime Bolt logs every run with status, duration, and full stdout/stderr. DinoAI catches failures instantly.

The entire pipeline runs every Monday at 7 AM Eastern, triggered by a single cron expression in paradime_schedules.yml. No manual spreadsheet copying. No stale data. No exhausted analyst.

What to Build Next

  • Add warehouse KPIs — Use dbt™ models in the same Bolt schedule to pull metrics directly from Snowflake or BigQuery before the Python script runs.

  • Historical comparison — Leverage OpenClaw's persistent memory to compare this week's briefing against last week's and surface week-over-week deltas.

  • Multi-channel delivery — Extend to email via SendGrid or Microsoft Teams using OpenClaw's 22+ channel integrations.

  • Cost monitoring — Use Paradime Radar to track the warehouse cost of any SQL-based KPI queries and include FinOps data in the briefing.

The code, YAML, and OpenClaw plugin from this guide are all version-controlled in your Git repo. Clone it, swap in your sheet IDs, and ship your first automated briefing this Monday.

References:

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.