Skip to main content

WeGive: Native Webhook Setup (No Zapier Required)

Trigger LettrLabs mail directly from a WeGive Journey via Webhooks — no Zapier account needed.

A
Written by Adam Rutkowski

WeGive's own Journeys feature can send donor and transaction data straight to a LettrLabs Webhook, without Zapier. This is a good fit if you're processing a high volume of donations or picking up lots of new donors, since Zapier's per-task pricing can add up fast at that scale.

Before you start

  • A LettrLabs Open API key and an inbound webhook connection (see Setup Guide: Open API & Webhooks if you haven't set these up yet).

  • A WeGive user with access to Communications > Journeys.

  • Knowing which trigger event should start the journey — New Donor and New Transaction are the two most common starting points.

Step 1: Create your LettrLabs webhook connection

  1. In LettrLabs, go to Automations and create a new Webhooks Automation (or open an existing one you want to feed from WeGive).

  2. Generate an Open API key for the connection and copy the generated Webhook URL — this is what you'll select as the destination inside WeGive in Step 2.

  3. Turn on authentication if you want extra protection on the endpoint, and note the header value for Step 2.

Step 2: Create the Journey in WeGive

  1. In the left-hand navigation, go to Communications, then choose Journeys from the submenu.

  2. Create a new journey and choose a trigger event — the event that starts the journey, such as New Donor or New Transaction.

  3. Set up your event rule groups. This is where you define exactly which records qualify to enter the journey based on the trigger — for example, only transactions over a certain amount, or only donors matching a certain audience. This is also where any amount-based filtering needs to happen (see the callout below).

  4. Once your trigger and rule groups are set, go to Advanced within the journey and choose Webhook.

  5. Set the Destination URL to the LettrLabs webhook URL you copied in Step 1, and set Content Type to JSON.

  6. If you turned on authentication in Step 1, add the API key under Headers.

Rule of thumb: if the filter is a numeric comparison (greater than, less than, a range), do it in WeGive's event rule groups. If it's a straightforward match on a category (recurring/one-time, campaign name, fund, etc.), pass it in the request body and filter on it with LettrLabs' Inbound Filters.

Step 3: Build the Request Body

In the Webhook step's Request Body, build a single JSON object with the fields LettrLabs needs. Don't hand-type variable names — click into the Request Body field and type @ to open WeGive's variable picker, then select each field so it inserts the correct token automatically. Include:

  • First name and last name

  • Full mailing address

  • Transaction amount, if you want it for personalizing the letter (this is for personalization, not for filtering — see the callout above)

  • Any other data point you want to use as a filter on the LettrLabs side, such as giving frequency or campaign

A generic example, using the fields most setups need — first name, last name, address, amount, and frequency:

{
  "frequency": "{{transaction_frequency}}",
  "first_name": "{{donor_first_name}}",
  "last_name": "{{donor_last_name}}",
  "amount": "{{transaction_amount}}",
  "address": "{{donor_mailing_address}}"
}

Click Format JSON to auto-indent and confirm there are no syntax errors before saving — see the troubleshooting note below, this is the most common snag.

Step 4: Test, then map fields in LettrLabs

  1. Before pointing the journey at LettrLabs, send a test payload to a tool like Webhook.site so you can see exactly what WeGive sends and confirm your fields resolved correctly — no blank fields, a fully-formed address, correctly formatted amount, etc.

  2. Once the payload looks right, point the Destination URL back at your LettrLabs webhook URL and send one more test transaction through.

  3. In LettrLabs, check your webhook connection's History tab to confirm the test record came through, then open the Integration Order this webhook should feed and map WeGive's field names onto LettrLabs' recipient fields.

  4. Add any Inbound Filters here for frequency or campaign — this is where that filtering should live, not in WeGive's event rule groups (see the callout above).

A note on the mailing address

WeGive's mailing address variable comes through as one combined string rather than separate street/city/state/zip fields. Since LettrLabs needs a structured address to print correctly, confirm with your LettrLabs onboarding contact whether the webhook intake can parse a single-line address automatically, or whether it needs to be split before mailing — this is worth double-checking before going live.

Step 5: Go live

Save the webhook connection with a name (this turns off Test Mode), set the WeGive journey live, and switch your LettrLabs Integration Order to Active. From here on, every transaction that matches your trigger and event rule groups will automatically queue a thank-you note — no manual export, no Zapier task limits to watch.

Zapier or native webhook — which should you use?

  • Zapier (Setup Guide: WeGive via Zapier) is a reasonable default if you're already comfortable with Zapier's UI and want its own task-history debugging view.

  • Native webhook (this guide) is likely the better fit for high-volume, donation-triggered campaigns — no Zapier task consumption, and everything lives in two systems instead of three.

Want help wiring your first WeGive Journey to a LettrLabs webhook? Reach out to our team.

Did this answer your question?