# Fundraise Up

The Fundraise Up integration copies donations and recurring plans from your Fundraise Up account into Allegro and matches them to audience members by email address. Each matched member gets a donor profile: whether they give once or on a schedule, how much and how often, and the state of each recurring plan.

Allegro receives new activity through a Fundraise Up webhook as it happens, and can read your full history with a backfill.

Turn on the **Fundraise Up** package under **Organization Settings → Packages** first. The settings page then appears at **Organization Settings → Fundraise Up**, and each property gets a **Fundraise Up** page in its own settings.

## Connect an API key[​](#connect-an-api-key "Direct link to Connect an API key")

1. In Fundraise Up, go to **Settings → API keys** and create a key with these permissions:

   | Section                                    | Data type                          | Permission |
   | ------------------------------------------ | ---------------------------------- | ---------- |
   | **Test data** (test mode) or **Live data** | **Donations**, **Recurring plans** | Read       |
   | **Live data**                              | **Campaigns**                      | Read       |

   Fundraise Up only has live campaigns, so a key used in test mode still needs Read for Campaigns under **Live data**. Allegro uses campaigns to find the key's accounts and to list campaigns for the filter.

2. In Allegro, open **Organization Settings → Fundraise Up** and paste the key into **API key**.

3. Turn on **Test mode** if the key is for Fundraise Up's test data rather than live donations.

4. Click **Save changes**.

Allegro checks the key's permissions with Fundraise Up before saving it. If a permission is missing, the error under the field names it and nothing is saved. If Fundraise Up is busy, try again in a minute.

The key is write-only: after saving, the field shows that a value is stored but never shows the key itself. Enter a new key to replace it, or click **remove it** to delete it on the next save.

note

After a new key is saved, Allegro finds the Fundraise Up accounts it covers in the background. If the key's account has no campaigns yet, the page says so and no donations match until it has one. Every backfill checks the accounts again, so run **Sync now** after the account creates its first campaign.

## Choose campaigns[​](#choose-campaigns "Direct link to Choose campaigns")

By default every campaign counts. To count only some of them, open **Campaigns** and pick the campaigns to include. Donations and plans to other campaigns are still stored, but they do not appear in donor profiles.

The campaign list loads from Fundraise Up after the page opens. If Fundraise Up cannot be reached, the campaigns you already saved are listed by ID so you can still remove them.

## Create the webhook in Fundraise Up[​](#create-the-webhook-in-fundraise-up "Direct link to Create the webhook in Fundraise Up")

The **Webhook** section shows the URL Fundraise Up should call. Click **Copy** to copy it.

1. In Fundraise Up, go to **Settings → Webhooks** and create a webhook.
2. Paste the URL from Allegro.
3. Subscribe to the **donation** and **recurring plan** events.
4. Copy the signing secret Fundraise Up shows, paste it into **Signing secret** in Allegro, and click **Save changes**.

Allegro rejects any webhook it cannot verify with the signing secret, so webhooks do nothing until the secret is saved.

The URL uses your organization's canonical domain, for example `https://members.acme.com/api/webhooks/fundraiseup`. If you add or change a custom domain, the URL on this page changes with it. Update the webhook in Fundraise Up to match.

Fundraise Up disables failing webhooks

Fundraise Up turns a webhook off after 48 hours of failed deliveries, and Allegro cannot see that. The **Last webhook** time in the Sync section is your signal: if it stops moving while donations are coming in, check the webhook in Fundraise Up.

## Properties[​](#properties "Direct link to Properties")

Each property chooses where its Fundraise Up data comes from on its own **Fundraise Up** settings page.

| Mode        | What it does                                                                                                                                                                                    |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Inherit** | Uses the organization's connection. This is the default. The page shows the organization's webhook URL and sync status.                                                                         |
| **Custom**  | Uses the property's own API key, campaigns and webhook. The page shows the same Connection, Webhook and Sync sections as the organization page, and the webhook URL uses the property's domain. |
| **Off**     | Takes no Fundraise Up data for the property.                                                                                                                                                    |

