> For the complete documentation index, see [llms.txt](https://docs.anedot.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.anedot.com/integrations/crm-donor-management/blackbaud-raisers-edge.md).

# Blackbaud Raiser's Edge

Integrate Anedot with Blackbaud Raiser's Edge, including setup, field mapping, and custom field configuration for accurate donor and gift data synchronization.

Integrate Anedot with Blackbaud Raiser's Edge, including setup, field mapping, and custom field configuration for accurate donor and gift data synchronization.

Blackbaud Raiser's Edge is a donor management and fundraising platform designed for nonprofits. Anedot's integration synchronizes donor and transaction data with Raiser's Edge so you can manage insights and reports without disrupting your existing workflow.

## Connect Anedot to Blackbaud Raiser's Edge

Before you begin, ensure you are logged in as a Raiser's Edge Admin user.

### Step 1: Set Up the App in Blackbaud

1. In your Blackbaud account, go to **Control Panel → Connect App**.
2. Paste the following Application ID: `1d57b776-f0c1-46be-976e-3f65e813a5ef`
3. Click **Save**. Anedot should now appear in your **Connected Apps** tab.

### Step 2: Configure Required Fields

1. Check your Raiser's Edge code table to ensure the following fields exist. If missing, add them:
   * Phone Type: `Cell`
   * Address Type: `Individual`
   * Email Type: `Email`
2. Locate your Fund ID in Blackbaud:
   1. Navigate to your Fund page.
   2. Copy the Fund ID from the page URL or the System Record ID.

### Step 3: (Optional) Add Custom Attributes in Blackbaud

* For custom donation fields, create attributes in Blackbaud.
* If you plan to use Custom Hidden Fields in Anedot, contact Support. A developer must enable this in your account.

### Step 4: Set Up the Fund ID in Anedot

1. In Anedot, go to **Settings → Finance → Fund**.
2. Hover over the Fund, then click **View**.
3. Enter the Raiser's Edge Fund ID in the **Internal Identifier** field.
4. Click **Save**.

### Step 5: Create the Integration Connection

1. Navigate to **Settings → Integrations → Directory**.
2. Click **+ New Connection**.
3. Select **Blackbaud Raiser's Edge**.
4. Choose which Action Page(s) to connect. Select all pages to include all, or enter a comma-separated list of specific Action Page IDs to exclude.
5. (Optional) Scope the connection to send only Team-specific data.
6. (Optional) Enter a Constituent Code for Monthly Donors (configured in Raiser's Edge).
7. (Optional) Enter a Gift Subtype for Recurring Gifts (configured in Raiser's Edge).
8. (Optional) To relay only Donation Page data, check the relevant box. If left unchecked, both Donation and Lead Page data are relayed.
9. Click **Create integration**.

You are redirected to the Blackbaud login page. Sign in with your Blackbaud credentials to authorize and complete the connection.

You can modify Action Pages, Team access, and credentials at any time after setup.

## Data Relays

Anedot supports relays for both Donation Pages and Lead Pages.

When setting up your Blackbaud connection, you can choose to relay only Donation Page data if preferred.

The relay process works as follows:

1. **Initial Query:** Anedot queries Blackbaud using the donor's email to locate a matching constituent.
2. **Constituent Handling:**
   * If no match is found, Anedot sends the constituent's information to Blackbaud and receives an ID in response.
   * If a match is found, Blackbaud returns the existing ID and record details.
3. **Donation Submission:** Anedot sends the donation data to Blackbaud, referencing the identified `constituent_id`.
4. For Lead Pages (non-financial), a placeholder relay is sent with an empty payload and a `null` status, as no gift is associated.

This structured relay process ensures accurate donor matching and data handling within Blackbaud Raiser's Edge.

### Mapping Native Blackbaud Gift Fields From Anedot

Blackbaud Raiser's Edge includes gift attributes that are not natively supported by Anedot. To relay this information, configure these fields as Hidden Custom Fields within the Anedot Action Page Builder.

These fields must be configured correctly. If they are missing or set up improperly, relays to Blackbaud will fail.

| Hidden Custom Field (Anedot) | Gift Field (Raiser's Edge)                                    |
| ---------------------------- | ------------------------------------------------------------- |
| batch\_prefix                | batch prefix (used for importing multiple gifts/constituents) |
| appeal\_id                   | appeal (global value must remain empty)                       |
| package\_id                  | package (global value must remain empty)                      |
| campaign\_id                 | campaign (global value must remain empty)                     |

### Sending Native Anedot Fields to Blackbaud Raiser's Edge

Anedot provides donation data that Raiser's Edge does not support natively. To capture this information, create custom fields for gifts within Raiser's Edge.

After setting up the custom gift fields in Raiser's Edge, contact Support so the integration can be activated from the Anedot side.

Each custom field must include both a Category and a Value. Refer to the table below for the appropriate inputs.

Once your relay is successfully sent, new categories appear automatically in Raiser's Edge—no manual configuration is required for import.

\| Anedot Field | Raiser's Edge Category | Raiser's Edge Value | | --- | --- | | anedot\_fee (Donation Page: net amount) | Anedot Fee | currency | | \*\*utmCodes `{source}` | UTM Source | text | | \*\*utmCodes `{medium}` | UTM Medium | text | | \*\*utmCodes `{campaign}` | UTM Campaign | text | | \*\*utmCodes `{content}` | UTM Content | text | | referrer | URL | text | | frequency | Recurring Frequency | text | | (Commitment) schedule\_start | Recurring Start Date | date | | (Commitment) schedule\_until | Recurring End Date | date | | (Commitment) id | Commitment ID | text | | \*number | Commitment Index | text |

\* The `commitment_index` indicates the position of the donation within the recurring series. Note: the first recurrence corresponds to the second donation, as the original submission counts as the first.

\*\* UTM fields can be added to the Page URL.

## Data In Blackbaud

Once a donation has been successfully relayed, data can be viewed in:

* **Fundraising → Gift Management:** View and approve batches of gift relays
* **Lists → Constituents:** Filter for a donor
* **Lists → Gifts:** Filter for a gift
* **Constituent Profiles:** Custom fields appear under the Custom Fields section
* **Gift View → Detail View:** Review donation-specific field mapping and notes

You can cross-reference Omatic Object ID to verify transaction processing.

### Constituent Fields

| Anedot Field                                                              | Blackbaud Field                                                       |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| lastName                                                                  | last                                                                  |
| donorType (Individual / Organization)                                     | type                                                                  |
| `"Email"`; email address; `"true"`                                        | email `{type}` `{address}` `{primary}`                                |
| firstName                                                                 | first                                                                 |
| Home / Work / Cell; phone number                                          | phone `{type}` `{number}`                                             |
| title                                                                     | title                                                                 |
| middleName                                                                | middle                                                                |
| suffix                                                                    | suffix                                                                |
| address `{city}`; `"Home"`; `{region}` `{postalCode}` `{line1}` `{line2}` | address `{city}` `{type}` `{state}` `{postal_code}` `{address_lines}` |
| date\_in\_account\_time\_zone                                             | date\_added                                                           |

### Donation Fields

| Anedot Field                                                                      | Blackbaud Field                                                                        |
| --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| date\_in\_account\_time\_zone                                                     | date                                                                                   |
| `"Donation"`                                                                      | type                                                                                   |
| total\_amount                                                                     | amount\_value                                                                          |
| gift\_subtype                                                                     | subtype                                                                                |
| payment\_method                                                                   | payment\_method                                                                        |
| date\_in\_account\_time\_zone                                                     | receipts\_date                                                                         |
| `"Receipted"`                                                                     | receipts\_status                                                                       |
| (Submission) id                                                                   | lookup\_id                                                                             |
| `"Anedot"`; donation\_origin                                                      | reference                                                                              |
| `{amount}` `{fund_identifier}` \*`{appeal_id}` \*`{package_id}` \*`{campaign_id}` | gift\_splits `{amount_value}` `{fund_id}` `{appeal_id}` `{package_id}` `{campaign_id}` |
| id (from the contact relay's response body)                                       | constituent\_id                                                                        |
| `"NEEDSACKNOWLEDGEMENT"`                                                          | acknowledgements\_status                                                               |
| \*`{batch_prefix}`                                                                | Batch Prefix                                                                           |
| created\_at (yyyymmdd)                                                            | Batch Number                                                                           |

\* These must be set up as Custom Hidden Fields within the Action Page Builder in order to relay to Blackbaud.

## Payload Data

### Request Headers

```json
{}
```

### Request Body (Find User)

```json
{
  "query": "search_text=admin@anedot.com"
}
```

### Request Body (Create User)

```json
{
  "last": "Dot",
  "type": "Individual",
  "email": {
    "type": "Email",
    "address": "admin@anedot.com",
    "primary": true
  },
  "first": "Annie",
  "phone": {
    "type": "Cell",
    "number": "201-555-1234"
  },
  "title": null,
  "middle": null,
  "suffix": null,
  "address": {
    "city": "Richmond",
    "type": "Home",
    "state": "IN",
    "postal_code": "47374",
    "address_lines": "123 Test Road"
  },
  "date_added": "2023-06-01T16:23:19-04:00"
}
```

### Request Body (Donation)

Not all donation field mappings are visible in the relay example below. Confirm that any additional fields are properly populated in Blackbaud after the relay is processed.

```json
{
  "gifts": [{
    "date": "2023-06-01T12:19:26-04:00",
    "type": "Donation",
    "amount": {
      "value": 50.0
    },
    "subtype": null,
    "payments": [{
      "payment_method": "Cash"
    }],
    "receipts": [{
      "date": "2023-06-01T12:19:26-04:00",
      "status": "Receipted"
    }],
    "lookup_id": "21cd1b28-29bc-4583-9ab7-7fe42c06bda7",
    "reference": "Anedot Hosted",
    "gift_splits": [{
      "amount": {
        "value": 50.0
      },
      "fund_id": "1001",
      "appeal_id": null,
      "package_id": null,
      "campaign_id": null
    }],
    "constituent_id": "593734",
    "acknowledgements": [{
      "status": "NEEDSACKNOWLEDGEMENT"
    }]
  }]
}
```

### Request Body (Donation — Custom Hidden Fields)

```json
{
  "gifts": [{
    "date": "2023-06-15T15:51:08-04:00",
    "type": "Donation",
    "amount": {
      "value": 100.0
    },
    "subtype": null,
    "payments": [{
      "payment_method": "CreditCard"
    }],
    "receipts": [{
      "date": "2023-06-15T15:51:08-04:00",
      "status": "Receipted"
    }],
    "lookup_id": "3f8f458d-ac62-402f-9f59-94f1656aeba4",
    "reference": "Anedot Hosted",
    "gift_splits": [{
      "amount": {
        "value": 100.0
      },
      "fund_id": "141252",
      "appeal_id": null,
      "package_id": null,
      "campaign_id": null
    }],
    "custom_fields": [{
      "value": 4.3,
      "category": "214"
    }, {
      "value": "utm_source",
      "category": "215"
    }, {
      "value": "utm_medium",
      "category": "217"
    }, {
      "value": "utm_campaign",
      "category": "216"
    }, {
      "value": "utm_content",
      "category": "218"
    }, {
      "value": "https://qa2.secure.anedot.com/space-force/95c98eaf-2060-4290-a331-ef5455942054?utm_campaign=campaign&utm_source=source&utm_medium=medium&utm_content=content",
      "category": "219"
    }],
    "constituent_id": "593734",
    "acknowledgements": [{
      "status": "NEEDSACKNOWLEDGEMENT"
    }]
  }]
}
```

### Response Body (No User Found)

```json
{
  "count": 0,
  "value": []
}
```

### Response Body (Create User)

```json
{
  "id": "633977"
}
```

### Response Body (User Found)

```json
{
  "count": 1,
  "value": [{
    "id": "593734",
    "name": "System Admin",
    "email": "admin@anedot.com",
    "address": "123 Lee Dr\r\nBaton Rouge, LA  70808",
    "deceased": false,
    "inactive": false,
    "lookup_id": "580335",
    "fundraiser_status": "None"
  }]
}
```

### Response Body (Donation)

```json
{
  "gifts": [
    {
      "id": "3652",
      "date": "2021-10-08T13:24:51",
      "type": "Donation",
      "amount": {
        "value": 3
      },
      "errors": [
        {
          "gift_id": "3652",
          "lookup_id": "bc00be0c-a507-4132-a39e-844613ec7cd5",
          "affected_field": "GiftSplit",
          "exception_error_code": 25077,
          "exception_error_name": "GiftDateOutOfRangeCFAP",
          "exception_error_message": "Gift date is invalid for campaign with ID 2."
        },
        {
          "gift_id": "3652",
          "lookup_id": "bc00be0c-a507-4132-a39e-844613ec7cd5",
          "affected_field": "GiftSplit",
          "exception_error_code": 25003,
          "exception_error_name": "InvalidCFAPCombination",
          "exception_error_message": "The provided CFA combination is invalid."
        }
      ],
      "origin": "{\"name\": \"API\"}",
      "subtype": "Membership",
      "payments": [
        {
          "payment_method": "CreditCard"
        }
      ],
      "receipts": [
        {
          "date": "2021-10-08T13:24:51",
          "amount": {
            "value": 3
          },
          "status": "RECEIPTED"
        }
      ],
      "lookup_id": "bc00be0c-a507-4132-a39e-844613ec7cd5",
      "post_date": "2021-10-08T13:24:51",
      "reference": "Anedot Recurring",
      "fundraisers": [],
      "gift_splits": [
        {
          "amount": {
            "value": 3
          },
          "fund_id": "141252",
          "appeal_id": "7",
          "package_id": "4",
          "campaign_id": "2"
        }
      ],
      "post_status": "NotPosted",
      "constituency": "Donor",
      "linked_gifts": [],
      "soft_credits": [],
      "constituent_id": "593768",
      "acknowledgements": [
        {
          "status": "NEEDSACKNOWLEDGEMENT"
        }
      ]
    }
  ],
  "errors": []
}
```

### Response Body (Failure)

```json
{
  "title": "Resource not found",
  "status": 404,
  "message": "Resource not found",
  "statusCode": 404
}
```

### Response Status (Success)

```
200
```

### Response Status (Failure)

```
404
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.anedot.com/integrations/crm-donor-management/blackbaud-raisers-edge.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
