How to Build Pre-Meeting Research Briefs for Sales with OpenClaw in Paradime
Feb 26, 2026
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 skills—SKILL.md files that combine YAML frontmatter with markdown instructions.
Two skills are central to our pipeline:
gog— Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs (source).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 | |
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
Enable the API — Navigate to Google Cloud Console → Calendar API and click Enable.
Create OAuth credentials — Go to Google Auth Platform → Clients → Create Client → Desktop app. Download the JSON file and save it as
client_secret.json.Authenticate with
gog— Thegogskill 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_meetingsreturns an empty list, the script should exit cleanly with aprint("No external meetings today — skipping research.")and exit code0. Bolt treats exit code0as 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 |
|---|---|---|
| Serialized OAuth token JSON for Google Calendar API | Run the Python quickstart, then |
| Your LLM provider API key (Anthropic, OpenAI, etc.) used by the OpenClaw Gateway | Provider dashboard (e.g., Anthropic Console) |
| Incoming Webhook URL for your target Slack channel |
Configuring in Paradime
Navigate to Settings → Workspaces → Environment Variables.
In the Bolt Schedules section, click Add New.
Enter the key name (e.g.,
GOOGLE_CREDENTIALS_JSON) and paste the value.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_URLper 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
Navigate to Bolt → + New Schedule → + Create New Schedule.
Fill in:
Configure Slack/email notifications for
failedevents.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 | Notification settings in |
SLA breach (brief arrives late) | Same channels |
|
OpenClaw agent error | OpenClaw Gateway logs |
|
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:
Open the Bolt UI — Failed runs show an "Error" badge in the Status column.
Click the failed run → Logs and Artifacts.
Read Summary Logs first — DinoAI generates an AI-powered overview: which command failed, why, and suggested fixes.
If the summary isn't enough, switch to Console Logs — use the "jump to" feature to locate
ERRORorWARNINGlines.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 |
|
Time to first clue | Console Logs → first |
Root cause | Variable not added to Bolt Schedule env vars, or typo in key name |
Minimal fix | Settings → Workspaces → Environment Variables → Bolt Schedules → Add |
Issue 2 — Google Calendar Returns 401 Unauthorized
Symptom |
|
Time to first clue | Console Logs → |
Root cause | OAuth token expired and no refresh token present |
Minimal fix | Re-run the OAuth flow locally ( |
Issue 3 — OpenClaw send Times Out
Symptom |
|
Time to first clue | Console Logs → timeout stack trace; then |
Root cause | Gateway daemon not running, or LLM API key invalid/rate-limited |
Minimal fix | 1) Verify daemon: |
Issue 4 — Slack Webhook Returns 403 / 404
Symptom |
|
Time to first clue | Console Logs → |
Root cause | Webhook URL revoked, channel archived, or URL pasted with trailing whitespace |
Minimal fix | Regenerate webhook in Slack App settings, update |
Issue 5 — No External Meetings Detected (False Negative)
Symptom | Script logs |
Time to first clue | Console Logs → event count logged; then raw API response in Debug Logs |
Root cause |
|
Minimal fix | 1) Set |
Issue 6 — Poetry Install Fails in Bolt
Symptom |
|
Time to first clue | Console Logs → first command output |
Root cause | Poetry not installed in Bolt's runtime, or |
Minimal fix | Ensure |
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
Google Calendar scan — Filters to external meetings with at least one non-internal attendee.
Attendee & company research — Uses OpenClaw's neural search to pull LinkedIn profiles, recent news, funding rounds, and leadership changes.
One-page brief — Clean Markdown with attendee backgrounds, company context, talking points, and a prep checklist.
Slack delivery — Briefs land in your channel before the workday starts.
Scheduled via Bolt — A single
paradime_schedules.ymlentry with cron, SLA, and notifications.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-prepskill 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.

