Salesforce + Jobber Integration Guide
This guide walks you through setting up a complete integration between Salesforce and Jobber. By the end, your Salesforce contacts and Jobber clients will stay in sync for coordinated sales and field service operations.
Overview
Goal: Keep Salesforce Contacts and Jobber Clients in sync, so your sales team and field service crew work from the same customer data.
What You'll Set Up:
- Salesforce Contacts synced with Jobber Clients
- Salesforce Accounts mapped to Jobber Properties (service locations)
- PascalCase ↔ snake_case field name handling
- Bidirectional updates with conflict resolution
Time Required: 20–25 minutes
Prerequisites
Before starting, ensure you have:
- [ ] A FluxCascade account (sign up free)
- [ ] System Administrator access to your Salesforce org
- [ ] Admin access to your Jobber account
- [ ] Both platforms connected to FluxCascade
If you haven't connected your platforms yet, see the Salesforce integration docs and Jobber integration docs first.
Step 1: Connect Salesforce (Sandbox vs. Production)
When connecting Salesforce, you'll choose between:
Production: Your live Salesforce org. Use this for real data sync.
Sandbox: A copy of your production org for testing. Recommended for initial setup. When you're satisfied with the mapping, disconnect the sandbox and connect production.
To connect:
- Go to Connections → Add Connection → Salesforce
- Select Production or Sandbox
- Authorize FluxCascade in the Salesforce login screen
- Verify the connection shows a green status
Step 2: Plan Your Field Mapping
Contact → Client Field Pairs
Salesforce uses PascalCase field names (FirstName, MailingCity) while Jobber uses snake_case (first_name, billing_address.city). FluxCascade handles the mapping — you just select the fields.
| Salesforce Contact Field | Jobber Client Field | Notes |
|---|---|---|
FirstName | first_name | Direct mapping |
LastName | last_name | Direct mapping |
Email | email | Used for matching records |
Phone | phone | Add phone_e164 transform |
MobilePhone | phone (secondary) | Map to custom field if needed |
Account.Name | company_name | Resolved from Account relationship |
MailingStreet | billing_address.street1 | Address component |
MailingCity | billing_address.city | Address component |
MailingState | billing_address.province | Salesforce uses "State", Jobber uses "Province" |
MailingPostalCode | billing_address.postal_code | Address component |
Step 3: Create the Contact → Client Mapping
- Go to Mappings in FluxCascade
- Click New Mapping
- Configure the basics:
Source:
- Connection: Your Salesforce connection
- Object: Contacts
Target:
- Connection: Your Jobber connection
- Object: Clients
Direction: Bidirectional (recommended)
- Click Continue
Step 4: Configure Field Pairs
Add these field pairs:
-
First Name
- Source:
FirstName - Target:
first_name - Transform: None
- Source:
-
Last Name
- Source:
LastName - Target:
last_name - Transform: None
- Source:
-
Email (Matching Field)
- Source:
Email - Target:
email - Transform:
lowercase - Mark as Matching Field
- Source:
-
Phone
- Source:
Phone - Target:
phone - Transform:
phone_e164 - Default country: US (or your country)
- Source:
-
Company Name
- Source:
Account.Name - Target:
company_name - Transform: None
- Source:
Address Fields
-
Street
- Source:
MailingStreet - Target:
billing_address.street1
- Source:
-
City
- Source:
MailingCity - Target:
billing_address.city
- Source:
-
State/Province
- Source:
MailingState - Target:
billing_address.province
- Source:
-
Postal Code
- Source:
MailingPostalCode - Target:
billing_address.postal_code
- Source:
Step 5: Account → Property Mapping (Optional)
Salesforce Accounts can map to Jobber Properties (service locations). This is useful when a single company has multiple job sites.
- Create a second mapping: Salesforce Accounts → Jobber Properties
- Map the following:
BillingStreet→streetBillingCity→cityBillingState→provinceBillingPostalCode→postal_codeName→ (use as label/reference)
This mapping is typically one-way (Salesforce → Jobber), since field service teams add properties directly in Jobber for new job sites.
Step 6: Configure Conflict Resolution
For bidirectional sync, set rules for conflicting updates:
Recommended Settings:
- Overall Strategy: Last Write Wins
- Email field: Salesforce wins – CRM is the record owner for email
- Phone field: Jobber wins – field service teams often get updated numbers on-site
- Address fields: Jobber wins – field crews confirm physical addresses
Step 7: Set Matching Strategy
- In mapping settings, find Matching Strategy
- Select Email as the primary matching field
- Enable Case Insensitive Matching
Step 8: Test the Mapping
Before going live:
-
Click Test Sync
-
Review the preview showing what would sync
-
Check for:
- Correct field mapping across naming conventions
- Phone numbers formatted correctly
- Address components in the right Jobber fields
- Expected record counts
-
Adjust configuration and test again if needed
Step 9: Run Initial Sync
Once testing looks good:
- Click Sync Now
- Choose Full Sync for initial population
- Monitor progress in real-time
- Review completion statistics
Expected Results:
- Salesforce Contacts created as Jobber Clients
- Jobber Clients created as Salesforce Contacts (bidirectional)
- Address data split into correct Jobber billing address fields
Step 10: Enable Scheduled Sync
Set up automatic syncing:
- Go to mapping Settings
- Enable Scheduled Sync
- Choose frequency: Every 15 minutes (recommended)
- Save
Verification
Check Salesforce
- Open a Contact that should have synced
- Verify Jobber-created contacts appear
- Check field values match
Check Jobber
- Open a Client that should have synced
- Verify Salesforce-created clients appear
- Check billing address is populated correctly
Review Sync Logs
- Go to Syncs
- Click on recent sync jobs
- Verify success rates and any errors
Common Issues & Solutions
PascalCase Fields Not Mapping
Cause: Confusion between Salesforce field API names and display labels.
Solution: Always use Salesforce API names in the field selector (e.g., FirstName, not "First Name"). FluxCascade's field picker shows API names and labels side by side.
Address Not Populating in Jobber
Cause: Salesforce MailingStreet mapped to billing_address instead of billing_address.street1.
Solution: Map each address component individually:
MailingStreet→billing_address.street1MailingCity→billing_address.cityMailingState→billing_address.provinceMailingPostalCode→billing_address.postal_code
Salesforce Sandbox Data Not Syncing
Cause: Connected to production but testing with sandbox data, or vice versa.
Solution: Verify which Salesforce environment you connected. Check the connection details page — it shows the instance URL (login.salesforce.com for production, test.salesforce.com for sandbox).
Duplicate Clients Created
Cause: Matching field not finding existing records.
Solution:
- Ensure email is the matching field
- Enable case-insensitive matching
- Verify emails are populated in source records
- Run a dedup in Jobber if duplicates were created during initial sync
Phone Numbers Not Syncing
Cause: Salesforce stores phone numbers with formatting (e.g., (415) 555-0100), Jobber expects clean numbers.
Solution: Add the phone_e164 transform. Set the default country to your region.
Best Practices
-
Test in a Salesforce Sandbox first – Validate your mapping before touching production data
-
Map address components individually – Don't concatenate into a single field; Jobber needs structured addresses
-
Let Jobber own address data – Field crews verify addresses on-site; set Jobber as the conflict winner for address fields
-
Use email for matching – Most reliable identifier shared between Salesforce and Jobber
-
Start with Contacts, add Accounts later – Get person-level sync working before adding the Account → Property mapping
-
Monitor the first week – Check sync logs daily to catch issues early
Next Steps
- HubSpot + Jobber guide – Compare with the HubSpot integration approach
- Address Mapping guide – Advanced address handling
- Field Transformations – Data transformation options
- Error Handling – Handle sync failures