All help topics

Connecting your CRM

Pulling gifts straight from Bloomerang, DonorPerfect, Little Green Light, Neon CRM, Salesforce or Raiser's Edge NXT, refreshing, and scheduled sync.

Quick start

  1. Go to Uploads › Upload new file (or choose Upload transactions on a pyramid) and choose Connect your CRM.
  2. Under Choose your CRM, pick yours. Bloomerang, DonorPerfect and Little Green Light connect with an API key, Neon CRM with its organization ID and an API key; Salesforce and Raiser's Edge NXT connect when you sign in. See Connecting a CRM for where to find each key.
  3. On Get your transactions, keep Last 5 years (or choose another range), tick any extra fields you want, and choose Pull gifts.
  4. When the pull finishes, read the Pull check and match any gift type marked Needs a match.
  5. Choose Import gifts (or Import and count prospects, Build Donor pyramid or Build True Pyramid if you came from a pyramid). The pyramid fills in as soon as the gifts are in.
  6. Next time, choose Refresh from your CRM on the pyramid. With Plus, set a nightly or weekly schedule in Settings › Data.

Why connect your CRM

Connecting your CRM does the same job as uploading a gift file, without the export:

  • No files to export, clean or upload. We read gifts straight from your CRM and never change anything in it.
  • Refresh with one click. Refresh from your CRM on any pyramid pulls the latest gifts and rebuilds it. With Plus, a nightly or weekly sync does it for you.
  • Gift types matched for you. Each CRM's own gift types are mapped to the six TruePyramids types, so you usually have little or nothing to match.
  • The awkward records handled. Soft credits are left out, refunds are taken off where the CRM reports them, recurring schedules aren't counted as gifts, and records we can't use are listed by their CRM ID so you can fix them.
  • Personal information never offered. Name, address, tribute and free-text fields aren't on the list of fields you can pull.

Upload a file instead when your CRM isn't on the list, when you want the optional capacity column (wealth-screening ratings come only from files), or for an asks file.

Supported CRMs

CRMHow it connectsWhat you needUsed as the constituent ID
BloomerangAPI keyA Bloomerang API keyAccount ID
DonorPerfectAPI keyA DonorPerfect API key (issued by DonorPerfect)Donor ID
Little Green LightAPI keyAn LGL API keyConstituent ID
Neon CRMOrganization ID + API keyYour Neon organization ID and an API key for a user with Read DonationAccount ID
Salesforce (NPSP, Nonprofit Cloud or Education Cloud)Sign in with SalesforceA Salesforce login that can see your gift recordsThe donor's account — household or organization
Raiser's Edge NXTSign in with BlackbaudA Blackbaud ID with access to Raiser's Edge NXTConstituent lookup ID

Choose your CRM lists the CRMs you can connect, and any already connected show at the top with Use this connection. Don't see yours? Export a file and upload it instead.

Connecting a CRM

Start from Upload new file › Connect your CRM and choose your CRM. API-key CRMs show a short form; sign-in CRMs show a Sign in with button. When you choose Connect, we check the key with your CRM (“Checking the key with …”) before saving anything. A key that works is saved encrypted and never shown again — not to you, not to your teammates. Then you go straight on to choosing which gifts to pull.

If the check fails, you'll see “We couldn't connect …” with your CRM's reason and “Nothing was saved.” See Troubleshooting.

Bloomerang

  1. In Bloomerang, an administrator opens the user icon › Edit My User and creates or copies the API key.
  2. In TruePyramids, choose Bloomerang, paste the key into API key, and choose Connect.

We test the key by reading one transaction. A rejected key shows as “Bloomerang rejected the API key (401 Unauthorized).”

DonorPerfect

  1. DonorPerfect issues API keys itself: an administrator asks for one from the DonorPerfect API Help Desk (api@softerware.com) or DonorPerfect support.
  2. In TruePyramids, choose DonorPerfect, paste the key into API key, and choose Connect.

DonorPerfect keys are long, and sometimes arrive with codes like %2f in them. Paste the key exactly as you received it — either form works.

Little Green Light

  1. In Little Green Light, an administrator goes to Settings › Integration Settings › LGL API and creates a key.
  2. In TruePyramids, choose Little Green Light, paste the key into API key, and choose Connect.

Neon CRM

  1. In Neon CRM, an administrator creates an API key in the user settings of a Neon user who has the Read Donation permission. The key works with that user's permissions.
  2. Find your organization ID in Settings › Organization Profile.
  3. In TruePyramids, choose Neon CRM, enter Organization ID and API key, and choose Connect.

We test the pair by reading Neon's list of donation fields. If either is wrong, or the user lacks Read Donation, you'll see “Neon CRM rejected the Org ID or API key (HTTP 401). The key's user needs the Read Donation permission.”

