How to Enrich Contact Lists with OpenClaw in Paradime
Feb 26, 2026
How to Automate Contact Enrichment with Paradime and OpenClaw: From Stale CRMs to Near-100% Data Coverage
Every revenue team has felt the sting: you open your CRM, click into a high-priority account, and find… nothing. No job title. No LinkedIn URL. A company name that was accurate two mergers ago. The rep who originally sourced the lead left six months back, and their tribal knowledge walked out with them.
The cost is real. According to multiple RevOps communities, CRM enrichment data degrades by up to 60% within three months of purchase. Sales reps burn 4+ hours a week manually Googling prospects. Marketing campaigns land in spam because contact data is stale. And the "missing context" problem — where nobody knows why a contact was added or what their current role is — quietly kills pipeline velocity.
This guide shows you how to build an automated contact enrichment pipeline using Paradime and OpenClaw that runs daily, fills in the gaps your CRM can't, and achieves near-100% data coverage — all without a single manual lookup.
The Problem: Why Your Contact Data Is Always Behind
Before we dive into the solution, let's make the pain tangible:
Figure 1: The contact data decay curve — accuracy drops sharply after 30 days without enrichment.
Three forces are conspiring against your data quality:
Stale docs — Job titles change. Companies get acquired. People move. Static databases from traditional providers go stale within weeks of purchase.
Missing context — A contact record with just a name and email tells you nothing about what that person cares about, what their company just announced, or why they'd take your call.
Tribal knowledge — The SDR who sourced a lead knew the backstory: the prospect's pain points, their tech stack, their budget cycle. When that SDR leaves, all of that context evaporates.
The traditional answer — buying another enrichment subscription, hiring a VA, or begging reps to "just update the CRM" — doesn't scale. What does scale is an agentic enrichment pipeline that runs itself.
What Is Paradime?
Paradime is the all-in-one AI platform that replaces dbt Cloud™. It's designed for fast-moving data teams who want to code, ship, fix, and scale data pipelines for analytics and AI from a single workspace.
For the purposes of this guide, we care about three Paradime capabilities:
Capability | What It Does | Why It Matters for Enrichment |
|---|---|---|
Code IDE | AI-native IDE for dbt™ and Python development | Write and test enrichment scripts with full context |
Bolt Scheduler | Orchestrate dbt™ and Python pipelines on cron, event, or API triggers | Run enrichment jobs daily without manual intervention |
Environment Variables | Securely store API keys and credentials at workspace and schedule level | Keep |
Paradime's Bolt scheduler is the engine that makes this enrichment workflow "set and forget." You define your commands, set a cron expression, configure notifications, and Bolt handles the rest — including AI-powered debugging when something breaks.
What Is OpenClaw?
OpenClaw is an open-source AI agent framework with over 264,000 GitHub stars. Unlike traditional enrichment APIs that return static database lookups, OpenClaw agents perform real-time web research — navigating LinkedIn, scraping company news, reading funding announcements, and synthesizing contextual intelligence for each contact.
Key capabilities for contact enrichment:
Browser Control Module — Agents navigate the live web to find current titles, company info, and LinkedIn profiles instead of relying on stale databases.
Parallel Enrichment — Bulk web-sourced data enrichment that turns CSVs or inline JSON lists into enhanced datasets at scale.
Skills Platform — Extensible with 5,400+ skills including Google Sheets integration, web search, and CRM connectors.
Self-hosted & data-owned — You run it on your infrastructure. No per-seat pricing, no API middlemen.
Figure 2: How an OpenClaw agent researches and enriches a single contact record.
Setup: openclaw-sdk + Google Sheets API + Web Search
Prerequisites
Before you begin, ensure you have:
A Paradime account with Bolt scheduler access
Python 3.9+
A Google Cloud project with the Sheets API enabled
An OpenClaw instance (self-hosted or cloud)
Step 1: Install Dependencies
In your Paradime dbt™ project root, create (or update) your pyproject.toml to include the required dependencies:
When running via Bolt, the first command in your schedule should always be:
This ensures all dependencies are available in the virtual environment before your enrichment script executes.
Step 2: Configure Google Sheets API Credentials
Go to console.cloud.google.com
Create a new project (or select an existing one)
Navigate to APIs & Services → Library, search for Google Sheets API, and enable it
Go to APIs & Services → Credentials → Create Credentials → Service Account
Download the credentials JSON file
Share your target Google Sheet with the service account email (e.g.,
enrichment-bot@your-project.iam.gserviceaccount.com)
Step 3: Initialize the OpenClaw Client
Step 4: Set Up Google Sheets Connection
Script: Read Contacts Missing Data, Research Each, Update Spreadsheet
Here is the complete enrichment script. Save this as scripts/enrich_contacts.py in your Paradime project:
How the Script Works
Figure 3: End-to-end enrichment sequence — from Bolt trigger to spreadsheet update.
Environment Variables: GOOGLE_CREDENTIALS_JSON, OPENCLAW_API_KEY
Hardcoding secrets in your scripts is a recipe for disaster. Paradime provides a secure environment variable system with workspace-level and schedule-level scoping.
Setting Up Environment Variables
From any page in the Paradime app, click Settings
Navigate to Workspaces → Environment Variables
In the Bolt Schedules section, click Add New
Add the following variables:
Variable Name | Description | Example Value |
|---|---|---|
| Your Google service account credentials (full JSON string) |
|
| Your OpenClaw API key |
|
| The Google Sheets spreadsheet ID from the URL |
|
| Number of contacts to process per run |
|
Accessing Variables in Your Script
Paradime automatically injects these variables into the runtime environment when Bolt executes your schedule. You can also override variable values for specific schedules without changing the workspace-level defaults — useful if you have separate enrichment jobs for different spreadsheets.
Tip: Only Admin roles can override environment variable values in Bolt Schedules. Schedule-level overrides take precedence over global values, and overrides only affect the specific schedule where they are configured.
Bolt Schedule: Cron Daily (Batch of 50)
Now let's wire everything together with a Bolt schedule that runs daily.
Option A: YAML Configuration (Schedules as Code)
Create a file called paradime_schedules.yml in the root of your dbt™ project (alongside dbt_project.yml):
Option B: UI-Based Schedule
Navigate to Bolt in the Paradime sidebar
Click Create Schedule
Configure:
Configure notifications (Slack and/or email)
Add environment variable overrides if needed
Click Deploy
Figure 4: Bolt schedule flow — cron triggers the pipeline, and notifications route based on outcome.
Why Batch Size of 50?
Processing 50 contacts per day is a deliberate choice:
Rate limits — Google Sheets API has per-minute quotas; batching prevents
429errorsCost control — Each OpenClaw web research call consumes API tokens; 50/day keeps costs predictable (~$1-2/day)
Data freshness — At 50/day, a 1,500-contact CRM achieves full refresh every 30 days
Debugging — Smaller batches mean failures affect fewer records, making issues easier to isolate
Monitoring and Debugging
Once your enrichment pipeline is live, you need visibility into what's happening. Paradime Bolt provides comprehensive monitoring out of the box.
Run History & Analytics
Navigate to Bolt → your schedule → Run History to see:
Execution Time History — A graphical view of the last 30 days showing success/error rates, duration trends, and run counts
Run History Table — Every execution with Run ID, status (Success/Error/Skipped), trigger source, branch, commit, timestamp, and duration
Debugging Failed Runs
When a run fails, Bolt provides three layers of logs:
Log Type | What It Shows | When to Use |
|---|---|---|
Summary Logs | DinoAI-generated overview of failures with suggested fixes | Quick triage — "What broke?" |
Console Logs | Detailed execution record with error messages and stack traces | Root cause analysis — "Why did it break?" |
Debug Logs | System-level operations and internal state | Deep technical troubleshooting |
Debug workflow:
Check Summary Logs first — Bolt's DinoAI generates a plain-English summary like: "Script executed successfully for 47 contacts. 3 contacts failed — TimeoutError when researching 'Jane Smith' at row 142. Suggested fix: increase RATE_LIMIT_DELAY or check network connectivity."
Dive into Console Logs — Use the "jump to" feature to locate specific errors. Click links to see compiled output and stack traces.
Test and Fix — Copy the failing contact data, test your enrichment script locally against that specific record, fix the issue, and commit.
OpenClaw Agent Debugging
For issues originating in the OpenClaw layer, use these diagnostic commands:
Healthy signals to look for:
Runtime: runningRPC probe: okNo blocking config/service issues
Connected/ready channels
Setting Up Proactive Alerts
Configure Bolt notifications so you don't have to watch the dashboard:
This ensures your team is immediately notified on Slack when an enrichment run fails or breaches its SLA window.
Troubleshooting Common Issues
Paradime / Bolt Issues
Error | Cause | Fix |
|---|---|---|
PARA-1000: Missing production warehouse connection | Bolt schedule doesn't have a production connection configured | Add a production warehouse connection in Account Settings → Connections |
PARA-1003: Could not read from remote repository | Intermittent GitHub API issue | Check githubstatus.com, then trigger the job manually |
PARA-1008: Couldn't connect to git repository | Repo deleted, SSH key removed, or user account deactivated | Verify the repo exists and SSH connection works; reset git connection as a last resort |
Poetry install fails | Missing or malformed | Ensure |
Environment variable not found | Variable not set in Bolt environment section | Navigate to Settings → Workspaces → Environment Variables → Bolt Schedules and add the missing variable |
OpenClaw Issues
Error | Cause | Fix |
|---|---|---|
HTTP 429: rate_limit_error | Too many concurrent requests or long context window | Increase |
| Gateway service is down | Run |
Cron: scheduler disabled | OpenClaw's internal cron was turned off | Run |
Browser tool fails: "Failed to start Chrome CDP" | Chrome/Chromium not found or port conflict | Run |
JSON parse error from agent output | Agent returned unstructured text instead of JSON | Add stricter output instructions in the prompt; wrap |
Google Sheets API Issues
Error | Cause | Fix |
|---|---|---|
| Spreadsheet not shared with the service account | Share the sheet with your service account email address |
| Credentials JSON is malformed or expired | Re-download credentials from Google Cloud Console; verify the |
| Too many Sheets API calls per minute | Increase |
Quick Diagnostic Checklist
Figure 5: Decision tree for diagnosing enrichment pipeline failures.
Wrapping Up
Let's step back and see what you've built:
Figure 6: Before vs. after — manual lookups replaced by an always-on enrichment pipeline.
Here's a summary of the workflow you've implemented:
Component | Tool | Role |
|---|---|---|
Data Store | Google Sheets | Source of truth for contact records |
AI Enrichment | OpenClaw | Real-time web research for each contact |
Orchestration | Paradime Bolt | Cron scheduling, dependency management, monitoring |
Secret Management | Paradime Environment Variables | Secure storage for API keys and credentials |
Alerting | Bolt Notifications (Slack/Email) | Proactive failure and SLA breach alerts |
What You Gain
No more stale data — Every contact gets refreshed within 30 days automatically
No more missing context — OpenClaw researches live web sources, not static databases, providing industry, company size, recent news, and LinkedIn profiles
No more tribal knowledge loss — Enrichment data lives in your spreadsheet, not in someone's head
Near-100% coverage — At 50 contacts/day, a typical CRM achieves full enrichment coverage within a single refresh cycle
Cost efficiency — OpenClaw's self-hosted model + Paradime Bolt runs at a fraction of the cost of legacy enrichment subscriptions
Next Steps
Once you have the basic pipeline running, consider these enhancements:
Increase batch size — If rate limits allow, bump
ENRICHMENT_BATCH_SIZEto 100 or 200 for faster coverageAdd re-enrichment logic — Flag contacts whose
Last Enricheddate is older than 30 days for automatic refreshConnect to your CRM — Replace Google Sheets with a direct Salesforce or HubSpot integration using OpenClaw's CRM skills
Add data validation — Use dbt™ tests to validate enriched data quality after each run
Layer in lead scoring — Use the enriched data (industry, company size, recent funding) as inputs to an automated lead scoring model
The days of stale CRMs and manual Googling are over. With Paradime and OpenClaw, your contact data works as hard as your sales team does — except it never takes a day off.
Ready to get started? Sign up for Paradime and explore OpenClaw on GitHub to build your own enrichment pipeline today.

