Use Case — Partner Operations

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 company
  • partner_tier — enum: Gold / Silver / Bronze
  • registration_date — date picker
  • expiry_date — date picker
  • partner_company — text field for company association

Partner Deal Registration Pipeline

1
Submitted
2
Under Review
3
Approved
4
Expired
5
Rejected

Step-by-Step

1

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.

2

Define pipeline in pipelines/partner_deal_reg.json

Specify the Partner Deal Registration pipeline with five stages: Submitted, Under Review, Approved, Expired, Rejected.

3

Run pack plan to review changes

Dry-run by default. See exactly what will be created before anything touches your portal.

4

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.

properties.yaml
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.

pipelines/partner_deal_reg.json
{
  "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.

terminal

# 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.

terminal — compare-snapshots

$ 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.

terminal — idempotent re-run

$ 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.

Set Up Partner Tracking & Deal Registration in HubSpot — Without an Admin | FoundryOps