Ditch HubSpot Bloat: CRM Enrichment via Search API
Replace expensive HubSpot data enrichment with search API queries for company info and competitive data.
HubSpot charges for contact enrichment as part of its higher-tier plans. You can replicate the enrichment layer for a fraction of the cost by querying a search API for company data, recent news, and competitive landscape, then writing results back to any CRM including lightweight alternatives like Attio, Folk, or a plain database.
What HubSpot enrichment actually does
HubSpot's enrichment fills in company size, industry, revenue range, and tech stack from its proprietary database. The problem: this data goes stale, coverage is patchy for smaller companies, and it is locked behind Professional or Enterprise tiers starting at $800+/mo. For many teams, especially those with under 10K contacts, paying that premium for basic firmographic data does not make financial sense.
The search-based alternative
A search API query for a company name returns its website, recent news, job postings, and competitive mentions. This is not the same as a structured firmographic database, but it covers the data points sales teams actually use: what does the company do, what have they announced recently, who are their competitors, and are they hiring (a growth signal).
Python enrichment script
import requests, os, json
API = 'https://api.scavio.dev/api/v1/search'
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def enrich_company(company_name: str, domain: str = None):
queries = [
f'{company_name} company overview',
f'{company_name} news 2026',
f'{company_name} hiring jobs',
]
enrichment = {'company': company_name, 'domain': domain}
for q in queries:
resp = requests.post(API, headers=H, json={
'platform': 'google',
'query': q,
}, timeout=15)
results = resp.json().get('organic_results', [])[:3]
key = q.split(company_name)[1].strip().replace(' ', '_')
enrichment[key] = [
{'title': r.get('title', ''), 'snippet': r.get('snippet', ''), 'link': r.get('link', '')}
for r in results
]
return enrichment
# Enrich a batch of CRM contacts
contacts = [
{'name': 'Acme Corp', 'domain': 'acme.com'},
{'name': 'TechStart Inc', 'domain': 'techstart.io'},
]
enriched = [enrich_company(c['name'], c['domain']) for c in contacts]
for e in enriched:
news = e.get('news_2026', [])
hiring = e.get('hiring_jobs', [])
print(f"{e['company']}: {len(news)} news items, {len(hiring)} job signals")Writing back to your CRM
Most CRMs expose a REST API. Attio, the CRM frequently mentioned alongside Claude MCP integration, has a straightforward API for updating records. Folk, Pipedrive, and even Airtable work the same way. The enrichment script runs on a schedule, queries the search API, and writes structured notes back to each contact record.
def update_crm_record(crm_api_url: str, record_id: str, enrichment: dict, api_key: str):
summary_parts = []
for news in enrichment.get('news_2026', []):
summary_parts.append(f"News: {news['title']}")
for job in enrichment.get('hiring_jobs', []):
summary_parts.append(f"Hiring: {job['title']}")
note = '\n'.join(summary_parts) if summary_parts else 'No recent signals found.'
resp = requests.patch(
f'{crm_api_url}/records/{record_id}',
headers={'Authorization': f'Bearer {api_key}'},
json={'notes': f'[Auto-enriched {enrichment["company"]}]\n{note}'},
)
return resp.status_code == 200Cost comparison
Enriching 500 contacts with 3 search queries each = 1,500 queries. At $0.005/query that is $7.50. Running monthly costs $90/year. HubSpot Professional with enrichment starts at $800/mo ($9,600/year). Even if you add a lightweight CRM like Attio ($29/user/mo for a 3-person team = $1,044/year) plus search enrichment ($90/year), the total is roughly $1,134/year versus $9,600/year for HubSpot Professional. That is an 88% cost reduction.
What you lose
HubSpot's enrichment data is structured and standardized: employee count ranges, industry codes, revenue estimates. Search-based enrichment is unstructured text that requires parsing. You can add an LLM layer to extract structured fields from search snippets, but that adds complexity and cost ($0.01-0.03 per Claude API call). For teams that primarily need recent news and growth signals rather than firmographic databases, search enrichment covers the practical use case at a fraction of the cost.