Salesforce Integration


The Salesforce integration automatically creates ZenQMS Issues when records are created or updated in Salesforce. It is a one-way sync; data flows from Salesforce into ZenQMS only. ZenQMS does not send data back to Salesforce. The integration also does not update existing ZenQMS Issues after they are created — each Salesforce event creates a new Issue only.


This is useful for organizations that track quality-related events in Salesforce — like customer complaints, product issues, or commercial events — and want those to automatically appear as Issues in ZenQMS without anyone manually re-entering data between the two systems.

 

How it Works

Issues are created in near real-time, typically within seconds of the Salesforce event occurring. Here is the full flow:

  1. A record is created or updated in Salesforce matching your configured record type and trigger conditions.
  2. Salesforce sends a real-time webhook notification to the ZenQMS integration endpoint.
  3. The integration checks ZenQMS to see if an Issue already exists for that Salesforce record, using the Salesforce Record ID to prevent duplicates.
  4. If no duplicate is found, the integration fetches the full record details from Salesforce via the REST API.
    The integration maps the configured Salesforce fields to ZenQMS Issue fields.
  5. A new Issue is created in ZenQMS in the configured Issue category, assigned to the configured default assignee.
  6. The result is logged — created, skipped, or error — for every processed record.
     

What Data Gets Mapped

The following data elements are transferred from Salesforce to ZenQMS when an Issue is created:

Data ElementSource: Salesforce (SF)Destination: ZenQMSNotes
Issue TitleA SF field (e.g. Name, Subject)Issue Record TitleFalls back to the record's Name or Subject if not configured
Due DateA SF Date field or today's dateIssue Record Due DateAn optional offset in days can be added (e.g., +30 days)
Custom FieldsAny SF field on the record typeCustom fields on the first stage of the IssueAll values are stored as text
External IDSF Record IDexternal_id on the ZenQMS Issue RecordUsed for deduplication — prevents duplicate Issues
External System"Salesforce" (hardcoded)external_system fieldIdentifies Salesforce as the source system
AssigneeA ZenQMS user selected during setupIssue Record Project Assignee and First Stage AssigneeThe same user is assigned to all Issues created by this integration

 

How to Set it Up

Steps to prepare in Salesforce:

  • Log into Salesforce and go to Setup → Apps → External Client Apps → Settings
  • Enable Allow creation of connected apps if not already on
  • Select New Connected App and fill in the basic info (name, contact email)
  • Under API settings, check Enable OAuth Settings
  • Enter the Callback URL provided by ZenQMS during setup
  • Add OAuth scopes: Perform requests at any time and Manage user data via APIs
  • Enable: Require Secret for Web Server Flow, Require Secret for Refresh Token Flow, and Require PKCE
  • Save and wait up to 10 minutes for activation
  • Retrieve your Consumer Key and Consumer Secret from App Manager → View → Manage Consumer Details

What you enter in the wizard:

  • Client ID — the Consumer Key from your Connected App
  • Client Secret — the Consumer Secret
  • Then authorize the OAuth connection when prompted

For ZenQMS, you need an API token from Settings → API Settings with:

  • Read access to Users
  • Read/Write access to at least one Issue category

Salesforce Configuration:

  • Record Type — Select the Salesforce object to monitor (e.g., Case, Opportunity, or a custom object). Only records of this type will be processed.
  • Trigger On — Choose when to fire: Create only, Update only, or both (default is both).
  • Filter Formula — An optional Salesforce formula that must evaluate to true for the integration to fire.

ZenQMS Configuration:

  • Issue Category — Select the ZenQMS Issue category where new Issues will be created. The list is populated based on your API token permissions.
  • Default Assignee — Select the ZenQMS user who will be assigned to all Issues created by this integration. This user is set as both the Issue assignee and the first stage assignee.

 

Field Mapping

Details tab — Configure the core Issue fields:

  • Title: Choose which Salesforce field becomes the Issue title
  • Due Date: Choose today's date or a Salesforce date field as the source
  • Days to Add: Optionally add a number of days to the due date (e.g., 30 for a 30-day deadline)

Stage tab — Map Salesforce fields to custom fields on the first stage of the selected Issue category. You can add as many mapping rows as needed.

 

Field Mapping Validation

The wizard automatically validates your field mapping configuration before allowing you to finish. It checks for:

  • Duplicate ZenQMS field mappings (each ZenQMS field can only be mapped once)
  • Duplicate Salesforce field mappings (each Salesforce field can only be mapped once)
  • References to ZenQMS custom fields that no longer exist in the selected category
     

Known Limitations

One-way sync only: Data flows from Salesforce to ZenQMS only. Changes in ZenQMS are never sent back to Salesforce.

Creates Issues only: If a Salesforce record is updated after the initial Issue was created, the existing ZenQMS Issue is not updated.

First stage fields only: Custom field mappings only apply to the first stage of the Issue category. Fields on later stages cannot be populated.

Text-only field values: All Salesforce field values are converted to text when stored in ZenQMS. Complex field types are stored as their text representation.

One record type per instance: Each integration instance monitors one Salesforce record type. To monitor multiple types, deploy separate instances.

One Issue category per instance: Each instance creates Issues in one ZenQMS category. For multiple categories, deploy separate instances.

Single default assignee: All Issues created by the integration are assigned to the same user. Per-record assignee logic is not supported.

Enlarged view