Setting Up Salesforce for Canadian and US WeGive Dashboards

Last updated: April 27, 2026

This article is for organizations that operate two legal entities, one Canadian and one US, on a single Salesforce instance, with a separate WeGive dashboard syncing to and from each entity. It explains the recommended Salesforce field setup, the pattern WeGive uses to keep each dashboard's records isolated, and the specific Opportunity and Recurring Donation field mappings to apply.

Why a special setup is needed

WeGive's policy is one dashboard per legal entity. When two dashboards point at the same Salesforce instance, every dashboard would, by default, try to pull every Opportunity and every Recurring Donation. That causes:

  • Canadian transactions appearing on the US dashboard, and the reverse

  • Incorrect donor totals due to double-counted gifts

  • Tax receipt confusion, especially on the Canadian side where receipt rules are stricter

  • Conflicting Payment records when NPSP also tries to auto-create them alongside WeGive's payment sync

The setup below uses two purpose-built custom fields plus a sync filter on each WeGive dashboard so that records are visible only to the dashboard that owns them.

How the isolation pattern works

The pattern relies on two ideas applied to both Opportunity and Recurring Donation:

  1. An origin marker. A custom field called WeGive_Origin__c is populated by WeGive on create with the originating dashboard, for example Canada or USA. WeGive writes this once on create and never touches it again, so the value is permanent for the life of the record.

  2. A pair of hide checkboxes. Two custom checkbox fields, Hidden_from_CA_WeGive__c and Hidden_from_US_WeGive__c, are populated by WeGive whenever the hidden flag on a transaction is set on the opposite dashboard. They give Salesforce a record of which gifts the other dashboard wants suppressed.

Each WeGive dashboard then runs a sync filter that says, in effect, only pull records where the origin matches me and where my hide checkbox is false. The Canadian dashboard pulls records where WeGive_Origin__c is Canada and Hidden_from_CA_WeGive__c is false. The US dashboard does the mirror image.

Contacts and Accounts are intentionally not filtered. Donor records are shared across both entities, which is the correct behavior so that a person who gives to both entities still has one Salesforce Contact.

Required custom fields

Create these custom fields on both the Opportunity and the Recurring Donation (npe03__Recurring_Donation__c) objects. Add them to the page layouts for any record type your dashboards will sync.

Custom fields needed on each object:

Field API name

Type

Purpose

WeGive_Origin__c

Text (length 12) or Picklist with values Canada and USA

Marks which dashboard the record came from. Set on create by WeGive.

Hidden_from_CA_WeGive__c

Checkbox, default false

When true, the Canadian dashboard will skip this record. Written by the US dashboard.

Hidden_from_US_WeGive__c

Checkbox, default false

When true, the US dashboard will skip this record. Written by the Canadian dashboard.

Opportunity field mapping

This is the recommended Opportunity field mapping for each dashboard. The static values change per dashboard, the column labels do not. Replace Stripe - CAD with Stripe - USD on the US side, and replace Canada with USA on the US side.

Direction key, matching the arrows shown in the WeGive sync rules UI:

Symbol

Meaning

Bidirectional. Both systems write to this field as it changes.

(Create Only)

Bidirectional, but only on the initial record create. Edits after that are ignored.

Salesforce to WeGive only. Salesforce is the source of truth.

WeGive to Salesforce only. WeGive is the source of truth.

Recommended Opportunity mapping:

Salesforce field

Direction

WeGive field

Notes

Name

(Create Only)

name

Standard Opportunity name.

Amount

amount

Gift amount.

AccountId

(Create Only)

owner.salesforce_account_id

Links the Opportunity to the donor's Account (household or organization).

CloseDate

created_at

Use the WeGive transaction date as the Opportunity close date.

CampaignId

campaign.salesforce_id

Maintains campaign attribution across both systems.

ContactId

(Create Only)

owner.salesforce_id

Links the Opportunity to the donor's Contact.

npsp__Primary_Contact__c

(Create Only)

owner.salesforce_id

NPSP's primary contact lookup. Maps to the same WeGive owner.

npe03__Recurring_Donation__c

(Create Only)

scheduled_donation.salesforce_id

Ties an Opportunity back to its parent recurring schedule.

StageName

stage_name

Let Salesforce own stage values. WeGive reads them for reporting.

npe01__Do_Not_Automatically_Create_Payment

→ (Create Only)

static true

Prevents NPSP from auto-creating a Payment record that would conflict with WeGive's Payment sync.

Designation__c (your designation custom field)

(Create Only)

your designation custom field on WeGive

Use the custom field your dashboard already has configured for designation.

WeGive_Origin__c

→ (Create Only)

static Canada or USA

The origin marker. Each dashboard writes its own value.

Hidden_from_CA_WeGive__c

hidden (US dashboard only)

The US dashboard writes this so the Canadian dashboard knows to skip the record.

Hidden_from_US_WeGive__c

hidden (Canadian dashboard only)

The Canadian dashboard writes this so the US dashboard knows to skip the record.

crds_Gateway__c (or your equivalent)

→ (Create Only)

