How does Power BI actually get data out of Raiser’s Edge NXT?
Through the Blackbaud SKY API, which is the supported route and effectively the only one. Someone at your organisation creates a SKY developer account, registers an application, adds a redirect URI, requests read scopes for Raiser’s Edge NXT, and collects a subscription key from the developer subscriptions page. Every request then carries that subscription key as a header alongside an OAuth access token. There is no supported way to point Power BI at the hosted database, and no ODBC driver Blackbaud will hand you for it.
Two mechanics shape every design decision after that. Access tokens expire after sixty minutes, so an extraction that runs for hours has to refresh mid-flight — and each refresh exchange returns a new refresh token as well as a new access token, which means whatever stores it has to write the new one back or the next run fails on an expired credential. And the API throttles: a per-second rate limit for bursts and a daily quota for sustained traffic, currently published as 5 calls per second and 25,000 calls per day on standard subscriptions, with a much smaller free developer tier at 1,000 requests a day. Hit the first and you get a 429; hit the second and you get a 403. Both come back with retry-after headers, which the extraction is expected to honour.
The four routes out of Raiser’s Edge NXT, and when each one is the right choice
| Route |
What it gives you |
When we use it |
| Blackbaud’s open-source Power Query connector |
A custom connector, published on GitHub and originally contributed by a community developer, that you compile to a .mez file, drop into the Power BI Desktop custom connectors folder and allow as an uncertified extension |
Small shops and proofs of concept — it is genuinely useful, but it still needs your own registered app and subscription key, and it errors on list endpoints for modules your subscription does not include |
| The Blackbaud Power BI add-ins |
A packaged path into Power BI built around what the platform’s own list and Insights layer exposes |
Where the questions fit the fields on offer — the practical limit is that the field set is narrower than the record, so a report that needs an unusual attribute or a fund detail tends to hit the edge of it |
| A managed warehouse from a Blackbaud partner |
A vendor-run copy of NXT in a database you connect to, such as Zuri Group’s Aqueduct or MissionBI’s Connect, both fed by the same SKY API |
Large advancement shops with several Blackbaud products, many report authors and no appetite to run a pipeline — it is a subscription, and we will say plainly when it is the cheaper answer |
| A scheduled extraction into your own store |
Constituent, gift, fundraising and list endpoints pulled on a schedule into Azure SQL, a Microsoft Fabric lakehouse or files in your own storage account |
Our default for most builds — you own the credentials, the history and the model, the refresh is a fast local read, and joining to the accounting ledger or an events platform is trivial afterwards |
| An existing warehouse copy |
NXT data already landed somewhere by an internal pipeline or another team |
Always our first question — if it exists and is trustworthy, we model on it and skip the extraction work entirely |
One Power BI-specific trap deserves naming early. It is natural to build SKY API request URLs by concatenating strings in Power Query — an identifier here, a date there. The Power BI service classifies that as a dynamic data source and refuses to refresh it on a schedule, even though it worked perfectly in Desktop. The supported shape is a constant base address with everything variable passed as relative path and query parameters, which the Power Query Web connector (opens in new tab) handles directly — and the more durable fix is to move paging out of Power Query altogether.
Which endpoints carry the fundraising numbers?
Four families do most of the work, and they page the same way: a limit, an offset and a next link, with filters on changed date so an incremental run does not re-read the archive. Page sizes matter more than they sound. The gift list endpoint accepts a limit well into the thousands, and using it is the difference between a nightly job that finishes and one that spends the organisation’s entire daily quota before breakfast.
SKY API endpoint families and their role in the semantic model
| Endpoint family |
What it carries |
Role in the model |
| Constituent |
Individuals and organisations with addresses, email, phones, relationships, constituent codes, ratings and education records |
The constituent dimension, kept slowly changing on the handful of fields that must not rewrite history when someone moves or changes constituency |
| Gift |
Gifts with amount, date, type and receipt detail, plus splits, soft credits, pledges, pledge payments and recurring gift instalments |
The gift fact — and the splits, which are a second, finer fact so fund and appeal totals are additive without inflating the gift count |
| Fundraising |
The campaign, fund and appeal hierarchy, each with its own custom fields and attachments |
Conformed campaign, fund and appeal dimensions — the ones every board question eventually slices by |
| Custom fields |
What the database view calls attributes, returned per parent record, one row per field |
Pivoted into real columns where reporting needs them; the rest stay in a long table rather than widening the fact |
| Lists |
Saved lists built in the web view, usable as a server-side filter on an extraction |
A pragmatic way to scope a first build — but list-backed data can lag the record, so we do not build balances on it |
| Opportunities and actions |
Major gift opportunities and the contacts, visits and moves logged against constituents |
The portfolio and moves-management layer, where major gift pipeline reporting comes from |
Terminology is a real source of rework here, because the two interfaces name the same things differently. Solicitors in the database view are fundraisers in the web view. Cash gifts are one-time gifts. Pay gifts are pledge payments. We agree the vocabulary with advancement services during scoping and put it in the model as documented column and measure names, so a report never quietly mixes the two dialects.
What has to be derived rather than read?
A surprising amount. The API is faithful to how Raiser’s Edge records giving, which is not the same shape as how a development office reports on it. The table below is the set of derivations that come up on nearly every build, written as documented DAX measures over a star schema and a fiscal calendar that matches your year rather than the platform’s.
What the API returns, and what the model has to work out
| Reporting need |
What the API gives |
What the model adds |
| Cash raised vs commitments |
Pledges, pledge payments and one-time gifts as distinct records |
Two separate measures with an explicit rule, so a pledge and the payments against it are never both counted as revenue |
| Fund and restriction balances |
Gift splits keyed to funds, and the fund hierarchy |
Split-grain aggregation, with restricted, temporarily restricted and unrestricted rolled from your own fund coding rather than guessed from names |
| Appeal and campaign ROI |
Appeal and campaign records with gifts attributed to them |
Cost joined from wherever you actually keep it — usually an appeal custom field or the accounting ledger — because the API does not carry a mailing’s expense |
| Household and soft-credit views |
Relationships, soft credits and organisation links |
A deliberate crediting rule chosen once, so hard and soft credit totals reconcile instead of disagreeing by donor and by fund |
| Fundraiser portfolio performance |
Fundraiser assignment, opportunities and logged actions |
Point-in-time portfolio membership, so last year’s numbers do not follow a prospect to a new officer’s column |
| Retention and lapsed segments |
Gift dates and constituent identifiers |
Year-over-year donor logic on your fiscal calendar — the metric definitions themselves are covered on our nonprofit page below |
| Recurring giving |
Recurring gift schedules and their instalments |
Expected against received, so a lapsed monthly donor shows up as a gap rather than as a slowly shrinking total |
Retention, LYBUNT and SYBUNT are defined metric by metric on our Power BI nonprofit donor dashboard page, which is the right starting point if your CRM is not Blackbaud or you have not chosen one yet; this page is about getting the gift, fund and appeal records those metrics run on out of NXT correctly and keeping them coming. The modelling discipline underneath both — one date table, conformed dimensions, measures rather than calculated columns — follows Microsoft’s star schema guidance (opens in new tab) and is described on our data modeling and DAX page.
Does the web view and database view split matter?
It matters for what you build on, not for what the data says. The two interfaces read the same underlying database — the database view is the Raiser’s Edge 7 client, the web view is NXT in a browser, and a record edited in one appears in the other. What differs is the vocabulary, the field coverage and, increasingly, the lifespan: Blackbaud has told customers that support for the database view ends in September 2027, along with the products that depend on it.
That has a practical consequence for reporting. A dashboard fed by database view exports, an RE7 query someone scheduled, or a Crystal report pointed at the client is standing on a floor with a published end date. A dashboard fed by the SKY API and a history store you own is not. If you are running both today, this is a good moment to move the reporting layer first — it is the least disruptive half of the transition and it takes the deadline pressure off the rest.
How are refresh and donor-data security set up?
The model is published to your Power BI workspace and refreshed on a cadence that respects the quota: for most organisations a nightly gift and constituent pull with a changed-date filter, not a full re-read, inside Microsoft’s documented data refresh limits (opens in new tab). Where a long giving history has accumulated, incremental refresh (opens in new tab) keeps each cycle to a recent window so the archive is loaded once and left alone.
Donor data deserves the same care as pay data. Visibility is handled with row-level security in the Power BI service (opens in new tab), driven from a mapping of viewers to fundraisers, constituencies or funds, so a gift officer opens their own portfolio, a school’s advancement lead sees their own unit and the development director sees everything. Our guide to Power BI row-level security setup walks through the roles and the test steps. Where a fund is small enough that a single row identifies a named donor, we aggregate or suppress on summary pages rather than publishing it and hoping nobody drills.
What does the build cost, and how long does it take?
Prepaid Flex hours that never expire: Starter 20 hours at $125/hr ($2,500), Growth 40 hours at $115/hr ($4,600), Power 80 hours at $100/hr ($8,000), with hourly work from $100/hour on the largest block. A first build covering giving trend, appeal and campaign performance, fund balances and retention from an approved SKY API application usually fits a Starter block. Adding a decade of history, a second Blackbaud product, unusual custom-field pivots or an ROI view that needs appeal costs reconciled against the ledger typically moves it to Growth — less because of the development and more because agreeing crediting rules across advancement services and finance takes conversation.
Most tasks ship within 3–5 business days of scope approval, and you get a scope and hours estimate before anything starts. Our guide to Power BI dashboard development cost covers what moves the number, how prepaid Flex hours work explains the model in full, and custom Power BI dashboard development describes the wider service this build sits inside.
Who is this for, and what is out of scope?
Organisations running Raiser’s Edge NXT with enough giving history to trend and no dedicated analytics engineer — independent schools, healthcare foundations, arts and human services nonprofits, and university advancement shops where reporting is one or two people. Development directors, advancement services managers and the finance partners who own the restricted funds are usually the people who get in touch, typically after a board pack took three days to assemble twice in a row.
Writing back to NXT is out of scope: this is a read-only reporting build, and gift entry belongs in the platform where it is auditable. General ledger reporting from Financial Edge NXT is a separate conversation and a separate SKY API product — we will scope it, but we will not pretend the two models are one. Self-hosted Raiser’s Edge 7 with direct SQL access is a different build again, and a simpler one. Contact is form-only — send your request and we’ll reply with a scope estimate.