> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wegive.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Campaign Mapping

> Field-level mapping between WeGive campaigns/fundraisers and Blackbaud Raiser's Edge NXT campaigns/appeals

# Campaign Data Mapping

This page details the field-level mapping between WeGive campaign and campaign-fundraiser records and Blackbaud Raiser's Edge NXT campaigns and appeals.

<Warning>
  **Campaign sync is pull-only.** WeGive campaign records are never pushed to Raiser's Edge — the push method exists only as unused, unimplemented code. A campaign referenced by a transaction needs to already exist in Raiser's Edge, with the Raiser's Edge ID linked on the WeGive side, before that transaction can sync. See [Configuration Options](/external/onboarding/blackbaud/configuration-options).
</Warning>

## Campaign Field Mapping (Raiser's Edge → WeGive)

| WeGive Field | Blackbaud Field | Notes |
| - | - | - |
| `raisers_edge_id` | Campaign ID | Correlation key |
| `name` | `description` | |
| `goal` | `goal.value` | Converted from dollars to cents |
| `start_date` | `start_date` | |
| `end_date` | `end_date` | |

WeGive's `campaigns` table doesn't have a category, status, or lookup-code column, so those don't sync at the campaign level.

## Appeals Map to Campaign Fundraisers, Not a Nested Campaign Sub-Object

Blackbaud "Appeals" are a separate pull toggle from campaigns, and map to WeGive's `campaign_fundraisers` table — they're their own object, not embedded inside the campaign record:

| WeGive Field (Campaign Fundraiser) | Blackbaud Appeal Field | Notes |
| - | - | - |
| `raisers_edge_id` | Appeal ID | Correlation key |
| `name` | `description` | |
| `description` | `category` | |
| `goal` | `goal.value` | Converted from dollars to cents |
| `start_date` | `start_date` | |
| `end_date` | `end_date` | |
| `slug` | `lookup_id` | |
| `deleted_at` | `inactive` | An inactive appeal soft-deletes the WeGive campaign fundraiser record |

Appeals also connect to gifts: a gift split's `appeal_id` links to a campaign fundraiser's Raiser's Edge ID — see [Gift Mapping](/external/onboarding/blackbaud/data-mapping/gift) for how outbound gifts set this.

<Warning>
  **Campaign-level attribution on push happens through the Appeal, not a Campaign ID.** When WeGive pushes a gift to Raiser's Edge, the gift split never carries a Campaign ID — that field exists in WeGive's integration code but is intentionally disabled. The only way a pushed gift attributes to a campaign on the Blackbaud side is by linking the gift's campaign fundraiser to its matching Appeal via Raiser's Edge ID. If you want campaign-level reporting on gifts WeGive pushes to Raiser's Edge, make sure each of your WeGive campaign fundraisers (not the parent campaign) has its Raiser's Edge Appeal ID set — a Campaign ID alone will not produce that attribution. See [Gift Mapping: Fund and Campaign Attribution](/external/onboarding/blackbaud/data-mapping/gift#fund-and-campaign-attribution) for the field-level detail.
</Warning>

## What Isn't Mapped

No code path exists for: campaign type/category at the campaign level (only appeals get a category-derived description), campaign or appeal status beyond the appeal's active/inactive flag, budget or expense tracking, performance metrics (donor counts, response rates, conversion rates), donor segmentation/targeting rules, or custom fields.

## Sync Behavior

Pulled on the same fixed 15-minute cron as everything else in this integration. Appeal sync has its own on/off toggle (`Pull Appeals`) separate from campaign sync.

## Getting Help

* **WeGive Support**: [support@wegive.com](mailto:support@wegive.com)
* **Blackbaud Sky API Campaign/Appeal Docs**: [Sky API Documentation](https://developer.blackbaud.com/skyapi/)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.