Every Funraisin site comes with the ability to sync it's data directly to Salesforce, right out of the box with no additional charges or development needed.
This article aims to show you the steps required for setting up your Salesforce sync.
Overview
The Funraisin Salesforce integration comprises of a one-way sync from Funraisin to Salesforce that operates on a schedule. This schedule is generally set at hourly however we are able to alter this on request for a less frequent sync.
As part of the standard integration you will be required to install a managed package (See below), we can provide links for the package installation.
For custom integrations this might not be needed.
Version & Compatibility
The Funraisin integration is compatible with the Salesforce Not for Profit pack using household accounts and also NFP Cloud as well as just standard Salesforce. The current package version is 2.2
De-Duping
As records sync, de-duping will occur for all Contacts and Accounts to try to avoid duplicate records. De-duping on Contacts will check for an existing match on First name, Last name and Email address. De-duping on Accounts will check on Account name.
If you have your own additional matching rules in place this may affect our ability to create contacts.
ID Handling
All Funraisin objects support a field known as “External CRM ID” which is used to store the IDs from external data sources. As data syncs to Salesforce, the Salesforce ID for each object is stored in our own External CRM ID for that object so that you are at any time able to edit an ID within your Funraisin platform.
It is vital that when you merge or delete any record in Salesforce, that you also then update the related record in Funraisin otherwise you will see errors in your error log around "insufficient access to ID xxxxxxx" etc
Limits
The Funraisin > Salesforce sync uses the Salesforce SOAP API so each record that is synced will use at least 1 API call but often a single record will require 2-3 API calls depending on the data being synced.
A site catering for example 10,000 transactions per day could typically require up to 30,000 API calls per day.
Should an API limit be hit when syncing, the sync will retry later which depending on the schedule this could be with an hour or the next day.
Support
For all Salesforce related support enquiries please pop in a support ticket in your Funraisin admin.
Configuration
To setup your integration you will need to create a user account with a non-expiring password. Login to your Funraisin platform and navigate to the Salesforce module and within the configuration option you will need to enter your account email address, account password, account security token and also upload your enterprise WSDL.
Sandboxes
Syncing to a sandbox prior to launch can be catered for, simply by providing your Sandbox details in the above step.
Then once the site is ready to sync to a production environment we would simply clean all data from Funraisin by removing any existing Salesforce IDs so that data can be re-synced.
Configuration Settings
Step 1:
Navigate to Funraisin > Salesforce when logged in to your platform and you will be asked to configure your account. Enter the username, password and security token of the account you want to connect as, as well as specify what Funraisin objects you want to have synced to Salesforce.
Step 2:
Next, upload your Enterprise WSDL into Funraisin
That is all that is needed on the platform side, you now need to install our managed package.
Package Installation
Data from your Funraisin platform will map to most standard Salesforce objects as detailed further below, however, some data captured requires additional Fields and Objects be created on your Salesforce account.
Before syncing data from your Funraisin platform you will be required to install our Managed Package.
https://login.salesforce.com/packaging/installPackage.apexp?p0=04t7F0000050nDj
This will install the following:
Additional Fields
The following Salesforce objects have these additional fields applied
Campaign Member
Fundraising target | Currency |
Page url | Text (255) |
Distance target | Number |
Duration target | Number |
Step target | Number |
History Type | Picklist (online,offline,diy) |
Is Active | Picklist (Y,N) |
Is Archived | Picklist (Y,N) |
Number Seats | Number |
Seat Number | Number |
Number Tickets | Number |
Fundraising ID | Number |
Contact
Is Donor | Checkbox |
Is Fundraiser | Checkbox |
Funraisin ID | Number (ID) |
Campaign
Allow Entries | Picklist (Y,N) |
Allow Tables | Picklist (Y,N) |
Campaign Type | Picklist (event,page,team,raffle) |
Event Type | Picklist (online,offline,diy) |
Created By Fundraiser | Lookup(Contact) |
Entry Fee | Currency |
Entry Limit | Number |
Entry Type | Picklist(rsvp,ticketed,registration) |
Event Target | Currency |
Street Address | Text |
City | Text |
Country | Text |
Is Fundraising Event | Picklist(Y,N) |
Minimum Tickets | Number |
Maximum Tickets | Number |
Opportunity
Primary Contact | Lookup(Contact) |
Fundraiser | Lookup(Contact) |
Refund Reason | Text |
Source Opportunity | Lookup(Opportunity) |
Order Number | Text |
Tracking Number | Text |
Donation Type | Text |
Payment Method | Text |
Raffle Tickets | Number |
Raffle Ticket Start | Number |
Raffle Ticket End | Number |
Existing Data
Once connected, Funraisin will only sync new data to your Salesforce account. We will not import or alter your existing data in any way.
Technical Notes
Funraisin uses “Funraisin” as its namespace prefix. All custom field names referenced below should include ‘Funraisin__’ as the prefix if they are referenced via an API.
Mapping
Objects Mapping
The following list shows how Funraisin objects are mapped to Salesforce objects
Standard Salessforce and NPSP
Events map to Campaigns
Donation pages map to Campaigns
Teams map to Campaigns
Donors map to Contacts / Accounts
Fundraisers map to Contacts / Accounts
Registrations map to Campaign Members
Transactions map to Opportunities
Raffles map to Campaigns
Regular Donors map to Recurring Donations
Shop and Raffle Customers map to Contacts / Accounts
Shop Products map to Products
Shop Sales map to Orders and Order Items
NFP Cloud
Events map to Campaigns
Donation pages map to Campaigns
Teams map to Campaigns
Donors map to Contacts / Accounts
Fundraisers map to Contacts / Accounts
Registrations map to Campaign Members
Transactions map to Gift Transactions and Gift Refunds
Raffles map to Campaigns
Regular Donors map to Gift Commitment and Gift Commitment Schedules
Field Mapping
The below tables show the standard field mapping from Funraisin to Salesforce.
Contacts
All donors, fundraisers, shop customers sync to the Contacts object using the following mapping.
Field | API Name | |
First Name | FirstName | |
Last Name | LastName | |
Mobile | MobilePhone | |
Phone | Phone | |
DOB | DOB | |
Title | Salutation | |
Address Unit | MailingStreet | |
Address Street Number | MailingStreet | |
Address Street | MailingStreet | |
Address Line 2 | MailingStreet | |
Address Suburb | MailingCity | |
Address Postcode | MailingPostalCode | |
Address State | MailingState | |
Address Country | MailingCountry | |
Optin | Funraisin__Optin__c |
Accounts
All donors, fundraisers, shop customers sync to the Accounts object using the following mapping when organisation data is provided. Note that if no organisation data is provided then household accounts will be used.
Field | API Name | |
Organisation Name | Name | |
Phone | Phone |
Person Accounts (NFP Cloud)
For NFP Cloud users, personal accounts will be created for every individual with the following fields added.
Field | API Name | |
First Name | FirstName | |
Last Name | LastName | |
DOB | PersonBirthDate | |
Contact | PersonContactId |
Campaigns
All events, donation pages and teams sync to the Campaigns object using the following mapping.
Field | API Name | Description |
Name | Name | |
Description | Description | |
IsActive | IsActive | |
Status | Status | |
Event Type | Funraisin__Event_Type__c | online,offline,diy |
Event vs Page | Funraisin__Campaign_Type__c | Event or Page |
Event Date | StartDate | |
Event End Date | EndDate | |
Country | Funraisin__Country__c | |
City | Funraisin__City__c | |
State | Funraisin__State__c | |
Postcode | Funraisin__Postcode__c | |
Address | Funraisin__Street_Address__c | |
Entry Limit | Funraisin__Entry_Limit__c | |
Entry Fee | Funraisin__Entry_Fee__c | |
Online and DIY events | Funraisin__Is_Fundraising_Event__c | |
Event Target | Funraisin__Event_Target__c | |
Entry Type | Funraisin__Entry_Type__c | Ticketed, registration, rsvp |
Member | Funraisin__Created_By_Fundraiser__c | Contact ID of member who created the event |
Campaign Members
All participants in an event including offline event guests sync to the Campaign Members object.
Field | API Name | Description |
Event | CampaignID | |
Member (participant) | ContactID | |
Event Type | Funraisin__History_Type__c | |
Is Active | Funraisin__Is_Active__c | |
Is Archived | Funraisin__Is_Archived__c | |
Fundraising Target | Funraisin__Fundraising_Target__c | |
Number Tickets | Funraisin__Number_Seats__c | |
Fundraising Url | Funraisin__Page_URL__c |
Opportunities
All financial transactions sync to the Opportunities object.
Field | API Name | Description |
Event, Team or Page | CampaignId | |
Member or Donor |
AccountId Funraisin__Primary_Contact__c npsp__Primary_Contact__c |
|
Amount | Amount | |
Transaction Date |
CloseDate Funraisin__Payment_Date__c |
|
StageName | StageName | Closed Won |
Donation Type | Funraisin__Donation_Type__c | |
Payment Method | Funraisin__Payment_Method__c | |
Member Sponsored | Funraisin__Fundraiser__c | |
Team Sponsored | Funraisin__Team__c | |
Related Transaction | Funraisin__Source_Opportunity__c | |
Refund Reason | Funraisin__Refund_Reason__c |
Gift Transactions (NFP Cloud)
For NFP Cloud all financial transactions sync to the Gift Transaction or Gift Refund objects.
Field | API Name | Description |
Event, Team or Page | CampaignId | |
Member or Donor | DonorId | |
OriginalAmount | Amount | |
Transaction Date | TransactionDate | |
Status | Status | Paid |
Individual vs Organisation | GiftType | |
Payment Method | PaymentMethod | |
Payment Reference | GatewayReference | |
Donation Tip | DonorCoverAmount | |
Recurring Donation Schedule | GiftCommitmentScheduleId | |
Tax Receipt # | PaymentIdentifier |
Soft Credits (optional)
A note on Soft credits when donating to a fundraiser. When a donation is related to a fundraiser, we create an Opportunity Contact Role for the Fundraiser with a role of Soft Credit.
Field | API Name | Value |
Contact | ContactId | |
Opportunity | OpportunityId | |
Role | Role | Soft Credit |
NFP Cloud
For those using NFP Cloud, Soft Crediting is sent to the GiftSoftCredit Object
Field | API Name | Value |
Account | RecipientId | |
GiftTransaction | GiftTransactionId | |
Role | Role | Soft Credit |
Amount | PartialAmount | Soft Credit Value |
Products
All merchandise sync to the Products object.
Field | API Name | Description |
Product Name | Name | |
Product Code | ProductCode |
A note on price books. A Standard price book called Funraisin Pricebook will be created for use with all products.
Order and OrderItems
All merchandise sales sync to the Order and OrderItems objects as well as the Opportunity object.
Orders
Field | API Name | Description |
ContactID | BillToContactId | ID from the synced customer |
ContactID | ShipToContactId | ID from the synced customer |
Po Number | OrderReferenceNumber | our own PO number |
OpportunityID | OpportunityId | ID from the synced opportunity |
Status | Draft | |
Order Date | EffectiveDate | Date of Sale |
OrderItems
Field | API Name | Description |
OrderID | OrderId | ID from the synced order (above) |
ProductID | Product2Id | ID from the synced product (above) |
Quantity | Quantity | |
Product Option | Description | e.g. shirt size |
Regular Giving
As part of the NPSP and NFP Cloud syncs, you can optionally choose to have regular givers synced to the NPSP RG object or the NFP Cloud Gift Commitment Schedule.
NPSP Mapping
Field | API Name | Description |
Amount | npe03__Amount__c | |
Contact | npe03__Contact__c | |
Date Estapblished | npe03__Date_Established__c | |
Donor | npe03__Donor_Name__c | |
Installment | npe03__Installment_Amount__c | |
Start Date | npsp__StartDate__c | |
Period | npe03__Installment_Period__c | weeky, monthly, yearly |
Expiry Month | npsp__CardExpirationMonth__c | |
Expiry Year | npsp__CardExpirationYear__c | |
Day of Month | npsp__Day_of_Month__c | |
Status | npsp__Status__c | Active or Closed |
NFP Cloud Mapping
Below is the mapping for the Gift Commitment Schedule
Field | API Name | Description |
Name | Name | |
Amount |
TransactionAmount |
|
Start Date. |
StartDate |
|
Frequency |
TransactionPeriod |
weeky, monthly, yearly |
Day |
TransactionDay |
|
Gift Commitment |
GiftCommitmentId |
|
Campaign |
CampaignId |
And also the Gift Commitment
Field | API Name | Description |
Donor | DonorId | |
Name |
Name |
|
Start Date |
EffectiveStartDate |
|
Status |
Status |
|
Campaign |
CampaignId |
Custom Fields
For mapping non-standard data such as custom questions that might be asked during registration, or fundraising / fitness related data that doesn't fit into the standard Salesforce data model you are able to add additional custom fields to your standard objects and map them via your Funraisin login.
Simply choose the data source e.g. donor, fundraiser, team, registration which each maps to a specific object e.g. contact, campaign, campaign member. Add in your API field name and select the data you want us to send to that field and we will do the rest.
Web to Lead Forms
Webforms are forms that are created by admins via the Funraisin interface therefore their structure is unknown. Each webform is able to be synced to any Salesforce object with each field within the form having its own mapping to individual Salesforce fields.
Syncing Webforms
Choose an Object
Edit your webform and specify which Salesforce Object you want it to sync to by adding in the Object API name.
If this form is part of an event registration flow you can specify which field in your object relates to the ContactID of the fundraiser / donor
Also if this form is part of a registration entry flow you can set the object behaviour to Update, whereas for standard in-page forms that aren't linked to any donor or fundraiser leave it set to insert
Sync Fields
After specifying the object we sync to and it's the behaviour you will need to map each field in your form to the fields in your object. Simply choose "Form fields" from your webform and then edit each field that you want to be mapped to Salesforce. Under the "CRM Options" field enter your field's API name.
For webforms used within event registration or donation journeys, the submission will be linked to the relevant Contact ID however for standard page based forms e.g. contact us forms the submissions can only be linked to a single object.
Error Handling
Any error encountered whilst we are trying to sync data to Salesforce will be logged in your platform, along with the actual payload of data we were attempting to send. You can monitor these errors in Funraisin > Salesforce > Error Log.
Please note that we will continue trying to sync your data for as long as there is data needing to be synced, so any errors encountered will simply repeat every hour until they are corrected. This can sometimes make your errors seem more than what they actually are, often it is only a few records that need correcting but due to all the connected records it might appear to be a lot more in your error log.
Our advice is to monitor your error log every few days and then also clear out all errors every few days so you can be assured to be only dealing with the latest ones.
Where possible we will also display Salesforce errors in other parts of the admin where they might relate to. For example if you are viewing a donation record or a transaction record in the admin you will notice a Salesforce errors tab, any errors we encountered related to the record you are looking at will also be displayed here.
Common Errors
Below are some of the more common errors you may encounter.
INVALID_OPERATION_WITH_EXPIRED_PASSWORD: The users password has expired, you must call SetPassword before attempting any other API operations
This generally means that the account you are using to connect with has an expired password. You will need to reset the password in Salesforce and then enter this password, PLUS the new security token into the fields provided in Funraisin > Salesforce > Account
Insufficiant Rights to ID xxxxxxxxxxx
This is the most common error and is Salesforce's way of telling you that one of the IDs we are using is no longer valid. Usually this means that the ID we have on file is old and the most common cause is that a record has been merged or deleted in Salesforce and not updated in Funraisin. To clear this error you will need to check all related IDs and make sure they do in fact exist in Salesforce and if they don't, update them in Funraisin.
Unable to find Account ID xxxxxx
This is an error from Funraisin not Salesforce and this is telling you that we are not able to sync the record in question as we don't yet have an Account ID on file for the connected record. This will only ever appear wyen trying to create Opportunities and as mentioned, this is usually a temporary error since we generally get the Account ID for any contact on the second sync. The first sync is when we create a contact and then the second snc is usually when we retrieve the household account so usually this error can be ignored. If however you notice this same error appear repeatedly for the same transaction, that then means that we have not yet been able to create the Contact so that would then mean you would need to look into why and look for any other errors related to the donor or fundraiser etc
Which Record?
This is from Salesforce and it is telling you that when we tried to create a Contact there were multiple matches found that fall outside of our standard de-dupe rules and it is asking us which contact we'd like to use. This means that you have additional matching rules in place in your Salesforce account and this is most likely going to stop us from syncing some contacts so our advice is to remove these rules and allow us to use our standard re-dupe matching rules whcih is first name + last name + email address.
Record Types & Campaign Heirachy
Within Funraisin you can manage various Record Types and the Heirachy of some of your Campaigns allowing you to control to some extent the parenting of your Campaigns.
Opportunity RecordTypes
To administer recordtypes for different opportunities or transactions simply navigate to Funraisin > Salesforce > Record Types and here you will be able to add in the RecordType IDs for each transaction type e.g. donation vs entry fee vs merchandise etc
Campaigns and Campaign Members
For managing recordtypes for Campaigns such as Teams and Organisation Pages and Fundraising pages etc these can be set within the event, simply navigate to Funraisin > Events and edit the event you wish to set the recordtype for and then under General Settings you will see a Salesforce tab which contains fields allowing you to enter in the Recordtype IDs for team and individual based entries (Campaigns and Campaign members)
For DIY fundraising these same settings are managed from within the DIY theme itself.
Accounts
Recortypes can be added to accounts, for invidual vs Organisation Accounts
Campaign Heirachy
For managing campaign parenting, most of it is already covered via the sync, for example if you were to register for an event and be part of a fundraising team then your own fundraising page campaign would be automatically parented to your team campaign which itself would be parented to the event campaign. However with DIY fundraising it works differently, since the event doesn't exist until someone signs up and creates one you can control what campaign all DIY events are parented to simply but editing the DIY theme and in theme settings scrolling down to the Salesforce section where you can add in your Parent IDs