How to Enrich Contact Lists with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

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:

  1. Stale docs — Job titles change. Companies get acquired. People move. Static databases from traditional providers go stale within weeks of purchase.

  2. 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.

  3. 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 GOOGLE_CREDENTIALS_JSON and OPENCLAW_API_KEY out of code

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

  1. Go to console.cloud.google.com

  2. Create a new project (or select an existing one)

  3. Navigate to APIs & Services → Library, search for Google Sheets API, and enable it

  4. Go to APIs & Services → CredentialsCreate CredentialsService Account

  5. Download the credentials JSON file

  6. 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

  1. From any page in the Paradime app, click Settings

  2. Navigate to Workspaces → Environment Variables

  3. In the Bolt Schedules section, click Add New

  4. Add the following variables:

Variable Name

Description

Example Value

GOOGLE_CREDENTIALS_JSON

Your Google service account credentials (full JSON string)

{"type": "service_account", "project_id": "...", ...}

OPENCLAW_API_KEY

Your OpenClaw API key

oc_sk_abc123...

SPREADSHEET_ID

The Google Sheets spreadsheet ID from the URL

1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms

ENRICHMENT_BATCH_SIZE

Number of contacts to process per run

50

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

  1. Navigate to Bolt in the Paradime sidebar

  2. Click Create Schedule

  3. Configure:

  4. Configure notifications (Slack and/or email)

  5. Add environment variable overrides if needed

  6. 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 429 errors

  • Cost 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:

  1. 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."

  2. Dive into Console Logs — Use the "jump to" feature to locate specific errors. Click links to see compiled output and stack traces.

  3. 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: running

  • RPC probe: ok

  • No 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 pyproject.toml

Ensure pyproject.toml is committed to the main branch and syntax is valid

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 RATE_LIMIT_DELAY, switch to a smaller model, or configure fallback models in OpenClaw

openclaw status → Runtime: not running

Gateway service is down

Run openclaw gateway statusopenclaw doctoropenclaw gateway install --forceopenclaw gateway restart

Cron: scheduler disabled

OpenClaw's internal cron was turned off

Run openclaw cron status and re-enable via config

Browser tool fails: "Failed to start Chrome CDP"

Chrome/Chromium not found or port conflict

Run openclaw browser status, verify browser.executablePath, check for port conflicts

JSON parse error from agent output

Agent returned unstructured text instead of JSON

Add stricter output instructions in the prompt; wrap json.loads() in a retry with re-prompting

Google Sheets API Issues

Error

Cause

Fix

gspread.exceptions.SpreadsheetNotFound

Spreadsheet not shared with the service account

Share the sheet with your service account email address

google.auth.exceptions.RefreshError

Credentials JSON is malformed or expired

Re-download credentials from Google Cloud Console; verify the GOOGLE_CREDENTIALS_JSON env var contains the complete JSON

APIError: RATE_LIMIT_EXCEEDED

Too many Sheets API calls per minute

Increase RATE_LIMIT_DELAY in the script or switch to batch updates using worksheet.batch_update()

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:

  1. Increase batch size — If rate limits allow, bump ENRICHMENT_BATCH_SIZE to 100 or 200 for faster coverage

  2. Add re-enrichment logic — Flag contacts whose Last Enriched date is older than 30 days for automatic refresh

  3. Connect to your CRM — Replace Google Sheets with a direct Salesforce or HubSpot integration using OpenClaw's CRM skills

  4. Add data validation — Use dbt™ tests to validate enriched data quality after each run

  5. 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.

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.