Greenbox Capital Goodwood Consulting
HubSpot Migration Tracker
Portal 5840146 · Data Hub Pro

HubSpot Workflow Migration Tracker

Replacing Insycle, Zapier, Google Apps Scripts, and the Box 1.0 webhook stack with Data Hub Pro custom code actions and Firebase Cloud Functions.
Updated 05/08/2026 · v0.10 — 6 dedup + 2 format + 2 Data-Hub-Pro associate workflows live (3 Insycle workflows retired, consolidated into 2 new). Only Insycle item left: fake-email purge. (14 / 15)
Workflow Migration Tracker Box ↔ HubSpot Tracker

Overview

23
Items to Migrate
14
Complete & Live
1
Blocked / Awaiting Info
8
Not Started
Live HubSpot views: New Workflows Migrated to Custom Code  ·  Workflows to Migrate to Custom Code
Saved filters in HubSpot — canonical source-of-truth for what is replaced vs. still pending.
Insycle
14 / 15
Zapier
0 / 2
Apps Script
0 / 3
Box 1.0
0 / 3
Recent progress (05/08/2026): Dedup on MOID is now live as a HubSpot Custom Code Action replacing Insycle recipe 022e736c. Validated against a 3-record fixture; sequential merge handles HubSpot's canonical-id reassignment and writes a summary note on the surviving master. A scheduled-batch variant is in progress (Greenbox-built) to mirror Insycle’s weekly Sat run. Two new lessons captured in hubspot-playbook #47 and #48.
Still needed: Match + master rules for the remaining Insycle recipes (248b5e9d Broker Dedup, d973b95b + 11f8a81d State/Region copy). Pattern from Dedup on MOID (capture from Insycle UI → Custom Code Action with same logic) is now proven and reusable.

Phase 1 — Replace Insycle High Priority

