# Does the metal building configurator integrate with HubSpot?

<!-- Generated from public/answers/metal-building-configurator-hubspot.html by tools/markdown-mirror.mjs. Do not edit. -->

**Short answer.** Yes, one way. When a visitor requests a quote, the lead is delivered into HubSpot — or Zoho, or Pipedrive — as a contact, a company, a deal and a note carrying the design. Delivery is durable and cannot create the same record twice. Nothing is read back from your CRM and there is no two-way sync. You connect it yourself on your own dashboard: paste your key, we check it against your account before storing it, and you choose which of your own pipelines the deals open in.

## What arrives in HubSpot

| Object | What it carries |
| --- | --- |
| Contact | name, email, phone, company, deduplicated by email and phone |
| Company | resolved from the email domain, or what the visitor typed |
| Deal | one per quote request, in the pipeline and stage you nominate |
| Note | the building specification, the prompts the visitor typed, and the sales insight |

## How it behaves when things go wrong

- **A CRM outage delays a lead, it never loses one.** The HTTP handler appends to an append-only outbox and returns; a drainer moves records afterwards. A visitor's quote submission never fails because HubSpot is down.

- **A process killed mid-delivery resumes where it stopped.** The log is replayed on boot and each record carries a content-derived id, so re-enqueuing the same event is a no-op.

- **Replaying cannot duplicate.** The outbox is a delivery ledger, not a CRM-id ledger: deduplication is re-established against the CRM on every attempt, so losing the file cannot produce duplicate records.

## What it is not

- **Not a two-way sync.** Leads go out. Stage changes, owner changes and notes you write in HubSpot do not come back.

- **Not a marketplace app.** There is no listing to install. You paste your own key on your own dashboard, and it is checked against your account before it is stored — a key that is wrong is refused there and then, rather than discovered by an enquiry that never arrived. The pipeline is then a dropdown of the ones your account actually has.

- **Not enabled by default.** With no provider configured the layer is inert.

- **Not verified against your portal until it is.** The layer ships with automated tests, and a live check (`npm run crm:doctor -- --send`) delivers the same lead twice against the real portal and fails loudly if the second pass created anything. That check is part of switching it on.

## Which CRMs, and which plan

**HubSpot**, **Zoho CRM** and **Pipedrive**. HubSpot's free plan and Zoho's free edition can both do everything this asks of them — a private app token at HubSpot, a refresh token at Zoho — so connecting one costs a small builder nothing. Pipedrive has no free plan. Adding a fourth is one class and one registry entry, not a rewrite.

CRM delivery is included from **Dealer** ($249) upwards, alongside the email rather than instead of it: an inbox to act on this afternoon and a CRM record to find next year are one decision, not two. On **Starter** ($99) enquiries go to your email inbox.

## Related

- Why this is not a CRM: [what it does and does not replace](https://machinaebuild.com/answers/metal-building-crm-software)

- Plans: [machinaebuild.com/for-builders](https://machinaebuild.com/for-builders)

Last reviewed 2026-08-31 against the code. Reviewed against `services/crm/` and `docs/CRM-LAYER.md`.
