fundraising-integration-patterns
Use this skill when connecting a Salesforce Nonprofit Cloud or NPSP org to fundraising-adjacent systems: payment gateways via Salesforce.org Elevate, wealth screening tools (iWave, DonorSearch), email marketing platforms (Marketing Cloud, Pardot), and event management platforms. Trigger keywords: payment gateway nonprofit, Elevate payment services, GiftTransaction API, wealth screening integration, iWave Salesforce, DonorSearch scores, donor email marketing sync, event registration fundraising. NOT for generic integration patterns, Salesforce Billing payment gateways (blng.PaymentGateway), or non-fundraising CRM integrations.
Best use case
fundraising-integration-patterns is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use this skill when connecting a Salesforce Nonprofit Cloud or NPSP org to fundraising-adjacent systems: payment gateways via Salesforce.org Elevate, wealth screening tools (iWave, DonorSearch), email marketing platforms (Marketing Cloud, Pardot), and event management platforms. Trigger keywords: payment gateway nonprofit, Elevate payment services, GiftTransaction API, wealth screening integration, iWave Salesforce, DonorSearch scores, donor email marketing sync, event registration fundraising. NOT for generic integration patterns, Salesforce Billing payment gateways (blng.PaymentGateway), or non-fundraising CRM integrations.
Teams using fundraising-integration-patterns should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/fundraising-integration-patterns/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How fundraising-integration-patterns Compares
| Feature / Agent | fundraising-integration-patterns | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use this skill when connecting a Salesforce Nonprofit Cloud or NPSP org to fundraising-adjacent systems: payment gateways via Salesforce.org Elevate, wealth screening tools (iWave, DonorSearch), email marketing platforms (Marketing Cloud, Pardot), and event management platforms. Trigger keywords: payment gateway nonprofit, Elevate payment services, GiftTransaction API, wealth screening integration, iWave Salesforce, DonorSearch scores, donor email marketing sync, event registration fundraising. NOT for generic integration patterns, Salesforce Billing payment gateways (blng.PaymentGateway), or non-fundraising CRM integrations.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Fundraising Integration Patterns This skill activates when a Salesforce Nonprofit Cloud or NPSP practitioner needs to connect the org to fundraising-adjacent external systems. It covers the correct integration surface for payment gateways (Salesforce.org Elevate / Connect REST API), wealth screening tools, email marketing platforms, and event management systems — and explicitly guards against using the wrong integration APIs such as blng.PaymentGateway, which is Salesforce Billing only. --- ## Before Starting Gather this context before working on anything in this domain: - Confirm whether the org runs **Nonprofit Cloud (NPC)** with the native Fundraising data model or legacy **NPSP**. NPC exposes the `GiftTransaction` and `GiftCommitment` objects and the Salesforce.org Elevate Connect REST API endpoints; NPSP uses `npe01__OppPayment__c` and has a different Elevate integration path. - Identify whether **Salesforce.org Elevate (Payment Services)** is already provisioned. Elevate is a separately licensed add-on; without it, no inbound payment gateway API surface exists in Nonprofit Cloud. - Determine the authentication and data residency requirements. Payment data carries PCI scope implications; wealth screening data is PII. Both require field-level security review and Named Credential setup for external callouts. - The most common wrong assumption practitioners make is that the `blng.PaymentGateway` Apex interface — used by **Salesforce Billing** — is applicable to NPSP or Nonprofit Cloud payment processing. It is not; that interface is part of the Billing managed package and has no footprint in the nonprofit data model. - Platform constraints: the Elevate Connect REST API endpoint `/connect/fundraising/transactions/payment-updates` was introduced at **API version 59.0** (Spring '23+). Orgs on earlier API versions cannot call it. --- ## Core Concepts ### Salesforce.org Elevate and the Connect REST API for Payment Gateway Integration Salesforce.org **Elevate (Payment Services)** is the endorsed integration layer between Nonprofit Cloud / NPSP orgs and payment processors such as Stripe. When a donor completes a payment via Elevate, the payment processor calls back through Salesforce.org infrastructure and the result is surfaced to the Salesforce org via the Connect REST API. The key endpoint is: ``` POST /services/data/vXX.0/connect/fundraising/transactions/payment-updates ``` Minimum API version: **59.0** (Spring '23 / Spring '25+ is the stated support baseline for current features). This endpoint accepts a JSON body that updates gateway and processor metadata on one or more `GiftTransaction` records. The fields that can be updated include gateway reference identifiers, processor response codes, and payment instrument metadata. The endpoint does **not** create new `GiftTransaction` records; record creation flows through the Elevate-managed gift entry process. A parallel endpoint exists for commitments (recurring gifts): ``` POST /services/data/vXX.0/connect/fundraising/commitments/payment-updates ``` This endpoint updates payment instrument metadata for all active `GiftCommitment` records tied to a specific payment method, enabling scenarios such as card-on-file updates. **Critical constraint:** The Elevate connector is not replaceable with custom Apex. There is no public Apex interface in Nonprofit Cloud analogous to `blng.PaymentGateway`. Custom payment adapters using Apex callouts can forward data to the Connect REST API endpoint from within Salesforce code, but the endpoint itself is the integration contract — not an overridable Apex interface. ### Wealth Screening Integration (iWave, DonorSearch, and Peer Tools) Wealth screening tools identify high-capacity donors by analyzing public and proprietary financial data sources. Salesforce integration happens via **AppExchange managed packages** — not native Salesforce APIs. - **iWave for Salesforce** and **DonorSearch for Salesforce** are the dominant managed packages. Each provides its own connected-app authentication, custom objects for raw screening output, and flows or Apex triggers that write summary scores to standard `Contact` or `Account` fields. - Score results land on `Contact` fields such as `iwv__RatingScore__c` (iWave) or standard custom fields configured by the package; they do **not** write to `GiftTransaction` or `GiftEntry`. - Bulk screening workflows submit lists of Contact or Account IDs to the vendor API and poll for results. Native integration uses the package UI; custom integrations use the vendor's REST API with Named Credentials and a scheduled Apex batch job. - There is no native Salesforce API for wealth data. Practitioners who attempt to build their own wealth screening integration without a managed package must implement the vendor's proprietary REST API — there is no Salesforce-platform abstraction layer. ### Email Marketing Integration for Nonprofit Fundraising The two supported Salesforce email marketing platforms for nonprofits are **Marketing Cloud** and **Marketing Cloud Account Engagement (formerly Pardot)**. A third common option in the nonprofit sector is **Luminate Online** (Blackbaud's platform), which uses a separate REST API. - **Marketing Cloud Connect**: synchronizes `Contact`, `Lead`, and Campaign data between the core org and Marketing Cloud. For nonprofits, the typical pattern is to build a data extension from `Contact` + wealth score + giving history fields, then trigger journey entries on donation milestones or lapsed-donor thresholds. - **Marketing Cloud Account Engagement (Pardot)**: suited to major gifts and planned giving where lead-nurture timing matters. Prospects sync bidirectionally; custom fields carry wealth screening scores and lifetime giving totals for segmentation. - **Key data model note:** `GiftTransaction` is not natively surfaced as a Marketing Cloud synchronized object. Practitioners must expose giving totals on `Contact` or `Account` via roll-up fields or calculated fields before sync. ### Event Platform Integration Event management platforms (Eventbrite, Cvent, Classy, Bonterra Events) use bidirectional sync patterns: - **Inbound (event → Salesforce):** Registration and ticket purchase data arrives via the platform's webhook or REST API. The recommended landing zone is a custom intermediate object (or standard `CampaignMember`) before promoting to `GiftTransaction` if the ticket purchase constitutes a charitable contribution. - **Outbound (Salesforce → event platform):** Segment data built from Salesforce (major donor lists, volunteer histories) is pushed to the event platform for targeted invitations. Use a scheduled data export or Platform Events-triggered outbound callout. - **Classy and Bonterra (EveryAction)** provide purpose-built Salesforce AppExchange connectors that handle attribution linking and soft credit creation in NPSP automatically. --- ## Common Patterns ### Pattern 1: Elevate Payment Gateway Callback Processing **When to use:** The org uses Salesforce.org Elevate for online giving and needs to reconcile payment processor outcomes (authorization, capture, decline) against `GiftTransaction` records. **How it works:** 1. Donor completes payment on the Elevate-hosted gift form or a custom LWC that wraps the Elevate payment tokenization SDK. 2. Elevate infrastructure receives the processor response and calls the Salesforce Connect REST API on behalf of the org. 3. The `POST /connect/fundraising/transactions/payment-updates` call updates the `GiftTransaction` record with gateway reference ID, payment status, and processor metadata. 4. A Platform Event or Change Data Capture trigger on `GiftTransaction` can fire downstream automation (receipt emails, pledge fulfillment checks). **Why not the alternative:** Building a direct Apex callout to the payment processor bypasses Elevate's PCI-compliant tokenization layer, introduces the org into PCI scope, and eliminates the audit trail that Elevate maintains. Custom Apex payment adapters using `blng.PaymentGateway` do not compile in NPSP/NPC orgs because the Billing managed package is absent. ### Pattern 2: Managed-Package Wealth Screening Batch Sync **When to use:** The org wants to score a large constituent list against a wealth screening service and store results on `Contact` for major gift cultivation. **How it works:** 1. Install the vendor's managed package (iWave for Salesforce or DonorSearch for Salesforce) from AppExchange. 2. Configure Named Credentials using the vendor-issued API key. 3. Use the package's bulk screening interface to submit Contact IDs to the vendor's screening queue. 4. The package's asynchronous batch job polls for results and writes scores to the designated `Contact` fields. 5. Build a list view or report on scored Contacts for gift officer assignment. **Why not the alternative:** Calling the vendor API directly via custom Apex without the managed package requires reimplementing field mapping, error handling, rate limiting, and credential management that the package provides. The vendor also publishes schema changes in package updates; a custom implementation requires manual maintenance on every vendor API version bump. --- ## Decision Guidance | Situation | Recommended Approach | Reason | |---|---|---| | Org uses Elevate and needs to record payment outcomes on GiftTransaction | Use Connect REST API `POST /connect/fundraising/transactions/payment-updates` at API v59.0+ | This is the only supported gateway callback surface for Nonprofit Cloud | | Org wants payment processing without Elevate license | Evaluate third-party AppExchange connectors (Classy, iATS, Stripe for Nonprofits) | Elevate is add-on licensed; alternatives exist but none use blng.PaymentGateway | | Wealth screening scores need to land on constituent records | Install iWave or DonorSearch managed package from AppExchange | No native Salesforce API; managed packages handle auth, field mapping, and versioning | | Email marketing to major gift prospects | Marketing Cloud Connect with Contact-level roll-up fields for giving totals | GiftTransaction not natively in MC sync; totals must be promoted to Contact/Account | | Event ticket purchases that include charitable component | Custom intermediate object → GiftEntry promotion via Elevate batch API | Preserves audit trail; avoids direct GiftTransaction creation outside Elevate | | Org is on Salesforce Billing (not NPSP/NPC) and needs custom payment adapter | Implement `blng.PaymentGateway` Apex interface | Correct context for blng interface; does not apply to nonprofit data model | --- ## Recommended Workflow Step-by-step instructions for an AI agent or practitioner working on this task: 1. **Identify the integration category** — confirm which of the four types applies: payment gateway, wealth screening, email marketing, or event platform. Each has a distinct Salesforce API surface and a distinct set of wrong approaches to guard against. 2. **Verify Elevate provisioning for payment integrations** — check Setup > Installed Packages for "Elevate" or "Payment Services". If absent and the request involves payment processing, surface the licensing requirement before designing any integration; do not propose blng.PaymentGateway as an alternative. 3. **Confirm API version compatibility** — for Connect REST API usage, verify the org's default API version in Setup > API. The `/connect/fundraising/transactions/payment-updates` endpoint requires API v59.0 minimum; downgrade is not supported. 4. **Map the target fields** — for wealth screening, identify which Contact or Account fields the managed package writes to. For email marketing, identify the roll-up or formula fields that will surface GiftTransaction totals on Contact before configuring the Marketing Cloud sync. 5. **Design Named Credentials and authentication** — all outbound callouts (wealth screener API, event platform webhooks, email platform) must use Named Credentials. Do not hardcode credentials in Apex or flow variables. 6. **Implement error handling and reconciliation** — payment callback integrations must handle partial failures: a Connect REST API call that fails mid-batch leaves some GiftTransaction records without gateway metadata. Design a retry log and reconciliation report. 7. **Validate FLS and sharing rules on sensitive objects** — `GiftTransaction` contains financial PII; `Contact` wealth scores are sensitive. Confirm field-level security restricts wealth score visibility to gift officers and prevents exposure via list views or reports accessible to lower-privilege users. --- ## Review Checklist Run through these before marking work in this area complete: - [ ] Payment integration uses Connect REST API or an AppExchange connector — not `blng.PaymentGateway` or a hand-rolled Apex callout directly to the processor - [ ] API version is 59.0 or higher if calling `/connect/fundraising/transactions/payment-updates` - [ ] All external callouts use Named Credentials — no hardcoded API keys or passwords in Apex, flow, or custom metadata - [ ] Wealth screening scores land on `Contact` or `Account` fields, not on `GiftTransaction` - [ ] GiftTransaction and wealth score fields have correct FLS configured for gift officer profiles - [ ] Error handling and retry logic is documented and tested for all async callout patterns - [ ] Event platform records that constitute charitable contributions are promoted to GiftEntry/GiftTransaction through an auditable path, not inserted directly --- ## Salesforce-Specific Gotchas Non-obvious platform behaviors that cause real production problems: 1. **blng.PaymentGateway is Salesforce Billing only** — The `blng.PaymentGateway` Apex interface is declared in the Salesforce Billing managed package. It has no relationship to NPSP or Nonprofit Cloud and will not compile in an org that does not have Billing installed. LLMs and practitioners who search for "Salesforce payment gateway Apex interface" frequently surface Billing documentation and attempt to apply it to nonprofit payment processing — this always fails at compile time in an NPSP/NPC org. 2. **Elevate connector is not replaceable with custom Apex** — Unlike Salesforce Billing where a custom `blng.PaymentGateway` implementation routes transactions to a new processor, Elevate has no equivalent Apex extension point. The Elevate infrastructure sits outside the org boundary and calls back via the Connect REST API. There is no way to redirect Elevate callbacks to a different Apex handler, and no supported path to substitute a different payment processor in the Elevate flow without switching to a different AppExchange connector entirely. 3. **Wealth screening scores go on Contact, not GiftTransaction** — Screening tools evaluate donor capacity, not individual transactions. Both iWave and DonorSearch write their output to `Contact` (and sometimes `Account`) fields. Practitioners who attempt to store wealth scores on `GiftTransaction` or `GiftEntry` will find no supported package field mapping for those objects; custom fields can be created there, but no vendor tooling will populate them. --- ## Output Artifacts | Artifact | Description | |---|---| | Integration architecture recommendation | Written summary of the correct API surface, authentication model, and data flow for the specific integration type requested | | Field mapping plan | Table of source system fields → Salesforce target fields, including the correct object (Contact vs. GiftTransaction) for each data type | | Named Credential configuration guide | Step-by-step setup for authenticating outbound callouts to the external system | | Error handling and retry design | Documented failure modes and reconciliation approach for async payment callbacks or batch wealth screening jobs | --- ## Related Skills - `gift-entry-and-processing` — covers GiftTransaction and GiftEntry data model, batch gift processing, and NPSP payment processing flows; use alongside this skill when the integration feeds into gift entry - `integration-framework-design` — use for generic Salesforce integration architecture; this skill supersedes it for fundraising-specific integration surfaces - `billing-integration-apex` — covers the `blng.PaymentGateway` interface for Salesforce Billing; explicitly not applicable to NPSP/NPC payment processing
Related Skills
scim-provisioning-integration
Use when designing or reviewing SCIM-based user lifecycle provisioning into Salesforce from Okta, Azure AD / Entra, or another IdP — create/update/deactivate, group-to-permission-set mapping, attribute mapping, and deprovisioning semantics. Triggers: 'scim provisioning', 'okta scim salesforce', 'entra salesforce provisioning', 'user deactivation automation', 'group to permission set mapping'. NOT for SSO/authentication setup (see single-sign-on skills).
mfa-enforcement-patterns
Design MFA enforcement: auto-enablement, Salesforce Authenticator rollout, exceptions, service accounts, API-only users, SSO interop, and audit. Trigger keywords: MFA, multi-factor, two-factor, Salesforce Authenticator, MFA exception, MFA SSO, api-only MFA. Does NOT cover: end-user password policies, device-trust posture, or non-Salesforce IdP configuration.
encrypted-field-query-patterns
Design SOQL, filters, reporting, and indexes against Shield Platform Encryption fields. Trigger keywords: Shield Platform Encryption, encrypted field query, probabilistic vs deterministic encryption, encrypted SOQL filter, encrypted field index. Does NOT cover: Classic Encryption (deprecated), field-level security policy, or tenant secret key rotation.
apex-managed-sharing-patterns
Grant row-level access programmatically via __Share records when declarative sharing rules cannot express the policy. NOT for OWD, role hierarchy, or criteria-based sharing rule design.
omnistudio-testing-patterns
Use when testing or validating OmniStudio components — OmniScript preview, Integration Procedure step debugging, DataRaptor field-mapping validation, and end-to-end UTAM-based automation. NOT for Apex unit testing or standard Flow debugging.
omnistudio-lwc-integration
Use when embedding OmniScripts in Lightning Web Components, registering custom LWC elements inside OmniScript screens, or calling OmniScript/Integration Procedures from LWC. Triggers: embed omniscript in LWC, custom LWC element in OmniScript, call OmniScript from Lightning page, omnistudio-omni-script tag, seed data JSON, OmniScript launch from LWC. NOT for standalone LWC development, standard Flow embedding, or OmniScript-to-OmniScript embedding.
omnistudio-error-handling-patterns
Use when designing fault behavior across Integration Procedures, DataRaptors, OmniScripts, and FlexCards — error routing, user-facing messaging, retry semantics, and idempotency. Triggers: 'omnistudio error', 'integration procedure fault', 'dataraptor error handling', 'omniscript retry', 'flexcard action failure'. NOT for general Apex exception design or Flow fault paths.
omnistudio-ci-cd-patterns
Use when designing or implementing CI/CD pipelines for OmniStudio components — DataPack export/import, versioning, environment promotion, and automated deployment. NOT for standard Salesforce metadata CI/CD or Apex-only pipelines.
omniscript-design-patterns
Use when designing or reviewing OmniScripts for guided experiences, step structure, branching, save/resume, and the boundary between OmniScript, Integration Procedures, DataRaptors, and custom LWCs. Triggers: 'omniscript design', 'too many steps in omniscript', 'save and resume omniscript', 'branching in omniscript', 'when should this be an integration procedure'. NOT for deep Integration Procedure or DataRaptor design when the guided interaction layer is not the main concern.
integration-procedures
Use when building, reviewing, or debugging OmniStudio Integration Procedures. Triggers: 'integration procedure', 'IP', 'HTTP action', 'DataRaptor', 'rollbackOnError', 'failureResponse'. NOT for Apex-only integrations unless the main design choice is whether OmniStudio is still appropriate.
integration-procedure-cacheable-patterns
Use when designing Integration Procedures (IPs) with platform cache to cut latency and callout load. Covers cache key design, TTL selection, per-user vs org-wide partitions, invalidation on data changes, and safe fallback on cache miss/stale. Does NOT cover general IP authoring (see omnistudio-error-handling-patterns) or LWC client-side caching.
flexcard-design-patterns
Use when designing, building, or reviewing OmniStudio FlexCards — including data source selection, card states, actions, conditional visibility, flyout configuration, and child card iteration. Triggers: 'FlexCard', 'card template', 'flyout', 'card action', 'card state', 'data source', 'child card', 'conditional visibility'. NOT for OmniScript design, standalone LWC development, or Apex controller architecture outside the FlexCard context.