DOCS

HubSpot integration

Requires: Fundations Pro 1.1.0+

Creates and updates contacts in HubSpot CRM when donors donate or fundraisers create pages. Optionally creates deals per donation and sets lifecycle stages. Authentication uses a HubSpot Private App Access Token.

Hubspot settings

Why use it

HubSpot is a widely used CRM that many organisations already have for sales and marketing. Connecting it to Fundations means donor data flows directly into your existing contact database alongside all other interactions. No manual data entry required.

What it does

When a trigger fires, the connector creates or updates a HubSpot contact using the CRM v3 API. It sets the configured lifecycle stage and writes custom properties for donation data.

Custom HubSpot properties written by the connector:

  • get_last_donation_amount
  • get_last_donation_date (Unix millisecond timestamp)
  • get_fund_action_title
  • get_fund_goal_amount
  • lifecyclestage (standard property, set to configured stage)

If deal creation is enabled, the connector creates a deal via the CRM v3 deals endpoint and associates it with the contact.

The sync_donors setting gates donation_received. The sync_fundraisers setting gates user_registered, action_created, campaign_joined, and team_created. Turning either off causes those triggers to be skipped.

Supported triggers

TriggerSyncs whenGated by
donation_receivedA donation is confirmed (requires marketing consent)sync_donors
user_registeredNew user registers via the wizardsync_fundraisers
action_createdA new fundation is createdsync_fundraisers
action_completedA fundation reaches its goalsync_fundraisers
campaign_joinedA user joins a campaignsync_fundraisers
team_createdA new team is createdsync_fundraisers

How to set it up

  1. In HubSpot, create a Private App (Settings → Integrations → Private Apps). Give it at minimum the scopes: crm.objects.contacts.write, crm.objects.deals.write (if using deals).
  2. Copy the Access Token from the Private App page.
  3. Navigate to Fundations Pro → Integrations → HubSpot.
  4. Enter the Access Token and save.
  5. Toggle Sync Donors and/or Sync Fundraisers as needed.
  6. Select a Donor Lifecycle Stage and Fundraiser Lifecycle Stage from the dropdowns.
  7. To create deals: enable Create Deals, then select a Pipeline and Stage. The pipeline selector loads from your HubSpot account.
  8. Click Test to verify the connection.
  9. Enable the integration.
Hubspot deal pipeline select

Settings and options

SettingTypeDescription
Access TokenPassword (encrypted)HubSpot Private App access token
Sync DonorsCheckboxEnables syncing on donation_received
Sync FundraisersCheckboxEnables syncing on fundraiser-related triggers
Donor Lifecycle StageSelectStage assigned to donor contacts
Fundraiser Lifecycle StageSelectStage assigned to fundraiser contacts
Create DealsCheckboxCreates a HubSpot deal per donation
Deal PipelineSelectThe HubSpot pipeline for new deals
Deal StageSelectThe stage within the pipeline (shown as Pipeline → Stage)

Available lifecycle stage values: subscriber, lead, marketingqualifiedlead, salesqualifiedlead, opportunity, customer, evangelist, other.

Authentication uses Authorization: Bearer against https://api.hubapi.com/. There is no OAuth flow in the connector.

What you can and cannot do

You can create or update HubSpot contacts for donors and fundraisers, set a lifecycle stage per contact type, create deals associated with donor contacts, write custom properties for donation amounts and dates, and enable donor and fundraiser syncing independently.

You cannot sync a donor who did not give marketing consent, enrol contacts directly into HubSpot Workflows from Fundations (configure workflows in HubSpot to trigger on property changes set by this integration), remove contacts or downgrade a lifecycle stage automatically, or create contacts via donation_failed (the failed trigger is not supported).

Examples

Basic contact sync: enable sync_donors, set donor lifecycle stage to lead. Every consenting donor becomes a HubSpot lead automatically.

Donor deal pipeline: enable Create Deals, select your fundraising pipeline and an initial stage like “Donation Received”. Each donation creates a deal valued at the donation amount, associated with the donor.

Fundraiser as customer: enable sync_fundraisers, set fundraiser lifecycle stage to customer. Users who create fundations are treated as engaged customers in your CRM.

Goal-reached properties: the get_fund_raised_amount and get_fund_goal_amount properties are updated on action_completed. Create a HubSpot workflow that fires when get_fund_raised_amount equals get_fund_goal_amount for follow-up.

Troubleshooting

ProblemLikely causeFix
“Unauthorized” errorInvalid or expired access tokenRegenerate the token in HubSpot Private Apps
Contacts created but no lifecycle stageStage not selected in settingsChoose a stage for donors and/or fundraisers
Deals not appearingCreate Deals unchecked or pipeline not selectedEnable the setting and pick a pipeline
Custom properties missing in HubSpotProperties not created in HubSpotCreate the get_last_donation_amount etc. properties manually in HubSpot Settings → Properties
Pipeline dropdown is emptyToken lacks deal scopesAdd crm.objects.deals.write scope to the Private App

Developer reference

The HubSpot connector uses HubSpot CRM API v3. Deals are created at crm/v3/objects/deals and associated to contacts via crm/v3/objects/deals/{id}/associations/contacts/{cid}/deal_to_contact.

Use the shared integration filters to modify data:

add_filter( 'get_fund_integration_trigger_data', function( $data, $trigger, $object_id ) {
    if ( $trigger === 'donation_received' ) {
        // Add a value that maps to a custom HubSpot property
        $data['hs_campaign_source'] = get_post_meta( $data['action_id'], '_source', true );
    }
    return $data;
}, 10, 3 );

See Integration index developer reference for full filter signatures.