Cleanup Properties
Archive or delete unused custom properties across all HubSpot object types (contacts, companies, deals). Identifies Salesforce sync properties, test/temp properties, and obsolete form fields.
Run this skill in Claude Code:
/plugin marketplace add tomgranot/hubspot-admin-skills
/plugin install hubspot-admin@hubspot-admin-skills
/cleanup-propertiesCleanup Properties
Remove or archive unused custom properties. Property bloat slows down forms, confuses users, and makes data mapping harder.
Prerequisites
- A HubSpot private app access token (
HUBSPOT_ACCESS_TOKENin.env) withcrm.schemas.*.readandcrm.schemas.*.writescopes - Python 3.10+ with
uv
Step-by-Step Instructions
Stage 1: Plan
Confirm with the user before starting:
- Archive-first policy (recommended) or direct deletion for clearly dead test properties?
- Is a Salesforce (or other CRM) sync active? If yes, get the sync property mapping before touching anything.
Stage 2: Before
Inventory custom properties for each object type via the Properties API (v3):
import os, requests
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.environ["HUBSPOT_ACCESS_TOKEN"]
BASE = "https://api.hubapi.com"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
for obj_type in ["contacts", "companies", "deals"]:
resp = requests.get(f"{BASE}/crm/v3/properties/{obj_type}", headers=HEADERS)
resp.raise_for_status()
custom_props = [p for p in resp.json()["results"] if not p.get("hubspotDefined")]For each custom property, record: name, label, object type, type, group, number of records with a value (requires search queries), whether it is used in any form/workflow/list.
Stage 3: Execute
Safe to delete:
- Properties with zero populated records and not used in any form, workflow, or list
- Properties with names containing “test”, “temp”, “old_”, “copy_of”
- Properties created by deactivated integrations
Handle with care:
- Salesforce sync properties (
hs_salesforce_*prefix or mapped in sync settings) — do not delete without coordinating with the Salesforce admin - Form fields — check if the property is used on any active form before deleting
- Workflow dependencies — check if any workflow reads or sets this property
- Calculated properties — check if other calculated properties reference this one
Archive instead of delete when:
- The property has historical data that might be needed for reporting
- You are unsure whether anything depends on it
Archive candidates via DELETE /crm/v3/properties/{objectType}/{propertyName} (this archives — the property moves to the archived state) after presenting the list to the user and getting explicit confirmation.
Stage 4: After
- Archive properties first (HubSpot supports property archiving).
- Wait 30 days, then delete archived properties that caused no issues.
- Document all changes in a cleanup log.
Rollback
- Archived properties can be unarchived at any time.
- Deleted properties cannot be restored. The property definition and all associated data are permanently lost.
- Always archive before deleting to provide a safety window.
Tips
- Run this quarterly as part of the database cleanup routine.
- Establish a property naming convention going forward (e.g.,
team_purpose_detail). - Limit who can create custom properties to prevent sprawl.
- HubSpot has a property limit per object type — cleanup prevents hitting it.
Related skills in Ongoing Maintenance
/backfill-geo-dataEnrich missing geographic data (country, state, city) on contacts and companies using HubSpot workflows, external data providers, or IP-based geolocation.
/cleanup-dashboardsAudit and consolidate HubSpot reporting dashboards. Identifies unused, duplicate, or outdated dashboards. Must be performed manually — no dashboard API is available.
/cleanup-dealsStandardize deal pipelines, remove test deals, and address deals with missing amounts or close dates. Coordinates with Salesforce sync if applicable.
/cleanup-formsAudit and remove unused, test, or deprecated forms from HubSpot. Identifies forms with zero submissions, forms not embedded on any page, and test forms left over from development.