A property on its own connection keeps its donor profiles separate from the organization's. A property that inherits reads the organization's profiles.

## Sync and backfill[​](#sync-and-backfill "Direct link to Sync and backfill")

The **Sync** section shows:

* when the last webhook arrived,
* the status of the latest backfill, when it started or finished, how many donations and recurring plans it read, and its error if it failed,
* the newest 25 log entries, with a link to the member each entry matched.

Click **Sync now** to read every donation and recurring plan from Fundraise Up again. Use it after connecting a key for the first time. Changing campaigns or a property's connection rebuilds donor profiles on its own, without a sync. The page updates while the sync runs.

Switching **Test mode** starts a full backfill of the new mode on its own and clears the donations and plans Allegro stored for the old mode, unless another connection still reads them. Donor profiles are rebuilt when the backfill finishes, so members only have test or only live data, never both.

**Sync now** runs once every 15 minutes per connection and is disabled while a sync is running. The section says when you can use it again.

A backfill reads Fundraise Up a page at a time and respects Fundraise Up's rate limit, so a large account can take a while. If it stops partway, the next run resumes where it left off.

note

Your engineering team can also run a backfill from the command line with `php artisan fundraiseup:backfill`, optionally limited to one connection (`org` or a property slug) and to records created since a date with `--since`.

## Donor profile fields[​](#donor-profile-fields "Direct link to Donor profile fields")

Only succeeded, unrefunded donations count toward amounts, counts and dates. Amounts are in the account's default currency.

| Field                           | Description                                                                                                                                                                      |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `donor_status`                  | `recurring` when any plan is active, scheduled, retrying or paused; `lapsed` when the member has plans and none are live; `one_time` when the member has donations and no plans. |
| `donation_type`                 | The live plan's frequency, such as `monthly`, otherwise `one_time`.                                                                                                              |
| `first_donation_at`             | The date of the member's first counted donation.                                                                                                                                 |
| `last_donation_at`              | The date of the member's most recent counted donation.                                                                                                                           |
| `last_donation_amount`          | The amount of the most recent counted donation.                                                                                                                                  |
| `lifetime_amount`               | The total of all counted donations.                                                                                                                                              |
| `donation_count`                | The number of counted donations.                                                                                                                                                 |
| `currency`                      | The currency the amounts are in.                                                                                                                                                 |
| `recurring_amount`              | The amount of the most recently started live plan.                                                                                                                               |
| `recurring_started_at`          | When that plan started.                                                                                                                                                          |
| `recurring_next_installment_at` | When that plan charges next.                                                                                                                                                     |
| `recurring_ended_at`            | When the member's last plan ended, if none is live.                                                                                                                              |
| `cancellation_reason`           | Why that plan ended, if Fundraise Up recorded a reason.                                                                                                                          |
| `plans`                         | Every recurring plan for the member, keyed by plan ID, with its status, frequency, amount, currency, campaign and dates.                                                         |
| `account_ids`, `supporter_ids`  | The Fundraise Up account and supporter IDs the profile was built from.                                                                                                           |
| `livemode`                      | Whether the profile comes from live or test data.                                                                                                                                |
| `synced_at`                     | When Allegro last rebuilt the profile.                                                                                                                                           |

A member with no counted donations and no plans has no Fundraise Up profile.

## Known gaps[​](#known-gaps "Direct link to Known gaps")

* **Plan endings arrive with the next backfill.** Fundraise Up does not send webhooks when a plan fails, completes or pauses, so those changes appear after the next backfill.
* **Email changes in Fundraise Up.** When a supporter changes their email in Fundraise Up, their next donation matches the member with the new email. Earlier donations stay with the old member, and a backfill does not move them.
* **Shared rate limit.** Two keys on the same Fundraise Up account share Fundraise Up's rate limit. Their backfills slow down and retry rather than run side by side.
* **Disabled webhooks.** Allegro cannot tell when Fundraise Up turns a webhook off. Watch the **Last webhook** time.
