Native Integrations

How Donately syncs data with your CRM, email, and communication tools.

How It Works

Donately's native integrations automatically sync donor and donation data to your external tools when events occur (e.g., a new donation is made). Each integration connects via OAuth and uses a default field mapping that can be customized.

Available Integrations

Salesforce

Full CRM sync — Contacts, Accounts, Opportunities. Supports household/single account models, campaign rules, record types, and custom field mapping.

📈

HubSpot

Contacts and Deals. Configurable pipeline and deal stage mapping for donations and recurring gifts.

📨

Mailchimp

Syncs donors as contacts to a selected Mailchimp audience list.

📬

Constant Contact

Syncs donors as contacts to a selected Constant Contact list.

💬

Slack

Sends real-time donation notifications to a selected Slack channel.

Sync Flow

When a donation is processed in Donately, the integration engine runs the following steps:

  1. Event triggered — A donation is created, updated, or refunded.
  2. Mapping applied — The default field mapping (plus any custom overrides) is used to transform Donately data into the target system's format.
  3. Record lookup — For CRM integrations (Salesforce, HubSpot), the system checks if the donor already exists by email or Donately ID.
  4. Upsert — The donor record is created or updated, then the donation record is created in the target system.
  5. Event logged — A sync event is recorded in Donately with success/failure status. Failed syncs can be retried from the dashboard.

Salesforce

The Salesforce integration syncs Donately data to Salesforce Contacts, Accounts, and Opportunities. It supports both single-account and household-account models.

Configuration Options

SettingDescriptionDefault
account_modelAccount structure: single (one account per contact) or household (shared by last name)single
household_name_formatTemplate for household account names. Supports {first_name} and {last_name} tokens.{last_name} Household
account_record_type_idSalesforce Record Type ID for new Accounts
contact_roleRole assigned to the contact (e.g., "Donor")
contact_record_type_idSalesforce Record Type ID for new Contacts
donation_stage_nameOpportunity stage for one-time donationsClosed Won
recurring_donation_stage_nameOpportunity stage for recurring donationsPledged
opportunity_record_type_idSalesforce Record Type ID for new Opportunities
gift_type_fieldCustom field API name for gift type
gift_type_valueValue to set in the gift type fieldDonately
source_fieldCustom field API name for source
source_value_fromTemplate for source value. Supports tokens like {campaign_title}.
fund_fieldCustom field API name for fund/designation
fund_default_valueDefault value for the fund fieldGeneral Operating
user_id18-character Salesforce User ID for API calls
link_campaign_to_opportunityAssociate Donately campaigns with Salesforce Campaigns on the Opportunityfalse
link_fundraiser_as_sub_campaignCreate fundraisers as sub-campaigns under the parent Salesforce Campaignfalse

Default Field Mapping — Contact

Donately FieldSalesforce Field
emailEmail
first_nameFirstName
last_nameLastName
unique_identifierdntly_PersonId__c
phone_numberPhone
street_addressMailingStreet
cityMailingCity
stateMailingState
zip_codeMailingPostalCode
countryMailingCountry
full_addressdntly_FullAddress__c

Default Field Mapping — Account

Donately FieldSalesforce Field
titleName
unique_identifierdntly_AccountId__c

Default Field Mapping — Opportunity (Donation)

Donately FieldSalesforce Field
donation_nameName
donation_amountAmount
donation_dateCloseDate
donation_descriptionDescription
unique_identifierdntly_DonationId__c
currencydntly_Currency__c
donation_typedntly_DonationType__c
transaction_iddntly_TransactionId__c
processordntly_Processor__c
livemodedntly_Livemode__c
anonymousdntly_Anonymous__c
on_behalf_ofdntly_OnBehalfOf__c
commentdntly_Comments__c
statusdntly_DonationStatus__c
recurringdntly_DonationRecurring__c
subscription_frequencydntly_RecurringFrequency__c
subscription_iddntly_SubscriptionId__c
subscription_statusdntly_SubscriptionStatus__c
subscription_start_datedntly_SubscriptionStartDate__c
campaign_iddntly_CampaignId__c
campaign_titledntly_CampaignName__c
fundraiser_iddntly_FundraiserId__c
fundraiser_titledntly_FundraiserName__c
form_iddntly_FormId__c
account_iddntly_AccountId__c
tracking_codesdntly_TrackingCodes__c
metadatadntly_Metadata__c
dtd_company_namedntly_DtdCompanyName__c

HubSpot

The HubSpot integration syncs donors as Contacts and donations as Deals. You can configure which pipeline and deal stage donations are assigned to.

Configuration Options

SettingDescription
pipelineHubSpot pipeline name for donation deals
pipeline_idHubSpot pipeline UUID
deal_stageDeal stage for one-time donations (e.g., "Closed Won")
deal_stage_idHubSpot deal stage UUID
recurring_deal_stageDeal stage for recurring donations (e.g., "Pledged")
recurring_deal_stage_idHubSpot recurring deal stage UUID

Default Field Mapping — Contact

Donately FieldHubSpot Property
emailemail
first_namefirstname
last_namelastname
unique_identifierdntly_donor_id
full_addressdntly_full_address
street_addressdntly_donor_street
street_address_2dntly_donor_apartment
citydntly_donor_city
statedntly_donor_state
zip_codedntly_donor_zip
countrydntly_donor_country

Default Field Mapping — Deal (Donation)

