From hubspot-admin
Populates missing contact company name fields from associated HubSpot company records using a workflow or API backfill script. Enables CRM segmentation, personalization, and ICP classification.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hubspot-admin:enrich-company-nameThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Populate missing contact-level company name fields by copying the value from the associated company record. Uses a HubSpot workflow for ongoing enrichment and optionally an API backfill script for immediate results.
Populate missing contact-level company name fields by copying the value from the associated company record. Uses a HubSpot workflow for ongoing enrichment and optionally an API backfill script for immediate results.
Contacts missing a company name cannot be matched to ICP-classified companies, break email personalization tokens, and are invisible to company-based segmentation. In a typical neglected CRM, 40-60% of contacts may be missing this field even though the vast majority have a company association.
HUBSPOT_ACCESS_TOKEN in .env) with contact read/write scopes (for the scripted stages)uv| Stage | Script | Run with |
|---|---|---|
| Before | scripts/before.py | uv run skills/enrich-company-name/scripts/before.py |
| After | scripts/after.py | uv run skills/enrich-company-name/scripts/after.py |
There is no execute script: the enrichment itself runs as a HubSpot workflow (see Execute below), which handles both the backlog and future contacts.
Run the before-state audit to capture the baseline: uv run skills/enrich-company-name/scripts/before.py
The core query it runs:
resp = requests.post(f"{BASE}/crm/v3/objects/contacts/search", headers=HEADERS, json={
"filterGroups": [{"filters": [
{"propertyName": "company", "operator": "NOT_HAS_PROPERTY"},
]}],
"limit": 1,
})
print(f"Contacts missing company name: {resp.json()['total']}")
Manual approach: Go to Contacts > filter by Company name > is unknown. Record the count.
Save the count. This is your baseline for measuring success.
AUTO-ENRICH: Copy Company Name from AssociationEnrollment trigger:
Re-enrollment:
Action 1: Delay 10 minutes
Action 2: If/then branch
Activate:
Use this if you need the data populated immediately rather than waiting for workflow processing.
# Pattern: fetch contacts missing company name,
# look up their associated company, copy the name.
# 1. POST /crm/v3/objects/contacts/search (company NOT_HAS_PROPERTY)
# 2. POST /crm/v4/associations/contacts/companies/batch/read (get associations)
# 3. POST /crm/v3/objects/companies/batch/read (fetch company names)
# 4. POST /crm/v3/objects/contacts/batch/update (write the contact's company property)
Key API notes:
company NOT_HAS_PROPERTYcreatedate ranges if needed.POST /crm/v3/objects/contacts/batch/update (100 per call)Wait 1-2 hours after activating the workflow (longer for very large databases), then verify: uv run skills/enrich-company-name/scripts/after.py (re-runs the before-state query and compares against the baseline).
Verification checklist:
company property, or restore values from each contact's property history./waterfall-enrich-contacts for the provider-agnostic path.npx claudepluginhub tomgranot/hubspot-admin-skills --plugin hubspot-adminCreates a HubSpot workflow to auto-enrich new contacts: sets lifecycle stage via v4 Automation API, copies company name/industry from associated company, and branches on completeness.
Searches, creates, updates, and audits HubSpot CRM company records. Covers company fields, industry classification, lifecycle stages, domain matching, and cross-referencing with contacts, deals, and tickets.
Deduplicates HubSpot contacts at scale, handling import storms, fuzzy matching, rate limits, and association orphans for post-merge recovery.