ScavioScavio
Pricing
Tools
Sign InsGet Startedg
Blog
Hubspot5 min readApr 21, 2026

HubSpot Enrichment from the Claude Code CLI with Scavio

Replace Apollo and Clay for HubSpot enrichment with an 80-line Claude Code script: fresh data per contact at 2 Scavio credits, $20 for 1,000 enrichments.

Scavio Team

Apr 21, 2026

Try Scavio Free
scavio
Claude Code / Enrichment
Hubspot

Every founder-led sales team hits the same wall: HubSpot has your contacts, but your contacts are under-enriched. Tools like Clay and Apollo fix that for a price. The 2026 pattern replaces both with a Claude Code CLI workflow that pulls contacts, enriches from public data via Scavio, and writes back to HubSpot properties.

The whole pipeline is ~80 lines of TypeScript, runs on your laptop, and costs under $30/mo total.

The Architecture

Claude Code is the orchestrator. HubSpot is the store. Scavio is the public-data source. No third party in the middle.

  1. Claude pulls contacts missing key fields from HubSpot
  2. For each, calls Scavio SERP + Reddit to build a signal bundle
  3. LLM synthesizes a one-line brief and a mention count
  4. Claude writes the brief and mention count back to custom HubSpot properties

The HubSpot Setup

Create two custom properties on the contact object before running:

  • scavio_brief: single-line text, up to 500 chars
  • scavio_signal_count: number, 0-1000

Mint a HubSpot private app token with crm.objects.contacts.read and crm.objects.contacts.write scopes.

The Enrichment Script

import { Scavio } from 'scavio';
const scavio = new Scavio({ apiKey: process.env.SCAVIO_API_KEY });
const HUBSPOT = process.env.HUBSPOT_TOKEN;

async function getContacts() {
  const r = await fetch(
    'https://api.hubapi.com/crm/v3/objects/contacts?limit=100&properties=email,company_domain,scavio_brief',
    { headers: { Authorization: `Bearer ${HUBSPOT}` } }
  );
  return (await r.json()).results.filter((c: any) => !c.properties.scavio_brief);
}

async function enrich(contact: any) {
  const domain = contact.properties.company_domain;
  if (!domain) return null;
  const [serp, reddit] = await Promise.all([
    scavio.google.search({ query: `${domain} funding news` }),
    scavio.reddit.search({ query: domain })
  ]);
  const serpResults = (serp.organic_results as any[]) || [];
  const redditPosts = ((reddit.data as any)?.results as any[]) || [];
  return {
    brief: serpResults[0]?.snippet || 'No recent news',
    signal_count: redditPosts.length + serpResults.length
  };
}

async function writeBack(id: string, brief: string, count: number) {
  await fetch(`https://api.hubapi.com/crm/v3/objects/contacts/${id}`, {
    method: 'PATCH',
    headers: {
      Authorization: `Bearer ${HUBSPOT}`,
      'content-type': 'application/json'
    },
    body: JSON.stringify({
      properties: { scavio_brief: brief, scavio_signal_count: count }
    })
  });
}

const contacts = await getContacts();
for (const c of contacts) {
  const signal = await enrich(c);
  if (signal) await writeBack(c.id, signal.brief, signal.signal_count);
}

Running It From Claude Code

Drop the script into ~/.claude/skills/hubspot-enrich/index.ts and register it in the skill manifest. Every Claude Code session now has a command like:

Bash
> Enrich the 50 newest HubSpot contacts with Scavio signals.

Claude handles the batch, reports which contacts got enriched, and writes the brief back without leaving the terminal.

Cost Per Contact

Two Scavio calls per contact (a Google search and a Reddit search), 1 credit each, so 2 credits a contact. A team enriching 1,000 contacts a month uses 2,000 credits: $20 pay-as-you-go, or well inside the 7,000 credits of the $30/month Project plan, compared to $149/mo Clay Starter plus per-record top-ups. The HubSpot token costs nothing.

The Scheduling Wrinkle

Most teams run this as a nightly cron on a small EC2 or a Mac Mini. Claude Code can kick it off via a launchd agent on macOS or a simple systemd timer on Linux. Nothing fancy; the script is idempotent because it only pulls contacts with empty briefs.

The full reference pipeline is in the HubSpot + Claude Code + Scavio workflow , including the launchd and systemd configs.

Search, social and ecommerce data as JSON

  • One API key for every platform
  • Pay per request with credits
  • Works with MCP, LangChain and n8n
Try Scavio Free

50 free credits, no credit card

On this page

  1. The Architecture
  2. The HubSpot Setup
  3. The Enrichment Script
  4. Running It From Claude Code

Related articles

View all
  • scavio
    Lead gen / Enrichment
    LinkedIn
    How to Enrich Leads With LinkedIn Data Through an API
  • scavio
    Claude Code / SEO
    Gsc
    GSC + Claude Code: Modern SEO Workflow
ScavioScavio

One scraper API for every social, search, e-commerce and real estate platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy