Offboard Your HubSpot Agency With a Full Audit Trail
Capture your entire HubSpot portal configuration with a single command. Document what your agency built, compare before/after, and take ownership of your config.
The Problem
Your agency engagement is ending. They configured custom properties, built pipelines, set up lists, and possibly created custom objects. There is no documentation. No handoff document. No export.
You are inheriting a black box. You do not know what was configured, what depends on what, or what will break if you change something. The agency's knowledge walks out the door with them.
The Snapshot-First Approach
One command captures everything. Read-only. Zero risk to your portal.
$ g-gremlin hubspot snapshot --out agency_audit/current
✓ Captured: 47 properties · 3 pipelines · 12 lists · 2 custom objects
Snapshot saved to: agency_audit/current/
Read-only operation. The snapshot command only reads from the HubSpot API. It does not create, update, or delete anything in your portal.
What the Snapshot Captures
Directory Structure
agency_audit/current/ ├── properties/ │ ├── contacts.yaml │ ├── companies.yaml │ └── deals.yaml ├── pipelines/ │ ├── deals_default.json │ └── deals_partner.json ├── lists/ │ ├── 12345.json │ └── 67890.json ├── workflows/ (if beta enabled) │ └── flow_001.json ├── objects/ │ └── custom_widget.json └── meta.json
meta.json Excerpt
{
"portal_id": "12345678",
"hub_domain": "acme-corp",
"timezone": "US/Eastern",
"g_gremlin_version": "0.42.0",
"captured_at": "2026-01-27T14:30:22Z",
"counts": {
"properties": 47,
"pipelines": 3,
"lists": 12,
"custom_objects": 2,
"workflows": 0
},
"warnings": []
}Properties
contacts.yaml, companies.yaml, deals.yaml — every custom and default property with types, groups, and options
Pipelines
All deal, ticket, and lead pipelines with stages, probabilities, and display order
Lists
Static and active lists with filter definitions and membership counts
Custom Objects
Schema definitions, requiredProperties, searchable fields, and associations
Workflows (beta)
Automation v4 flow definitions with triggers, actions, and branching logic
Comparing Before/After Agency Engagement
If you took a snapshot before the agency started, compare the two to see exactly what they added, changed, or removed.
$ g-gremlin hubspot compare-snapshots agency_audit/before agency_audit/current
✓ Comparison complete.
Properties:
+ 12 added (partner_name, partner_tier, deal_source, ...)
~ 3 changed (lifecycle_stage options updated, lead_status description)
- 0 removed
Property Groups:
+ 2 added (partner_information, custom_scoring)
Pipelines:
+ 1 added (Partner Deal Registration)
~ 1 changed (Sales Pipeline — 2 stages renamed)
Lists:
+ 8 added
Custom Objects:
+ 2 added (custom_widget, partner_registration)
Summary: 25 added · 4 changed · 0 removed
No "before" snapshot? That is okay. The current snapshot still documents everything in your portal right now. You can take another snapshot in the future and compare against today's baseline.
Taking Over: From Snapshot to Pack
A snapshot is a point-in-time capture. A pack is your source of truth — a set of YAML and JSON specs that define what your portal should look like.
The transition is straightforward: export the snapshot, use it as the basis for your pack specs, and now you own the configuration as code. Future changes go through the pack plan/apply loop — version-controlled, reviewable, and auditable.
Take a snapshot of the current portal state
Initialize a pack directory with pack init
Copy relevant specs from the snapshot into your pack
Commit the pack to git — this is now your source of truth
All future changes go through pack plan → pack apply
Step-by-Step Commands
The full terminal session for agency offboarding.
# 1. Validate credentials
$ g-gremlin hubspot doctor --json
✓ Token valid · Portal: acme-corp · 12 scopes OK
# 2. Capture everything
$ g-gremlin hubspot snapshot --out agency_audit/current --include-workflows
✓ Captured: 47 properties · 3 pipelines · 12 lists · 2 custom objects · 5 workflows
Snapshot saved to: agency_audit/current/
# 3. Review what was captured
# Open meta.json and browse the folder tree
$ cat agency_audit/current/meta.json
{ "portal_id": "12345678", "counts": { "properties": 47, ... } }
# 4. (Optional) Compare with a previous snapshot
$ g-gremlin hubspot compare-snapshots agency_audit/before agency_audit/current --json
✓ 25 added · 4 changed · 0 removed
# 5. Initialize a pack from the snapshot
$ g-gremlin hubspot pack init ./my_hubspot_config
✓ Pack initialized at ./my_hubspot_config
# Copy relevant specs from the snapshot into the pack
$ cp agency_audit/current/properties/* ./my_hubspot_config/properties/
$ cp agency_audit/current/pipelines/* ./my_hubspot_config/pipelines/
# Commit to git — this is now your source of truth
$ git add ./my_hubspot_config && git commit -m "feat: import hubspot config from agency snapshot"
Limitations
We are honest about what snapshot captures and what it does not.
- Snapshot captures portal configuration (properties, pipelines, lists, custom objects, workflows). It does not export HubSpot content: email templates, landing pages, blog posts, forms, reports, and dashboards are HubSpot UI-only.
- Workflow capture requires the beta flag: G_GREMLIN_HUBSPOT_AUTOMATION_BETA=1. Without it, the workflows/ directory is omitted.
- Association labels and custom association types are captured in the objects snapshot, but association data (which records are linked to which) is not part of the config snapshot — use data pull for record-level exports.
- Snapshot file sizes depend on portal complexity. Large portals (500+ properties, 50+ lists) may produce snapshot directories of 1--2 MB.
The 5-command loop — the signature g-gremlin workflow:
g-gremlin hubspot doctor
g-gremlin hubspot snapshot --out snapshots/baseline
g-gremlin hubspot pack plan <pack_dir>
g-gremlin hubspot pack apply <pack_dir> --yes
g-gremlin hubspot compare-snapshots snapshots/baseline <after_snapshot_dir>
Ready to Take Ownership of Your HubSpot Config?
Start with a read-only snapshot. Zero risk. Full visibility into what your agency built.