How to Post Weekly Team Metrics to Slack with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

Automate Weekly Metrics Delivery to Slack with Paradime, OpenClaw, and Google Sheets

Stop manually pulling numbers every Friday. Wire up a Paradime + OpenClaw pipeline that reads your metrics spreadsheet, calculates week-over-week trends, and drops a formatted summary into Slack — on autopilot.

What Is Paradime?

Paradime is the all-in-one, AI-native data platform that replaces dbt Cloud™. It gives fast-moving data teams a single pane of glass to code, ship, fix, and scale data pipelines for analytics and AI. Three pillars matter for this guide:

Pillar

What It Does

Code IDE

AI-assisted dbt™ and Python development with DinoAI, lineage, and live data samples

Bolt

Production-grade dbt™ orchestration — cron schedules, CI/CD, Slack/Teams notifications, and environment-variable management — all through a UI

Radar

FinOps dashboard that surfaces Snowflake and BigQuery cost outliers before your CFO does

Paradime is SOC 2 Type II certified, GDPR & CCPA compliant, and guarantees 99.9% uptime, so your credentials and pipeline state are locked down from day one.

Why does this matter here? Bolt is the scheduler that will fire our metrics script every Friday at 5 PM, and its UI-driven environment-variable vault is where sensitive keys live — no .env files scattered across laptops.

What Is OpenClaw?

OpenClaw is an open-source AI agent runtime that runs locally on your hardware and orchestrates tasks across chat apps, files, the web, and your operating system. It is not an LLM — it connects to models like Claude or GPT via API and uses skills and cron jobs to act.

Key concepts:

  • Gateway — the always-on daemon that manages agent sessions, cron jobs, and channel routing.

  • Skills — installable plugins (Google Sheets, Slack, GitHub, etc.) that give the agent tool access.

  • Cron Jobs — built-in scheduler with at, every, and cron schedule types, plus delivery targets (Slack channel, webhook, etc.).

OpenClaw's local-first model means your Google credentials JSON and Slack tokens never leave your machine — a meaningful security win over cloud-hosted agent platforms.

Architecture Overview

Before diving into code, here is the end-to-end flow:

Figure 1: End-to-end flow — Bolt triggers OpenClaw, which reads Google Sheets, crunches numbers, and posts to Slack.

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

Prerequisites

Tool

Version

Install

Node.js

≥ 22

nodejs.org

OpenClaw

latest

npm install -g openclaw

Python

≥ 3.10

python.org

gspread

latest

pip install gspread

slack_sdk

latest

pip install slack_sdk

1. Install and Configure OpenClaw

During onboarding, choose your preferred LLM provider (Anthropic, OpenAI, or OpenRouter) and paste in your API key. OpenClaw stores the key in ~/.openclaw/openclaw.json:

2. Install the Google Sheets Skill

Then authenticate:

This launches the OAuth flow. Once complete, tokens are stored locally — never shipped to a third-party server.

Tip: For headless / CI environments, use a GCP service-account JSON key instead of the OAuth flow. Drop the key file at a secure path and reference it via the GOOGLE_CREDENTIALS_JSON env var.

3. Set Up Your Slack App

Head to api.slack.com/apps and create a new app. Add these Bot Token Scopes:

  • channels:join

  • channels:read

  • chat:write

  • files:write

  • users:read

Install the app to your workspace, copy the Bot User OAuth Token (xoxb-...), and enable Socket Mode (grab the App-Level Token xapp-...).

Wire both tokens into OpenClaw:

Or set them as environment variables:

Environment Variables

Three secrets power this pipeline. Here is where each one lives and what it does:

Variable

Purpose

Where to Store

GOOGLE_CREDENTIALS_JSON

Service-account key for Google Sheets API access

Paradime Bolt env vars or ~/.openclaw/.env

SLACK_BOT_TOKEN

Bot token for posting messages to Slack

Paradime Bolt env vars or OpenClaw config

OPENCLAW_API_KEY

API key for the LLM provider OpenClaw connects to

~/.openclaw/openclaw.json env block

Storing Secrets in Paradime Bolt

Paradime's UI-driven vault is the cleanest option for production:

  1. Open 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. Hit the 💾 save icon.

Figure 2: Adding environment variables through the Paradime UI — no config files, no drift.

These variables are available to every Bolt schedule by default, but you can override them per-schedule when staging and production need different credentials.

Storing Secrets in OpenClaw

OpenClaw uses a layered precedence model (highest → lowest):

  1. Process environment (parent shell / daemon)

  2. .env in current working directory

  3. Global .env at ~/.openclaw/.env

  4. Config env block in ~/.openclaw/openclaw.json

Security note: OpenClaw never overrides an existing env var. If you set SLACK_BOT_TOKEN in your shell, the .env file will not clobber it. This protects against accidental credential leaks in shared environments.

The Script: Read Metrics, Calculate Trends, Post to Slack

Here is a complete Python script that does the heavy lifting. Save it as weekly_metrics.py in your dbt™ project repo:

How the Script Works

Figure 3: Script execution flow — authenticate, read, compute, format, post.

The script is intentionally framework-free. It uses gspread for Sheets, slack_sdk for Slack, and standard-library JSON/os — nothing else. This keeps the dependency footprint tiny and makes debugging straightforward.

Bolt Schedule: Cron Every Friday at 5 PM

