Introduction
A field service organization needed its sales and account management teams to keep working in Salesforce while the actual field work — repairs and installations — was planned and executed in Zuper. This case study covers the design of a bidirectional integration that keeps assets, jobs and cases aligned automatically across both systems, so neither team has to re-key information the other has already captured.
Problem Statement
Sales and account teams tracked customer assets in Salesforce, while dispatch and field teams planned and executed work in Zuper. With no connection between the two, every new asset had to be manually turned into a job, and every job update had to be manually reported back into a Salesforce case. That gap made it easy for field activity and CRM records to drift out of sync, left account managers without visibility into job status, and created risk of duplicate work orders as volume grew.
Solution
We designed a two-way integration covering both directions of the workflow: a forward flow that turns a new Salesforce asset into the right kind of Zuper job or project, and a reverse flow that creates and updates a Salesforce case as that job moves through to completion.
True Bidirectional Sync
Assets created in Salesforce generate work in Zuper, and jobs created in Zuper generate and update cases in Salesforce — each direction governed by its own rules.
Repair vs. Installation Routing
Routing logic evaluates each new asset to determine whether it represents a repair, which creates a single job, or an installation, which creates a project with its related jobs.
Full Field Mapping
Asset, account, contact, address, product and priority fields are mapped to their Zuper equivalents, and job details map back to case fields as lookup references rather than plain text.
Status-Driven Case Updates
Case status, actual start time and actual end time are derived directly from Zuper job status transitions, not from separately captured custom fields.
Duplicate & Loop Prevention
Source identifiers are stored on both sides, so an asset never creates more than one job and a job never creates more than one case, and updates never trigger a circular sync.
Exception Handling
Records that can't be matched or routed — an unresolved customer, a missing routing value — are logged as exceptions for review rather than created incorrectly.
How It Works
Forward flow — asset to job or project:
- A new asset record is created in Salesforce.
- The integration receives the asset creation event.
- Routing logic evaluates the asset to determine whether it represents a repair or an installation requirement.
- For a repair, a job is created in Zuper with the mapped asset, customer and address details.
- For an installation, a job/project is created so related jobs can be planned and tracked together.
- The resulting Zuper identifier is written back to the Salesforce asset for traceability and duplicate prevention.
Reverse flow — job to case:
- A new job is created in Zuper.
- The integration creates a corresponding case in Salesforce with the mapped job details.
- Customer, organization and asset are attached to the case as lookup references, not text values.
- The Zuper job identifier is stored on the case so later updates target the correct record.
- When the job is marked Completed in Zuper, the linked case is updated with status, actual start time and actual end time.
- Any failures on either flow are logged with the source record ID and the reason.
Implementation
Implementation began by mapping the account and sales team's asset workflow in Salesforce against Zuper's job, project, customer and organization structures, so every field had a clear source and destination before any build work started.
Routing, field mapping and status mapping were all built as configurable rules rather than hard-coded values, so new job categories, priorities or status values can be added later without redevelopment. Actual start and end times on the case are deliberately sourced from Zuper's job status transition history rather than a custom field, keeping that data tied to what actually happened on the job rather than to a separate manual entry.
Results & Achievements
The integration replaced a disconnected, manual handoff between sales and field operations with a self-maintaining link between the two systems:
Instant Work Creation
A new Salesforce asset automatically becomes the correct job or project in Zuper, with no manual handoff between sales and dispatch.
Real Visibility for Account Teams
Cases in Salesforce reflect true job status and completion details, giving account managers an accurate view without chasing field teams.
No Duplicate Records
Stored source identifiers on both sides mean no asset generates more than one job, and no job generates more than one case.
Clean Exception Trail
Unmatched customers, unresolved routing conditions and connectivity failures are logged clearly rather than silently mis-created.
Conclusion
RethinkingWeb designed a bidirectional Salesforce-to-Zuper integration that turns new assets into the right field work automatically and keeps Salesforce cases current as that work progresses, giving sales, account management and field teams a single, reliable source of truth without manual re-entry on either side.