Skip to content

HubSpot

Turning HubSpot on in Ready-made integrations with a Private App token and six scopes. Creates or updates the contact by e-mail, records the purchase and the renewal as a won deal without duplicates, marks the subscription status and receives form submissions without overwriting contacts.

HubSpot receives members as contacts and sales as won deals: "Creates or updates the contact in HubSpot and records purchases and renewals as won deals."

Role: owner and admin. How to turn on, test, disable and remove any app is in Ready-made integrations.

1. Create the Private App in HubSpot

You need to be a super admin of the HubSpot account.

  1. In HubSpot, open Settings › Integrations › Private Apps and click Create a private app.
  2. Give it a name (Memberfy).
  3. On the Scopes tab, check all six:
ScopeWhat for
crm.objects.contacts.readFind the contact by e-mail
crm.objects.contacts.writeCreate and update the contact
crm.objects.deals.readFind the deal of an event already recorded
crm.objects.deals.writeCreate the deal and associate it with the contact
crm.schemas.contacts.writeCreate the subscription status property on the contact
crm.schemas.deals.writeCreate the property that prevents duplicate deals
  1. Click Create app and copy the access token. It starts with pat-.

Memberfy's screen also lists the scopes under Required scopes.

2. Turn it on in Memberfy

  1. In Settings › Integrations and APIs › Integrations, click HubSpot.
  2. Paste it into Private App token.
  3. Choose the events and check This app will receive: ….
  4. Click Turn on and then Send test. The test only checks the token: it creates no contact.

What arrives

The contact is identified by e-mail.

EventIn HubSpot
A member joined the communityCreates the contact (first name, last name, e-mail and phone) or updates the name and phone of the existing one
A purchase was completedA won deal Purchase: {product}, with the amount paid, in the default pipeline, associated with the contact; the contact's subscription status becomes active
A subscription was renewedA won deal Renewal: {product}, the same way
A subscription was canceledThe contact's subscription status becomes canceled
A form was submittedCreates the contact with the name, e-mail, phone, company and job title from the form and, when the person agreed, records the consent. For a contact that already exists, see below
  • No duplicates: each deal keeps the event that created it (the Memberfy event id property). A retry or a Resend finds the deal already created and does not create another.
  • Both properties, Memberfy subscription status (on the contact) and Memberfy event id (on the deal), are created automatically the first time.
  • Phone: goes in international format (+5541999998888) when the member added one. On the other events it only goes into a contact created right then; what HubSpot already holds is not overwritten.
  • The deal name goes out in the community's language.
  • When HubSpot asks to wait (rate limit), the delivery waits and tries again, without counting as a failure.

Form submissions

  • A visitor never changes an existing contact. Anyone can type someone else's e-mail into an open form. So a visitor's submission (or a member's with another e-mail) to an existing contact becomes only a note on the contact, with what was submitted.
  • A signed-in member's submission with their own profile e-mail fills in the contact's empty properties (name, phone, company, job title) and records the consent. With Forms update existing contacts on, it also updates the ones already filled in.
  • Turned HubSpot on before? The installation doesn't get the event on its own: open HubSpot in Integrations, check A form was submitted and save. A new installation already comes with it.

Common problems

  • "The provider refused the credentials." The token was changed or the Private App was deleted. Paste the new token and save.
  • Deliveries fail with 403. One of the six scopes is missing. Edit the Private App in HubSpot, check what is missing and test again.
  • The app became Failing. See Turned off after failures.