Overview
The Bloomerang connector provides read-only access to Bloomerang CRM data through the Bloomerang v2 API. It retrieves constituent, transaction, interaction, communication, custom field, fundraising, and related reference data.
The connector does not create, update, or delete records in Bloomerang.
All records use:
Id
as the unique key.
Authentication
The connector requires a Bloomerang:
private_key
The key is sent with every request using:
X-API-KEY: {private_key}The API base URL is:
https://api.bloomerang.co/v2/
The connection test performs:
GET /addresses
and succeeds when Bloomerang returns a successful response. Invalid credentials return a specific authentication error.
API Requests
The connector uses GET requests only. There are no POST, PUT, PATCH, or DELETE operations.
For paginated endpoints, requests follow this pattern:
GET /{endpoint}?skip={offset}&take=50The page size is fixed at:
50 records
The connector increases skip by 50 until the API indicates that there are fewer than 50 records remaining.
Some reference/custom-field endpoints are marked as non-paginated and are retrieved in a single request.
Sync Behavior
Most Bloomerang tables are fully re-read on every sync.
The main exception is:
interactions
which supports incremental synchronization.
Incremental interaction sync
After the first full load, the connector stores a last_started bookmark.
On subsequent interaction syncs it requests records ordered by:
LastModifiedDate DESC
and processes records from newest to oldest.
Once it encounters a record whose:
AuditTrail.LastModifiedDate
is less than or equal to the previous bookmark, it stops requesting additional records.
The new bookmark is the UTC time at which the current sync started, rather than the timestamp of the last record returned.
First interaction sync
Initial/default bookmark values are recognized as indicating that no real incremental checkpoint exists yet. In that situation, interactions is fully loaded before incremental mode begins.
An interaction stream can also be configured to perform a full re-read instead of using incremental mode.
Schema & Raw API Data
Bloomerang tables use a predefined column mapping rather than dynamically creating columns from each response.
This means newly introduced Bloomerang fields will not automatically become dedicated columns until the connector mapping is updated.
However, every record also contains:
json_record_data
This field preserves the complete original API response object before unmapped fields are removed.
This is useful when:
Bloomerang adds a new field that has not yet been formally mapped.
A developer needs access to nested API data.
A field is needed for troubleshooting or downstream modeling.
Missing mapped fields are returned as NULL rather than causing the record to fail.
Nested Data
Several Bloomerang records contain arrays or objects, including data such as:
Audit information
Primary contact information
Communication restrictions
Custom values
Transaction designations
Membership information
Attachments
Household members
These values remain structured rather than being fully flattened into separate relational tables or columns.
Consumers may therefore need to parse nested fields or use json_record_data for more detailed analysis.
Deletes
The connector does not explicitly synchronize deletes.
There is:
No deletion endpoint.
No delete-event feed.
No comparison against previous source snapshots to identify missing records.
No delete message generated when a Bloomerang record is removed.
Therefore, a record deleted in Bloomerang will not be explicitly communicated as a deletion by this connector.
This applies even to tables that are fully re-read on each execution.
Retries & Rate Limits
The connector automatically retries temporary API failures.
For normal failures:
Retry delay: 30 seconds Maximum retries: 5
HTTP 429 rate-limit responses use a longer exponential delay:
1st retry: 300 seconds 2nd retry: 600 seconds 3rd retry: 1200 seconds 4th retry: 2400 seconds 5th retry: 2400 seconds
The maximum rate-limit delay is 2,400 seconds (40 minutes).
This means large syncs can take considerably longer when the Bloomerang API begins returning rate-limit responses.
Known Limitations & Notable Behavior
Most tables are not incremental. They are fully re-read each time the connector runs. Only
interactionsis explicitly configured for incremental synchronization.Deletes are not propagated. A deleted Bloomerang record does not generate a downstream delete event.
Schemas are predefined. Newly added API fields will not automatically appear as dedicated columns, although the original response is preserved in
json_record_data.Incremental interaction sync depends on
AuditTrail.LastModifiedDate. Records without this value cannot be used to determine the incremental stopping point.Incremental filtering happens while paging rather than through a LastModifiedDate API filter. The connector requests interactions ordered newest-first and continues paging until it reaches the previous bookmark. Large amounts of recently modified interaction data can therefore require many API requests.
Pagination is limited to 50 records per request. Large tables may require a substantial number of API calls.
Rate limiting can introduce long delays. Repeated
429responses can result in waits of up to 40 minutes between attempts.All tables use
Idas the unique key. Consumers should use this field when joining repeated sync results or identifying the same source record across executions.
