How the Salesforce Sync Works

Last updated: June 10, 2026

The WeGive Salesforce integration syncs in two directions. It pulls data from Salesforce into WeGive, and it pushes changes from WeGive back to Salesforce. This article covers both: how the toggles and sync buttons work, what Sync All does when pulling, how automatic push works, and what to expect with record IDs. The sync controls live in Integrations > Salesforce > General Settings.

Sync only does what your toggles allow

The sync buttons do not sync everything by default. They only act on the objects whose toggles are turned on in your sync settings.

  • Pull toggles control what comes from Salesforce into WeGive.

  • Push toggles control what goes from WeGive into Salesforce.

This is the most important thing to understand before you click a sync button:

Sync All does not override your toggles. It only runs the syncs you have enabled. If every pull object toggle is turned off and you click Sync All, nothing will be pulled from Salesforce, even though the button ran successfully. The sync did its job. There was simply nothing enabled to sync.

So before syncing, confirm the toggles for the objects you want are turned on. If a sync does not bring in the records you expected, check your toggles first.

What the sync buttons do

You can sync everything at once or trigger a sync as needed:

  • Sync All runs every sync operation you have enabled, across all toggled-on objects, in one pass.

  • Resync appears on an individual WeGive record and on WeGive table views. It sends the record (or records, from a table view) to Salesforce again on demand, without waiting for the next scheduled push. See Push below for when to use it.

What Sync All does, step by step

When you click Sync All, here is what happens for the objects you have enabled to pull from Salesforce:

  1. WeGive pulls the enabled objects from Salesforce and creates the matching records in WeGive.

  2. It creates them in a specific order, so that parent records exist before the records that depend on them and everything links together correctly.

  3. As it creates each WeGive record, it stamps the Salesforce record's ID onto the WeGive record. This Salesforce ID is how WeGive keeps the two systems matched from that point on.

At the end of a pull, your WeGive records carry their Salesforce IDs, and the two systems are correctly linked.

The order objects are pulled

Sync All pulls objects in a set order so that foundational records exist before the records that depend on them. WeGive will not create a record until the records it links to are already present. If a dependency has not been pulled, the dependent record is skipped with an error rather than created incomplete. This is why we recommend turning every pull toggle on for the initial sync.

A full sync pulls in this order:

  1. Funds (GAUs)

  2. Households

  3. Supporters (Contacts), linked to their households

  4. Organizations (company accounts)

  5. Campaigns

  6. Recurring donations

  7. Pledges

  8. Transactions (Opportunities and Payments)

  9. Fund allocations

  10. Campaign members (links between supporters and campaigns)

  11. Soft credits

  12. Communication list subscriptions

Record merges and deletions from Salesforce are processed after these.

The clearest example: supporters are pulled before their payments, because a payment cannot link to a supporter who does not exist in WeGive yet. The same holds across the chain: funds before allocations, campaigns before campaign members, transactions before soft credits. If you turn off a pull that others depend on (for example supporters), the dependent records error out instead of syncing.

Push: sending WeGive changes to Salesforce

Pulling is something you trigger with Sync All. Pushing happens on its own, record by record, as data changes in WeGive. There is no Sync All for push.

Three ways a record gets pushed

  1. The triggering event. When you create or change a record in WeGive (a donation, supporter, campaign, recurring plan, and so on), WeGive immediately sends that change to Salesforce.

  2. The 15-minute scheduled push. As long as the integration is enabled and the relevant push toggles are on, WeGive checks every 15 minutes for records that still have no Salesforce ID and meet the criteria to sync, then pushes them. This is a safety net that catches records the triggering event missed.

  3. Manual Resync. Both individual WeGive records and WeGive table views have a Resync button that sends the record (or records) to Salesforce again on demand. Use it when a record's automatic push was blocked. For example, a custom Salesforce automation that runs before a record is created can reject the WeGive integration's record. Once an admin fixes that automation in Salesforce, they can open the WeGive record and click Resync to push it through. (The scheduled push will also retry it within 15 minutes as long as it still has no Salesforce ID.)

