Skip to main content

Smart Matching strategies

Levels of Smart Matching

1. Reference Matching

The first level of automation is reference matching. Payments are matched directly to Salesforce records using provided structured references (e.g. CampaignMember, GiftCommitment, Opportunity).

Think of Swiss QR references; for one-time or recurring donations, for personalized or unpersonalized campaigns. You might even use them strategically, for example, to convert a one-time donor into a recurring one. That’s the “smart” part of this first level: making sense of the different ways references are used and ensuring they are correctly matched.

Learn more: Reference Matching

Unreferenced Payments?

But what happens when a payment arrives without a reference? At this point, such transactions would normally be considered “lost payments.”

2. Smart Matching Rules

This is where the second level of Smart Matching begins. Instead of ignoring those payments, we use the raw data delivered in the camt file — information like the donor’s IBAN, their name, or keywords in the payment message — and apply configurable rules to match or even create the right records in Salesforce.

Learn more: Smart Matching Rules

Process Overview

                           ┌────────────────────────────┐
│ Start Payment Processing │
└──────────────┬─────────────┘

┌───────────────────▼───────────────────┐
│ Level 1: Reference Matching │
├───────────────────────────────────────┤
│ 1. Check if the payment contains a │
│ valid reference (e.g. Opportunity, │
│ CampaignMember, GiftCommitment) │
│ 2. Try to assign the payment based on │
│ that reference to the matching │
│ Salesforce record. │
│ 3. If a match is found → update the │
│ Gift transaction │
│ 4. Continue with Level 2 │
└───────────────────┬───────────────────┘

┌──────────────▼───────────────┐
│ Level 2: Smart Matching Rules│
└──────────────┬───────────────┘

┌──────────────────────▼──────────────────────┐
│ Trigger Type? │
│ - Auto (afterCreate) │
│ - Manual (UI Tab) │
│ - API (Apex) │
└──────────────────────┬──────────────────────┘

┌────────────────▼────────────────┐
│ Collect GiftTransactions │
└────────────────┬────────────────┘

┌─────────────────▼─────────────────┐
│ Load all active Smart Matching │
│ Rules │
└─────────────────┬─────────────────┘

┌───────────────────────────▼───────────────────────────┐
│ Each Rule Execution: │
│ 1. Determine context (Find / Create) │
│ 2. Evaluate "Find filters" │
│ → Compare GiftTransaction ↔ Target Object fields │
│ → Apply operators (equals, contains, etc.) & logic│
│ 3. Execute outcome: │
│ → If record found → Run "Map (Find)" │
│ → If no record → Run "Create (Map)" │
└───────────────────────────┬───────────────────────────┘

┌────────────────▼────────────────┐
│ Log Result per Rule │
│ - Success / Error │
│ - Target Object & Record IDs │
└────────────────┬────────────────┘

┌──────────────▼──────────────┐
│ End Matching Process │
│ Log summary in execution log│
└─────────────────────────────┘

Related topics: