How to Build Pre-Meeting Research Briefs for Sales with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

How to Automate Sales Research Briefs with Paradime, OpenClaw, and Google Calendar

Every sales rep knows the drill: you have an external call in twenty minutes, the calendar invite arrived three days ago, and you still don't know what the prospect's company actually does. You alt-tab between LinkedIn, Crunchbase, the company blog, and Slack—assembling a makeshift dossier that's already stale by the time the meeting starts.

What if a single automated pipeline scanned your calendar at 7 AM, researched every external attendee, compiled a one-page brief, and dropped it into Slack before you poured your first coffee?

This guide walks you through building exactly that. We combine Paradime's Bolt scheduler, OpenClaw's AI agent runtime, and the Google Calendar API into an end-to-end workflow—structured as an incident-friendly runbook with reproducible steps, a decision tree for common failures, and a "time to first clue" mindset so debugging never stalls.

What Is Paradime?

Paradime is an all-in-one, AI-native platform that replaces dbt Cloud™. Data and analytics teams use it to code, ship, fix, and scale data pipelines—for both traditional analytics and AI workloads.

Three capabilities matter for this build:

Capability

What It Does

Why It Matters Here

Code IDE

AI-assisted dbt™ and Python development (DinoAI)

Write and iterate on the research script inside one workspace

Bolt

Production scheduler with cron, event, and merge triggers

Fire the research script at 7 AM daily—no external cron needed

Radar

FinOps controls for Snowflake / BigQuery

Keep warehouse costs predictable as the pipeline grows

Bolt is the linchpin. It runs dbt™ commands and arbitrary Python scripts on a schedule, stores environment variables as secrets, and surfaces three tiers of run logs (Summary → Console → Debug) for fast root-cause analysis.

Key Docs:

What Is OpenClaw?

OpenClaw is an open-source AI agent framework (MIT license) designed for self-hosted deployment. You own the instance, you own the data, you pick the models, and you define the workflows.

Its agent loop follows a tight cycle:

Figure 1 — OpenClaw's perceive → plan → act → observe → repeat agent loop.

Architecture at a Glance

Layer

Responsibility

Core Runtime

Manages agent loop, memory, state

LLM Backbone

Connects to OpenAI, Anthropic, Google, or local models (Ollama)

Tool Registry

Plugin system — each tool exposes a schema (inputs, outputs, permissions)

Memory System

Short-term (conversation context) + long-term (vector store, file-based)

OpenClaw ships with built-in tools for file-system access, code execution (sandboxed Python/JS/Bash), web browsing, API calls, database queries, and Git operations. You extend it with skillsSKILL.md files that combine YAML frontmatter with markdown instructions.

Two skills are central to our pipeline:

  1. gog — Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs (source).

  2. web-search-free — Neural, multi-source search for company intel (company_research_exa) and people lookup (people_search_exa) via Exa, requiring zero API keys (LobeHub listing).

Setup: OpenClaw + Google Calendar API + Web Search

Prerequisites

Requirement

Version / Note

Node.js

≥ 22

Python

≥ 3.10.7

pip

Latest

A Google Cloud project

Create one here

A Google account

With Google Calendar enabled

An LLM API key

Anthropic, OpenAI, or Google—your choice

Step 1 — Install OpenClaw

The onboarding wizard installs the Gateway daemon (via launchd on macOS or systemd on Linux) so the agent stays running across reboots.

Step 2 — Set Up Google Calendar API Credentials

  1. Enable the API — Navigate to Google Cloud Console → Calendar API and click Enable.

  2. Create OAuth credentials — Go to Google Auth Platform → Clients → Create Client → Desktop app. Download the JSON file and save it as client_secret.json.

  3. Authenticate with gog — The gog skill is OpenClaw's bridge to Google Workspace:

Set the default account so every gog call skips --account:

Verify by listing today's events:

Step 3 — Install the Web Search Skill

From ClawHub, pull the free web-search skill:

Test company intel:

Test people lookup:

Step 4 — Install the Meeting-Prep Skill (optional accelerator)

The community-built meeting-prep skill wraps the entire calendar-scan-research-brief loop. If you prefer a turnkey path:

Configuration lives at ~/.config/meeting-prep/config.json:

For the rest of this guide we build the pipeline from scratch—giving you full control over every step.

The Script: Scan → Research → Brief → Deliver

