Salesforce to Xero
Salesforce to Xero Integrations are generally based off the Opportunity to create Invoices in Xero, but that is often not enough flexibility.
- Can't do part payments - eg if you take a 20% deposit up front.
- Some apps don't allow you to send different Record Types over with different data, so that makes it very very limiting.
- Some apps don't allow you to send over two Tracking Codes - even though the Xero API allows this.
Xero is weird. There is no concept of an account code (or contact code in their terms). They do have this weird URL link thing that you can put a URL directly to the Salesforce Account record, but that is just a one way link, and not an integration.
If you send out invoices from Salesforce you could create the Contact in Xero as a concatenated string of Account Code + Account Name or similar, but that would go on the invoice if you are sending the invoices from Xero.
Also think about do you need to sync contacts from Xero to Accounts in Salesforce. I would strongly caution against this - make Salesforce your single source of the truth.
Also, do you need to sync everything to Xero. If you have a good enough record of all transactions in Salesforce, maybe manually doing a journal entry for daily transactions is enough. But accountants will not like this - I can guarantee it.
Comparison
The comparison of Xero Integration tools was first done in 2014, and since then a LOT has changed. Breadwinner bought Dime, OneSaas completely rebuilt their product, and about 5 new integration products have been released.
Beware that I've only updated the OneSaas notes as of Jan-2018.
Feature | OneSaas (Updated Jan-2018) | Breadwinner (yet to be fully investigated) | Zapier | InvoiceThis | SFX |
---|---|---|---|---|---|
Automated | ![]() | ![]() | ![]() | ![]() | ![]() |
Manual Button to Sync | ![]() | ![]() | ![]() | ![]() | ![]() |
Sync Time | One Hour | 15mins | Twice Hourly at fastest, up to Daily | N/A | |
Create an Invoice with one line item from an Opp with no Products | ![]() | ![]() | ![]() | ![]() | |
Automatically updates payment status | ![]() | ![]() | ![]() | ![]() | |
Modify the Invoice if it has been updated in SF | ![]() | ![]() | ![]() | ![]() | |
Copy of the Invoice attached to the Opp | ![]() | ![]() | ![]() | ![]() | |
Set the branding of the Invoice | ![]() | ![]() | ![]() | ![]() | |
Set the reference on the Invoice | ![]() | ![]() | ![]() | ![]() | |
Match the Contact or Create new | ![]() | ![]() | ![]() | ![]() | |
Choose how the Contact is created | ![]() | ![]() | ![]() | ![]() | |
Update Salesforce with the Invoice Number and/or Status that it is sent. | ![]() | ![]() | ![]() | ![]() | |
Create your own Invoice Number | ![]() | ![]() | ![]() | ![]() | |
Have Xero create the Invoice Number | ![]() | ![]() | ![]() | ![]() | |
Set status to Authorized (note, must have mandatory fields). | ![]() | ![]() | ![]() | ![]() | |
Create Xero Invoice from Custom Object | ![]() | ![]() | ![]() | ![]() | |
Use a field other than Amount to create Invoice (eg for deposit invoices) | ![]() | ![]() | ![]() | ![]() | |
Only create invoices based on Opp Record Type or similar | ![]() | ![]() | ![]() | ![]() | |
Create invoices with different tax types? | ![]() | ![]() | |||
Prevents duplicates if Opp is set to ClosedWon again? | ![]() | ![]() | NA | NA | |
Logging or stats showing what has been transferred to Xero |
| ![]() | There is some error logging it seems | ![]() | |
Can do customisations (paid) | ![]() | ![]() | ![]() | ![]() | |
Multiple Integrations in the advertised fee | ![]() | ![]() | ![]() | ![]() | |
Set the Due Date | ![]() | ![]() | ![]() | ![]() | |
Set Tracking Codes | ![]() | ![]() | ![]() | ![]() | |
Will create a tracking code option | ![]() | ![]() | ![]() | ![]() | |
Multiple Tracking codes | ![]() | ![]() | ![]() | ![]() | |
Can stop and start easily and sync missing data | ![]() | ![]() | ![]() | ![]() | |
Syncs all Invoices to Salesfirce | ![]() | ![]() | ![]() | ![]() | |
Set Account Codes | ![]() | ![]() | ![]() | ![]() | |
Handles Payables and Receivables Invoices! | ![]() | ![]() | ![]() | ![]() |
Not included in this list:
- Multicurrency
Case Study 1
Looking at the options for integrating Salesforce with Xero for an NFP. Mid sized NFP but with very limited budget. Large volume of shop transactions. Low volume of donations. The NFP is run by an Accountant who has always used MYOB, so using Xero will be enough of a challenge so I need to make the Salesforce to Xero part really seamless. They don't have a huge budget for this so as much as I'd like to say just use Breadwinner, I know it's probably not going to be an option. I know I can knock something quickly up in Zapier, but I need to investigate ALL the other options that are out there now to ensure we are going down the right path.
Requirements
- Create Invoices in Xero automatically - transactions initiate on the website and come into Salesforce from there (that bit is already set up, and we don't need to mess with it).
- Contact Details - yes, the Accountant is insisting on the Contact details being replicated in Xero. I am yet to convince her that this is not needed.
- Different Tracking Codes for different products sold.
- Different Account Codes for different products sold.
- Data NOT coming from the Opportunity. I could move everything to the Opportunity, but that's extra work should be NOT needed.
- Potentially create Invoices using products - but I'm going to try to not have them to have to create Products in Xero because they are already created on the Website, and you don't want to have to create them in multiple places.
- If transaction is paid already (using Eway on the website), then Invoice is created as Approved, otherwise created as Draft.
- Update Salesforce when Payment is Received. This is optional, and dependent on how much the integration costs overall. There are times when the website transactions are created and the person can send their payment through via EFT (remember, this is an NFP - no matter how people want to give them money, they need to accommodate this). So when the EFT payment comes through, into Xero, the website needs to be updated to say that the payment is received, so their digital product can be delivered or their physical product shipped. And of course Salesforce needs to be updated so we have a fully reconcilable list of transactions between Salesforce and Xero. Remember, in NFP world it is sometimes more cost effective to do things manually than pay for software to automate it, as volunteers are cheaper than software. I know that's a bit of a fallacy in the long term, but it's definitely something we have to factor into the cost equations.
So really simple requirements.
Process
- Product is purchased on Website - payment is processed via Eway (all working well now).
- Transaction is automatically recorded in Salesforce (all working well now).
- Salesforce automatically creates invoice in Xero
- A few days later, bank feeds create transactions in Xero
- Now, remember as with all payment gateways, there is one settlement per day for all transactions that came through on that day - so sometimes you will need to look at the Eway settlement statement to see which Invoices this settlement transaction will match to.
- Match the Invoices to the Eway settlement transaction. Ensuring that the Eway fees are recorded to the Fees Account Code
- Voila! Everything recorded and reconciled.
(A lot easier than the completely manual process now where all website transactions are manually created in MYOB when the bank statement is downloaded from the bank each day, and marked off from a printout of transactions downloaded from the website, and cross referenced with a printed statement of the Eway transactions).
Mapping
Salesforce (Custom Object) | Xero | Notes | One Saas | Invoice This | SFX |
---|---|---|---|---|---|
From Custom Object | ![]() | ![]() | ![]() | ||
Status | Status | Approved if Paid via Eway | ![]() | ![]() | ![]() |
Transaction Date | Invoice Date | ![]() | ![]() | ![]() | |
Expected Banking Date (Transaction Date +2) | Due Date | ![]() | ![]() | ![]() | |
Transaction Total | Invoice Total | ![]() | ![]() | ![]() | |
GST Included (checkbox) formula to make Tax Type | Tax Type | "GST Included" or "GST Excluded" | ![]() | ![]() | ![]() |
Total | Line Item Total | ![]() | ![]() | ![]() | |
Rate | Rate | ![]() | ![]() | ![]() | |
Quantity | Quantity | ![]() | ![]() | ![]() | |
Product | Line Item Description | ![]() | ![]() | ![]() | |
Product (optional) | ![]() | ![]() | ![]() | ||
Account Code (formula based on Product Type) | Account Code | Different depending on what the product is (or Donation) | ![]() | ![]() | ![]() |
GST | Tax Amount | ![]() | ![]() | ![]() | |
Payment Method (eg Eway) | ![]() | ![]() | ![]() | ||
Contact Details | Contact Details |
Or the Customer, or the Customer Organisation | ![]() | ![]() | |
Tracking Code 1 (formula) | Tracking Code Tracking Option | State is one of the Tracking Codes |
| ||
Tracking Code 2 (formula) | Tracking Code Tracking Option | ||||
Verdict | With no per-transcation Tax Codes and no Tracking Codes, it's just not doable. Plus we would have to move from a Custom Object to having everything in Opportunities and Products, and manually create the Products in Salesforce when they are created in the Website. I'm going to say a big NO! | Yes it could definitely work | No Tracking Codes, could almost live without, but no Account Codes it's an absolute no, despite the great features of the eWay integration. |
Case Study 2
Small NFP client - mainly donations and a small shop. We are using Payments2Us for the payment gateway, so every payment is in Salesforce, and then we create an Opportunity for each payment. (Creating an Opp is important when using the Nonprofit Success Pack - NPSP as the roll up summaries of donors are pre-built in. But also think about not creating Opps (it's just extra data) and using Rollup Helper to create a few key rollups to the Account and Contact).
We want the Opportunity to automatically create an invoice in Xero when it is set to the stage of ClosedWon (which is actually on create). We want the Opportunity to do the fol