Salesforce

  1. In TruePyramids, choose Salesforce, then Sign in with Salesforce.
  2. Sign in to Salesforce and approve TruePyramids' access. Finish within 15 minutes, in the same browser tab.
  3. Back in TruePyramids, we check that your org has NPSP or Nonprofit Cloud gifts we can read, then take you on to choosing gifts.

TruePyramids reads gifts as the person who signed in, so sign in with an account that can see all your gift records. If Salesforce won't finish the sign-in, your Salesforce administrator may need to allow TruePyramids in your org. More in Salesforce: what to know.

Raiser's Edge NXT

  1. In TruePyramids, choose Raiser's Edge NXT, then Sign in with Blackbaud.
  2. Sign in with your Blackbaud ID and approve TruePyramids' access to your Raiser's Edge NXT data. Finish within 15 minutes, in the same browser tab.
  3. Back in TruePyramids, we check we can read your gift custom field list, then take you on to choosing gifts.

An administrator may need to approve TruePyramids in the Blackbaud Marketplace before anyone can connect. More in Raiser's Edge NXT: what to know.

One connection per CRM, shared by your team

Anyone on your team can connect a CRM. Each organization has one connection per CRM, and everyone uses it: once Bloomerang is connected, teammates see Already connected · (date) by (name) with Use this connection. Connecting the same CRM again replaces the saved key or sign-in (see Reconnecting).

Pulling your gifts

After you connect — or choose Use this connection — the Get your transactions page shows “(CRM) connected · Read-only · nothing in (CRM) changes” and two choices: which gifts and which fields. Choose Pull gifts when you're ready. (Use a different source takes you back to the choice between a file and a CRM.)

Which gifts: the date range

Choose one of:

Last 5 years
The default. Gifts dated from five years ago today through today.
Last 10 years
The same, ten years back.
All history
Every gift, however old.
From a date
Gifts from a start date you choose (on or before today) through today. Typing in From picks this for you.

To is always today. When your CRM can count gifts without pulling them all, an estimate appears: “About 38,400 gifts in this range”. It's your CRM's own count, so it can include records we leave out (failed or canceled donations, recurring schedules); Bloomerang can only count All history.

The range is saved with the pull, and every refresh pulls it again — see Refresh.

Example: rolling and fixed ranges

You pull on Oct 27, 2026. Last 5 years pulls Oct 27, 2021 to Oct 27, 2026. When you refresh on Jan 15, 2027, it pulls Jan 15, 2022 to Jan 15, 2027 — the preset moves forward with each refresh.

From a date of Mar 1, 2019 is shown as “Since Mar 1, 2019” and always starts there, so each refresh covers a longer stretch.

While the gifts are pulled

You land on the pull's own page, which shows Pulling gifts from your CRM, the number of gifts read so far (“12,480 of about 38,400” when your CRM gave a count), and a progress bar. You can leave the page; the pull keeps going, and it's listed in Uploads as “(CRM) gifts”.

What we pull

Every pull brings the five fields a gift needs, plus any optional fields you tick under Which fields?. Optional fields become details you can see in View records and use in prospect rules — exactly like a file's kept detail columns.

The five required fields

These are ticked and can't be unticked. The list shows your CRM's name for each and what it's used as:

CRMtransactionidconstituentiddateamounttype
BloomerangTransaction IDConstituent account IDTransaction dateAmountDesignation type
DonorPerfectGift IDDonor IDGift dateAmountRecord type
Little Green LightGift IDConstituent IDGift dateGift amountGift type and category
Neon CRMDonation IDAccount IDDonation dateDonation amountDonation type
SalesforceOpportunity ID / Gift Transaction IDDonor account ID (household or organization)Close date / transaction dateAmountRecord type (NPSP) / gift category (Nonprofit Cloud)
Raiser's Edge NXTGift ID (system record ID)Constituent ID (lookup ID)Gift dateGift amountGift type

Optional standard and custom fields

Standard fields are the common gift fields for your CRM. Fund, Campaign and Appeal are ticked to start with, where your CRM has them; a ticked field shows “Detail in View records”, an unticked one “Not pulled”.

CRMStandard fields you can pull
BloomerangFund, Campaign, Appeal, Payment method
DonorPerfectFund (GL code), Campaign, Solicitation (appeal), Sub-solicitation, Gift type (payment method), Fair market value, Currency — the last three only if your DonorPerfect account has them
Little Green LightFund, Campaign, Appeal, Event, Payment type
Neon CRMFund, Campaign, Appeal, Payment method, Purpose, Source, Solicitation method — those your Neon donation search offers
SalesforceFund (GAU allocation / gift designation), Campaign, Payment method
Raiser's Edge NXTFund, Campaign, Appeal, Payment method