The pipeline has four stages. Here is the flow at a glance:

Figure 2 — End-to-end data flow: calendar scan → attendee research → brief compilation → Slack delivery.

Stage 1 — Scan Today's Calendar

Using the Google Calendar API Python client, we pull every event for the current day and filter to external meetings:

Decision point: If fetch_external_meetings returns an empty list, the script should exit cleanly with a print("No external meetings today — skipping research.") and exit code 0. Bolt treats exit code 0 as success.

Stage 2 — Research Attendees and Companies

For each external attendee, we invoke OpenClaw's web-search-free skill to gather company intel and professional profiles. We call gog and the Exa-backed tools via subprocess (or the OpenClaw session API if the script runs inside an OpenClaw agent session):

Stage 3 — Compile a One-Page Brief

Each meeting gets a clean Markdown brief:

Stage 4 — Deliver to Slack

A simple POST to a Slack Incoming Webhook:

Putting It All Together

Environment Variables

The script reads three secrets at runtime. Store them as Bolt Schedule Environment Variables (admin access required):

Variable

Description

Where to Get It

GOOGLE_CREDENTIALS_JSON

Serialized OAuth token JSON for Google Calendar API

Run the Python quickstart, then cat token.json

OPENCLAW_API_KEY

Your LLM provider API key (Anthropic, OpenAI, etc.) used by the OpenClaw Gateway

Provider dashboard (e.g., Anthropic Console)

SLACK_WEBHOOK_URL

Incoming Webhook URL for your target Slack channel

Slack API → Incoming Webhooks

Configuring in Paradime

  1. Navigate to Settings → Workspaces → Environment Variables.

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

  3. Enter the key name (e.g., GOOGLE_CREDENTIALS_JSON) and paste the value.

  4. Click the Save icon.

Repeat for each variable. You can also Bulk Upload via CSV with headers Key,Value.

Tip — Schedule-level overrides: If multiple teams use different Slack channels, set a global default and override SLACK_WEBHOOK_URL per schedule. Global value acts as fallback.

Bolt Schedule: Cron Daily at 7 AM

Option A — Schedules as Code (Recommended)

Create paradime_schedules.yml in the root of your dbt™ project (alongside dbt_project.yml):

Paradime auto-checks for changes every 10 minutes. For immediate pickup, open the Bolt UI and click Parse Schedules.

Cron expression explained: 0 7 * * * = "At minute 0 of hour 7, every day." Validate at crontab.guru.

Option B — UI-Based Schedule

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

  2. Fill in:

  3. Configure Slack/email notifications for failed events.

  4. Click Save.

Alternative — OpenClaw Native Cron (No Paradime)

If you prefer to run the entire pipeline inside OpenClaw's own scheduler instead of Bolt:

The decision tree below helps you choose:

Figure 3 — Decision tree: choosing the right scheduler for your environment.

Monitoring and Debugging

An incident-friendly pipeline demands three things: fast detection, clear signals, and minimal time to first clue.

Detection — Know It Broke Before Anyone Asks

Signal

Channel

Setup

Bolt run fails

Slack #data-alerts + email

Notification settings in paradime_schedules.yml

SLA breach (brief arrives late)

Same channels

sla_minutes: 30 in the schedule YAML

OpenClaw agent error

OpenClaw Gateway logs

openclaw doctor CLI + cron retry config

Diagnosis — Three-Tier Log Drill-Down

When a Bolt run fails, Paradime surfaces three log levels (from least to most detail):

Figure 4 — Paradime Bolt's three-tier log hierarchy. Start at Summary, drill to Debug only if needed.

Time-to-first-clue workflow:

  1. Open the Bolt UI — Failed runs show an "Error" badge in the Status column.

  2. Click the failed run → Logs and Artifacts.

  3. Read Summary Logs first — DinoAI generates an AI-powered overview: which command failed, why, and suggested fixes.

  4. If the summary isn't enough, switch to Console Logs — use the "jump to" feature to locate ERROR or WARNING lines.

  5. For env-var or dependency issues, check Debug Logs — they show exactly which variables were resolved and which packages Poetry installed.

Key Metrics to Track

Metric

Healthy Value

Alarm Threshold

Run duration

< 5 min for ≤ 10 meetings

> 15 min

Brief delivery rate

100% of external meetings

< 80%

LLM API errors (429, 500)

