Set Up Partner Tracking & Deal Registration in HubSpot Without an Admin
Create custom properties, a dedicated partner pipeline, and association rules using YAML specs and the g-gremlin CLI. No contractor needed.
The Problem
Partner deal registration requires custom properties for partner metadata, a dedicated pipeline with approval stages, and association rules linking partners to deals. This is typically a contractor engagement costing $2,000 -- $5,000, with a multi-week turnaround of back-and-forth emails, screenshots, and manual QA.
With g-gremlin, you define the entire setup in two spec files, review the plan, and apply it in under 10 minutes. Every change is tracked with before/after receipts.
What You'll Build
5 Custom Deal Properties
partner_name— text field for referring partner companypartner_tier— enum: Gold / Silver / Bronzeregistration_date— date pickerexpiry_date— date pickerpartner_company— text field for company association
Partner Deal Registration Pipeline
Step-by-Step
Define properties in properties.yaml
Declare five custom deal properties — partner_name, partner_tier, registration_date, expiry_date, and partner_company — in a single YAML file.
Define pipeline in pipelines/partner_deal_reg.json
Specify the Partner Deal Registration pipeline with five stages: Submitted, Under Review, Approved, Expired, Rejected.
Run pack plan to review changes
Dry-run by default. See exactly what will be created before anything touches your portal.
Run pack apply to execute
Apply the plan with --yes. g-gremlin captures before/after snapshots automatically.
Example: properties.yaml
Copy this into your pack directory. g-gremlin reads it on pack plan.
version: 1
objects:
deals:
groups:
- name: partner_information
label: "Partner Information"
display_order: 10
properties:
- name: partner_name
label: "Partner Name"
type: string
field_type: text
group_name: partner_information
description: "Referring partner company name"
- name: partner_tier
label: "Partner Tier"
type: enumeration
field_type: select
group_name: partner_information
options:
- label: "Gold"
value: "gold"
- label: "Silver"
value: "silver"
- label: "Bronze"
value: "bronze"
- name: registration_date
label: "Registration Date"
type: date
field_type: date
group_name: partner_information
- name: expiry_date
label: "Expiry Date"
type: date
field_type: date
group_name: partner_information
- name: partner_company
label: "Partner Company"
type: string
field_type: text
group_name: partner_information
description: "Partner company for association lookup"Example: Pipeline Spec
Place this in pipelines/partner_deal_reg.json inside your pack directory.
{
"object_type": "deals",
"label": "Partner Deal Registration",
"display_order": 1,
"stages": [
{
"label": "Submitted",
"display_order": 0,
"metadata": { "probability": "0.1" }
},
{
"label": "Under Review",
"display_order": 1,
"metadata": { "probability": "0.3" }
},
{
"label": "Approved",
"display_order": 2,
"metadata": { "probability": "0.8" }
},
{
"label": "Expired",
"display_order": 3,
"metadata": { "probability": "0.0" }
},
{
"label": "Rejected",
"display_order": 4,
"metadata": { "probability": "0.0" }
}
]
}Plan & Apply
Review the dry-run plan, then apply when ready.
# Step 3: Review the plan (dry-run)
$ g-gremlin hubspot pack plan ./partner_pack
⟳ Plan generated:
+ Create property group: partner_information
+ Create property: partner_name (string/text)
+ Create property: partner_tier (enumeration/select)
+ Create property: registration_date (date/date)
+ Create property: expiry_date (date/date)
+ Create property: partner_company (string/text)
+ Create pipeline: Partner Deal Registration (5 stages)
✓ Dry-run complete. 1 group, 5 properties, 1 pipeline to create.
Pass --yes to apply.
# Step 4: Apply
$ g-gremlin hubspot pack apply ./partner_pack --yes
✓ Group created: partner_information
✓ Property created: partner_name
✓ Property created: partner_tier (3 options)
✓ Property created: registration_date
✓ Property created: expiry_date
✓ Property created: partner_company
✓ Pipeline created: Partner Deal Registration (5 stages)
✓ Applied. Snapshots: artifacts/20260127_143022/before · after
The Receipts
Compare your baseline snapshot to the post-apply snapshot. Every change is accounted for.
$ g-gremlin hubspot compare-snapshots snapshots/baseline artifacts/20260127_143022/after_snapshot
✓ Comparison complete.
Properties:
+ partner_name (deals) — added
+ partner_tier (deals) — added
+ registration_date (deals) — added
+ expiry_date (deals) — added
+ partner_company (deals) — added
Property Groups:
+ partner_information (deals) — added
Pipelines:
+ Partner Deal Registration (5 stages) — added
Summary: 7 added · 0 changed · 0 removed
Idempotency Proof
Run pack plan again. Zero changes detected. The plan is idempotent.
$ g-gremlin hubspot pack plan ./partner_pack
✓ No changes detected. Portal matches spec.
0 properties · 0 pipelines · 0 groups to change.
Trust artifact: If the plan shows zero changes on re-run, the system is deterministic. You can safely commit your YAML specs to version control and re-apply on any portal.
Limitations
We are honest about what g-gremlin does and does not handle for this use case.
- Associations between objects (e.g., partner company to deal) require a separate objects apply step — they are not part of the properties or pipelines spec.
- Pipeline stage reordering requires all stages to be present in the spec. If you omit a stage, it will not be removed unless --allow-delete is passed.
- HubSpot does not allow changing a property type once created (e.g., string to enumeration). g-gremlin blocks this and reports an error.
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 Set Up Partner Tracking?
Skip the contractor. Define your partner properties and pipeline in YAML, apply in minutes.