So you want to wire FieldPulse into Salesforce. Yeah, this one tripped me up too when I first looked at it — the field mapping screen isn't exactly intuitive, and there's some stuff the docs don't mention until you're already halfway through and wondering why your Opportunities are showing up as Work Orders with no customer attached.
Anyway, here's what actually works.
What the Integration Does
The Salesforce integration is bidirectional (mostly). Here's the flow:
- FieldPulse → Salesforce: Work orders sync to Opportunities or Tasks (you pick). Customers sync to Accounts and Contacts. Job completion status updates the Opportunity stage.
- Salesforce → FieldPulse: Account and Contact creation in Salesforce can optionally create customers in FieldPulse. Opportunity stage changes can trigger work order status updates if you enable the reverse sync (off by default).
Heads up: the reverse sync direction is pretty new and has some edge cases I'll get to.
Prerequisites
Before you start clicking buttons:
- Salesforce Professional edition or higher (Essentials won't cut it — needs API access)
- Admin access in both FieldPulse and Salesforce
- A dedicated integration user in Salesforce is recommended — don't use your actual admin account
- Custom fields you want to map should already exist in both systems
Step-by-Step Setup
1. Generate the Connected App in Salesforce
Yeah, I know, this part is tedious. Go to Setup → App Manager → New Connected App. Give it a name like "FieldPulse Integration". Enable OAuth, set the callback URL to https://api.fieldpulse.com/oauth/salesforce/callback, and give it these scopes:
api
refresh_token
full
Copy down the Consumer Key and Secret — you'll paste those into FieldPulse in a minute.
2. Connect from FieldPulse
In FieldPulse, go to Settings → Integrations → Salesforce. Hit Connect, paste your credentials, and authenticate. You'll get bounced to Salesforce, approve the permissions, then back to FieldPulse.
If you get a "redirect_uri_mismatch" error, double-check that callback URL. I spent like 20 minutes on that once because I had a trailing slash.
3. Configure Field Mapping
This is where people get lost. The mapping screen shows FieldPulse fields on the left, Salesforce fields on the right. Some defaults are pre-populated:
| FieldPulse | Salesforce |
|---|---|
| Customer Name | Account.Name |
| Customer Email | Contact.Email |
| Work Order # | Opportunity.Name |
| Job Description | Opportunity.Description |
| Job Value | Opportunity.Amount |
You can add custom field mappings, but here's the gotcha: FieldPulse custom fields don't always show up in the mapping dropdown immediately. If you just created a custom field, give it like 10 minutes to sync, or log out and back in. Super annoying.
4. Set Sync Rules
Decide what triggers a sync:
- Real-time: Every work order change pushes immediately. Can hit API limits if you're high-volume.
- Scheduled: Batch sync every 15/30/60 minutes. Safer for most teams.
Also configure conflict resolution — which system wins when the same record changes in both places. I usually recommend Salesforce wins for customer data, FieldPulse wins for job data, but your mileage may vary depending on which system is your source of truth.
The Edge Cases Nobody Warns You About
Duplicate Contact Records
If you have existing customers in both systems with slightly different names — "ABC HVAC" vs "ABC HVAC Inc." — you'll end up with duplicates. The integration doesn't do fuzzy matching. Clean your data first, or plan for some manual merging.
Opportunity Stage Mapping
FieldPulse work order statuses don't map 1:1 to Salesforce Opportunity stages by default. You need to configure this manually under Advanced Settings → Status Mapping. If you skip this, completed jobs in FieldPulse might show up as "Negotiation/Review" in Salesforce, which confuses everyone.
Custom Fields Not Syncing
There's a known issue where certain field types — particularly multi-select picklists and rich text fields — don't sync reliably. The integration page doesn't warn you about this, it just silently skips those fields. Check your data after the first sync.
There's actually a longer thread on this if you're hitting it.
Testing Your Setup
Before you flip this on for production:
- Create a test customer in FieldPulse with a unique email like
test+fp123@yourdomain.com - Create a test work order for that customer
- Trigger a sync manually from the integration page
- Verify in Salesforce: Account created? Contact linked? Opportunity created with correct amount?
- Update the work order status in FieldPulse, check that the Opportunity stage changes
- Create a test Opportunity in Salesforce, verify it creates a customer in FieldPulse (if you enabled reverse sync)
Monitoring and Troubleshooting
The integration dashboard in FieldPulse shows recent sync activity and errors. Common ones:
| Error | Usually Means |
|---|---|
| INVALID_FIELD_FOR_INSERT_UPDATE | You're trying to map to a read-only or non-existent Salesforce field |
| REQUEST_LIMIT_EXCEEDED | Hit Salesforce API limits — switch to scheduled sync or upgrade your Salesforce edition |
| UNABLE_TO_LOCK_ROW | Salesforce record is being edited by another process; retry usually works |
For webhook troubleshooting, see Setting Up Webhooks. The Salesforce integration uses webhooks under the hood for the real-time sync option.
See Also
- Integrations Overview
- Using the FieldPulse API — for custom integrations when the native sync doesn't cut it
- Salesforce integration forum thread — community troubleshooting