Skip to main content

Blackbaud

The Blackbaud integration keeps RemyPass members and wallet passes aligned with membership records in Raiser's Edge NXT, Altru, or Blackbaud CRM.

Use this integration when Blackbaud is your source of truth for constituent identity, membership status, and membership expiry. RemyPass reads Blackbaud membership data, creates or updates RemyPass members, and keeps generic wallet passes in step with the member's current membership lifecycle.

Supported Products

ProductUpdate modelNotes
Raiser's Edge NXTWebhooks plus scheduled checksRemyPass subscribes to supported constituent events, then verifies current membership data through SKY API before changing members or passes.
AltruScheduled checksRemyPass uses the Altru SKY API adapter plus an Altru Analysis ad-hoc query for membership lifecycle fields. Altru does not use RemyPass-managed Blackbaud webhooks, so RemyPass polls Altru roughly every 2 hours.
Blackbaud CRMScheduled checksRemyPass uses the Blackbaud CRM SKY API adapter and normalizes CRM constituent and membership responses before syncing. RemyPass polls CRM roughly every 2 hours.

For all products, RemyPass performs scheduled membership checks so renewals, cancellations, and expiry changes are not missed if a webhook is delayed or unavailable.

What RemyPass Does

  • Connects to Blackbaud with OAuth and stores connection details for the selected Blackbaud product.
  • Reads constituents, contact details, constituent memberships, and membership status from the relevant Blackbaud SKY API.
  • Creates RemyPass members from eligible Blackbaud constituents with active memberships.
  • Stores Blackbaud identifiers on the RemyPass member, including constituent ID, lookup ID, membership ID, and membership type.
  • Issues a generic RemyPass wallet pass from the approved generic pass template when a new Blackbaud member is created.
  • Optionally emails newly issued passes to members.
  • Updates active generic pass expiry dates when the Blackbaud membership expiry changes.
  • Deactivates members and expires active generic passes when the member no longer has an active Blackbaud membership.
  • Reactivates members and previously expired generic passes when a lapsed member becomes active again.
  • Sends wallet updates to Apple Wallet and Google Wallet when pass status or expiry changes for passes already added to a device.
  • Records member and pass lifecycle changes in the RemyPass activity log.

Blackbaud membership changes only affect generic membership passes. Event tickets and other pass types keep their own lifecycle rules.

Data RemyPass Uses

RemyPass can use Blackbaud data such as:

  • Constituent ID and lookup ID.
  • Name, title, email address, phone number, address, date of birth, and gender.
  • Membership ID, membership category, membership type, standing/status, join date, and expiry date.
  • Product/environment identifiers needed to route webhook events to the correct RemyPass company.

Members created by the integration are marked with source: blackbaud and include sync metadata so future Blackbaud updates can be matched to the same RemyPass member.

Before You Connect

Make sure you have:

  • Administrator access in RemyPass.
  • Access to a supported Blackbaud product: Raiser's Edge NXT, Altru, or Blackbaud CRM.
  • Permission to authorize the RemyPass OAuth application in Blackbaud.
  • A RemyPass generic pass template approved and ready to issue.
  • Company membership type options configured in RemyPass if you want to map Blackbaud membership categories to RemyPass membership type values.
  • Member email addresses in Blackbaud if you want RemyPass to send pass emails automatically.

Setup Overview

  1. Open Integrations in RemyPass.
  2. Choose Blackbaud.
  3. Select the Blackbaud product you use.
  4. Authorize RemyPass from your Blackbaud account.
  5. Open Configure Blackbaud.
  6. Choose whether passes created from Blackbaud should be emailed automatically.
  7. Add at least one membership type mapping.
  8. For Altru, enter and validate the required Altru Analysis ad-hoc query.
  9. Save the settings.
  10. Test with a known Blackbaud constituent before using the integration broadly.

For Raiser's Edge NXT, RemyPass also provisions supported Blackbaud webhook subscriptions after the OAuth connection is complete.

For Altru, OAuth connection and activation are separate. RemyPass shows the integration as connected but setup incomplete until a membership type mapping exists, the ad-hoc query has been validated, and an approved generic pass template is available.

Altru Ad-Hoc Query

Altru clients must create an ad-hoc query in Altru Analysis that returns one row per constituent membership. RemyPass validates the query by name through the Altru Analysis API, checks the response metadata, and stores only query metadata and field mapping.

The query must return these fields with the following response labels:

