Matthew Jeter M. Ziemba
Integration engineer
I connect CRM, ERP, billing, data-warehouse and field-service systems. As a consultant who builds with AI agents, I take each integration to production and keep it running.
In production: a billing platform whose first run settled 1,154 of 1,154 live agreements with 0 duplicate invoice numbers, and a two-way ERP sync linking 11,598 deals.
One customer in four systems
Sample data: a fictional customer
CRM
- Company name , same value, different formatting
- Harborline Property Group
- Billing email , conflicts with another system
- ap@harborline.example
- Billing address , same value, different formatting
- 120 Harbor St, Ste 4, Port Alder
- Account status , conflicts with another system
- Active
- Payment terms
- Empty
- Active sites , conflicts with another system
- 3
ERP
- Customer name , same value, different formatting
- HARBORLINE PROPERTY GROUP LLC
- Invoice email , conflicts with another system
- billing@harborline.example
- Bill-to address , same value, different formatting
- 120 Harbor Street, Suite 4, Port Alder
- Credit status , conflicts with another system
- On hold
- Terms
- Net 30
- Locations , conflicts with another system
- 3
Field service
- Client , same value, different formatting
- Harborline Property Group
- Billing contact , conflicts with another system
- billing@harborline.example
- Invoice address , same value, different formatting
- 120 HARBOR ST STE 4 PORT ALDER
- Client status , conflicts with another system
- On hold
- Billing terms
- Net 30
- Service sites , conflicts with another system
- 4
Billing sheet
- Account , same value, different formatting
- Harborline Property Group, Inc.
- AP email , conflicts with another system
- AP@harborline.example
- Address , same value, different formatting
- 120 Harbor St., Suite 4, Port Alder
- Status , conflicts with another system
- Active
- Terms
- Net 30
- Sites , conflicts with another system
- 3
| Account , same value, different formatting | |
|---|---|
| CRM | Harborline Property Group |
| ERP | HARBORLINE PROPERTY GROUP LLC |
| Field | Harborline Property Group |
| Sheet | Harborline Property Group, Inc. |
| Billing email , conflicts with another system | |
| CRM | ap@harborline.example |
| ERP | billing@harborline.example |
| Field | billing@harborline.example |
| Sheet | AP@harborline.example |
| Billing address , same value, different formatting | |
| CRM | 120 Harbor St, Ste 4, Port Alder |
| ERP | 120 Harbor Street, Suite 4, Port Alder |
| Field | 120 HARBOR ST STE 4 PORT ALDER |
| Sheet | 120 Harbor St., Suite 4, Port Alder |
| Status , conflicts with another system | |
| CRM | Active |
| ERP | On hold |
| Field | On hold |
| Sheet | Active |
| Payment terms | |
| CRM | Empty |
| ERP | Net 30 |
| Field | Net 30 |
| Sheet | Net 30 |
| Active sites , conflicts with another system | |
| CRM | 3 |
| ERP | 3 |
| Field | 4 |
| Sheet | 3 |
Four versions become one record
- One system of record per field. The others follow it.
- Every write carries a key, so running it twice changes nothing.
- Every write is read back. A 200 response is not a write.
- A value that is already right is never overwritten.
- CRM
- ERP
- Field service
- Billing sheet Retired
- ERP to CRM: 3 fields
- Field service to CRM: 1 field
- CRM to ERP: 1 field
| Field | System of record | Result |
|---|---|---|
| Account | CRM Sales opens the account, so the CRM names it. | Harborline Property Group No write needed |
| Billing email | ERP Invoices leave from the ERP, so it decides where they go. | billing@harborline.example Written to the CRM |
| Billing address | ERP The invoice prints the ERP’s address. | 120 Harbor Street, Suite 4, Port Alder No write needed |
| Status | ERP Credit holds are set in the ERP. | On hold Written to the CRM |
| Payment terms | ERP Terms are set where invoices are made. | Net 30 Filled in the CRM |
| Active sites | Field service Crews know which sites are in service. | 4 Written to the CRM and the ERP |
- 09:00:01 read CRM, ERP and field service: 6 fields each
- 09:00:01 skip billing sheet: retired, no longer a source
- 09:00:02 write CRM Billing email billing@harborline.example
- 09:00:02 write CRM Status On hold
- 09:00:02 write CRM Payment terms Net 30
- 09:00:02 write CRM Active sites 4
- 09:00:02 write ERP Active sites 4
- 09:00:03 verify 5 of 5 writes read back and match
- 09:00:04 rerun 0 writes, safe to repeat
- 09:00:01 read CRM, ERP and field service: 6 fields each
- 09:00:01 skip billing sheet: retired, no longer a source
- 09:00:02 write CRM 4 fields
- 09:00:02 write ERP 1 field
- 09:00:03 verify 5 of 5 writes read back and match
- 09:00:04 rerun 0 writes, safe to repeat
5 writes to 2 systems, 5 of 5 read back. Second run: 0 writes.
Quote-to-cash and billing for a services company.
Sole external engineer, from requirements to production, 2026.
- Signup forms send staged records to HubSpot, the CRM control plane.
- When a deal reaches provisioning ready, HubSpot custom-coded actions run as workers.
- The workers create users, sites and phone numbers on the service platform, upsert the customer in NetSuite by external id, and write identity rows to an AWS identity bridge with a token.
- The identity bridge is a Lambda function inside a private VPC, in front of a MariaDB table on RDS. Secrets Manager holds the database credentials.
- Each month, finance generates invoice drafts in NetSuite from HubSpot agreements, one per agreement per month, keyed so that generating again creates nothing new.
- After a person reviews the drafts and presses Send, NetSuite emails each invoice as a PDF.
- Six guards sit on the invoice path: a parking brake, a park gate, payer-first routing, a send gate, an internal-domain guard and a manual-resend guard.
- Platform usage and the identity table replicate into Snowflake. dbt models shape the usage, and Hex writes it back to HubSpot every hour, in batches that retry with backoff.
- Cutover: a freeze of about 59 minutes, two credential swaps, one test parked, one test that passed every hard gate, and the verdict to keep production.
Legend
- Systems
- Data paths
- Guards and keys
Systems
- System: Signup forms Vendor: HubSpot Role: Where new customers sign up
- System: HubSpot, the CRM control plane Vendor: HubSpot Role: Holds every customer, quote and agreement, and runs billing
- System: Workers Vendor: HubSpot Role: Provision each new customer across the other systems
- System: The service platform Vendor: The provider’s own Role: Runs the service the customer pays for
- System: NetSuite, the ERP Vendor: NetSuite Role: Keeps the books and sends the invoices
- System: Snowflake, dbt and Hex Vendor: Snowflake, dbt, Hex Role: Turns platform usage into billing inputs
- System: AWS identity bridge Vendor: AWS Role: Records which platform user belongs to which customer
- System: Customers Role: Receive the monthly invoice
5 systems (3 roles on HubSpot), 6 vendors, 1 private network
Data paths
- a Staged records
- b Provisioning ready
- c Users, sites, numbers
- d Customer record
- e Identity rows, by token
- f Monthly invoice drafts
- g PDF and email, after Send
- h Usage, replicated
- i Identity mirror, replicated
- j Hourly usage writeback
Trace
Sample dataOne sample signup
| Time | Step |
|---|---|
| 10:02:00 | Provisioning ready |
| 10:02:04 | Billing code minted |
| 10:02:09 | ERP customer upserted |
| 10:02:12 | Agreement created |
| 10:02:19 | Platform busy, retried |
| 10:02:31 | 2 users, 1 site, 1 number |
| 10:02:52 | 3 identity rows written |
| 10:03:46 | Agreement active |
8 steps, 1 held and retried, 1 min 46 s from provisioning ready to active.
Production results
In end-to-end tests across 11 account types, provisioning ready to active took about 70 to 130 seconds.
Keys and retries
- Key: type, agreement, month
- Upsert by external id
- Key derived on the server
- Idempotent batch upsert, retries with backoff
Guards on the invoice path
- Parking brake
- Park gate
- Payer-first routing
- Send gate
- Internal-domain guard
- Manual-resend guard
Guards
Sample dataOctober drafts for 12 sample agreements
| Guard | Checked | Held |
|---|---|---|
| Parking brake | 12 | 1 |
| Park gate | 10 | 1 |
| Payer-first routing | 9 | 0 |
| 8 to the payer, 4 of them instead of the user; 1 with no matching contact | ||
| Send gate | 9 | 1 |
| Internal-domain guard | 8 | 1 |
| Manual-resend guard | 1 | 1 |
7 ready for Send, all addressed to the payer. 5 held.
Nothing goes out until a person reviews the drafts and presses Send.
Show the data
[
{"agreement":"A-1001","type":"IND","parked":"no","action":"send","billingEmail":"accounts@alderpay.example","contacts":[{"role":"user","email":"m.reyes@mail.example"},{"role":"payer","email":"accounts@alderpay.example"}]},
{"agreement":"A-1002","type":"IND","parked":"no","action":"send","billingEmail":"billing@coastcare.example","contacts":[{"role":"user","email":"t.ho@mail.example"},{"role":"payer","email":"billing@coastcare.example"}]},
{"agreement":"A-1003","type":"ORG","parked":"no","action":"send","billingEmail":"ap@ridgewayhealth.example","contacts":[{"role":"payer","email":"ap@ridgewayhealth.example"}]},
{"agreement":"A-1004","type":"GRP","parked":"no","action":"send","billingEmail":"finance@eastgate.example","contacts":[{"role":"payer","email":"finance@eastgate.example"}]},
{"agreement":"A-1005","type":"IND","parked":"before-draft","action":"send","billingEmail":"accounts@alderpay.example","contacts":[{"role":"user","email":"k.osei@mail.example"},{"role":"payer","email":"accounts@alderpay.example"}]},
{"agreement":"A-1006","type":"IND","parked":"after-draft","action":"send","billingEmail":"billing@coastcare.example","contacts":[{"role":"user","email":"l.ferro@mail.example"},{"role":"payer","email":"billing@coastcare.example"}]},
{"agreement":"A-1007","type":"IND","parked":"no","action":"send","billingEmail":"acounts@alderpay.example","contacts":[{"role":"user","email":"d.park@mail.example"},{"role":"payer","email":"accounts@alderpay.example"}]},
{"agreement":"A-1008","type":"ORG","parked":"no","action":"send","billingEmail":"accounts@provider.example","contacts":[{"role":"payer","email":"accounts@provider.example"}]},
{"agreement":"A-1009","type":"IND","parked":"after-draft","action":"manual-resend","billingEmail":"invoices@northfield.example","contacts":[{"role":"user","email":"r.basu@mail.example"},{"role":"payer","email":"invoices@northfield.example"}]},
{"agreement":"A-1010","type":"IND","parked":"no","action":"send","billingEmail":"billing@coastcare.example","contacts":[{"role":"user","email":"a.silva@mail.example"},{"role":"payer","email":"billing@coastcare.example"}]},
{"agreement":"A-1011","type":"GRP","parked":"no","action":"send","billingEmail":"finance@eastgate.example","contacts":[{"role":"payer","email":"finance@eastgate.example"}]},
{"agreement":"A-1012","type":"IND","parked":"no","action":"send","billingEmail":"invoices@northfield.example","contacts":[{"role":"user","email":"p.lam@mail.example"},{"role":"payer","email":"invoices@northfield.example"}]}
] Identity bridge
Sample data- Token check
- Private VPC
- Secrets Manager
Four sample writes
| Request | Key | Result |
|---|---|---|
| 1 | user-A-1020-1 | Stored, new row |
| 2 | site-A-1020-1 | Stored, new row |
| 3 | user-A-1020-1 | Same key, updated in place |
| 4 | user-A-1021-1 | Refused: no token |
4 requests: 2 rows stored, 1 retry landed on the same row, 1 refused.
Show the data
[
{"n":1,"op":"upsert","token":"rw","fields":{"record":"user","agreement":"A-1020","slot":1}},
{"n":2,"op":"upsert","token":"rw","fields":{"record":"site","agreement":"A-1020","slot":1}},
{"n":3,"op":"upsert","token":"rw","fields":{"record":"user","agreement":"A-1020","slot":1},"note":"Retry of request 1"},
{"n":4,"op":"upsert","token":"none","fields":{"record":"user","agreement":"A-1021","slot":1}}
] Production results
29 of 29 end-to-end tests passed in production, where the bridge has run since July 2026.
I designed the bridge and wrote its handler and schema; the provider’s DevOps team deployed it from that code with Terraform.
Production results
29 of 29 end-to-end tests passed in production, where the bridge has run since July 2026.
I designed the bridge and wrote its handler and schema; the provider’s DevOps team deployed it from that code with Terraform.
Cutover
From the cutover runbookA freeze of about 59 minutes, two credential swaps, one test parked and one that passed every hard gate. Verdict: keep production, my go-live call.
- Freeze +0:00
- ERP swap +4:06
- Platform swap +9:52
- Test 1 parked about +13:00
- Test 2 passed
- Keep production about +59:00
Production results
First billing run: 1,154 of 1,154 live agreements settled, 0 duplicate invoice numbers.
1,073 October invoices sent, with 1,916 of 1,923 recipient deliveries completed.
Production results
First billing run: 1,154 of 1,154 live agreements settled, 0 duplicate invoice numbers.
1,073 October invoices sent, with 1,916 of 1,923 recipient deliveries completed.
Same problem, other systems
Most of my clients are roofing and construction companies. The part that carries over is the systems: CRMs, ERPs, accounting, field service and the data between them.
-
Two-way ERP sync
- Dataforma
- HubSpot
For an Ohio commercial contractor
11,598 deals linked to the ERP
In production since August 2026
-
Two-way field-service sync
- CenterPoint Connect
- HubSpot
- Zapier
- QuickBooks Online
- Make.com
For a Canadian commercial service contractor
Edits sync in 8.7 seconds at the median
In production since February 2026
-
Multi-tenant event processor
- AccuLynx
- HubSpot
- Make.com
For a US multi-brand contractor
69 AccuLynx locations cut over
In production since June 2026
-
ERP job creation
- Deltek ComputerEase
- HubSpot
For a Kentucky commercial contractor
Job financials synced to 11 deal fields, 4 times a day
In production since early 2026
-
Desktop accounting connector
- QuickBooks Desktop
- HubSpot
For a Southern California residential roofing and solar contractor
Sales recognition reconciled to the cent across 3,709 deals
In production since June 2026
-
CPQ inside HubSpot
- HubSpot
Roofer CPQ, a contest entry with a fictional brand
Semi-finalist in HubSpot’s custom-coded quote template contest
Live on a demo portal
-
Deal creation app
- HubSpot
- CompanyCam
- Smarty
- Shovels
- NOAA weather radar
For four contractors
Installed in 7 HubSpot portals, 4 of them contractor tenants
In production since January 2026
-
ERP project automation
- Acumatica
- HubSpot
For a Midwest residential exteriors contractor
Traced a key collision that merged 63 households onto 26 records
In production since October 2026
Every build, searchable by system, is in the index at the end of the page.
Production is the answer key
Each step below proves a change against what already runs.
-
Start from production’s history
Before I change a billing system, I collect what production already did.
117 open finance questions answered from production’s own send history.
-
Measure the platform
I test what a platform actually does before I build on what its documentation says.
HubSpot’s association-label limit measured at 50 per object pair, against a documented 10.
-
Migrate reversibly
Every migration runs dry first, writes a journal and can be undone.
38,301 work orders moved into HubSpot with a reversible ledger.
-
Fail closed
When a check cannot read the data, it stops instead of guessing.
A 21-mode reconciliation engine that stops on read errors and resumes from saved cursors.
-
Try to break it, then get a sign-off
Before a production change, I try to break it on purpose, and a person signs off at the boundary.
Before one go-live, an audit logged 83 findings, 10 of them blockers.
-
Own the incident
When my change breaks something, I stop it, say so, repair the data and change the process that let it through.
A sync loop from my own deploy: stopped the same day, and 52 of 79 damaged fields restored from the vendor’s audit log.
I run Claude Code as a multi-agent engineering team, with a written brief for each system it works on. From November 2025 to October 2026 that came to 2,557 commits across 21 repositories, 75% of them co-authored with Claude. Before a production change, review fleets of 7 to 74 agents try to break it. I decide what ships.
- Led planning and the presentation for the team that won the Customer Platform Pitch Contest at HubSpot UNBOUND 2026 Partner Day.
- Semi-finalist, HubSpot custom-coded quote template contest, 2026, with Roofer CPQ.
- Host of a weekly webinar on HubSpot and integrations for roofing contractors, since 2025.
Contact
Ask me about any build on this page.
Copy did not work here. The address is matt@matthewziemba.com.
22 builds, every one connected to HubSpot
Build index
-
ERP project automation For a Midwest residential exteriors contractor Systems: Acumatica, HubSpot In production since October 2026
When a deal is sold, creates the Acumatica project tasks and per-trade budgets and raises a change order when the deal differs, after fixing a customer-ID bug that merged households.
- Traced a key collision that merged 63 households onto 26 records
- New customer key collision-free across 6,025 contacts
- First live run, October 2026: 3 of 3 jobs, after a retry
-
Quote-to-cash billing platform For a services company Systems: HubSpot, NetSuite, Snowflake, dbt, Hex, AWS In production since September 2026
Signups provision themselves and bill monthly, with HubSpot as the control plane over NetSuite, the provider’s own platform, a Snowflake warehouse and an AWS identity bridge.
- First billing run: 1,154 of 1,154 live agreements settled, 0 duplicate invoice numbers
- Dry run before cutover: 1,139 of 1,148 agreements correct against production
- Identity bridge: 29 of 29 end-to-end tests passed in production
Kept from this cutover: a new secret reaches test runs at once but live runs only after its status reads Available, so the runbook now waits for Available plus 30 minutes.
-
Two-way ERP sync For an Ohio commercial contractor Systems: Dataforma, HubSpot In production since August 2026
Keeps HubSpot and the Dataforma ERP in step in both directions, after moving the ERP’s history into HubSpot with a ledger that can undo every write.
- 11,598 deals linked to the ERP
- 38,301 work orders and 11,215 deals migrated, 0 failed writes
- 67 duplicate won deals found and archived with a tested undo
-
Field-service rollout For a Kentucky commercial contractor Systems: Zuper, HubSpot, Dataforma In production since July 2026
Moved field crews from paper onto Zuper job types built from the client’s own procedures, and moved ten years of history out of a retiring roofing ERP into HubSpot.
- 4 job types, with up to 15 gated statuses and 131 checklist fields
- 205 checklist answers saved to the building; 31 items prefilled on the next visit
- 2,002 work orders migrated, journaled and reversible, 0 failed
-
Multi-tenant booking platform For four contractors Systems: Zuper, HubSpot, Demand IQ, n8n In production since July 2026
Homeowners book inspections straight into Zuper from a widget branded for each contractor, with each tenant’s own domain and credentials.
- 4 live tenants, 21 of 21 production smoke checks on each
- Lead retries rebuilt after about 20% of leads were silently dropped
- 5 silent bugs in the n8n booking flow fixed through its API
-
HubSpot-first booking For a Southeastern US residential contractor Systems: Arrivy, HubSpot, WhatConverts In production since July 2026
A booking widget that writes HubSpot first, lets the client’s own connector create the Arrivy task, then schedules and assigns the right rep to the slot the customer picked.
- Booking to an assigned field task in about 104 seconds, fully automatic
- 24 of 121 new deals over most of August came from the widget
- Third rep offered in 53 of 55 slots after a routing fix
-
Multi-tenant event processor For a US multi-brand contractor Systems: AccuLynx, HubSpot, Make.com In production since June 2026
Replaced a Make.com scenario with a queue-backed TypeScript processor that turns AccuLynx webhooks into HubSpot records for every location, cut over with a shadow run, a canary and an instant rollback.
- 69 AccuLynx locations cut over
- 205 of 205 real jobs replayed before cutover, 0 dead letters
- 1.5 seconds per event at the median, over a 48-hour sample
-
Desktop accounting connector For a Southern California residential roofing and solar contractor Systems: QuickBooks Desktop, HubSpot In production since June 2026
Connects a QuickBooks Desktop company file to HubSpot through the Web Connector’s SOAP protocol, for sales by trade and sales recognized in the month each line was sold.
- Sales recognition reconciled to the cent across 3,709 deals
- 5,078 past line items classified into 11 trades, 0 failed
- 4,432 failed sessions traced to an XML parser entity limit
-
Estimating system sync For a Kentucky commercial contractor Systems: EDGE Estimator, HubSpot In production since May 2026
Creates bids in The EDGE Estimator from HubSpot deals and brings pricing and estimating milestones back every 15 minutes.
- Scaffold to production in 2 days
- A silent 65% bid-creation failure rate found in 56,373 log rows; both causes fixed
- 20 linked bids in use; one scheduled run handled 18 bids with 0 errors
-
Two-way field-service sync For a Canadian commercial service contractor Systems: CenterPoint Connect, HubSpot, Zapier, QuickBooks Online, Make.com In production since February 2026
Syncs jobs, contacts and stages between CenterPoint Connect and HubSpot both ways, reconciles the edits CenterPoint cannot announce, and brings in job costs from QuickBooks Online.
- 47 webhook subscriptions behind three-layer echo prevention
- Edits sync in 8.7 seconds at the median
- 21-mode reconciliation engine that stops on read errors
-
Per-trade deal budgets For a Midwest residential exteriors contractor Systems: SumoQuote, Zuper, HubSpot In production since February 2026
Reads each signed quote, classifies every line by trade and as labor or material, and writes revenue, material and labor budgets to the deal.
- 11 trades in the Zuper version, 10 in the SumoQuote version
- 0 collisions across 1,194 catalog products
- Caught a stale config that misrouted 32 deals; replayed 588 signed quotes and corrected all 32
-
ERP job creation For a Kentucky commercial contractor Systems: Deltek ComputerEase, HubSpot In production since early 2026
Creates the job in Deltek ComputerEase when a deal is signed in HubSpot, through an XML import worked out with the vendor’s support, and brings job financials back to the deal.
- 24-hour API keys rotated every 8 hours
- Job financials synced to 11 deal fields, 4 times a day
- A two-month outage traced to my own workflow edit; fix tested 60 of 60 offline and deployed
-
Deal creation app For four contractors Systems: HubSpot, CompanyCam, Smarty, Shovels, NOAA weather radar In production since January 2026
A multi-tenant HubSpot app that creates a deal, its building and its CompanyCam project in one step, optionally enriched with property data and a storm score from NOAA hail radar.
- Installed in 7 HubSpot portals, 4 of them contractor tenants
- 1,159,004 NOAA radar hail events loaded into PostGIS
- One contractor created 1,395 deals with it, January to August 2026
-
Fulfillment automation and audit For an automotive-dealership compliance SaaS company Systems: HubSpot, ShipStation, UPS In production since November 2025
A ticket pipeline and workflows that run a product fulfillment line, from quantity and job number to ship-by urgency, ShipStation assignment and UPS tracking notes.
- 8-stage ticket pipeline and 7 live workflows
- Read-only portal audit: 272 workflows, 932 lists and 25 pipelines mapped
- Helped integrate ShipStation, Aircall, NetSuite, PandaDoc, Zapier and Microsoft Entra ID single sign-on with HubSpot
-
Portal audit and scoping For a construction company Systems: HubSpot, JobTread Delivered August 2026
A read-only audit of a large HubSpot portal, then the scope for a JobTread integration: an undocumented GraphQL API mapped and 138 candidate fields cut to a 29-field first release.
- Audited 279 workflows in a 4,102-deal portal
- JobTread API mapped: 189 types, 236 root fields
- 0 writes to either live system
-
Project-link backfills For four contractors Systems: Zuper, HubSpot Delivered July 2026
Linked HubSpot deals to their Zuper projects and merged fragmented projects, with a dry run, a check that each write landed and a one-command revert for every batch.
- 832 deals backfilled across three portals
- 265 jobs moved and 166 empty fragment projects deleted
- Adversarial re-audit of one portal: 0 defects
-
Voice-agent incident fix For a voice-agent platform serving contractors Systems: n8n, HubSpot, JustCall, OpenAI Delivered July 2026
Traced a contact-name bug across n8n, JustCall and QuickBooks, patched the production workflow with tests run inside n8n itself, and found the exhausted OpenAI key behind a live booking outage.
- 676 workflows swept; the faulty pattern sat in 11 workflows and 19 nodes
- Patch proven inside n8n: 6 of 6 runtime checks, 21 of 21 logic tests
- One API key shared by 66 workflows; alerting had failed for 3 days before customers were hit
-
Business-card lead intake For a construction company Systems: Claude, HubSpot Delivered February 2026
Built a working card-scanning app in a day, then delivered a Claude Project with the HubSpot connector instead, which spared the client a HubSpot upgrade.
- Working app built in 1 day
- A 350-line prompt encoding 20+ lead-source rules
-
Cross-portal data model Across 18 contractor HubSpot portals Systems: HubSpot Delivered December 2025
Scanned 18 HubSpot portals to learn how each one stored its sales reps, then gated a year-in-review report by how complete each portal’s data was.
- 32,846 properties across 31 object types scanned
- 7 sales-rep field patterns; 12 portals safe, 4 caution, 2 do not deploy
-
Office TV dashboard For a Midwest residential exteriors contractor Systems: HubSpot Delivered December 2025
A Raspberry Pi kiosk that shows live HubSpot sales and production reports on the office TV, provisioned through signed routes.
- 15 live HubSpot reports on one screen
-
CPQ inside HubSpot Roofer CPQ, a contest entry with a fictional brand Systems: HubSpot Live on a demo portal
A configure-price-quote system built entirely inside HubSpot: a formula engine prices each option, costs stay on the server, and the buyer locks in one option on the published quote.
- Semi-finalist in HubSpot’s custom-coded quote template contest
- 166-product catalog priced from 134 measurement tokens
- Formula engine with no eval: 89 of 93 library formulas clean on first import
-
QuickBooks job costing Hackathon build for contractors on HubSpot Systems: HubSpot, QuickBooks Online, Stripe, Claude Built and tested on sandbox data
Brings QuickBooks Online job costs onto the HubSpot deal and posts milestone invoices only after a named person approves them. Claude writes the line text; every amount is computed.
- Day one: a sandbox milestone invoice posted through the approval gate
- Led the build: 227 of 250 commits and about 100 pull requests