(Work in progress -- use at your own risk - in development, ready for testing, not recommended for production)
An open-source Airbyte connector that enables seamless data integration between Blackbaud NXT (via SKY API) and 50+ modern data platforms including Snowflake, BigQuery, PostgreSQL, and more.
SKY Bridge democratizes access to NXT data by providing a no-code/low-code solution for streaming your Blackbaud data directly into your data infrastructure. Built for the Blackbaud developer community, this connector eliminates the complexity of custom API development while providing enterprise-grade reliability.
- 20+ Data Streams: Comprehensive access to NXT data including constituents, gifts, campaigns, and more
- OAuth 2.0 Authentication: Secure, automatic token management
- Incremental Sync: Efficient data updates with configurable date ranges
- Custom Queries: Execute NXT queries with parameter support
- In Development: Built-in pagination but currently not handling tokens (causing harmless 'non unique primary key' awarning), retry logic, and error handling (limited - WIP/to-do)
- Open Source: MIT licensed for community contribution and customization
- β Constituents (with full profile data)
- β Gifts and Gift Custom Fields
- β Campaigns, Funds, and Appeals
- β Opportunities
- β Actions and Notes
- β Addresses, Phones, and Emails
- β Relationships
- β Constituent Codes and Custom Fields
- β Code Tables
- β Custom Queries (with parameters) - quick start guide: https://youtu.be/QCiAqbmvA5I
- Airbyte Instance: Airbyte Cloud (self hosted may require modification depending on CDK version)
- SKY API Access:
- Blackbaud developer account
- Registered SKY application
- API subscription key
- Go to SKY Developer Portal
- Create a new application
- Note your:
- Application ID (Client ID)
- Application Secret
- Subscription Key
- In Airbyte, navigate to Builder
- Click + New Custom Connector
- Select Import a YAML manifest -> Import a YAML button
- Choose sky-connector.yaml
- Fill in required 'Inputs' (client ID, secret, API key)
- Important: to properly configure your schema and tests in builder mode, you need to stub the access key with dummy data/starting value so its not null (example, just enter 12345678 - oauth will replace it).
- Choose a stream (ie, 'funds'). Scroll to the oAuth section/button and click to authorize.
- Click 'test'. This will populate your schema for that stream.
- Test streams (or if not planning to use a stream, you can skip tests and ignore warnings).
- Note that you'll need to change the Query ID for queries, or the code table ID for code table streams to match your environment.
- Click 'Publish'
- Create a new source using your custom connector (sources -> custom -> choose connector)
- Enter your credentials:
- Client ID: Your SKY application ID
- Client Secret: Your SKY application secret
- Subscription Key: Your SKY API subscription key
- Start Date: Date from which to sync data (e.g., 2020-01-01T00:00:00Z which is the default if left blank)
- Complete OAuth authorization when prompted
- Test and save the connection
Choose from 50+ destinations:
- Data Warehouses: Snowflake, BigQuery, Redshift, Databricks
- Databases: PostgreSQL, MySQL, MongoDB, MS SQL Server
- Data Lakes: S3, Azure Blob, GCS
- And many more...
- Select the streams (which fields from which API's, and/or queries) you want to sync. Note that large data sets may consume your API limits - start small.
- Choose sync frequency (e.g., hourly, daily)
- Configure sync mode (Full Refresh or Incremental)
- Start syncing!
To use custom NXT queries, modify the query ID in the YAML -- or -- in the builder UI:
gift_query:
creation_requester:
request_body:
value:
id: YOUR_QUERY_ID # Replace with your NXT query ID
parameters:
DateFrom: "{{ stream_interval.start_time }}"
DateTo: "{{ stream_interval.end_time }}"To sync specific code tables, update the table ID:
codetable_solicitcodes:
requester:
url: >-
https://api.sky.blackbaud.com/codetable/v1/codetables/YOUR_TABLE_ID/tableentriesAdjust the incremental sync parameters:
incremental_sync:
step: P30D # Sync window size (30 days)
lookback_window: PT2H # Overlap window (2 hours)
cursor_field: date_modified # Field to track changesThe connector handles OAuth 2.0 authentication automatically:
- Initial authorization via Blackbaud login
- Automatic token refresh
- Secure credential storage in Airbyte
- SPECIAL NOTE: there is a bug with sliding window refresh token management. For now, as a bypass, refresh token is set to static = TRUE, which will keep the refresh token valid for 1 year, at which point it will require re-authentication. This will be improved to properly handle token refresh in future versions.
Two pagination methods are supported:
- Offset Pagination: For standard endpoints. Note that a token based approach to better support this is in development. Work in progress.
- Continuation Token: For large result sets
Built-in resilience features:
- Automatic retry with exponential backoff
- Graceful handling of rate limits
- Detailed error logging
- Work in progress
We welcome contributions from the Blackbaud developer community!
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
- Additional data streams
- Query templates
- Performance optimizations
- Documentation improvements
- pagination offset handling improvement using token
- Bug fixes
Stream NXT data to Snowflake alongside marketing and financial data for comprehensive analytics.
Sync constituent data to PostgreSQL to power donor portals and custom applications.
Load data into Databricks for predictive modeling and advanced analytics.
Archive to S3 for long-term retention and regulatory compliance.
OAuth Error: Ensure redirect URI in SKY app matches Airbyte's callback URL
No Data Syncing: Check that your API subscription includes the required scopes
Slow Performance: Consider reducing sync frequency or limiting date ranges
Query Timeout: For large queries, increase the timeout in the YAML configuration
- Open an issue on GitHub
- Check existing issues for solutions
- Review Blackbaud SKY API documentation
- Join the Blackbaud developer community
This project is licensed under the MIT License - see the LICENSE file for details.
- Blackbaud for providing the SKY API
- Airbyte for the open-source data integration platform
- The Blackbaud developer community for feedback and support
Developer: Allan Delmare
Project: Created for bbdevdays 2025 Hackathon
Track: Data Quality/Hygiene
SKY Bridge - Extending the power of NXT through open-source innovation
Ensure your SKY application has these scopes:
- NXT (Read)
- Initial Sync: Start with a limited date range
- Incremental: Use daily syncs for active data
- Full Refresh: Monthly for reference data
Built with β€οΈ for the Blackbaud Community