Custom fields in your (CRM) are read live from your CRM each time you open the page, so new custom fields appear automatically:

  • Bloomerang: active transaction custom fields.
  • DonorPerfect: your gift user-defined fields, listed by their field (column) name.
  • Little Green Light: gift categories (LGL's name for gift custom fields).
  • Neon CRM: donation custom fields.
  • Salesforce: custom fields on Opportunity (NPSP) or Gift Transaction (Nonprofit Cloud), listed by their API name, such as Board_Gift__c.
  • Raiser's Edge NXT: gift custom field categories.

When a gift has several values for one field — the funds of a split gift, or a multi-select custom field — they're joined with “; ”, as in Building Fund; Endowment. If none can be pulled, the list says “None we can import.”

Tip: tick every field you might want to filter by later. The fields are fixed when you pull: refreshes bring the same fields, and adding one means pulling again as a new upload.

Personal information is never offered

Fields that hold names, contact details or free text are left off the list entirely, so they can't be pulled:

  • DonorPerfect: Gift narrative, Reference.
  • Neon CRM: Acknowledgee, Solicitor, Tribute, Public recognition name.
  • Salesforce: Opportunity Name, Account Name, Primary Contact, Honoree, In-Kind Description.
  • Raiser's Edge NXT: Reference, Fundraisers, Acknowledgements, Receipts, Soft credits.
  • Every CRM: any custom field whose name looks personal — the same name rules as file headers (email, phone, address, first name and so on).
  • Salesforce and Raiser's Edge NXT also hide custom fields whose names mention a name, recipient, solicitor, fundraiser, note, comment, description or memo. Salesforce hides long-text, email, phone, address, URL, encrypted and lookup fields; Raiser's Edge NXT hides custom fields that point at a constituent.

Behind the scenes we ask your CRM for gift fields only. Where a CRM sends more than we ask for, the extra fields are ignored and never stored.

Reviewing a pull

When a first pull finishes, its page shows “Pulled from (CRM)” with the number of gifts, then two sections to review. Nothing is imported until you choose the button at the bottom.

Match your gift types
Every type value found in your CRM, with how many gifts have it and what it Counts as. See Matching gift types.
Pull check
Gifts ready (gifts that will be imported, before any duplicate IDs are removed), Skipped (records left out — see Skipped records), Constituents (different constituent IDs among the gifts) and Dates (the first and last gift dates). Below it, the skip reasons with counts, Download skipped IDs, and any notes about how your CRM's data was read.

Then choose the button: Import gifts, or — if you started from a pyramid — Import and count prospects (gift pyramid), Build Donor pyramid or Build True Pyramid. Until every type is matched, the line beside it says “Match 2 more gift types to continue.”; once they are, “Looks good. Your pyramid starts filling in as soon as you build.” If you started from a pyramid, you're taken straight to it while the gifts go in.

Delete this pull throws the pulled gifts away (the connection stays). A pull you never import is deleted after 24 hours, like an unreviewed upload.

Matching gift types

Each value in your CRM is matched to one of the six gift types. Values your CRM is known to use are matched for you (see the table below); the rest are shaded and marked Needs a match. Choose a type for each under Counts as. You can also change a match we made — say, if your organization uses a custom record type differently.

Every value needs a match before you can build: a gift's type decides whether it counts as money received, so an unmatched value would quietly leave its gifts out.

How each CRM's gift types map

CRMValue in your CRM → counts asLeft out (not gifts received)
BloomerangDonation → One-time (In-kind when the transaction's method is in-kind) · RecurringDonationPayment → Recurring · Pledge → Pledge · PledgePayment → Pledge paymentRecurringDonation (the recurring schedule)
DonorPerfectG → One-time · M (a split gift) → One-time · G (pledge payment) → Pledge payment · G (recurring payment) → Recurring · P → Pledge, at the pledge's totalSoft credits (S), adjustment records (A, H, C, J), tribute notifications (N), the parts of a split gift, and recurring pledges (EFT, or no total)
Little Green LightGift and Gift / Donation → One-time · Gift / Pledge Payment → Pledge payment · Gift / Recurring → Recurring · Pledge (any category) → Pledge · In Kind (any category), or a Gift paid in kind → In-kindSoft credits and the other related-credit types; Installment
Neon CRMDonation → One-time · Donation (Recurring) and Recurring Donation → Recurring · Donation (In-Kind) and In-Kind Donation → In-kind · Pledge → Pledge · Pledge Payment → Pledge paymentCanceled, failed, refunded and voided donations
Salesforce (NPSP)Donation, Major Gift, Matching Gift and Matching Donation (singular or plural) → One-time · In-Kind Gift(s) → In-kind · Recurring Donation (installments of a recurring donation) → Recurring · Pledged (open opportunities in the Pledged stage) → PledgeOpen opportunities in other stages, closed-lost opportunities, and opportunities with a $0 amount
Salesforce (Nonprofit Cloud)One-Time → One-time · In-Kind → In-kind · Planned Gift → Planned · Recurring Commitment → Recurring · Custom Commitment → Pledge paymentGift transactions that aren't Paid, and fully refunded ones
Raiser's Edge NXTDonation and Stock → One-time · GiftInKind → In-kind · Pledge and MatchingGiftPledge → Pledge · PledgePayment and MatchingGiftPayment → Pledge payment · RecurringGiftPayment → Recurring · PlannedGift → PlannedRecurringGift (the schedule), SoldStock, and write-offs

Anything else — Bloomerang's or Neon's future types, LGL's Other Income or Gift / Matching Gift, Salesforce Grants and Memberships, a Nonprofit Cloud “Commitment” without a schedule type, Raiser's Edge Other, a blank type shown as (blank) or (none) — waits for you to match.

Note: DonorPerfect has no record type for in-kind or planned gifts, so they arrive as gifts (G) and count as One-time. If you need them typed separately, upload a file with your own type column instead.

How CRM records become gifts

Refunds

Wherever your CRM reports refunds, a gift comes in at its amount after refunds, and a gift refunded in full is left out.

CRMHow refunds are handled
BloomerangRefunds are subtracted from the transaction they refund. A fully refunded gift is left out.
DonorPerfectDonorPerfect records a refund as an adjustment; we read the adjusted gift at its new amount. A full refund drops out.
Little Green LightLGL's API returns active gifts only and has no refund records, so gifts come in as LGL shows them.
Neon CRMRefunded donations are left out. Neon's API doesn't report partial refund amounts, so a partly refunded donation is counted at its full amount — the pull says so in a note.
Salesforce (NPSP)NPSP lowers the opportunity's amount by each refund, so we read the net amount. A fully refunded opportunity ($0) is left out.
Salesforce (Nonprofit Cloud)Original amount minus refunded amount. Nothing left means fully refunded, and it's left out.
Raiser's Edge NXTThere's no refund record; amounts come in as Raiser's Edge shows them, so an adjustment entered as a negative gift stays negative.

Example: a Bloomerang refund on a mixed transaction

Transaction 50211 is $1,000: a $600 Donation and a $400 PledgePayment. $100 of it is refunded. Because the parts have different types, it becomes two gifts, 50211:Donation and 50211:PledgePayment, and the refund is shared in proportion to their amounts:

GiftBeforeShare of the $100 refundImported at
50211:Donation (One-time)$600.00$60.00$540.00
50211:PledgePayment (Pledge payment)$400.00$40.00$360.00
Total$1,000.00$100.00$900.00

Each share is the refund × the part's amount ÷ the transaction's amount, rounded to the cent; the last part takes whatever is left so the shares add up exactly.

Soft credits

Soft credits are never pulled, from any CRM, so the same money is never counted for two people. Each gift is credited to the constituent your CRM gives the hard credit to.

Split gifts

  • Bloomerang: one transaction is one gift, with its funds, campaigns and appeals joined. If its designations have different types (a donation and a pledge payment in one transaction), it becomes one gift per type, with IDs like 50211:Donation.
  • DonorPerfect: the main split-gift record, at the full amount, with its parts' funds, campaigns and solicitations joined. The parts themselves aren't pulled.
  • Little Green Light: LGL records each part of a split as its own gift, so each comes in as its own gift.
  • Neon CRM: a donation has one fund, so there's nothing to split.
  • Salesforce: one gift at the full amount, with its GAU allocations (NPSP) or gift designations (Nonprofit Cloud) joined in the Fund field.
  • Raiser's Edge NXT: one gift at the full amount, with its splits' funds, campaigns and appeals joined.

Recurring gifts and schedules

Only the payments of a recurring gift are pulled, each as a Recurring gift. The schedule itself — Bloomerang's RecurringDonation, DonorPerfect's recurring or EFT pledge, Raiser's Edge's RecurringGift — isn't money received and is left out. The same goes for pledge installment schedules in Little Green Light.

Skipped records

A record that's meant to be a gift but is missing something we need is skipped and reported — it never stops the pull. The pull check and the pull summary show how many were skipped and why:

ReasonMeans
Missing IDThe record has no ID we can use, or its ID or constituent ID is longer than 100 characters.
Missing constituentNo constituent (donor account) on the record.
Missing dateNo gift date, or one we couldn't read.
Missing amountNo amount, or one we couldn't read.
Duplicate IDAnother gift in the pull has the same ID; we keep the first. (Shown once the gifts are imported.)

Skipped gifts aren't counted in any pyramid. Choose Download skipped IDs for a CSV of your CRM's own record IDs and the reason for each — for example a file named bloomerang-skipped-gifts-2026-10-27.csv with the columns bloomerang_transaction_id,reason. Look the records up in your CRM, fix them there, and refresh.

Records that aren't gifts received — soft credits, schedules, failed or canceled donations, write-offs, full refunds — are left out without being listed, because there's nothing to fix.

The pull summary

Every pyramid built from a CRM shows a summary card near the top: “Pulled from Bloomerang · Oct 27, 2:14 AM · 38,412 gifts read · 9 skipped”, with the skip reasons, Download skipped IDs (“CSV of Bloomerang transaction IDs”), any notes, and “Also listed under Uploads”. Hide hides the card in your browser until the next pull. The same summary is on the pull's page in Uploads, which you can reach from the card's Uploads link.

Times are shown in US Eastern time. The card also shows, when they apply:

  • Refreshing from your CRM, with progress, while a refresh runs. “This pyramid keeps its current numbers until the new gifts are in, then rebuilds.”
  • The last refresh from (CRM) didn't finish, with the reason and the date the pyramid's data is from — see When a pull or sync fails.
  • New gift types need a match — see below.

Refresh from your CRM

Refresh from your CRM is in the row of buttons at the top of every pyramid built from a CRM, and on the pull's page in Uploads. It's free on every plan.

A refresh pulls the whole date range again with the same fields, then swaps the new gifts in for the old ones in one step. The pyramid keeps its current numbers until the new gifts are in; then every pyramid built from that pull rebuilds. With Plus, each rebuilt pyramid also gets a history snapshot, so you can see what the refresh changed.

  • The button reads Refreshing from … and is disabled while a refresh runs; a second one isn't started until it finishes.
  • You can leave the page; the refresh keeps going.
  • If the refresh brings back no gifts at all, it stops and your pyramids keep their current gifts.
  • If your CRM has signed TruePyramids out or was disconnected, the button reads Reconnect (CRM) to refresh.

Tip: to change the date range or fields, start a new pull from Upload new file and build from it. A refresh always reuses the original choices.

New gift types after a refresh

If a refresh finds a type value you haven't matched — a new record type in Salesforce, say — its gifts are kept but not counted until you match it. The pyramid shows “1 new gift type from (CRM) needs a match.” with Match it, and the pull's page shows New gift types need a match. Choose a type and Save matches and rebuild.

Scheduled sync Plus

With Plus, TruePyramids refreshes from your CRM for you. In Settings › Data, each connected CRM has a Schedule:

Off
No scheduled sync. Refresh and Sync now still work.
Nightly
Every night at 2:00 AM Eastern.
Weekly
Once a week at 2:00 AM Eastern, on the Day you choose (Monday unless you change it).

The schedule saves as soon as you change it (“Schedule saved.”). Under it you see the last and next sync, such as “Last sync Oct 27, 2:06 AM · Next sync Oct 28, 2:00 AM”. On the night the clocks go forward, 2:00 AM doesn't exist, so that night's sync runs at 3:00 AM.

A sync refreshes every imported pull from that CRM, one after another, and every pyramid built from them rebuilds — the same as choosing Refresh on each one. If your CRM fails partway, the sync stops there, since the rest would fail the same way.

Example: when the next sync runs

On Thursday, Oct 29, 2026 at 3:00 PM you set Raiser's Edge NXT to Weekly on Tuesday. The next sync is Tuesday, Nov 3, 2026, 2:00 AM Eastern. Set to Nightly instead, it would be Friday, Oct 30, 2:00 AM.

Without Plus, the Schedule menu is locked at Off with a Plus tag, and Settings says “Scheduled sync is part of Plus. Sync now stays free, and so does Refresh on each pyramid.” If your organization's Plus ends, schedules are turned off; Refresh and Sync now keep working. See upgrading to Plus.

Sync now

Sync now, beside each connection in Settings › Data, runs a sync straight away on any plan: “Sync started. Every pyramid built from it rebuilds when it finishes.” If nothing has been pulled from that CRM yet, it just checks that the connection still works.

When a pull or sync fails

If your CRM can't be reached, rejects the key, or signs TruePyramids out, the pull stops and your pyramids keep their last good data. You'll see why in three places:

  • Settings › Data: a banner on the connection — “Last sync failed Oct 24, 2:00 AM: Bloomerang rejected the API key.” and “Your pyramids still show data from Oct 23, 2026.” — with Reconnect.
  • Each pyramid built from the CRM: “The last refresh from (CRM) didn't finish”, the reason, and the date its data is from, with Reconnect when that's what's needed.
  • The pull's page in Uploads: “The last refresh didn't finish.”

When a scheduled sync fails, we also email the person who connected the CRM (if they're still on your team), with the subject “(CRM) sync didn't finish for (organization)” and a link to Settings › Data. We send it once per run of failures, not every night; the banner then says “We emailed (name), who connected (CRM).” A failed Refresh or Sync now isn't emailed — you see it on the page.

The banner clears after the next successful pull.

Reconnecting

Choose Reconnect (in Settings › Data, on a pyramid, or on the pull's page). You'll see the connect page with “(CRM) is already connected. A new key replaces what we have; pyramids built from it keep their gifts.” Paste a new key, or sign in again, then use Refresh or Sync now. Reconnecting from Settings brings you back there with “Connected. Pyramids built from it can refresh again.”

Whoever reconnects becomes the person who connected the CRM, so failure emails go to them from then on.

Salesforce: what to know

  • NPSP or Nonprofit Cloud. We look at your org's objects: if it has Nonprofit Cloud (or Education Cloud) fundraising, we read Gift Transactions; otherwise, with the Nonprofit Success Pack, we read Opportunities. An org that has both is read as Nonprofit Cloud. An org with neither can't connect: “neither NPSP nor Nonprofit Cloud fundraising objects were found in this org.”
  • NPSP gifts are won opportunities, plus open opportunities in the Pledged stage as pledges. Opportunities with a $0 amount are left out. The type is the opportunity's record type (Donation, Major Gift, Grant…); installments of a recurring donation come in as “Recurring Donation”.
  • Households. In NPSP the constituent ID is the opportunity's account — usually the household account for individual donors, or the organization account. Pyramids built from Salesforce therefore count households, which can differ from a file exported with contact IDs.
  • Nonprofit Cloud gifts are Paid gift transactions, credited to the donor account, net of refunds.
  • Staying connected. Salesforce gives TruePyramids a new refresh token every time it renews access and retires the old one; we save each new one, so there's nothing for you to do. But Salesforce signs TruePyramids out after 30 days without a sync or refresh. A nightly or weekly schedule keeps it connected; otherwise, refresh at least once every 30 days, or reconnect when asked.
  • API limits. Every Salesforce org has a daily API allowance. If it's used up, you'll see “Salesforce refused access, or its daily API limit is used up.” Try again the next day.

Raiser's Edge NXT: what to know

  • Constituent lookup ID. Gifts are credited to the constituent's lookup ID — the Constituent ID your staff see in Raiser's Edge — not Blackbaud's internal system ID. A constituent without a lookup ID gets system: plus the system ID, so it can't clash with a real lookup ID. Inactive and deceased constituents are included.
  • Subscription. TruePyramids uses its own Blackbaud SKY API subscription, so you don't need one. An administrator may need to approve TruePyramids in the Blackbaud Marketplace first.
  • Limits. Blackbaud allows 10 API calls a second, which we stay under automatically, and limits calls per day. A very large pull can hit the daily limit: “Raiser's Edge NXT refused access, or its daily API limit is used up.” Try again the next day.
  • Staying connected. Blackbaud renews TruePyramids' access each time it's used, and we save each renewal. If Blackbaud ever stops accepting it, you'll be asked to reconnect.
  • Left out: recurring gift schedules (their payments come in), sold stock (the stock gift itself is counted), and write-offs.

Managing connections in Settings › Data

Settings › Data lists your Connected CRMs. For each one:

  • Who connected it and when, and how many pyramids use it: “Connected Oct 20, 2026 by Alex Rivera · used by 3 pyramids”.
  • Schedule and Day (Plus), and Sync now.
  • The last and next sync, or “Not synced yet”.
  • The failure banner with Reconnect, when the last pull failed or the CRM signed TruePyramids out.
  • Disconnect, for the owner.

The pulls themselves are listed with your other uploads, under Uploads on the same page and in Uploads.

Disconnecting

The owner can choose Disconnect, then confirm: “Disconnect (CRM)? Pyramids built from it keep their data but can't be refreshed until you reconnect.” Disconnecting deletes the saved key or sign-in. Your pulls and pyramids stay as they are; refreshes and syncs stop, and pyramids show Reconnect (CRM) to refresh. Connect the same CRM again later and every pull from it can refresh again.

To revoke TruePyramids completely, also delete the API key in your CRM, or remove TruePyramids' access in Salesforce or Blackbaud.

Note: to swap a working API key for a new one, the owner disconnects and connects again with the new key. Nothing is lost.

Who can do what

ActionWho
Connect or reconnect a CRMAnyone on the team
Pull gifts, Refresh, Sync nowAnyone on the team
Set a scheduleAnyone on the team, with Plus
Disconnect a CRMThe owner
Delete a pull and the pyramids built from itThe owner, or whoever started the pull if no teammate's pyramid is built from it

See owners and members and deleting.

Per-CRM reference

BloomerangDonorPerfectLittle Green LightNeon CRMSalesforceRaiser's Edge NXT
Connects withAPI keyAPI keyAPI keyOrg ID + API keySign-inBlackbaud sign-in
Where the key comes fromUser icon › Edit My UserDonorPerfect API Help Desk or supportSettings › Integration Settings › LGL APIUser settings (user needs Read Donation); Org ID in Settings › Organization Profile——
Constituent IDAccount IDDonor IDConstituent IDAccount IDAccount (household or organization)Lookup ID
RefundsNettedAdjusted amountNot reported by LGLFull refunds left out; partial kept at full amountNettedNot reported; amounts as-is
Split giftsOne gift (one per type if types differ)One gift, full amountEach part is its own giftNo splitsOne gift, full amountOne gift, full amount
Planned gifts matchedNoNoNoNoNonprofit Cloud onlyYes
Gift estimate before pullingAll history onlyYesYesYesYesYes
Custom fields fromTransaction custom fieldsGift user-defined fieldsGift categoriesDonation custom fieldsOpportunity or Gift Transaction fieldsGift custom field categories
Signed out after inactivity————30 days without a sync or refresh—

Troubleshooting

Connecting

MessageWhat to do
Paste the whole API key.The key is too short (or too long) to be a key. Copy it again, all of it.
Enter your Neon CRM organization ID too.Neon needs both the organization ID and the key.
We couldn't connect (CRM): (CRM) rejected the API key … Nothing was saved.The key is wrong, was deleted, or belongs to a user without access. Create a new key in your CRM and try again.
The sign-in took too long, or was started in another tab. Sign in to (Salesforce or Blackbaud) again.Start again and finish the sign-in within 15 minutes, in the same tab.
You didn't approve access in (Salesforce or Blackbaud), so nothing was connected.Sign in again and choose to allow access.
(CRM) didn't finish the sign-in. Try again, or ask your (CRM) administrator to check TruePyramids' access.Your administrator may need to allow TruePyramids (Salesforce) or approve it in the Blackbaud Marketplace (Raiser's Edge NXT).
Salesforce signed in, but we couldn't read gifts from it: … neither NPSP nor Nonprofit Cloud fundraising objects were found in this org.The account you signed in with can't see NPSP or Nonprofit Cloud gift records. Sign in with an account that can.

Pulling and refreshing

MessageWhat to do
(CRM) signed TruePyramids out. Reconnect it to pull gifts.Reconnect. For Salesforce this happens after 30 days without a sync or refresh.
We couldn't read (CRM)'s fields. …The field list couldn't be loaded. The reason follows; usually Reconnect or try again later.
Choose a start date on or before today.From a date needs a date, and it can't be in the future.
We couldn't pull gifts from (CRM) — (CRM): No gifts in the chosen date range could be used.Nothing in the range could be imported. Choose a longer range, or check the skipped records. Nothing from this pull was kept; choose Try again.
(CRM): No gifts came back for the date range, so your pyramids keep their current gifts.A refresh found nothing. Check the CRM connection's user can still see gifts.
(CRM) rejected the API key. / (CRM) rejected TruePyramids' sign-in.Reconnect with a new key, or sign in again.
(CRM) refused access, or its daily API limit is used up.Wait a day and refresh, or check the connected user's permissions.
We couldn't reach (CRM).Your CRM didn't answer. Try again later.
The saved (CRM) credentials can't be read any more. Reconnect (CRM) to pull again.Reconnect.
(CRM) isn't connected. Reconnect it in Settings › Data to pull again.The connection was disconnected. Connect it again.
Neon CRM: Neon's donation search offers no searchable donation date field, so a date range can't be applied.Pull with All history instead.
Something went wrong pulling the gifts. Please try again.Try again. If it keeps happening, email support@truepyramids.com.

The numbers don't match my CRM's reports

  • Date range. The pull covers only its range — “Last 5 years” by default.
  • Left-out records. Soft credits, schedules, open opportunities outside the Pledged stage, failed and refunded gifts aren't counted; your CRM's report may include some of them.
  • Pledges. Pledges are pulled but never count as money received; their payments do.
  • Skipped records. Check the skipped count and download the IDs.
  • Unmatched new types. Gifts with a type that still needs a match aren't counted.
  • Households. Salesforce gifts are credited to accounts, so constituent counts are households.

Advanced: field mappings and API limits

Exact field mappings

CRMRead fromMapping details
BloomerangREST API v2 transactions, newest first; refunds for refunded transactionstransactionid = transaction Id (Id:Type when a transaction's designations have different types) · constituentid = AccountId · date = Date · amount = Amount (the sum of each type's designations when split by type) · type = designation Type · fund, campaign, appeal from the designations; payment method from the transaction's Method
DonorPerfectXML API SELECT on gift records (DPGIFT) and gift user-defined fields (DPGIFTUDF) onlytransactionid = gift_id · constituentid = donor_id · date = gift_date · amount = amount (a pledge's total for P records) · type = record_type, with G records marked “(pledge payment)” or “(recurring payment)” when linked to a pledge · code fields shown by their DonorPerfect code description when available
Little Green LightAPI v1 gift search, oldest created firsttransactionid = id · constituentid = constituent_id · date = received_date · amount = received_amount · type = gift type name, plus “ / category” when the gift has a category · fund, campaign, appeal, event and payment type names
Neon CRMAPI v2.12 donation search, asking only for non-personal output fieldsField names are found in your Neon account when you connect: Donation ID, Account ID, Donation Date, Donation Amount, Donation Type (or close variants). “(Recurring)” or “(In-Kind)” is added to the type when Neon marks the donation recurring or its payment method in-kind
Salesforce NPSPREST API (v68.0) SOQL on Opportunity; GAU allocations for fundstransactionid = Id · constituentid = AccountId · date = CloseDate · amount = Amount · type = StageName for open pledges, “Recurring Donation” for recurring installments, else RecordType name, else Type · payment method from paid payments · campaign = Campaign name
Salesforce Nonprofit CloudSOQL on GiftTransaction where Status = Paid; designations for fundstransactionid = Id · constituentid = DonorId · date = TransactionDate · amount = OriginalAmount − RefundedAmount · type = Planned Gift (commitment has a gift vehicle or planned gift), In-Kind (payment method), “(schedule type) Commitment”, Commitment, or One-Time
Raiser's Edge NXTSKY API Gift v1; constituent lookup IDs and fund, campaign and appeal names looked up in batchestransactionid = gift id · constituentid = lookup ID · date = gift date · amount = amount · type = gift type · payment method from the gift's payments

API limits and paging

CRMPage sizeLimits we work within
Bloomerang50 transactionsNo published rate limit. There's no gift-date filter, so we read newest first and stop at the first gift older than your range.
DonorPerfect500 rowsDonorPerfect returns at most 500 rows per call; no published rate limit.
Little Green Light100 gifts300 calls per 5 minutes.
Neon CRM200 donationsOne donation search at a time per Neon organization; we wait our turn.
SalesforceUp to 2,000 recordsYour org's daily API request allowance.
Raiser's Edge NXTUp to 5,000 gifts10 calls per second (we space our calls) and a daily call quota.

When a CRM answers “too many requests” or is briefly unavailable (HTTP 429, 502, 503 or 504), we wait — as long as the CRM asks, or 1, 2, 4… seconds up to a minute — and try again, up to six times, before the pull fails. Each request can take up to five minutes.

Automatic matches and your matches

For each type value, the Counts as menu shows the type your CRM's records with that value most often have. While a match is automatic, each record keeps the type its CRM gave it — so Bloomerang donations paid in kind stay In-kind even though the Donation row shows One-time. Once you change a match yourself, your choice applies to every record with that value, on this pull and every refresh. Values that disappear from a later refresh are dropped from the list unless you matched them yourself.

IDs and counting

  • IDs over 100 characters can't be stored; those records are skipped as Missing ID.
  • Transaction and constituent IDs are compared ignoring capital letters, as in uploaded files.
  • “Gifts read” on the pull summary counts the gifts we received plus the records skipped; “skipped” there also includes duplicate IDs.
  • Each refresh keeps the skipped list of the latest finished pull only.
  • A pull is stored like an upload, with no file: the raw data from your CRM isn't kept, only the gifts and the fields you chose.

Questions

Does TruePyramids change anything in my CRM?

No. It only reads gifts and the fields you choose. Nothing is ever written back.

My CRM isn't listed. What can I do?

Export your gifts to CSV or Excel and upload the file. It works with any CRM, as long as the file has a transaction ID, constituent ID, date, amount and type.

Can my teammates see our API key?

No. Keys are encrypted and never shown again to anyone, including the person who pasted it. Teammates use the connection without seeing it.

How often should I refresh?

Whenever you want current numbers — before a board meeting, say. Refresh is free. With Plus, a nightly or weekly schedule keeps pyramids current without anyone remembering, and for Salesforce it also keeps the connection from timing out after 30 days.

Does a refresh only bring new gifts?

No — it pulls the whole date range again and replaces the old gifts, so corrections, deletions and refunds made in your CRM are picked up too.

How do I fix skipped records?

Choose Download skipped IDs, look each ID up in your CRM, and add the missing constituent, date or amount there. Then refresh.

Why don't my pledges count toward giving?

A pledge is a promise, not money received. Pyramids count pledge payments as they arrive, so the pledge isn't counted twice.

Why does Neon CRM show a note about partial refunds?

Neon's API doesn't tell us how much of a donation was refunded, so a partly refunded donation is counted at its full amount. Fully refunded donations are left out.

Why are there fewer constituents from Salesforce than in my contact list?

NPSP credits individual gifts to the household account, and that's the constituent ID we use, so family members who give are one constituent.

Salesforce keeps signing TruePyramids out. Why?

Salesforce ends access that hasn't been used for 30 days. Refresh at least once a month, or set a nightly or weekly schedule with Plus, and it stays connected.

Can I pull two different date ranges from the same CRM?

Yes. Each pull is its own upload with its own range and fields, and each can feed its own pyramids. Sync now and scheduled syncs refresh all of them.

Can I bring wealth-screening ratings from my CRM?

Not through a connection. Capacity ratings come only from the optional capacity column in an uploaded file.

If we disconnect, do our pyramids disappear?

No. Pyramids and the gifts they're built from stay. They just can't be refreshed until someone connects the CRM again. Deleting the pull itself is what deletes its pyramids.

Who gets the email when a sync fails?

The person who connected (or last reconnected) the CRM, if they're still on your team. Only scheduled syncs send email, once per run of failures; everyone sees the banner in Settings › Data.

Can a member disconnect a CRM?

No, only the owner. Members can connect, reconnect, pull, refresh and use Sync now.