Workflow / Automation ID Object Replacement Approach Status Owner Est. Hrs Actual Hrs ETA
Dedup on MOID DEPRECATED & REPLACED
Old: Insycle recipe 022e736c (4-template chain) — turned off 05/08/2026, renamed to “Dedup on MOID (Insycle) - Deprecated 05/08/2026”
New: HubSpot Custom Code Action with master-rule selection, canonical-id-following merge, and inline summary note on master
Old: 248342288 OFF
New: 1818402338
Contact functions/hubspot-dedup/dedup-on-moid.js — deployed to action 103 of new workflow. Source rules captured from Insycle UI; tested with 3-record fixture (1 master + 2 losers including a no-email loser). ✅ Cutover Complete Goodwood 3.0 4.0 Done 05/08/2026
Dedup on MOID — Weekly Scheduled Run REPLACED CRON
Old: Insycle scheduled automation, template 538b0c72 (weekly Sat)
New: HubSpot list-based workflow enrolling all contacts with known MOID, sharing the same Custom Code Action source as 1818402338
Old: 538b0c72 (Insycle)
New: 1818352528
Contact Same dedup-on-moid.js source; enrollment trigger is merchantsownersid IS_KNOWN (list-based, batch enrollment) instead of per-record. Insycle template 538b0c72 ready to deactivate. ✅ Cutover Complete Greenbox 0.5 0.5 Done 05/08/2026
Dedup on SubID REPLACED
Old: Insycle template 1d7c3cdd (weekly Sat scheduled, only)
New: HubSpot Custom Code Action with master-rule (latest createdate wins), canonical-id-following merge, summary note on surviving deal. Sales Pipeline only.
Old: 1d7c3cdd (Insycle)
New: 1818248059
Deal functions/hubspot-dedup/dedup-on-subid.js — deployed to action 103. Trigger: loan_request_id IS_KNOWN. Tested with 3 deals sharing a SubID in Sales Pipeline; latest-createdate master rule confirmed. ✅ Tested & Activated Goodwood 2.0 1.5 Done 05/08/2026
Dedup on SubID — Weekly Scheduled Run REPLACED CRON
Old: Insycle scheduled run on template 1d7c3cdd (weekly Sat)
New: HubSpot list-based workflow enrolling all deals with known SubID in Sales Pipeline, sharing the same Custom Code Action source as 1818248059
Old: 1d7c3cdd (Insycle)
New: 1818163032
Deal Same dedup-on-subid.js source; list-based enrollment of all SubID-known deals in Sales Pipeline. Insycle template 1d7c3cdd ready to deactivate. ✅ Cutover Complete Greenbox 0.5 0.5 Done 05/08/2026
Dedup on Broker ID (Companies) REPLACED
Old: Insycle recipe 248b5e9d → template 3f22b3c7 "GBox Broker DeDupe" (per-record via HS WF 252497174, 15-min delay)
New: HubSpot Custom Code Action with simple master rules: broker_id exists → earliest createdate. Operates on Companies-with-broker_id (brokerage entities).
Old: 252497174 (Insycle) OFF
New: 1818443075
Company functions/hubspot-dedup/dedup-on-broker-id.js — deployed to action 2. Validated indirectly: when test broker companies were created, the legacy Insycle workflow 252497174 ran first (15-min delay) and merged them, confirming dedup behavior is in place. Insycle workflow 252497174 ready to deprecate. ✅ Tested & Activated Goodwood 2.5 2.0 Done 05/08/2026
Dedup on Broker (Custom Object 2-4171901) N/A
Investigated — HubSpot enforces uniqueness on broker_id_unique at the property level. Duplicates structurally cannot exist; dedup is unnecessary. Insycle's recipe for this object was empty for the same reason. Code archived in functions/hubspot-dedup/dedup-broker-object.js as documentation.
Broker (2-4171901) No workflow needed — HubSpot property-level uniqueness handles it Not Required 0.5 0.5 Investigated 05/08/2026
Contact: Known State/Region copies into unknown state or province
Two Insycle steps: state → state_region; state → province
273473097 Contact Inline HubSpot Custom Code Action (no Cloud Function) — copy or normalize via lookup table Not Started Goodwood 1.5 Phase 1a
Step 2 - Associate Broker (Partner of Exclusivity)
Marked “No longer used” — replaced by workflow 1704811958
452741668 Company Confirm with Kris — likely no rebuild required Disabled Kris 0.0 Confirm
Dedup on Merchant ID (Companies) REPLACED
Old: Insycle template 4c505332 "GBox Company DeDupe" (weekly Sun)
New: HubSpot Custom Code Action with master rules: num_associated_deals highest → owner exists → earliest createdate
Old: 4c505332 (Insycle)
New: 1818450555
Company functions/hubspot-dedup/dedup-on-merchant-id.js — deployed to action 2. Workflow created from scratch via v4 API. Tested with 3-company fixture; merged + summary note confirmed. ✅ Tested & Activated Goodwood 2.5 2.0 Done 05/08/2026
Dedup on Merchant ID (Companies) — Weekly Scheduled Run REPLACED CRON
Old: Insycle scheduled run on template 4c505332 (weekly Sun)
New: HubSpot list-based workflow enrolling all companies with known Merchant ID, sharing the same Custom Code Action source as 1818450555
Old: 4c505332 (Insycle)
New: 1818461546
Company Same dedup-on-merchant-id.js source; list-based enrollment of all Merchant-ID-known companies. Insycle template 4c505332 ready to deactivate. ✅ Cutover Complete Greenbox 0.5 0.5 Done 05/08/2026
Dedup on Phone (Contacts) — Weekly Schedule Run REPLACED CRON
Old: Insycle template 2d0947d6 "GBox Contact DeDupe - Phone" (weekly Sat)
New: HubSpot Custom Code Action matching on First Name + Last Name + Phone (compound exact match), bounded to records created in last 60 days, same master rules as MOID
Old: 2d0947d6 (Insycle)
New: 1818451370
Contact functions/hubspot-dedup/dedup-on-phone.js — deployed to action 2. Workflow created from scratch via v4 API. Tested with 3-contact fixture; merged + summary note confirmed. Insycle template 2d0947d6 ready to deactivate. ✅ Cutover Complete Goodwood 2.0 1.5 Done 05/08/2026
Dedup on Name + Company (Contacts) REPLACED
Old: Insycle template fa71a1c7 "My 2. Deduplicate by same name, similar company" (weekly Sun)
New: HubSpot Custom Code Action with compound match on First Name + Last Name + normalized Company Name (strips LLC/Inc/Corp/Co/the/etc. before comparing). Bounded to last 60 days.
Old: fa71a1c7 (Insycle)
New: 1818425780
Contact functions/hubspot-dedup/dedup-on-name-company.js — deployed to action 2. Workflow created from scratch via v4 API. HubSpot search has no “common-terms-ignored” operator, so company normalization is done locally. Master rules: MOID exists → deal count highest → email exists → lifecycle ladder → earliest createdate. ✅ Tested & Activated Goodwood 3.0 2.0 Done 05/08/2026
Dedup on Name + Company (Contacts) — Weekly Schedule Run REPLACED CRON
Old: Insycle scheduled run on template fa71a1c7 (weekly Sun)
New: HubSpot list-based workflow sharing the same Custom Code Action source as 1818425780
Old: fa71a1c7 (Insycle)
New: 1818463667
Contact Same dedup-on-name-company.js source. Insycle template fa71a1c7 ready to deactivate. ✅ Cutover Complete Greenbox 0.5 0.5 Done 05/08/2026
Remove fake email addresses CRON
Insycle template aa8d1edd — weekly Sat, Bulk Update purging the 324+ known invalid emails (per Roque’s ETL spec)
aa8d1edd (Insycle) Contact Custom Code Action; canonical fake-email pattern list (need source from Greenbox) maintained in Firestore or as a const list, scheduled enrollment Blocked — need pattern list Goodwood 2.5 Need 324+ list

