Cleanup Workflows
Audit and remove inactive, test, or deprecated workflows from HubSpot. Identifies workflows that have never enrolled contacts, workflows turned off for 90+ days, and test workflows.
Run this skill in Claude Code:
/plugin marketplace add tomgranot/hubspot-admin-skills
/plugin install hubspot-admin@hubspot-admin-skills
/cleanup-workflowsCleanup Workflows
Audit HubSpot workflows to remove dead weight. Unused workflows clutter the automation dashboard and make it harder to understand what is actually running.
Prerequisites
- A HubSpot private app access token (
HUBSPOT_ACCESS_TOKENin.env) with theautomationscope - Python 3.10+ with
uv - Note: The Automation API may return 403 on some plan tiers. If so, audit manually in HubSpot UI under Automation > Workflows.
- Strongly recommended: run
/workflows-as-codefirst to export a JSON backup of every workflow — deleted workflows cannot be restored, but an export lets you recreate them via the API.
Step-by-Step Instructions
Stage 1: Plan
Confirm with the user before starting:
- Archive-first policy: turn off, wait a week, then delete (recommended)?
- Any workflows that must never be touched (compliance, integrations)?
Stage 2: Before
Inventory all workflows via the v4 Automation API:
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"}
flows, after = [], None
while True:
params = {"limit": 100}
if after:
params["after"] = after
resp = requests.get(f"{BASE}/automation/v4/flows", headers=HEADERS, params=params)
resp.raise_for_status()
data = resp.json()
flows.extend(data.get("results", []))
after = data.get("paging", {}).get("next", {}).get("after")
if not after:
breakFor each workflow, record: flow ID, name, enabled status, type, created date, last updated date. Enrollment counts are visible in the UI (Automation > Workflows > Details).
Stage 3: Execute
Flag workflows matching any of these criteria:
- Turned off for 90+ days with no plans to reactivate
- Zero enrollments ever (likely test or abandoned drafts)
- Test workflows (names containing “test”, “temp”, “copy of”, “draft”)
- Superseded workflows replaced by newer versions
- Error state workflows that have been failing consistently
Before deleting, check:
- Does the workflow feed into another workflow (via enrollment trigger or go-to-workflow action)?
- Does the workflow set properties that other workflows depend on?
- Is there any documentation referencing this workflow?
Present the candidate list to the user and wait for explicit confirmation. Then, for confirmed candidates: turn each workflow off first (in the UI, or PUT /automation/v4/flows/{flowId} with isEnabled: false — the PUT requires the current revisionId), wait one week, then delete via DELETE /automation/v4/flows/{flowId} or the UI.
Stage 4: After
- Re-run the inventory and confirm the deleted workflows are gone.
- Document deleted workflows in a cleanup log (name, purpose, reason for deletion).
- Notify workflow owners.
Rollback
- Deleted workflows cannot be restored in HubSpot.
- A
/workflows-as-codeexport taken beforehand contains each workflow’s full JSON definition — recreate a deleted workflow withPOST /automation/v4/flowsfrom its export. - HubSpot retains workflow activity history on contact records even after the workflow is deleted.
Tips
- Use folders in the workflows dashboard to organize by team, purpose, or status.
- Prefix draft/test workflows with “[TEST]” so they are easy to identify later.
- Review workflows quarterly as part of the database cleanup routine.
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.