static gateway label, for example Stripe - USD or Stripe - CAD

Optional, useful when finance staff want the gateway label visible in Salesforce.

Recurring Donation (npe03__Recurring_Donation__c) field mapping

Recurring schedules need the same isolation treatment as Opportunities. Without it, both dashboards will compete to own the schedule's payment processor and next-charge date, which is exactly the situation the pattern is designed to prevent.

Recommended Recurring Donation mapping:

Salesforce field

Direction

WeGive field

Notes

Name

(Create Only)

name

Schedule name.

npe03__Amount__c

amount

Recurring gift amount.

npe03__Contact__c

(Create Only)

owner.salesforce_id

Donor on the schedule.

npe03__Organization__c

(Create Only)

owner.salesforce_account_id

Account on the schedule.

npe03__Date_Established__c

(Create Only)

created_at

Start date of the schedule.

npe03__Next_Payment_Date__c

next_charge_at

Salesforce can read forward changes, but WeGive remains the system that actually charges.

npe03__Installment_Period__c

(Create Only)

frequency (mapped to NPSP picklist values such as Monthly or Yearly)

Frequency of the recurring schedule.

npe03__Recurring_Donation_Campaign__c

campaign.salesforce_id

Campaign attribution.

npsp__Status__c

status (Active, Closed, Lapsed)

Keep status in sync. WeGive marks Closed when the donor cancels in their portal.

npsp__Recurring_Type__c

→ (Create Only)

static Open

Use Open recurring (no fixed end date) unless your team has a reason to use Fixed.

WeGive_Origin__c

→ (Create Only)

static Canada or USA

Origin marker.

Hidden_from_CA_WeGive__c

hidden (US dashboard only)

Same hide pattern as Opportunity.

Hidden_from_US_WeGive__c

hidden (Canadian dashboard only)

Same hide pattern as Opportunity.

Important behavioral notes for recurring schedules:

  • WeGive owns the payment side. WeGive owns the next-charge date, the payment method, and the gateway. Salesforce should not attempt to charge or auto-generate Payments through NPSP for any recurring schedule that originated in WeGive.

  • Salesforce owns the rollups. Each successful charge from WeGive lands as a child Opportunity on the Recurring Donation, and NPSP rollups continue to work normally.

  • Either side can close a schedule. If a donor cancels via the WeGive portal, WeGive sets status to Closed and pushes that to Salesforce. If a finance staff member closes one in Salesforce, that change pulls back into WeGive on the next sync.

Sync filter setup

Once the fields exist and are populated, configure the sync filters in each WeGive dashboard's integration settings.

Filters to apply on the Canadian dashboard:

Object

Pull rule

Opportunity

WeGive_Origin__c = Canada AND Hidden_from_CA_WeGive__c = false

Recurring Donation

WeGive_Origin__c = Canada AND Hidden_from_CA_WeGive__c = false

Filters to apply on the US dashboard:

Object

Pull rule

Opportunity

WeGive_Origin__c = USA AND Hidden_from_US_WeGive__c = false

Recurring Donation

WeGive_Origin__c = USA AND Hidden_from_US_WeGive__c = false

Setup checklist

Use this as a step-by-step checklist when applying the setup to a new environment.

Step

Action

1

Create WeGive_Origin__c, Hidden_from_CA_WeGive__c, and Hidden_from_US_WeGive__c on the Opportunity object.

2

Create the same three fields on the npe03__Recurring_Donation__c object.

3

Add all three fields to the page layouts for every record type your WeGive dashboards will sync.

4

Confirm the gateway labels you want stored on Salesforce, for example Stripe - USD and Stripe - CAD.

5

Decide on your designation field. A single picklist field on Opportunity is the simplest option. NPSP GAU Allocations are also supported and configured separately.

6

Send WeGive support the field API names so the WeGive sync rules can be wired up on each dashboard.

7

Apply the sync filters above on each dashboard.

8

Run a small set of test gifts through both dashboards and confirm each transaction appears only on its origin dashboard in WeGive.

Common questions

What happens to records that have no origin value?

Records without a WeGive_Origin__c value are pulled by every dashboard by default. Backfill the field on historical Opportunities and Recurring Donations before turning sync on, otherwise pre-existing records will appear in both dashboards.

What about more than two entities?

The same pattern can be extended to additional entities by adding a hide checkbox per dashboard, but it gets unwieldy beyond three. WeGive is actively building a generalized entity-lookup approach for organizations with three or more entities. Reach out to your onboarding contact if this applies to your setup so you can plan the right path forward.

Are Contacts and Accounts also filtered?

No. Donor records are shared across both entities so that a single donor giving to both entities has one Contact in Salesforce. This is intentional. The isolation only applies to gift records (Opportunities and Recurring Donations).

Can I disable receipts on one side and let Salesforce handle them?

Yes. WeGive receipts can be disabled per dashboard, which is a common choice on the Canadian side when an organization wants to issue Canadian tax receipts through a third party. If you do this, ask WeGive support about adding a receipt_paid style custom field so Salesforce can write back when a receipt has been issued externally.