Donately FieldHubSpot Property
(literal) "Donately Donation"dealname
donation_amountamount
currency_codedeal_currency_code
unique_identifierdntly_donation_id
donation_datedntly_donation_date
statusdntly_donation_status
transaction_iddntly_donation_transaction_id
processordntly_donation_processor
donation_typedntly_donation_type
anonymousdntly_donation_anonymous
on_behalf_ofdntly_donation_on_behalf_of
commentdntly_donation_comment
recurringdntly_donation_recurring
subscription_frequencydntly_subscription_frequency
subscription_iddntly_subscription_id
subscription_statusdntly_subscription_status
subscription_start_daydntly_subscription_start_day
campaign_iddntly_donation_campaign_id
campaign_titledntly_donation_campaign_title
fundraiser_iddntly_donation_fundraiser_id
fundraiser_titledntly_donation_fundraiser_title
form_iddntly_donation_form_id
donor_iddntly_donor_id
livemodedntly_donation_livemode
tracking_codesdntly_donation_tracking_codes
metadatadntly_donation_meta_data
ecarddntly_donation_ecard
notesdntly_donation_notes
dtd_company_namedntly_donation_dtd_company_name

Record Matching

When syncing data, the integration uses a series of strategies to find existing records in HubSpot before creating new ones. Strategies are tried in order — the first match wins.

Contact Matching

StrategyHow It Works
FindByPersonIdSearches for a contact by the dntly_donor_id custom property. This is the primary strategy and matches contacts created by the native integration.
FindByEmailFalls back to searching by the contact's email field. Used when dntly_donor_id is not found (e.g., contacts created manually or by another tool).

Deal Matching

StrategyHow It Works
FindByDonationIdSearches for a deal by the dntly_donation_id custom property. This is the primary strategy and matches deals created by the native integration.
FindByCompositeMatchFalls back to matching by a combination of the associated contact's email, deal amount, and close date. Only targets deals that do not have dntly_donation_id set. Used to match legacy records synced via Zapier or other tools that did not include the Donately Donation ID. If multiple deals match the same criteria, the match is skipped and flagged for manual review to avoid incorrect updates. When a match is found, all native fields (including dntly_donation_id) are backfilled on the next update, so subsequent syncs use the faster primary strategy automatically.
The composite match strategy is designed for one-time migration scenarios. Once a legacy deal is matched and updated with the Donately Donation ID, all future syncs for that donation will use the primary FindByDonationId strategy.

Mailchimp

The Mailchimp integration syncs donor email addresses and names to a selected Mailchimp audience list. When a new donation is made, the donor is added to (or updated in) the chosen list.

Configuration

After connecting via OAuth, you select which Mailchimp audience list to sync donors to. No additional field mapping configuration is needed — donors are synced with their email, first name, and last name.

Constant Contact

Similar to Mailchimp, the Constant Contact integration syncs donors to a selected contact list. When a donation is processed, the donor is added to the chosen list.

Configuration

After connecting via OAuth, select a Constant Contact list. Donors are synced with their email, first name, and last name.

Slack

The Slack integration sends real-time donation notifications to a selected Slack channel. Each time a donation is processed, a message is posted with the donor name, amount, and campaign.

Configuration

After connecting via OAuth, select the Slack channel where donation notifications should be posted.

Custom Field Mapping

For Salesforce and HubSpot, you can override the default field mappings with a custom mapping. Custom mappings are defined as a JSON object where keys are Donately field names and values are the target system's field API names.

JSON Structure

{
  "Person": {
    "email": "Email",
    "unique_identifier": "dntly_PersonId__c",
    "phone_number": "MobilePhone"
  },
  "Donation": {
    "donation_amount": "Amount",
    "comment": "My_Custom_Comments__c"
  }
}

The mapping is organized by Donately object type:

  • Person — Maps donor fields to the target Contact/Constituent
  • Donation — Maps donation fields to the target Opportunity/Deal/Gift
Custom mappings are merged with the defaults. You only need to specify the fields you want to override — any fields not listed in your custom mapping will use the default mapping.

Campaign Rules (Salesforce)

Campaign rules allow you to route donations to specific Salesforce Campaigns based on matching criteria. Rules are evaluated in order — the first match wins.

Rule Types

TypeDescription
formMatch by the Donately Form used for the donation
campaignMatch by the Donately Campaign the donation was made to
fundraiserMatch by the Donately Fundraiser the donation was made through
meta_dataMatch by a metadata key/value on the donation
auto_create_from_campaignAutomatically create a Salesforce Campaign from the Donately campaign
auto_create_from_fundraiserAutomatically create a sub-campaign from the Donately fundraiser under the parent campaign
fallback_campaignDefault catch-all rule if no other rules match

Rule Structure

{
  "type": "campaign",
  "match_value": "cmp_e4b08ef12147",
  "match_label": "Annual Giving Campaign",
  "sf_campaign_id": "7013t000001ABC",
  "sf_campaign_name": "2025 Annual Fund"
}
Rules are evaluated in order from top to bottom. Place your most specific rules first and the fallback rule last. Only one fallback rule and one auto-create rule are recommended.

Template Tokens

Some Salesforce configuration fields support dynamic tokens that are replaced with actual values at sync time:

TokenResolves ToUsed In
{first_name}Donor's first namehousehold_name_format
{last_name}Donor's last namehousehold_name_format
{campaign_title}Donately campaign titlesource_value_from
{fundraiser_title}Donately fundraiser titlesource_value_from
{fundraiser_or_campaign_title}Fundraiser title if present, otherwise campaign titlesource_value_from

Example

// Household name format
"{last_name} Household"
// Resolves to: "Smith Household"

// Source value from campaign
"Online - {campaign_title}"
// Resolves to: "Online - Annual Giving 2025"