Workflow

HubSpot Enrichment via Claude Code CLI + Scavio

Enrich HubSpot contacts from the Claude Code CLI using Scavio for canonical SERP, Reddit signal, and YouTube mentions, then write back to HubSpot.

Overview

Run enrichment on demand from Claude Code. A single command pulls the contact list from HubSpot, enriches each with Scavio public-data signal, and upserts custom properties back to HubSpot. No Clay, no Apollo, no seat fees.

Trigger

Slash command in Claude Code or cron

Schedule

Daily at 7 AM or on demand

Workflow Steps

1

Pull contacts from HubSpot

Use HubSpot's Contacts API to fetch records missing enrichment fields.

2

For each contact, SERP the domain

Scavio query 'domain news' and 'domain funding' for recent signal.

3

Reddit mention check

Scavio Reddit search for brand name sentiment and complaint volume.

4

YouTube mention check

Scavio YouTube search for founder interviews or product demos.

5

Synthesize one-liner

Claude turns raw results into a one-line contact brief.

6

Upsert to HubSpot properties

Write brief, last_signal_date, and reddit_mention_count to HubSpot custom fields.

Python Implementation

Python
import os, requests
SCAVIO = os.environ["SCAVIO_API_KEY"]
HUBSPOT = os.environ["HUBSPOT_TOKEN"]
SH = {"x-api-key": SCAVIO}
HH = {"Authorization": f"Bearer {HUBSPOT}"}

contacts = requests.get("https://api.hubapi.com/crm/v3/objects/contacts?limit=100",
    headers=HH).json().get("results", [])

for c in contacts:
    domain = c["properties"].get("company_domain")
    if not domain: continue
    serp = requests.post("https://api.scavio.dev/api/v1/search",
        headers=SH, json={"query": f"{domain} funding news"}).json()
    requests.patch(f"https://api.hubapi.com/crm/v3/objects/contacts/{c['id']}",
        headers=HH, json={"properties": {"scavio_signal_count": len(serp.get("organic_results", []))}})

JavaScript Implementation

JavaScript
const SCAVIO = process.env.SCAVIO_API_KEY;
const HUBSPOT = process.env.HUBSPOT_TOKEN;
const SH = { "x-api-key": SCAVIO, "content-type": "application/json" };
const HH = { Authorization: "Bearer " + HUBSPOT, "content-type": "application/json" };

const contacts = await fetch("https://api.hubapi.com/crm/v3/objects/contacts?limit=100", { headers: HH })
  .then(r => r.json());

for (const c of contacts.results) {
  const domain = c.properties.company_domain;
  if (!domain) continue;
  const serp = await fetch("https://api.scavio.dev/api/v1/search", {
    method: "POST", headers: SH,
    body: JSON.stringify({ query: domain + " funding news" })
  }).then(r => r.json());
  await fetch("https://api.hubapi.com/crm/v3/objects/contacts/" + c.id, {
    method: "PATCH", headers: HH,
    body: JSON.stringify({ properties: { scavio_signal_count: serp.organic_results?.length || 0 } })
  });
}

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Reddit

Community, posts & threaded comments from any subreddit

YouTube

Video search with transcripts and metadata

Frequently Asked Questions

Run enrichment on demand from Claude Code. A single command pulls the contact list from HubSpot, enriches each with Scavio public-data signal, and upserts custom properties back to HubSpot. No Clay, no Apollo, no seat fees.

This workflow uses a slash command in claude code or cron. Daily at 7 AM or on demand.

This workflow uses the following Scavio platforms: google, reddit, youtube. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 500 credits per month with no credit card required. That is enough to test and validate this workflow before scaling it.

HubSpot Enrichment via Claude Code CLI + Scavio

Enrich HubSpot contacts from the Claude Code CLI using Scavio for canonical SERP, Reddit signal, and YouTube mentions, then write back to HubSpot.