A few things to know about how push behaves:

  • Push respects your push toggles. Only the objects you have enabled to push are sent to Salesforce. If a push toggle is off, those changes stay in WeGive.

  • Push builds its own dependencies. Unlike the initial pull, you do not need to pre-sync anything. When WeGive pushes a record, it first makes sure the records it depends on already exist in Salesforce, creating them if needed. For example, pushing a donation will first create or confirm the supporter, then the campaign and fund, and then the donation itself (the Opportunity and Payment). It walks up the chain for you.

  • Push is what writes the WeGive ID onto Salesforce. When WeGive pushes a record, it stamps that record's WeGive ID onto the matching Salesforce record. This is one of the two ways a WeGive ID appears in Salesforce (see the next section).

  • Push updates if it can, creates if it must. If the record already has a Salesforce ID, WeGive updates the existing Salesforce record. If not, WeGive creates a new one. WeGive guards against duplicates while doing this (for example, matching supporters by email, and campaign members by campaign and supporter), but the link it relies on is the Salesforce ID stored on the WeGive record.

About the WeGive ID on your Salesforce records

After a pull, you will notice that your Salesforce records do not yet show a WeGive ID. This is expected and is not a problem.

The WeGive ID appears on a Salesforce record only when one of these happens:

  • You mass update the WeGive IDs onto Salesforce (see below), or

  • The next time WeGive pushes a sync on that record (WeGive to Salesforce).

Two things to keep in mind:

  • The WeGive ID on a Salesforce record is for your reference only. It is convenient to have, but it does not drive the integration.

  • WeGive matches and syncs using the Salesforce ID stored on the WeGive record. That is the key that links the two systems. A record will sync correctly even if no WeGive ID has been written back to Salesforce yet.

In short: the Salesforce ID held in WeGive is what makes syncing work. The WeGive ID on the Salesforce side is just a helpful label.

Mass updating WeGive IDs to Salesforce (production)

In production, many organizations write the WeGive IDs back onto their Salesforce records so the IDs are visible for reference. The usual way to do this is to export the relevant Salesforce tables, add the WeGive ID, and re-import the records.

Turn off the Salesforce pull before you run a mass update. A mass import changes the Last Modified date on every record you touch. If the pull is still on, WeGive will see those changes and trigger another pull based on last modified date. Turn the pull off in your sync settings, run the mass update, confirm it has finished, then turn the pull back on.

Remember that this step is for your convenience. The WeGive ID on Salesforce is reference only, and syncing already works without it, because WeGive matches on the Salesforce ID stored in WeGive.

Common questions

  • I clicked Sync All but nothing came in. Check that the pull toggles for the objects you want are turned on. Sync All only syncs what is enabled.

  • My Salesforce records do not show a WeGive ID. That is expected after a pull. WeGive IDs populate on Salesforce when you mass update them or the next time WeGive pushes that record. They are reference only and do not affect syncing.

  • Will syncing break if the WeGive ID is missing in Salesforce? No. Matching is done by the Salesforce ID stored in WeGive, not by the WeGive ID in Salesforce.

  • Do I need to pull or stage data before pushing from WeGive? No. Push creates any missing parent records in Salesforce automatically. The dependency order only matters for the initial pull from Salesforce, not for push.

  • A record did not sync to Salesforce. What do I do? First confirm the integration is enabled and the relevant push toggles are on. A common cause is a custom Salesforce automation that blocked the record before it could be created. Fix the automation in Salesforce, then open the WeGive record and click Resync. Note that after a record fails to sync several times, WeGive locks it (visible under Data > Integration Locks) and stops retrying it automatically. Clicking Resync bypasses the lock; you can also clear the lock there to let the scheduled push pick it up again. To see exactly why a record failed, check Data > Integration Logs.