DOCS

Zapier integration

Requires: Fundations Pro 1.1.0+

Connects Fundations to Zapier using a dynamic subscription model. Zapier subscribes and unsubscribes to event triggers automatically when you activate or deactivate a Zap. No manual webhook URLs are copied between sites.

Zapier settings api key

Why use it

Zapier connects to over 5,000 apps with a no-code interface. If you want to send donation data to Google Sheets, post a Slack message on every donation, or create Trello cards for new fundraisers, Zapier provides the bridge without writing code.

How it works

The Zapier integration differs from the webhook integration. Rather than copying a URL into Zapier, Zapier subscribes to your site via a REST API when you set up a Zap and unsubscribes when you turn the Zap off.

Your site exposes three REST endpoints:

MethodEndpointPurpose
POST/wp-json/get-fund/v1/integrations/zapier/subscribeZapier calls this when a Zap is activated
DELETE/wp-json/get-fund/v1/integrations/zapier/unsubscribeZapier calls this when a Zap is deactivated
GET/wp-json/get-fund/v1/integrations/zapier/sample/{trigger}Zapier calls this to load sample data for field mapping

All requests require authentication via the X-Get-API-Key header or an api_key query parameter. The key is generated automatically and shown in the integration settings.

If Zapier returns HTTP 410 (Gone) for a subscription, it is automatically deleted from your site. This happens when a Zap is turned off or deleted in Zapier.

Supported triggers

Trigger keyFires when
action_createdA new fundation is published
action_updatedA fundation is edited
action_completedA fundation reaches its goal
donation_receivedA donation is confirmed (requires marketing consent)
donation_failedA donation payment fails
user_registeredA new user registers via the wizard
campaign_joinedA user joins a campaign
team_createdA new team is created
milestone_reachedA fundation hits 25%, 50%, or 75% of its goal

How to set it up

On your WordPress site

  1. Navigate to Fundations Pro → Integrations → Zapier.
  2. Copy the API Key shown on the page. Keep this key secure.
  3. Enable the integration.
Zapier copy api key

In Zapier

  1. Go to zapier.com and click Create Zap.
  2. For the trigger, search for Fundations or use the Webhooks by Zapier app with Catch Raw Hook as the event type if a native Fundations app is not listed.
  3. When prompted for authentication, enter your site URL and paste the API key.
  4. Zapier will subscribe to the endpoint automatically. It will also fetch sample data so you can map fields in the next step.
  5. Choose your Action app (Google Sheets, Slack, etc.) and map the fields from the Fundations payload.
  6. Turn on your Zap.

Repeat from step 4 for each trigger event you want to automate.

Regenerating the API key

The settings page includes a Regenerate button next to the API key. Regenerating the key deletes all existing Zapier subscriptions immediately. Any active Zaps will stop receiving data until you reconnect them with the new key.

Payload format

Zapier receives a flat JSON object. All keys use underscores. The payload does not contain nested sub-objects.

{
  "_trigger": "donation_received",
  "_timestamp": "2026-06-12T10:00:00+00:00",
  "donation_id": 123,
  "donation_amount": 50.0,
  "donation_currency": "EUR",
  "donor_email": "jan@example.com",
  "donor_first_name": "Jan",
  "donor_last_name": "de Vries",
  "action_id": 456,
  "action_title": "Spring Fundraiser",
  "marketing_consent": true
}

Note: _trigger and _timestamp are prefixed with an underscore to distinguish them from data fields.

See Integration index: Data Payload for the full list of available fields.

What you can and cannot do

You can connect to any of the 5,000+ apps on Zapier, create multiple Zaps for different trigger events, use Zapier’s filtering and conditional logic to narrow when actions run, and map any flat field from the Fundations payload to Zapier action inputs.

There are a few limitations. A donation where the donor did not give marketing consent will not fire the donation_received trigger. A single Zap cannot subscribe to multiple trigger types. The API key is used for subscribing only, not for payload delivery, so no authentication is added to outgoing payloads. Subscriptions cannot be recovered automatically after an API key regeneration.

Examples

Zap triggerZap actionResult
donation_receivedGoogle Sheets: Create RowA new row with donor and amount details
donation_receivedSlack: Send MessageA message in your #donations channel
action_createdTrello: Create CardA card for the new fundraiser
action_completedGmail: Send EmailA congratulations email to the creator
milestone_reachedTwilio: Send SMSAn SMS alert to your team

Troubleshooting

ProblemLikely causeFix
Zapier cannot authenticateWrong API key or site URLConfirm the key from the settings page and your site’s REST API URL
Zap not receiving data after setupIntegration not enabledEnable the integration on the settings page
No data for donation_receivedDonor did not give marketing consentConfirm the donation form shows a consent checkbox and the donor checked it
All Zaps stopped workingAPI key regeneratedRe-enter the new key in each Zapier connection
Sample data fetch returns emptyNo events of that type have occurred yetMake a test donation (or create a fundation, etc.) before loading sample data in Zapier
Subscriptions not deleted when Zap turned offZapier returned 410 and cleanup ranThis is normal; check Sync Logs for confirmation

Developer reference

REST endpoint authentication

All three Zapier REST endpoints require the API key stored in get_fund_integration_api_key (WordPress option).

POST /wp-json/get-fund/v1/integrations/zapier/subscribe
Headers: X-Get-API-Key: <api_key>
Body: { "hookUrl": "https://hooks.zapier.com/...", "trigger": "donation_received" }

DELETE /wp-json/get-fund/v1/integrations/zapier/unsubscribe?id=<subscription_uuid>
Headers: X-Get-API-Key: <api_key>

GET /wp-json/get-fund/v1/integrations/zapier/sample/donation_received
Headers: X-Get-API-Key: <api_key>

Filtering outgoing data

add_filter( 'get_fund_integration_trigger_data', function( $data, $trigger, $object_id ) {
    // Add a custom field to the Zapier payload
    if ( $trigger === 'donation_received' ) {
        $data['custom_project_code'] = get_post_meta( $data['action_id'], '_project_code', true );
    }
    return $data;
}, 10, 3 );

See Integration index developer reference for all filter signatures.