Meyer Partners runs LIM's Feathr display/retargeting ad campaigns. The ads are driving traffic, but we currently can't tell which donations came from people who saw an ad. This page documents the email thread, the conversion pixel Feathr provided, and exactly how to close the loop — on the current Squarespace site and on the new site.
The one thing that matters: the conversion pixel must fire on the page a donor sees immediately after a successful gift, and it must pass the donation amount. Because the donation form is a Blackbaud embed, that confirmation page is the tricky part — see Section 4.
Update — 22 Jun 2026: The live Squarespace site already runs Google Tag Manager (GTM-TD3Z4XNG, installed by John/Meyer 10/6/2025). So the install path is through GTM, not raw Code Injection. The Blackbaud contact is Angie. See Sections 5–6. Tag spec: plan/feathr-gtm-tag-and-trigger-spec-22jun2026.md.
Angie's reply + form inspection — 22 Jun 2026: The form is the older Online Express (OLX), embedded via BBOX webforms (bbox.showForm('82adc758-…') / bbox-min.js) on /donate. OLX has no native GTM/GA and cannot auto-redirect — so Option A is dead. But the form renders inline in our page DOM, and its confirmation appears as #bboxdonation_divThanks — so we fire Feathr on /donate via a MutationObserver watching that element, capturing the amount from the form. No further Blackbaud changes needed from Angie. Only remaining blocker: the Feathr base pixel + account ID from John.
Summary of the conversation that led to this work, oldest to newest:
Just met with Meyer Partners. The Feathr ads are doing well and people are responding, but we can't tell if they give because of the ad they viewed. Gary mentioned he had ideas — connecting everyone.
Good news on performance. Because the Blackbaud donation form is embedded directly on our site at /donate, we're well positioned to track conversions. To close the loop we just need the donation "success" event reported back to Feathr. Asked John for the Feathr Conversion Pixel code; once received I'll embed it on the Thank-You/Confirmation step. If we can get a revenue-tracking version, we can pass the exact gift amount and see real-time ROAS.
Got the conversion pixel. Shared Feathr's developer install guide:
help.feathr.co — Conversion Pixel Developer Guide
Campaign recap: 194,000 people saw an LIM ad, 655 visited the site, $1,700 spent at $2.64/click. Per John, there's a way to capture how many of those 655 gave. Asked Gary & John to connect and get this closed out.
Reviewed this doc on the call. Settled the plan: when a gift completes, Blackbaud sends the donor to a thank-you page we control, and the Feathr pixel fires there (Option A). Identified Angie as the most knowledgeable Blackbaud admin (she holds the contract and pulls the reports; a donor-relations specialist is yet to be hired). Blackbaud is mid-upgrade and is taking credit-card gifts, but Jaylene wasn't sure how they flow through — Angie to confirm. Gary to send a separate, plain-language email of exactly what's needed on the Blackbaud side. This conversion data also feeds Robert's August board fundraising report.
Where it stands (22 Jun 2026): Conversion ID delivered (6a0bb2f14647de16ae5b1ccb, see LIM Conversion Pixel.txt). The site already has GTM, so install goes through the container. Two emails drafted and ready to send — plan/feathr-email-to-john-meyer-22jun2026.txt (Feathr account ID + GTM status) and plan/feathr-email-to-jaylene-blackbaud-22jun2026.txt (Blackbaud redirect + amount param). Still not installed; the GTM tag is specced and waiting on those two answers.
Feathr attribution has two parts. Both must be present for a conversion to be counted and attributed to an ad.
A small loader script that defines the global feathr() function and tracks page views. It belongs on every page of the site. Meyer Partners / Feathr supply this (it may already be live on the Squarespace site, since the ads are retargeting visitors — that retargeting requires the base pixel to be present). Confirm it before doing anything else.
<script>
// Feathr Super Pixel — get the exact snippet from Feathr / Meyer Partners.
// This defines the global feathr() function used below.
(function(f,e,a,t,h,r){
f.feathr=h=function(){h.q.push(arguments)};h.q=[];
r=e.createElement(a);r.async=1;r.src=t;
e.getElementsByTagName('head')[0].appendChild(r);
})(window,document,'script','https://cdn.feathr.co/js/feathr.min.js');
feathr('init', '<YOUR_FEATHR_ACCOUNT_ID>');
feathr('sprinkle'); // fires the page-view breadcrumb
</script>
This is the snippet John delivered. It fires once, on the donation "success / thank you" page, and reports the gift back to Feathr — with the dollar amount for ROAS. This is the exact code from LIM Conversion Pixel.txt:
// Provide your own means of deriving the gift amount.
let shoppingCartValue = getShoppingCartValue();
feathr(
'convert',
'6a0bb2f14647de16ae5b1ccb', // LIM conversion ID
{
amount: shoppingCartValue, // number, required
currency: 'USD', // optional, defaults to 'USD'
category: 'Conversion' // optional, defaults to 'Conversion'
}
);
getShoppingCartValue() is a placeholder — we have to supply the real donation amount. How we get it depends on the confirmation method (Section 4).
The donation form is a Blackbaud embed. After a successful gift, Blackbaud typically shows its own confirmation screen, rendered inside Blackbaud's iframe / on a Blackbaud-hosted domain. We cannot inject our JavaScript into that page. That's the whole reason this isn't a one-line copy-paste.
So the pixel can't simply "sit on the thank-you page." We need a confirmation surface we control, or an event from Blackbaud we can hook. Section 4 covers both, in order of preference.
Resolved 22 Jun: for this form it turned out better than feared — the OLX/BBOX donation form and its confirmation render inline in our /donate DOM (only the card-entry Checkout step is a secure iframe). So we can run our own JS on the page and fire on the inline confirmation (#bboxdonation_divThanks). See the green note at the top and the tag spec.
In the Blackbaud form settings, set a confirmation redirect URL to a thank-you page we own (e.g. /thank-you). Blackbaud appends the gift details to that URL as query parameters; we read the amount from the URL and fire the conversion. This is the cleanest, most reliable approach.
<script>
// Blackbaud passes the gift amount on the redirect, e.g. ?amount=50.00
var params = new URLSearchParams(window.location.search);
var amount = parseFloat(params.get('amount')) || 0;
feathr('convert', '6a0bb2f14647de16ae5b1ccb', {
amount: amount,
currency: 'USD',
category: 'Donation'
});
</script>
If we use the Blackbaud Checkout (BBOX) script and keep the donor on our page, BBOX emits client-side events. Fire the conversion from the success callback and read the amount from the event payload. This avoids a redirect but depends on the embed exposing a usable event.
// Pseudocode — confirm the actual BBOX event/payload in Blackbaud docs.
bbox.onComplete(function(result){
feathr('convert', '6a0bb2f14647de16ae5b1ccb', {
amount: result.amount,
currency: 'USD',
category: 'Donation'
});
});
See the Blackbaud integration doc for how the BBOX form is wired on the new site.
If neither a redirect nor an event is available, fire the conversion when the donor clicks "Give Now." This counts the conversion but cannot guarantee the gift actually completed and the amount may be the selected rather than charged value. Use only as a last resort — it inflates the count and weakens ROAS data.
This is where the ads point today, so it's the priority. The site already runs GTM (GTM-TD3Z4XNG) — so add both the base pixel (if not already a GTM tag) and the conversion tag inside GTM, not via Code Injection. Conversion fires on the /thank-you redirect (Option A). Full tag + trigger spec: plan/feathr-gtm-tag-and-trigger-spec-22jun2026.md.
Same two parts. Add the base pixel before </head> on every page; add the conversion call to the thank-you page / BBOX callback. Keep the same conversion ID so reporting is continuous across the migration.
Do both sites with the same conversion ID. Feathr attributes by ID, not by URL, so a single ID across both sites gives Meyer Partners one continuous conversion total through the cutover.
← Back to Site · Blackbaud Integration Doc · LIM Developer Documentation · Restricted Access