Salesforce Merge (SOAP)

Merges duplicate SObject records into a single master record via the Salesforce SOAP API. The losing records are deleted and their related records (child relationships, activities, etc.) are automatically reparented to the master. Supported types: Account, Contact, Lead, Individual.

Configuration

- salesforce_soapapi_merge:
    name: merge_accounts
    credentials_path: /etc/salesforce/credentials.json
    sobject_type: Account
    master_record_id: "{{event.data.master_id}}"
    record_ids_to_merge:
      - "{{event.data.duplicate_id}}"

Fields

FieldTypeDefaultDescription
namestringrequiredTask name.
credentials_pathstringrequiredPath to Salesforce authentication credentials.
sobject_typestringrequiredSObject type (Account, Contact, Lead, or Individual).
master_record_idstringrequiredSalesforce ID of the winning record. Supports templating.
record_ids_to_mergelistrequiredIDs of records to merge into the master (one or two). Supports templating.
master_field_overridesobjectOptional field values to set on the master record during merge. Supports templating.
allow_duplicate_saveboolfalseBypass duplicate detection rules during merge.
depends_onlistUpstream task names.
retryobjectRetry configuration.

Output

Format: JSON

FieldTypeDescription
successboolWhether the merge operation succeeded.
merged_record_idsarrayIDs of the victim records that were merged.
updated_related_idsarrayIDs of related records reparented to the master.

Examples

Merge two duplicate accounts:

flow:
  name: deduplicate_accounts
  tasks:
    - generate:
        name: trigger
        payload:
          master_id: "001000000000001"
          duplicate_id: "001000000000002"
    - salesforce_soapapi_merge:
        name: merge_accounts
        credentials_path: /etc/salesforce/credentials.json
        sobject_type: Account
        master_record_id: "{{event.data.master_id}}"
        record_ids_to_merge:
          - "{{event.data.duplicate_id}}"
    - log:
        name: result

Merge with field overrides and duplicate detection bypass:

- salesforce_soapapi_merge:
    name: merge_contacts
    credentials_path: /etc/salesforce/credentials.json
    sobject_type: Contact
    master_record_id: "{{event.data.master_id}}"
    record_ids_to_merge:
      - "{{event.data.dup_1}}"
      - "{{event.data.dup_2}}"
    master_field_overrides:
      Email: "{{event.data.preferred_email}}"
      Phone: "{{event.data.preferred_phone}}"
    allow_duplicate_save: true

Event-driven deduplication pipeline:

flow:
  name: nats_dedup_pipeline
  tasks:
    - nats_jetstream_subscriber:
        name: duplicates
        stream:
          name: salesforce_duplicates
        subject: salesforce.duplicates.>
    - salesforce_soapapi_merge:
        name: merge
        credentials_path: /etc/salesforce/credentials.json
        sobject_type: "{{event.data.sobject_type}}"
        master_record_id: "{{event.data.master_id}}"
        record_ids_to_merge:
          - "{{event.data.duplicate_id}}"
    - log:
        name: audit