Phase 1c — Daily Insycle Transforms CRON

Three daily Insycle "Transform Data" recipes — title-case / normalize property values. Lower priority than dedup; can stay on Insycle until last.

WorkflowIDObjectReplacement ApproachStatusOwnerEst. HrsActual HrsETA
Format Companies (name, address, phone) REPLACED CRON
Old: Insycle template d5c478ae "GBox Company Formatting Recipe" (daily)
New: HubSpot Custom Code Action — Title Case for name/dba/address/city, UPPER for state, XXX-XXX-XXXX for phone. Idempotent (no-op when already formatted). Insycle template d5c478ae ready to deactivate.
Old: d5c478ae (Insycle)
New: 1818501923
Company functions/hubspot-format/format-company.js — deployed to action 1. List-based enrollment for daily scheduled run. ✅ Cutover Complete Goodwood 1.5 1.0 Done 05/08/2026
Format Contacts (name, address, phone, sub_lead_source) REPLACED CRON
Old: Insycle templates 9dae83fb "GBox Contact Formatting Recipe" + 3f9efbd5 "Sub Lead Source Proper Case" (both daily)
New: single HubSpot Custom Code Action handling firstname/lastname/address/city/sub_lead_source (Title Case), state (UPPER), phone+mobilephone (XXX-XXX-XXXX). Idempotent. Two Insycle templates collapsed into one workflow. Both Insycle templates ready to deactivate.
Old: 9dae83fb + 3f9efbd5 (Insycle)
New: 1818455336
Contact functions/hubspot-format/format-contact.js — deployed to action 1. List-based enrollment for daily scheduled run. ✅ Cutover Complete Goodwood 2.5 1.5 Done 05/08/2026

Phase 1d — Replace Insycle Associate Actions

Insycle's "Associate Records" recipes are being replaced with Data Hub Pro’s native Associate Records action (actionTypeId: 0-63189541). No Custom Code needed — HubSpot’s built-in action does property-match association out of the box.

