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.
- In HubSpot, open Settings › Integrations › Private Apps and click Create a private app.
- Give it a name (Memberfy).
- On the Scopes tab, check all six:
| Scope | What for |
|---|---|
crm.objects.contacts.read | Find the contact by e-mail |
crm.objects.contacts.write | Create and update the contact |
crm.objects.deals.read | Find the deal of an event already recorded |
crm.objects.deals.write | Create the deal and associate it with the contact |
crm.schemas.contacts.write | Create the subscription status property on the contact |
crm.schemas.deals.write | Create the property that prevents duplicate deals |
- 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
- In Settings › Integrations and APIs › Integrations, click HubSpot.
- Paste it into Private App token.
- Choose the events and check This app will receive: ….
- 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.
| Event | In HubSpot |
|---|---|
| A member joined the community | Creates the contact (first name, last name, e-mail and phone) or updates the name and phone of the existing one |
| A purchase was completed | A 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 renewed | A won deal Renewal: {product}, the same way |
| A subscription was canceled | The contact's subscription status becomes canceled |
| A form was submitted | Creates 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.