Response fieldRequiredPurpose
constituent_idYesInternal Altru constituent record ID used to match RemyPass members.
membership_idYesAltru membership record ID stored on the RemyPass member.
membership_typeYesMembership type, level, category, or programme value used for RemyPass membership type mapping.
membership_statusYesCurrent membership status used to activate, deactivate, or reactivate members and passes.
membership_expiry_dateYesMembership expiry date used to update generic wallet pass expiry.
membership_start_dateNoStart or join date used when choosing the latest active membership.

The validator also accepts common Altru field names such as QUERYRECID for constituent_id, but using the prescribed labels keeps setup predictable.

RemyPass reads the query in pages using the Altru start and limit parameters and continues while Altru reports more results. The default page size is 500 rows. Each scheduled Altru scan processes every page, deduplicates memberships by constituent and membership ID, and queues newly discovered active constituents, so query results are not limited to the first page.

Each polling run uses one complete Altru snapshot for both new-member discovery and existing-member reconciliation. RemyPass does not deactivate members when Altru cannot be reached or the query response is invalid. An explicit lapsed, cancelled, or expired membership is applied immediately. Every linked Altru member must remain represented in the query, including lapsed and cancelled memberships. If the query omits any linked member, unexpectedly returns no rows, or drops below half its previous successful row count, RemyPass stops reconciliation before changing member or pass lifecycle state.

Membership Type Mapping

Membership type mappings translate Blackbaud membership categories into RemyPass membership type values.

Use mappings when the value in Blackbaud does not exactly match the membership type options configured in RemyPass. For example, you can map Single Membership in Blackbaud to Individual in RemyPass.

When RemyPass creates a member:

  1. It reads the active Blackbaud membership category.
  2. It checks for an exact mapping in Configure Blackbaud.
  3. If a mapping exists and the RemyPass value is valid, that value is stored on the member.
  4. If no mapping exists, RemyPass falls back to a direct match against the configured RemyPass membership type options.

Webhooks and Scheduled Processing

For Raiser's Edge NXT, RemyPass subscribes to these Blackbaud events:

Blackbaud eventWhat RemyPass does
com.blackbaud.constituent.add.v1Adds the constituent to the Blackbaud processing queue for membership verification.
com.blackbaud.constituent.change.v1Queues the constituent for processing. Existing RemyPass members are treated as higher priority.
com.blackbaud.constituent.delete.v1Deactivates the linked RemyPass member and expires active passes.

Blackbaud sends these events as CloudEvents. RemyPass validates the webhook request, matches the Blackbaud environment to the connected company, and queues the constituent for processing.

Altru and Blackbaud CRM do not use RemyPass-managed Blackbaud webhooks. They rely on scheduled membership checks through the relevant SKY API adapter and are polled roughly every 2 hours.

Processing Queue

RemyPass uses a queue so constituent changes can be retried safely. This is important because a constituent can be created before the relevant membership is attached in Blackbaud.

Queued items are processed in priority order. If RemyPass cannot find an active membership yet, the item is retried later instead of creating an incomplete member.

The queue also prevents duplicate member creation by checking for an existing RemyPass member with the same Blackbaud constituent ID before creating a new one.

Scheduled Membership Checks

RemyPass runs scheduled membership checks for connected Blackbaud companies. These checks:

  • Look up existing RemyPass members that came from Blackbaud.
  • Read the current active membership from Blackbaud.
  • Deactivate the member if no active membership exists.
  • Reactivate the member if an active membership is found again.
  • Update active generic pass expiry dates when the Blackbaud membership expiry changes.
  • Push wallet updates for Apple Wallet and Google Wallet passes already saved to a device.

Altru and Blackbaud CRM checks run roughly every 2 hours so member creation and pass updates happen sooner than daily reconciliation. A daily reconciliation still runs for all connected Blackbaud products as protection against missed renewal, cancellation, and expiry-date changes.

Blackbaud sync jobs use a database-backed company lock so only one application worker can reconcile a company at a time. Failed Apple Wallet and Google Wallet updates remain marked as pending on the pass and are retried by subsequent Blackbaud sync runs. The integrations screen shows the last completed sync and the latest sync error.

The following environment variables can tune the Altru safeguards when required:

