How to Generate SEO Meta Descriptions at Scale with OpenClaw in Paradime
Feb 26, 2026
Automate SEO Meta Descriptions with Paradime, OpenClaw, and Google Sheets
TL;DR — Wire an OpenClaw agent to your Google Sheets content inventory, let it generate optimized meta descriptions page-by-page, schedule the job through Paradime Bolt, and sleep well knowing a weekly cron keeps your metadata fresh. This guide walks you through every step with a "time-to-first-clue" debugging mindset so you can reproduce the setup, ship fast, and fix faster.
What Is Paradime?
Paradime is an AI-native platform purpose-built for dbt™ practitioners. Think of it as Cursor for data: an all-in-one workspace that replaces dbt Cloud™ with a faster IDE, smarter scheduling, and built-in FinOps monitoring. Three pillars matter for this tutorial:
Pillar | What It Does |
|---|---|
Code IDE | AI-assisted dbt™ and Python development (DinoAI) — cuts dev time by 83%+ |
Bolt | Schedule & orchestrate dbt™ and Python pipelines with cron, merge triggers, or API calls |
Radar | Monitor schedule health, model performance, source freshness, and test pass rates |
Bolt is the workhorse here. It runs arbitrary Python scripts alongside dbt™ commands, manages secrets as environment variables, and surfaces AI-powered debugging when something breaks. We will use Bolt to schedule our OpenClaw SEO script.
Why Paradime for this workflow? You already manage your data models in dbt™. By adding a Python script to the same repo and scheduling it through Bolt, your SEO automation lives alongside your data pipeline — one repo, one scheduler, one set of alerts.
What Is OpenClaw?
OpenClaw (formerly Moltbot / Clawdbot) is an open-source AI agent framework. It runs on your own device, connects to LLMs (Claude, GPT, local models via Ollama), and exposes a Python SDK you can use to orchestrate tasks programmatically.
For our use case the SDK is all we need:
Install with:
Verify the installation:
OpenClaw's agent.run() method sends a prompt, collects the response, and returns it — perfect for a loop over spreadsheet rows.
Architecture at a Glance
Figure 1 — End-to-end flow: Bolt triggers the script, the script reads from and writes to Google Sheets, OpenClaw generates the meta descriptions.
Setup: openclaw-sdk + Google Sheets API
Prerequisites
Requirement | Version / Notes |
|---|---|
Python | 3.9+ |
Paradime workspace | Free tier works; Bolt access required |
Google Cloud project | Sheets API & Drive API enabled |
OpenClaw account | API key from OpenClaw dashboard |
Poetry | For dependency management in Bolt |
Step 1 — Create a Google Service Account
Go to Google Cloud Console → APIs & Services → Credentials.
Click Create Credentials → Service Account.
Assign the Editor role (or a custom role with Sheets read/write).
Under the new service account, click Keys → Add Key → JSON.
Download the JSON key file — this becomes your
GOOGLE_CREDENTIALS_JSON.Enable Google Sheets API and Google Drive API in the console.
Share your target spreadsheet with the service-account email (the
client_emailfield in the JSON).
Step 2 — Get Your OpenClaw API Key
OpenClaw stores secrets via environment variables or its config file (~/.openclaw/openclaw.json). For Paradime Bolt, we only need the API key as an env var:
You can also store it in OpenClaw's config block:
Step 3 — Initialize the Project
Inside your dbt™ repo (the same repo Bolt watches), create a folder for the script:
Add dependencies to pyproject.toml:
The Script: Read, Generate, Write Back
Below is the full Python script (scripts/seo_meta_generator.py). It reads URLs and content from a Google Sheet, sends each row to OpenClaw for meta-description generation, and writes the result back.
How It Works — Step by Step
Figure 2 — Decision tree inside seo_meta_generator.py. The script skips rows that already have a meta description or lack content, minimizing API calls and cost.
Environment Variables
The script depends on two secrets. Here is how to set them in Paradime Bolt.
Variable | Description | Example |
|---|---|---|
| Your OpenClaw API key |
|
| The full JSON content of your service-account key file |
|
Adding Secrets to Paradime Bolt
Navigate to Settings → Workspaces → Environment Variables.
In the Bolt Schedules section, click Add New.
Enter the Key (e.g.,
OPENCLAW_API_KEY) and Value.Click Save (💾 icon).
Repeat for
GOOGLE_CREDENTIALS_JSON.
Bulk upload option: If you have many variables, prepare a CSV with
Key,Valuecolumns (no spaces) and use the Bulk Upload button.
Your Python script reads them with:
These variables are scoped to Bolt schedules only — they are not exposed in the Code IDE environment, keeping production secrets isolated from development.
Bolt Schedule: Cron Weekly or On-Demand
Option A — Schedules as Code (YAML)
Add the following to paradime_schedules.yml in your repo root:
Cron tip: Validate your expression at crontab.guru. Use
'OFF'to disable the schedule without deleting it.
Option B — On-Demand via Bolt API
Paradime's Bolt API lets you trigger any schedule programmatically:
This is ideal for event-driven runs — for example, triggering the script whenever a new page is added to the spreadsheet via a Zapier or Google Apps Script webhook.
How Bolt Processes the Schedule
Figure 3 — Bolt injects environment variables before executing commands in sequence. If poetry install fails, the pipeline stops and alerts fire immediately.
Monitoring and Debugging
Paradime Radar gives you four dashboards to monitor your pipeline:
Dashboard | What to Watch |
|---|---|
Schedules Dashboard | Run history, pass/fail rate, SLA breaches |
Models Dashboard | If you run dbt™ models in the same schedule |
Sources Dashboard | Source freshness (relevant if your sheet feeds a dbt™ source) |
Tests Dashboard | dbt™ test outcomes for data quality |
DinoAI-Powered Debugging
When a Bolt run fails, Paradime's DinoAI analyzes the logs instantly and suggests fixes. Instead of scrolling through raw output, you get a structured diagnosis:
Setting Up Alerts
Configure alerts so failures reach you immediately:
For deeper observability, integrate with Elementary to get anomaly-based alerts.
Troubleshooting Common Issues
Use this decision tree when a run fails — it is designed for a "time to first clue" mindset.
Figure 4 — Incident-friendly decision tree. Start at "Bolt run failed" and follow the branches to your first clue.
Quick-Fix Reference Table
Symptom | First Clue | Minimal Fix |
|---|---|---|
|
| Ensure |
| Sheet name mismatch | Verify |
|
| Add it in Settings → Workspaces → Environment Variables → Bolt Schedules |
| Credentials JSON was truncated during paste | Re-copy the entire JSON file content; use Bulk Upload CSV if it's large |
| API key revoked or wrong | Regenerate key in OpenClaw dashboard and update Bolt env var |
| Rate limit on OpenClaw or Sheets API | Increase |
Script completes but no rows updated | All rows already have meta descriptions | Clear column C or adjust the skip-logic in the script |
SLA breach (run takes > 30 min) | Large spreadsheet + no parallelism | Process in chunks (e.g., 50 rows per run) or increase |
Reproducing Locally
Before pushing to Bolt, test locally:
If it works locally but fails in Bolt, the issue is almost always an environment variable that wasn't saved correctly.
Evaluating Meta Description Quality with dbt™-llm-evals
Once your meta descriptions are generated, you may want to evaluate their quality at scale. Paradime's open-source dbt™-llm-evals package lets you do exactly that — directly inside your data warehouse, with no data egress.
Quick Setup
Add the package to your dbt™ project:
Configure Evaluation Criteria
Build a dbt™ Model That Evaluates Your Meta Descriptions
Monitor Results
This closes the loop: generate → evaluate → improve.
Wrapping Up
Here's what you built:
Figure 5 — The complete stack: spreadsheet → script → OpenClaw → spreadsheet, orchestrated by Bolt, monitored by Radar, and quality-checked by dbt™-llm-evals.
Key Takeaways
Paradime Bolt is not just a dbt™ scheduler — it runs Python scripts with full dependency management (Poetry), secret injection, and SLA monitoring.
OpenClaw's Python SDK makes LLM-powered content generation as simple as
agent.run(prompt).Google Sheets serves as the lightweight content inventory — no database required for the SEO team.
Environment variables (
OPENCLAW_API_KEY,GOOGLE_CREDENTIALS_JSON) are the only secrets you need. Store them once in Bolt; never hard-code them.Schedules as code (
paradime_schedules.yml) means your automation is version-controlled, reviewable, and reproducible.dbt™-llm-evals lets you evaluate meta description quality warehouse-natively, closing the feedback loop.
Next Steps
Scale up: Process thousands of pages by splitting into batches across multiple Bolt runs.
Add keywords: Extend the spreadsheet with a "target keyword" column and inject it into the prompt.
A/B test: Generate two variants per page and track CTR in Google Search Console.
Integrate with CI: Use Bolt's merge trigger to regenerate descriptions whenever new pages land in
main.
Further Reading:

