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.
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 or you can provide us with access to your Salesforce account and we can install it on your behalf.
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. If you do not support this or do not support household accounts we are still able to sync but we will create accounts automatically for all contacts. The current version is 1.9
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.
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
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.
For all Salesforce related support enquiries please pop in a support ticket in your Funraisin admin.
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.
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.
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.
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.
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.
This will install the following:
The following Salesforce objects have these additional fields applied
|Page url||Text (255)|
|History Type||Picklist (online,offline,diy)|
|Is Active||Picklist (Y,N)|
|Is Archived||Picklist (Y,N)|
|Funraisin ID||Number (ID)|
|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)|
|Is Fundraising Event||Picklist(Y,N)|
|Raffle Ticket Start||Number|
|Raffle Ticket End||Number|
Record types can be defined within Funraisin simply navigate to Funraisin > Salesforce > Recordtypes. This will allow you to control record types for various transaction types on Opportunities. For other objects e.g. Campaigns, these can be controlled from within the modules that sync to Campaigns which are Funraisin > Events and Funraisin > Pages
Once connected, Funraisin will only sync new data to your Salesforce account. We will not import or alter your existing data in any way.
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.
The following list shows how Funraisin objects are mapped to Salesforce objects
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
The below tables show the standard field mapping from Funraisin to Salesforce.
All donors, fundraisers, shop customers sync to the Contacts object using the following mapping.
|Address Street Number||MailingStreet|
|Address Line 2||MailingStreet|
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.
All events, donation pages and teams sync to the Campaigns object using the following mapping.
|Event vs Page||Funraisin__Campaign_Type__c||Event or Page|
|Event End Date||EndDate|
|Online and DIY events||Funraisin__Is_Fundraising_Event__c|
|Entry Type||Funraisin__Entry_Type__c||Ticketed, registration, rsvp|
|Member||Funraisin__Created_By_Fundraiser__c||Contact ID of member who created the event|
All participants in an event including offline event guests sync to the Campaign Members object.
All financial transactions sync to the Opportunities object.
|Event, Team or Page||CampaignId|
|Member or Donor||
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.
All teams link to the Campaign object which are a sub-campaign of the Event that they are participating in. All opportunities made to a team are then linked to the Team Campaign instead of the Event Campaign.
All merchandise sync to the Products object.
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.
|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|
|Order Date||EffectiveDate||Date of Sale|
|OrderID||OrderId||ID from the synced order (above)|
|ProductID||Product2Id||ID from the synced product (above)|
As part of the NPSP sync, you can optionally choose to have regular givers synced to the NPSP RG object.
|Period||npe03__Installment_Period__c||weeky, monthly, yearly|
|Day of Month||npsp__Day_of_Month__c|
|Status||npsp__Status__c||Active or Closed|
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.
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
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.
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 comtinue 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.
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
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.
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.
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