VariableDefaultPurpose
BLACKBAUD_ALTRU_AD_HOC_PAGE_SIZE500Rows requested from each Altru query page.
BLACKBAUD_ALTRU_AD_HOC_MAX_PAGES10000Safety limit preventing an infinite pagination loop.
BLACKBAUD_ALTRU_MIN_SNAPSHOT_RATIO0.5Minimum row-count ratio accepted relative to the previous successful snapshot.
BLACKBAUD_INACTIVE_CONFIRMATION_COUNT2Successful absent-membership observations required before deactivation.
BLACKBAUD_COMPANY_SYNC_LOCK_MS5400000Company reconciliation lock duration, refreshed while a job is active.

Pass Lifecycle

Blackbaud stateRemyPass behavior
Active membership found for a new constituentCreates a RemyPass member and issues the approved generic pass template.
Active membership found for an inactive linked memberReactivates the member and reactivates eligible expired generic passes.
Membership expiry changesUpdates active generic pass expiry dates and pushes wallet updates.
No active membership foundMarks the member inactive and expires active generic passes.
Constituent deletedMarks the linked member inactive and expires active passes.

If no approved generic pass template exists, the Altru integration remains connected but setup incomplete. Scheduled Altru synchronization starts automatically once a suitable template is approved.

Pass Delivery

Pass emails are controlled by Automatically email passes to members when they are created through Blackbaud integration in Configure Blackbaud.

When enabled, RemyPass emails the newly issued pass during member creation. When disabled, RemyPass still issues the pass and it can be shared manually from the member record.

Reauthorization

Blackbaud access tokens are refreshed automatically while the refresh token remains valid. If Blackbaud rejects the token refresh or the refresh token expires, RemyPass marks the integration as requiring reauthorization.

Reconnect Blackbaud from the Integrations page to resume webhook setup, polling, and membership updates.

Before enabling Blackbaud broadly:

  1. Confirm an approved generic pass template exists in RemyPass.
  2. Confirm the Blackbaud test constituent has a usable email address and an active membership.
  3. Add membership type mappings for any Blackbaud categories that do not exactly match RemyPass values.
  4. Connect Blackbaud and save the integration settings.
  5. Create or update one test constituent in Blackbaud.
  6. Confirm the member appears in RemyPass after processing.
  7. Confirm the pass is issued, has the expected expiry date, and can be added to Apple Wallet or Google Wallet.
  8. Change the membership expiry date in Blackbaud and confirm RemyPass updates the pass.
  9. Test a lapsed or cancelled membership and confirm the member/pass lifecycle matches your expectations.

Troubleshooting

If a member or pass does not update as expected:

  • Check that the Blackbaud integration is connected and does not require reauthorization.
  • Confirm the correct Blackbaud product was selected when connecting.
  • Confirm the constituent has an active qualifying membership in Blackbaud.
  • Check that an approved generic RemyPass pass template exists.
  • Check membership type mappings if the member's RemyPass membership type is blank or unexpected.
  • Confirm the member has an email address if automatic pass email delivery is enabled.
  • For Raiser's Edge NXT, confirm webhook subscriptions were provisioned and that the Blackbaud environment ID matches the connected company.
  • Wait for scheduled processing if a membership was attached shortly after constituent creation.
  • Contact RemyPass support with the member name, Blackbaud constituent ID, lookup ID, membership ID, and expected pass behavior.

FAQ

Does RemyPass create members immediately when a Blackbaud constituent is created?

Not always. RemyPass queues the constituent and verifies that an active membership exists before creating a member. This avoids creating members before Blackbaud has attached the membership record.

Does the integration require constituent codes?

No. The current sync checks membership records directly and uses active membership data as the source for creation and lifecycle updates.

Why did a member not receive an email?

Check that pass email delivery is enabled in Configure Blackbaud, that the Blackbaud constituent has an email address, and that RemyPass successfully issued a pass.

What happens when a membership renews?

During scheduled checks, RemyPass detects the active membership expiry date and updates active generic passes when the date changes.

What happens when a membership lapses or is cancelled?

If RemyPass no longer finds an active membership, it marks the linked member inactive and expires active generic passes.

Can a lapsed member be reactivated?

Yes. If Blackbaud later reports an active membership, RemyPass reactivates the member and eligible expired generic passes.

Does Blackbaud update event tickets?

No. Blackbaud membership lifecycle updates target generic membership passes only. Event tickets are not expired or reactivated by Blackbaud membership polling.

Can Blackbaud data appear on the wallet pass?

Blackbaud-created passes include membership-related custom fields such as membership number, issue date, and expiry date. Configure the pass template fields in RemyPass to show the data your members should see.