How to Generate Product Description Copy with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

How to Automate SEO Product Descriptions with Paradime and OpenClaw

If you've ever stared at a spreadsheet full of product attributes — names, materials, colours, dimensions — and wondered how you'll turn them into hundreds of SEO-optimized descriptions without burning out your content team, you're not alone. The workflow we'll walk through in this guide connects Paradime's Bolt scheduler with OpenClaw's AI agent runtime so a single Python script can read product data from Google Sheets, generate high-quality descriptions through an AI model, and write the results back — on demand or on a daily schedule.

The article is written with an incident-friendly mindset: structured steps, decision trees, and a "time to first clue" philosophy so you can reproduce the setup quickly and fix problems with minimal effort.

What Is Paradime?

Paradime is an all-in-one, AI-native platform that replaces dbt Cloud™ for analytics and data engineering teams. Built on dbt Core™, it gives you:

Capability

What It Does

Code IDE

AI-assisted dbt™ and Python development (DinoAI) — cuts development time by 83%+

Bolt

Production scheduling, CI/CD, and orchestration for dbt™ and Python scripts

Radar

FinOps dashboard to cut Snowflake / BigQuery costs

Integrations

Connects to warehouses, BI tools, Git, Slack, Jira, and more

For this guide we care most about Bolt, Paradime's scheduler. Bolt lets you run arbitrary Python scripts alongside dbt™ commands, manage secrets through environment variables, and trigger runs on a cron schedule, on merge, or via API.

Why does this matter for product descriptions? Because Bolt treats your content-generation script as a first-class production job — with logging, retry visibility, SLA monitoring, and AI-powered debugging (DinoAI) — instead of a cron job you pray keeps running on someone's laptop.

What Is OpenClaw?

OpenClaw is an open-source, local-first AI agent gateway. It connects to 25+ messaging channels (WhatsApp, Telegram, Slack, Discord, etc.) and orchestrates AI models from multiple providers (Anthropic, OpenAI, Google Gemini, Ollama, and others) through a unified control plane.

Key OpenClaw concepts for this workflow:

  • Gateway — A long-running daemon (openclaw gateway) that manages sessions, tools, cron jobs, and webhooks.

  • Agent runtime (Pi) — The minimal coding agent that handles tool use, streaming, and multi-model routing.

  • openclaw-py — A Python package (pip install openclaw-py) that wraps the Gateway's OpenAI-compatible HTTP API (/v1/chat/completions) so your scripts can call it like any other LLM SDK.

  • Skills — Markdown-defined capability plugins that extend what the agent can do (Google Workspace, browser, file I/O, etc.).

Because OpenClaw exposes an OpenAI-compatible endpoint, you don't need a bespoke SDK — the standard openai Python library works out of the box.

Architecture Overview

Before diving into code, here's how the pieces fit together:

Figure 1 — End-to-end flow: Bolt triggers the script, which reads from Google Sheets, generates descriptions via OpenClaw, and writes back.

Setup: openclaw-py + Google Sheets API

Prerequisites

Requirement

Version / Notes

Python

≥ 3.10

Node.js (for OpenClaw Gateway)

≥ 22 LTS

Paradime account

Free tier works; Bolt requires Growing or Scaling tier for Python scripts

Google Cloud project

Service account with Sheets API & Drive API enabled

LLM provider API key

Anthropic, OpenAI, Google Gemini, or any OpenAI-compatible provider

Step 1 — Install OpenClaw

After onboarding, verify the Gateway is running:

Step 2 — Configure OpenClaw with Your LLM Provider

Edit ~/.openclaw/openclaw.json (or use openclaw configure):

Tip: Use ${VAR} substitution so you never hard-code secrets. OpenClaw resolves env vars at activation time (docs).

Step 3 — Create a Google Cloud Service Account

  1. Go to Google Cloud ConsoleAPIs & ServicesCredentials.

  2. Create a Service Account and download the JSON key file.

  3. Enable the Google Sheets API and Google Drive API.

  4. Share your target spreadsheet with the service account's client_email.

Step 4 — Set Up Your Paradime Project

In your dbt™ project repository, add the Python dependencies. Paradime Bolt uses Poetry for dependency management:

The Script: Read → Generate → Write Back

