Перейти к основному содержимому

Donorbox

If your church takes donations through Donorbox but tracks people and statements in B1, you can have Donorbox's instant Zapier triggers create matching donation records inside B1 — and create the donor as a B1 person if they don't already exist. No manual reconciliation, no monthly export.

Before You Begin

  • A Donorbox account with at least one campaign
  • A Zapier account
  • A B1Admin user with Edit Settings permission

What You Can Wire Up

DirectionDonorbox triggerB1 action
Donorbox → B1New or Updated Donation (instant)Find Person → Add Donation
Donorbox → B1New or Updated DonorCreate Person
Donorbox → B1New or Updated Plan (recurring)Find Person → Add Donation (use Plan id as note)

Donorbox publishes its triggers as instant — they fire within seconds of a real donation. No polling delay.

Setup

1. Mint a B1 API key

In B1Admin: Settings → Developer → API Keys → New API Key. Scopes:

  • people:read — to look up the donor by email
  • people:write — to create them if they're new
  • donations:write — to record the gift

Triggers in this direction are Donorbox's, not B1's, so you don't need settings:write here.

2. Build the "record a donation" Zap

  1. Trigger — Donorbox: New Donation. Connect with Donorbox's API key (in Donorbox: Account → Profile → API Settings).
  2. Action — B1.church: Find Person. Map the donor's email from the trigger to the Email search field.
  3. Action — Filter by Zapier (optional): only continue if the donor wasn't found, then…
  4. Action — B1.church: Create Person. Map first/last/email so the donor lands as a member, not just a gift record.
  5. Action — B1.church: Add Donation. Map:
    • Amount → data.amount
    • Donation Date → trigger's donation date
    • Fund → pick the B1 fund that mirrors the Donorbox campaign (Zapier lets you switch funds based on a filter or formatter step)
    • Method → "Online"
    • Notes → Donorbox transaction id (handy when reconciling)

Turn the Zap on. The next live donation through Donorbox lands in B1Admin → Donations automatically.

Common Recipes

One Zap per fund

If you run multiple Donorbox campaigns that map to separate B1 funds, the cleanest layout is one Zap per campaign with a Donorbox campaign filter at the top — that way the fund mapping is hard-coded and you skip the lookup step.

Treat updated donations as corrections

Donorbox's New or Updated Donation fires on edits too. Use a Zapier Path step on event_type to fork: "new" → Add Donation, "updated" → Find Donation + Update (note: B1's Zapier app does not currently have an Update Donation action — for now, log "updated" events to a Slack channel for manual review).

Sync recurring plan changes to a Slack channel

  • Trigger — Donorbox: New or Updated Plan
  • Action — Slack: Send Message to #donations (e.g. "Plan changed — Sarah's monthly gift is now $200")

Limits & Notes

  • Match donors by email. Donorbox doesn't share B1's person id; the only durable join key is email. Donors who give under a different email will create a new B1 person — your monthly reconciliation should look for these.
  • Refunds aren't separately exposed — Donorbox emits a status update on the same donation. B1's Zapier app currently doesn't have an Update Donation action; the safe pattern today is to log refund events out-of-band and adjust the donation manually.
  • Test in Donorbox's sandbox first to avoid creating fake gifts in production B1. Donorbox provides test mode credentials separate from live.

Troubleshooting

  • "Person not found" warning every run — that's fine if you've ordered the steps so a Create Person runs in the not-found branch. If the Create Person step never runs either, double-check the API key has people:write.
  • Donation amount looks 100× too big or small — Donorbox sends cents in some payload variants and dollars in others. Use a Formatter by Zapier — Numbers step to divide by 100 if needed.
  • Duplicate donations from a single gift — Donorbox fires both New Donation and Updated Donation. Either filter to event_type = "donation.succeeded" or build two Zaps with non-overlapping filters.

See Also