WorkflowIDObjectReplacement ApproachStatusOwnerEst. HrsActual HrsETA
Deal: Associate Deal to Company (Merchant) REPLACED
Old: Insycle template c46f1019 via actionTypeId 1-1780251 (24-hr delay)
New: Data Hub Pro native Associate Records action matching 0-3/associated_merchantid0-2/merchant_id with label 1-35 (60-min delay)
Old: 246320985 OFF
New: 1818517401
Deal → Company No code — HubSpot’s native Associate Records action handles the property-match association directly ✅ Cutover Complete Greenbox 0.5 0.5 Done 05/08/2026
Deal: Associate Deal to Contact (Merchant Owners) REPLACED
Old: two Insycle workflows consolidated — "Deal: Associate Deal to Contact (Merchant Owner)" + "Associate Deal with All Contacts from Merchant"
New: single Data Hub Pro Associate Records workflow handling Deal→Contact (merchant owners) association
Old: 246326138 OFF + 248289360 OFF
New: 1818515583
Deal → Contact Two Insycle workflows collapsed into one Data Hub Pro Associate Records workflow. Cleaner architecture, one source of truth for merchant-owner associations. ✅ Cutover Complete Greenbox 1.0 1.0 Done 05/08/2026

Phase 2 — Replace Zapier Medium

Workflow ID Object Replacement Approach Status Owner Est. Hrs Actual Hrs ETA
Company: Get Company Owner via Zap Deal/Broker/RAM 397047062 Company Native HubSpot workflow (or Custom Code Action) reading associated Deal/Broker/RAM and setting Company owner Not Started Goodwood 2.5 Phase 2
Deal: Set RAM Zapier Trigger Flag to Re-enroll 451439239 Deal Native re-enrollment trigger; remove Zapier dependency Not Started Goodwood 1.5 Phase 2

Phase 3 — Replace Google Apps Scripts Medium

Workflow ID Object Replacement Approach Status Owner Est. Hrs Actual Hrs ETA
TEST — Lead Assignment Custom Allocation (HS Webhook + Google Sheet + App Script) 592953110 Contact Cloud Function (functions/lead-routing/customAllocation.js) — round-robin / weighted allocation; Firestore for state Not Started Goodwood 4.0 Phase 3
TEST — New Lead Flow Custom Allocation (HS Webhook + App Script) 1672541470 Contact Cloud Function — shares allocation logic with above Not Started Goodwood 2.0 Phase 3
Contacts: Retargeting Expired Opportunities — Sequences (Custom Allocation Script) 589795957 Contact Cloud Function — retargeting allocation Not Started Goodwood 3.0 Phase 3

Phase 4 — Box 1.0 Integration Lower / depends on Box API

Workflow ID Object Replacement Approach Status Owner Est. Hrs Actual Hrs ETA
Deals: MASTER Set Deal Stage from Box Processing Status 246274200 Deal Cloud Function consuming Box webhook → updates Deal stage. Coordinate with Sarah Lackey’s team. Not Started Goodwood + GBX Tech 4.0 Phase 4
Deal: Create Box Submission URL 291732615 Deal Custom Code Action constructs URL from Deal properties — lift logic from current workflow Not Started Goodwood 1.5 Phase 4
Deal: TEST — Webhook to Box 297128822 Deal Production-grade Cloud Function replacing the test webhook Not Started Goodwood + GBX Tech 3.0 Phase 4

Cross-Cutting Requirements (from Roque’s ETL spec, 2026-04-28)

Every dedup / merge / ingestion replacement must natively handle these three traps before Insycle can be cancelled:

RequirementDescriptionStatus
Secondary Decision Makers Un-flatten the secondary owners from the legacy Box export and attach them to the Deal. Not Started
Pipeline Spam Prevention Pre-ingestion filter for the 324+ known invalid emails. Maintain canonical list in Firestore. Not Started
Rep Collisions / Merged Accounts Exception logic to associate a single owner across multiple distinct companies without HubSpot improperly merging records. Not Started

QA & Cutover Plan

Open Questions

Source of truth: This tracker is published from public/greenbox/reports/migration-tracker.html in the greenbox-core-apps repo. Update statuses by editing the badges and re-deploying. Workflow inventory & phased plan: docs/GREENBOX_WORKFLOWS_INVENTORY.md.