How to Generate Sales Follow-Up Emails with OpenClaw in Paradime
Feb 26, 2026
How to Automate Sales Follow-Ups with Paradime, OpenClaw, and Gmail — A Complete Workflow Guide
Every sales team has been there. A promising deal goes quiet. Nobody remembers who was supposed to follow up. The CRM says the last activity was two weeks ago — or worse, the CRM says nothing at all because nobody updated it.
Stale documentation, missing context, and tribal knowledge aren't just annoying. They're revenue killers. When your follow-up process lives in someone's head instead of in a system, deals slip through the cracks. Reps waste time reconstructing context that should have been captured automatically. And managers can't coach what they can't see.
The cost of these gaps is staggering. According to industry benchmarks, 44% of salespeople give up after a single follow-up, even though 80% of deals require five or more touches to close. The problem isn't laziness — it's friction. Manually checking which deals are stale, pulling up context, and drafting personalized follow-ups takes real time. So it doesn't happen.
This guide shows you how to eliminate that friction entirely. You'll build an automated workflow using Paradime, OpenClaw, and the Gmail API that:
Pulls deals with no activity in the last 7 days from your CRM (or Google Sheets)
Drafts personalized follow-up emails for each stale deal
Saves those drafts directly into Gmail for human review
Runs on a cron schedule every Tuesday and Thursday at 9 AM
No more tribal knowledge. No more missed follow-ups. Near-100% coverage, every week.
What Is Paradime?
Paradime is an AI-native platform for agentic data engineering — often described as "Cursor for Data." It replaces dbt Cloud™ and provides a unified environment for coding, shipping, and scaling data pipelines for analytics and AI.
The key component we'll use in this workflow is Bolt, Paradime's built-in orchestration and scheduling engine. Bolt lets you:
Schedule dbt™ and Python jobs using cron expressions
Run custom Python scripts as part of your data pipeline
Manage environment variables and secrets securely
Monitor job execution with built-in alerting and notifications
Bolt supports Schedules as Code — you define your schedules in a paradime_schedules.yml file, commit it alongside your dbt™ project, and Paradime handles the rest.
What Is OpenClaw?
OpenClaw is an open-source AI agent that runs locally on your hardware and orchestrates tasks across chat apps, files, the web, and your operating system. It connects to large language models like Claude or GPT via API and uses skills to take action on your behalf.
For sales follow-ups, OpenClaw is particularly powerful because it can:
Analyze deal context and engagement history
Draft personalized emails that sound human, not templated
Interact with CRM APIs and Gmail programmatically via the
openclaw-sdkRun on recurring cron schedules for fully automated workflows
The openclaw-sdk is the Python SDK that gives you a programmatic interface to create agents, run tasks, and manage workflows:
Architecture Overview
Before diving into the setup, here's how the pieces fit together:
Figure 1: End-to-end architecture — Paradime Bolt triggers a Python script that queries your CRM, uses OpenClaw to draft personalized emails, and saves them as Gmail drafts for human review.
Setup: openclaw-sdk + CRM API (or Google Sheets as CRM) + Gmail API
Step 1: Install Dependencies
Create a pyproject.toml or requirements.txt in your dbt™ project directory:
If you're using Poetry (recommended for Paradime Bolt):
Step 2: Configure Your CRM Data Source
You have two options depending on your stack:
Option A: CRM API (HubSpot, Salesforce, Pipedrive, etc.)
Most CRMs expose REST APIs to query deals and activities. For example, with HubSpot:
Option B: Google Sheets as CRM (Lightweight Alternative)
For smaller teams or those who track deals in spreadsheets:
Step 3: Set Up Gmail API for Draft Creation
You'll use a Google Cloud service account (or OAuth credentials) to create drafts in Gmail:
The Script: Pull Stale Deals, Draft Follow-Ups, Save as Gmail Drafts
Here's the full sales_followup.py script that ties everything together:
How the Script Works — Step by Step
Figure 2: Sequence diagram showing how the script orchestrates CRM queries, OpenClaw AI drafting, and Gmail draft creation for each stale deal.
Environment Variables: CRM_API_KEY, GOOGLE_CREDENTIALS_JSON, OPENCLAW_API_KEY
Your script relies on three critical environment variables. Here's how to configure them securely in Paradime Bolt.
Required Variables
Variable | Description | Where to Get It |
|---|---|---|
| API token for your CRM (HubSpot, Salesforce, etc.) | CRM Settings → Integrations → Private Apps |
| Google OAuth credentials JSON (stringified) | Google Cloud Console → APIs & Services → Credentials |
| API key for OpenClaw SDK authentication | OpenClaw dashboard or |
Optional Variables
Variable | Default | Description |
|---|---|---|
|
| Set to |
|
| Number of days of inactivity before a deal is flagged |
Configuring in Paradime Bolt
Navigate to Settings in the Paradime application
Go to Workspaces → Environment Variables
In the Bolt Schedules section, click Add New
Add each variable with its key and value
Click the Save icon
Figure 3: Steps to configure environment variables in Paradime Bolt's secure settings interface.
For bulk upload, you can also use a CSV file with Key and Value columns:
Security note: Environment variables configured in Bolt are only available during schedule execution — they're not exposed in the Code IDE or version control. For the
GOOGLE_CREDENTIALS_JSON, store the entire JSON string as the value. Refer to Paradime's environment variable docs for details.
Your Python script accesses these at runtime:
Bolt Schedule: Cron Every Tuesday/Thursday at 9 AM
Now let's schedule the script to run automatically. Create (or update) the paradime_schedules.yml file in your dbt™ project root:
Schedule Configuration
Understanding the Cron Expression
The expression 0 9 * * 2,4 breaks down as:
Field | Value | Meaning |
|---|---|---|
Minute |
| At minute 0 |
Hour |
| At 9 AM |
Day of Month |
| Every day |
Month |
| Every month |
Day of Week |
| Tuesday and Thursday |
Tip: Validate your cron expressions at crontab.guru before committing.
Deployment
Once you commit paradime_schedules.yml to your default branch (main or master), Paradime automatically detects and registers the schedule. The system checks for changes every 10 minutes, or you can manually refresh via Bolt → Parse Schedules in the UI.
Bolt supports four trigger types:
Scheduled Run — Time-based cron triggers (what we're using)
On Run Completion — Dependency-based triggers (chain jobs)
On Merge — Git merge triggers (CI/CD pipelines)
Bolt API — Programmatic REST API triggers
Monitoring and Debugging
Once the schedule is live, you'll want visibility into every run. Here's how to monitor at each layer of the stack.
Paradime Bolt Monitoring
Bolt provides built-in run history, status tracking, and SLA monitoring. After each execution:
Run status: Check whether the job passed, failed, or breached SLA
Run logs: View full stdout/stderr output from your Python script
Notifications: Slack and email alerts fire automatically on failure or SLA breach
The sla_minutes: 15 setting in the YAML means you'll be alerted if the job takes longer than 15 minutes — a good indicator that something is stuck (rate limits, network issues, etc.).
Script-Level Logging
The script includes structured logging that outputs to Bolt's log viewer:
OpenClaw Agent Monitoring
For deeper debugging of the AI drafting step, you can inspect OpenClaw execution details:
You can also use OpenClaw's built-in diagnostic tools:
Before vs. After: The Transformation
Figure 4: The manual follow-up process is error-prone and inconsistent. The automated workflow delivers near-100% coverage with personalized drafts ready for human review.
Troubleshooting Common Issues
1. OpenClaw Gateway Won't Start
Symptoms: openclaw status shows the gateway is not running.
Common causes and fixes:
Error Log | Cause | Fix |
|---|---|---|
| Gateway mode not configured | Run |
| Port 18789 already in use | Kill the existing process or change port |
| Auth not configured | Complete onboarding: |
2. Gmail Drafts Not Appearing
Symptoms: Script reports success, but no drafts appear in Gmail.
Checklist:
Wrong account: Verify the OAuth credentials correspond to the correct Gmail account
Missing scopes: Ensure your Google Cloud OAuth consent screen includes
gmail.composeandgmail.modifyscopesStale tokens: Refresh OAuth tokens if they've expired
If using OpenClaw's gogcli for Gmail integration, verify:
3. CRM API Returns Empty Results
Symptoms: Script finds 0 stale deals even though you know there are some.
Possible causes:
API key permissions: Ensure your CRM API key has
readaccess to deals and activitiesDate format mismatch: Different CRMs use different date formats — check your parsing logic
Pagination: If you have more than 100 deals, you may need to paginate
4. OpenClaw Agent Returns Poor-Quality Drafts
Symptoms: Emails sound generic, repetitive, or off-tone.
Fixes:
Add more context: Include deal notes, previous email threads, and company info in the prompt
Switch models: Try
claude-sonnet-4-20250514for better instruction-followingTemperature tuning: Lower temperature for more consistent output
5. Bolt Schedule Not Firing
Symptoms: The schedule exists but never runs.
Checklist:
Verify
paradime_schedules.ymlis on your default branch (mainormaster)Check cron expression syntax — use
0-6for days (Sunday through Saturday), not1-7Ensure timezone is a valid IANA timezone string (e.g.,
America/New_York, notEST)Manually trigger via Bolt → Parse Schedules to force a refresh
6. Cron Job Delivery Failures in OpenClaw
If you're also running OpenClaw cron jobs alongside Bolt:
Common issues include:
Cron disabled: Check that
cron.enabled: truein your OpenClaw configQuiet hours: Heartbeat may be skipped if outside active hours
Delivery target doesn't exist: Verify channel configuration for announcements
Wrapping Up
Let's recap what you've built:
Figure 5: The complete solution — from problem identification to near-100% follow-up coverage with human-in-the-loop quality control.
What You've Achieved
Eliminated tribal knowledge dependency — The system doesn't rely on anyone remembering to check for stale deals
Automated context gathering — Deal information flows directly from your CRM into the email drafts
Personalized at scale — OpenClaw generates unique, context-aware follow-ups for every deal, not generic templates
Human-in-the-loop safety — Emails are saved as drafts, never sent automatically. Your reps review, tweak, and send
Reliable scheduling — Paradime Bolt runs the workflow every Tuesday and Thursday at 9 AM without fail
Full observability — Logs, SLA monitoring, and Slack alerts keep you informed of every run
Where to Go Next
Add more CRM context: Pull associated contacts, email threads, and meeting notes into the OpenClaw prompt for even richer drafts
Multi-channel follow-ups: Extend the script to also draft LinkedIn messages or Slack reminders for internal team members
Feedback loop: Track which AI-drafted emails get sent vs. discarded to improve prompt quality over time
Escalation rules: Flag deals over a certain value or inactivity threshold for manager attention
The gap between "we should follow up on stale deals" and "we follow up on every stale deal, every week, with personalized context" is no longer a staffing problem. It's an automation problem — and now you have the blueprint to solve it.

