Skip to main content
WeGive pushes event data to four custom objects that ship with the WeGive4SF managed package. The sync is one-directional: WeGive to Salesforce. Changes made to these records in Salesforce are not read back into WeGive.
These objects require WeGive4SF to be installed. See Installing the WeGive Salesforce Managed Package.

Sync direction and triggers

Every object on this page is export only (WeGive to Salesforce). WeGive never polls Salesforce for events, tickets, or registrations, so edits made in Salesforce stay in Salesforce and are overwritten the next time WeGive pushes that record. A record is pushed when it is created or updated in WeGive. Updates to a registration also re-push its registration tickets (see Registration Tickets for how removed line items are handled).

Create versus update

Each WeGive record stores the Salesforce ID of its counterpart. If the ID is present, WeGive updates that Salesforce record. If it is absent, WeGive creates a new record and stores the returned ID. WeGive uses a lock per record during creation so a burst of simultaneous updates cannot create duplicates.

Parent records are pushed first

Before pushing a child record, WeGive pushes any parent that does not yet have a Salesforce ID:
  • A ticket pushes its event first.
  • A registration pushes its event, each ticket type it references, and the registrant (Contact for an individual, Account for a company) first.
  • A registration ticket pushes its ticket type first, and requires that its parent registration already exists in Salesforce.

Deletions

Events, tickets, and registrations that are deleted in WeGive are not deleted in Salesforce. WeGive stamps wegive__Deleted_At__c and wegive__Deleted_DateTime__c on the Salesforce record instead, so the history is preserved. Registration tickets are the exception. After each registration push, WeGive queries the registration’s line items in Salesforce and deletes any that no longer exist in WeGive. This keeps quantities and line amounts in step when a registrant changes their ticket selection.

Sync settings

Each object has its own push toggle under Settings > Integrations > Salesforce NPSP > Sync Configuration > WeGive4Salesforce Pushes. All four are typically enabled together.
These settings depend on each other. If tickets are off but registration tickets are on, registration ticket pushes fail because the parent ticket type never receives a Salesforce ID. If tickets are off but registrations are on, registrations push without a ticket lookup. Turn the settings off from the bottom of the table up, never from the middle.

Shared fields

Every object on this page receives these fields on each push. Events, tickets, and registrations (but not registration tickets) also receive wegive__Created_At__c, wegive__Updated_At__c, and wegive__Deleted_At__c as dates, plus wegive__Created_DateTime__c, wegive__Updated_DateTime__c, and wegive__Deleted_DateTime__c as full timestamps. Salesforce limits Name to 80 characters and the WeGive text fields listed below to 255. WeGive truncates on push. The full value remains in WeGive.

Events

Salesforce object: wegive__Event__c WeGive custom fields on an event that have a Salesforce API name configured are also included in the push.
Start date/time is not synced today. The managed package defines wegive__Start_Date__c, but compileCampaignEventPayload() never populates it — only wegive__End_Date__c/wegive__End_DateTime__c are pushed. This is a confirmed product gap, not intended behavior, and is a known issue. Until it’s fixed, an event’s start time is not visible anywhere in Salesforce.

Event Tickets

Salesforce object: wegive__Event_Ticket__c

Event Registrations

Salesforce object: wegive__Event_Registration__c WeGive custom fields on a registration that have a Salesforce API name configured are also included in the push.
wegive__Status__c is passed through as-is from the WeGive registration’s own status values: approved, rejected, attended, pending, waitlisted, unregistered, canceled (confirmed against CampaignEventRegistration’s status validation rule and its attending() scope). No translation or mapping table exists — whatever value the registration carries in WeGive is exactly what lands in Salesforce.

Registrations with more than one ticket type

When a registrant selects two or more ticket types in a single registration, WeGive leaves wegive__Event_Ticket__c and wegive__Event_Ticket_WeGive_Id__c blank on the registration record. The per-ticket detail lives on the registration ticket line items instead. Reports that need ticket-level detail should be built on wegive__Event_Registration_Ticket__c, not on the registration.

Company registrants

When an event allows company registrations and a company registers, WeGive pushes the company’s Account if it does not already exist in Salesforce. However, the registration record only has a Contact lookup (wegive__Contact__c), and a company has no Contact ID, so company registrations arrive in Salesforce with an empty Contact lookup. The registration is still identifiable through wegive__WeGive_Donor_Id__c, which holds the company’s WeGive ID.

Registration Tickets

Salesforce object: wegive__Event_Registration_Ticket__c One record per ticket type on a registration. A registration with three General Admission tickets and one VIP ticket produces two registration ticket records. The fields above are the defaults. Registration tickets are the only event object whose custom mapping rules are applied on push. See Data Mapping Overview.
The Mapping Rules tab also lists rule sets for Campaign Events, Campaign Event Tickets, and Campaign Event Registrations and lets you add rules to them. Rules added to those three objects are saved but are not applied when the record is pushed. To send an additional field on an event or registration, create a WeGive custom field on that object and set its Salesforce API name instead. Because all four event objects are push-only, a rule direction of Bi-directional or Import only has no effect on any of them. Tracked internally as WEG-8284.

Troubleshooting

An event, ticket, or registration is not appearing in Salesforce. Check that the corresponding push setting is enabled, and that WeGive4SF is installed with the WeGive Admin permission set assigned to the integration user. The record must have been created or updated in WeGive since the setting was turned on; enabling a setting does not backfill existing records. Registration tickets fail with a “no Salesforce event ticket” error. The ticket push setting is off, or the ticket type failed to push. Enable ticket pushes and update the registration in WeGive to retry. A registration has no ticket type. Either the registrant selected more than one ticket type (expected; see above) or the ticket push setting was off when the registration was pushed. A registration has no Contact. The registrant is a company. See Company registrants. A change made in Salesforce disappeared. Expected. These objects are push-only, and WeGive overwrites the Salesforce record on its next push. Ticket prices look 100 times too large or too small. WeGive stores prices in cents and converts to dollars on push. If a mapping rule on registration tickets overrides wegive__Unit_Price__c or wegive__Line_Amount__c, check that the rule does not pass the raw cent value.