0

≥ 3 consecutive

Calendar API quota usage

< 50% of daily limit

> 80%

Troubleshooting Common Issues

Below is a structured runbook. For each issue, we give you the symptom, time to first clue (where to look first), root cause, and minimal fix.

Issue 1 — GOOGLE_CREDENTIALS_JSON Not Found



Symptom

EnvironmentError: GOOGLE_CREDENTIALS_JSON is not set.

Time to first clue

Console Logs → first ERROR line

Root cause

Variable not added to Bolt Schedule env vars, or typo in key name

Minimal fix

Settings → Workspaces → Environment Variables → Bolt Schedules → Add GOOGLE_CREDENTIALS_JSON with the full token.json content

Issue 2 — Google Calendar Returns 401 Unauthorized



Symptom

HttpError 401: Request had invalid authentication credentials.

Time to first clue

Console Logs → google.auth trace

Root cause

OAuth token expired and no refresh token present

Minimal fix

Re-run the OAuth flow locally (python quickstart.py), copy the new token.json into GOOGLE_CREDENTIALS_JSON

Issue 3 — OpenClaw send Times Out



Symptom

subprocess.TimeoutExpired after 60 seconds

Time to first clue

Console Logs → timeout stack trace; then openclaw doctor locally

Root cause

Gateway daemon not running, or LLM API key invalid/rate-limited

Minimal fix

1) Verify daemon: openclaw doctor. 2) Check OPENCLAW_API_KEY is set. 3) Increase timeout to 120s for large attendee lists.

Issue 4 — Slack Webhook Returns 403 / 404



Symptom

requests.exceptions.HTTPError: 403 Client Error

Time to first clue

Console Logs → POST response body

Root cause

Webhook URL revoked, channel archived, or URL pasted with trailing whitespace

Minimal fix

Regenerate webhook in Slack App settings, update SLACK_WEBHOOK_URL in Bolt env vars

Issue 5 — No External Meetings Detected (False Negative)



Symptom

Script logs No external meetings today but you have external meetings

Time to first clue

Console Logs → event count logged; then raw API response in Debug Logs

Root cause

INTERNAL_DOMAIN env var doesn't match your company's email domain, or calendar permissions only expose calendarId: primary (not shared calendars)

Minimal fix

1) Set INTERNAL_DOMAIN=yourcompany.com. 2) If meetings are on a shared calendar, pass that calendar's ID instead of "primary".

Issue 6 — Poetry Install Fails in Bolt



Symptom

poetry: command not found or dependency resolution error

Time to first clue

Console Logs → first command output

Root cause

Poetry not installed in Bolt's runtime, or pyproject.toml missing

Minimal fix

Ensure pyproject.toml and poetry.lock are committed. Paradime's Bolt runtime includes Poetry—double-check the Python Scripts docs.

Decision Tree — Rapid Triage

Figure 5 — Rapid triage decision tree for failed Bolt runs.

Wrapping Up

You now have a fully automated, reproducible pipeline that turns your Google Calendar into an intelligence feed for every external meeting. Let's recap the architecture:

Figure 6 — Complete system architecture.

What You Built

  1. Google Calendar scan — Filters to external meetings with at least one non-internal attendee.

  2. Attendee & company research — Uses OpenClaw's neural search to pull LinkedIn profiles, recent news, funding rounds, and leadership changes.

  3. One-page brief — Clean Markdown with attendee backgrounds, company context, talking points, and a prep checklist.

  4. Slack delivery — Briefs land in your channel before the workday starts.

  5. Scheduled via Bolt — A single paradime_schedules.yml entry with cron, SLA, and notifications.

  6. Debuggable by design — Three-tier logs, DinoAI summaries, and a structured triage decision tree.

Next Steps

  • Add dbt™ models to log research outputs into your warehouse for sales analytics:

  • Enrich with CRM data — Join attendee research with Salesforce or HubSpot records using dbt™ models in Paradime.

  • Add the meeting-prep skill for auto-generated icebreakers and strategic questions powered by the LLM.

  • Set up Paradime Radar to monitor warehouse costs as query volumes grow.

The entire stack is reproducible: clone the repo, set three environment variables, push to main, and Bolt picks up the schedule within ten minutes. If something breaks, start at the Summary Logs and follow the decision tree. Time to first clue: under sixty seconds.

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.