Here's the complete Python script that ties everything together. Save it as scripts/generate_descriptions.py in your dbt™ project:

What the Script Does — Step by Step

Figure 2 — Decision tree for the generate_descriptions.py script. Non-zero exit codes surface as failures in Bolt.

Environment Variables

The script relies on environment variables for all secrets and configuration. Here's the full list:

Variable

Required

Description

GOOGLE_CREDENTIALS_JSON

Full JSON string of the Google service account key

OPENCLAW_API_KEY

API key for OpenClaw Gateway authentication

OPENCLAW_BASE_URL

Override Gateway URL (default: http://127.0.0.1:18789/v1)

SPREADSHEET_NAME

Name of the Google Sheet (default: Product Catalog)

WORKSHEET_NAME

Tab name inside the spreadsheet (default: Sheet1)

DESCRIPTION_COLUMN

Header of the column to write descriptions into (default: seo_description)

OPENCLAW_MODEL

Model identifier (default: anthropic/claude-sonnet-4-5)

Setting Env Vars in Paradime Bolt

  1. Navigate to Settings → Workspaces → Environment Variables.

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

  3. Enter the Key (e.g., GOOGLE_CREDENTIALS_JSON) and paste the Value.

  4. Click the Save icon.

You can also bulk upload via CSV with columns Key and Value (docs).

Security note: Paradime stores Bolt environment variables encrypted at rest. Individual schedules can override workspace-level defaults if you need different credentials per schedule (docs).

Bolt Schedule: On-Demand or Daily

Creating the Bolt Schedule

Figure 3 — Bolt schedule creation flow. The first command must always be poetry install for Python scripts.

Step-by-Step in the Paradime UI

  1. Go to Bolt → + New Schedule → Create New Schedule.

  2. Select Standard schedule type.

  3. Set a descriptive name: product-descriptions-gen.

  4. Choose branch: main.

  5. Under Command Settings, add two commands:

  6. Under Trigger Types, pick your pattern:

Pattern

Trigger Configuration

On-demand only

Select "Scheduled Run" → set cron to OFF. Trigger manually from the UI or via Bolt API.

Daily at 6 AM UTC

Select "Scheduled Run" → cron: 0 6 * * * → timezone: UTC.

After a dbt™ run completes

Select "On Run Completion" → choose the upstream schedule → trigger on "Passed".

  1. Set up Notifications (Slack, email, or Microsoft Teams) for failure events.

  2. Save the schedule.

Triggering via Bolt API (Programmatic)

Monitoring and Debugging

Paradime Bolt provides multiple layers of observability for your Python script runs. Here's how to use them with a "time to first clue" mindset:

The Monitoring Decision Tree

Figure 4 — Debugging decision tree. Start with the Summary tab; escalate through Console → Debug → Integration logs.

Run Log Tabs Explained

Tab

What It Shows

When to Use

Summary

High-level status, duration, warnings, errors, suggested fixes

Always check first — fastest "time to first clue"

Console Logs

Line-by-line stdout/stderr from python scripts/generate_descriptions.py

When you need the Python traceback

Debug Logs

System-level details: thread usage, resource allocation, connection status

Advanced diagnostics (e.g., timeouts, memory issues)

Integration Logs

Payloads sent to connected integrations (Slack, Jira) after the run

Verify notification delivery

Additional Monitoring Capabilities

  • Execution Time History — Spot performance degradation over 30 days. If your 200-product run suddenly takes 3× longer, the LLM provider may be throttling you.

  • DinoAI Debugging — Paradime's AI assistant can analyze failed runs and suggest fixes directly in the UI.

  • Artifacts — Every run produces run_results.json and console output files that you can download for offline analysis.

  • SLA Monitoring — Set an expected completion time; Bolt alerts you if the run exceeds it.

Troubleshooting Common Issues

Quick-Reference Decision Matrix

Symptom

First Check

Likely Cause

Fix

gspread.exceptions.SpreadsheetNotFound

Is the sheet shared with the service account email?

Missing share permission

Share the spreadsheet with the client_email from your JSON key

openai.AuthenticationError

Is OPENCLAW_API_KEY set in Bolt env vars?

Missing or incorrect API key

Re-add the key in Settings → Env Variables → Bolt Schedules

ConnectionRefusedError to 127.0.0.1:18789

Is the OpenClaw Gateway running?

Gateway not started or wrong port

Run openclaw gateway --port 18789 --verbose or check the daemon: openclaw doctor

json.JSONDecodeError on credentials

Is GOOGLE_CREDENTIALS_JSON valid JSON?

Truncated or improperly escaped value

Paste the full JSON; ensure no line breaks were stripped

Script exits with code 1, partial descriptions written

Check Console Logs for per-product errors

LLM rate limiting or token exhaustion

Add retry logic with exponential backoff; check provider quota

poetry install fails

Is pyproject.toml committed to the branch?

Missing dependency file

Commit pyproject.toml and poetry.lock to the main branch

Descriptions are blank / low quality

Check the SYSTEM_PROMPT and product attributes

Insufficient context in prompt

Add more product attributes; refine the system prompt

Google Sheets API 429 (rate limit)

How many products are you processing?

Too many API calls in a short window

Use batch_update (the script already does this) and add time.sleep() between reads

Detailed Troubleshooting Scenarios

Scenario 1: OpenClaw Gateway Won't Start

If openclaw doctor reports risky configs, run openclaw doctor --fix to auto-repair.

Scenario 2: Descriptions Generate Locally but Fail in Bolt

This almost always comes down to environment variable differences between your local machine and the Bolt runner:

  1. Verify all required env vars are set in Settings → Workspaces → Environment Variables → Bolt Schedules.

  2. Check for schedule-level overrides that might be masking values.

  3. Confirm the Bolt runner can reach your OpenClaw Gateway. If the Gateway runs on your local machine, Bolt's cloud runner cannot reach 127.0.0.1. You'll need to either:

Scenario 3: Partial Failures (Some Products Fail)

The script is designed to continue past individual product failures, inserting an empty string to preserve row alignment. To improve resilience:

PARA Error Codes to Watch For

If you encounter Paradime-specific errors in Bolt, here are the most relevant ones for this workflow:

Error Code

Meaning

Action

PARA-1000

Missing production warehouse connection

Not directly related to Python scripts, but Bolt requires an active production connection. Add one in Account Settings → Connections.

PARA-1003

Cannot read from remote Git repository

Check GitHub Status. If intermittent, re-trigger the run manually.

PARA-1008

Cannot connect to Git repository

Verify the repo exists and your SSH key is valid. Reset the Git connection if needed.

Before vs. After: Manual vs. Automated Descriptions

Figure 5 — Manual vs. automated product description workflow. Time savings scale linearly with catalog size.

Wrapping Up

Here's what you've built:

  1. A reproducible, scheduled pipeline — Paradime Bolt treats your content generation script as a production job with logging, monitoring, SLA alerts, and AI-powered debugging.

  2. An AI-powered description engine — OpenClaw routes your prompts to the best available LLM, with model fallbacks and local-first control over your data.

  3. A zero-touch Google Sheets integrationgspread reads product attributes and writes descriptions back, keeping your product team in their comfort zone.

  4. An incident-ready setup — Structured logging, clear exit codes, environment variable validation, and a debugging decision tree mean you spend minutes, not hours, diagnosing failures.

Quick Checklist Before Going Live

  • Service account JSON is valid and stored in Bolt env vars

  • Spreadsheet is shared with the service account's client_email

  • OpenClaw Gateway is reachable from the Bolt runner (or you're calling a hosted API directly)

  • poetry install is the first command in your Bolt schedule

  • Notifications are configured for failure events

  • You've tested with a small sheet (10 products) before running the full catalog

Next Steps

  • Refine your system prompt — Experiment with different tones, lengths, and keyword strategies per product category.

  • Add a quality gate — Use dbt™ tests or a separate validation script to flag descriptions that are too short, duplicated, or missing keywords.

  • Scale with Bolt's "On Run Completion" trigger — Chain description generation after your nightly dbt™ run so descriptions always reflect the freshest product data.

  • Monitor costs with Radar — Track LLM API spend alongside your warehouse costs in one place.

With Paradime and OpenClaw working together, your product catalog stays fresh, SEO-optimized, and maintainable — without a single manual copy-paste.

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.