Option A: UI-Driven Schedule (Recommended)

  1. Navigate to Bolt → Schedules → Create Schedule.

  2. Set the Schedule Type to Standard.

  3. Under Commands, add:

  4. Under Trigger, choose Scheduled Run and enter the cron expression:

  5. Set Timezone to your team's local timezone (e.g., America/New_York).

  6. Under Notifications, add your Slack channel so you get alerted if the schedule itself fails.

  7. Click Save.

Pro tip: Validate your cron expression at crontab.guru before saving.

Option B: Schedules as Code (YAML)

If you prefer version-controlled schedules, add this to your paradime_schedules.yml:

Paradime scans for changes to this file every 10 minutes, or you can trigger a manual parse from the Bolt UI.

Option C: OpenClaw Cron Job

If you want OpenClaw itself to be the scheduler (instead of Bolt), create a cron job via the gateway:

When to pick which: Use Bolt when the script lives inside your dbt™ project and you want unified observability across all your dbt™ runs. Use OpenClaw cron when the agent needs to reason about the output (e.g., add commentary, flag anomalies) before posting.

Connecting dbt™ to the Picture

You might wonder: "Where does dbt™ fit in?" Great question. The metrics in your Google Sheet likely originate from dbt™ models running in your warehouse. A typical pattern looks like this:

Figure 4: dbt™ models feed the warehouse, a sync job pushes KPIs to Google Sheets, and our script delivers the summary to Slack.

If you're using Paradime's Code IDE, you can validate those models with dbt™-llm-evals for AI-generated content. A quick setup looks like this:

This gives you warehouse-native evaluation of any AI-generated content your pipelines produce — a nice complement to the metrics delivery pipeline we're building here.

Monitoring and Debugging

Bolt Run History

After your first Friday run, head to Bolt → Schedules → weekly-metrics-to-slack and click into the run. You'll see:

  • Status: passed / failed / running

  • Logs: full stdout/stderr from the Python script

  • Duration: how long the run took

  • DinoAI Debugging: if a run fails, Paradime's AI assistant can analyze the error and suggest a fix directly in the UI

OpenClaw Gateway Logs

If you're using OpenClaw as the scheduler, check the gateway logs:

Or tail the log file directly:

Slack Delivery Verification

Add a simple health check to the end of your script:

Monitoring Checklist

Figure 5: Monitoring decision tree — follow the arrows to diagnose failures fast.

Troubleshooting Common Issues

🔴 google.auth.exceptions.DefaultCredentialsError

Cause: The GOOGLE_CREDENTIALS_JSON env var is missing or contains malformed JSON.

Fix:

  1. Verify the variable exists in Bolt: Settings → Workspaces → Environment Variables → Bolt Schedules.

  2. Ensure the value is the entire JSON key (not a file path).

  3. Test locally:

🔴 slack_sdk.errors.SlackApiError: not_in_channel

Cause: The Slack bot hasn't been added to the target channel.

Fix:

  1. Open the Slack channel → click the channel name → Integrations → Add apps.

  2. Find your bot and add it.

  3. Alternatively, grant the channels:join scope and call client.conversations_join(channel=SLACK_CHANNEL) in your script.

🔴 gspread.exceptions.SpreadsheetNotFound

Cause: The service account email doesn't have access to the spreadsheet.

Fix:

  1. Open the Google Sheet → Share → paste the service account email (found in your credentials JSON under client_email).

  2. Grant Viewer access (read-only is sufficient).

🔴 ValueError: Need at least two weeks of data

Cause: Your spreadsheet has fewer than two data rows.

Fix: Ensure at least two weeks of metrics are present. The script reads the last two rows to compute deltas.

🔴 OpenClaw Cron Job Fires but No Slack Message Appears

Cause: The delivery.to channel ID is wrong, or the bot token lacks chat:write scope.

Fix:

  1. Get the correct channel ID: right-click the channel in Slack → View channel details → copy the ID at the bottom.

  2. Verify bot scopes at api.slack.com/appsOAuth & Permissions.

🔴 Bolt Schedule Shows "Suspended"

Cause: The paradime_schedules.yml has suspended: true, or the schedule was manually suspended in the UI.

Fix:

  1. In YAML: set suspended: false (or remove the key entirely).

  2. In UI: navigate to the schedule and toggle it back to active.

Wrapping Up

Here's what we built:

  1. A Python script (weekly_metrics.py) that authenticates with Google Sheets, reads the last two weeks of KPIs, computes week-over-week deltas with trend indicators, and posts a rich Block Kit summary to Slack.

  2. A Paradime Bolt schedule that fires the script every Friday at 5 PM using a simple cron expression (0 17 * * 5) — with environment variables managed through a secure, UI-driven vault instead of scattered .env files.

  3. An OpenClaw integration that connects Slack as a delivery channel, handles Google Sheets authentication through its skills system, and optionally serves as an alternative scheduler with built-in agent reasoning.

Figure 6: The complete stack — secrets management, scheduling, execution, and delivery.

The entire setup takes about 30 minutes. No Airflow DAGs, no Lambda functions, no Docker containers. Just a Python script, a UI-configured schedule, and secrets that stay where they belong.

What to explore next:

  • Add Paradime Slack notifications to alert on dbt™ test failures alongside your metrics summary.

  • Use dbt™-llm-evals to evaluate AI-generated content in your warehouse.

  • Extend the OpenClaw agent to comment on anomalies (e.g., "Revenue dropped 15% — that's the steepest weekly decline this quarter") before posting.

  • Explore Paradime Radar to keep your warehouse costs in check as pipeline volume grows.

Your Friday afternoon just got a lot quieter. 🎉

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.