BACK TO BLOG
USE CASESNovember 11, 20269 min read

FirstPromoter With Causality Engine: Test the 60-Day Promoter Credit

JH

By Joris van Huët

Enterprise Interim CMO & Marketing Leader · 15+ years · 50+ orgs

Published

2026-11-11

The short answer: when the promoter report shows several times the orders GA4's Affiliates row does, both are following their own rules. FirstPromoter, the affiliate and referral platform that pays commissions from billing events, credits a sale to the last promoter link a buyer clicked inside a cookie life that defaults to 60 days, per its campaign guide. GA4 credits the last tagged visit before the purchase. On a WooCommerce store that records purchases in GA4, export the Attribution paths report and drop it on the start page of Causality Engine, a causal attribution tool that works from that one file, for a free first finding.

Disclosure: I founded Causality Engine and own it, and this page recommends it. Every claim about it links to Causality Engine's own pages.

Three things to settle before paying the next commission run:

  1. How long one click holds a buyer. For example, a promoter's link clicked on 1 March keeps that visitor credited until 30 April under the 60-day default, whatever else reaches them in between.
  2. The order data the plugin already sends. The WordPress plugin passes each WooCommerce order's amount, order ID and coupon codes to FirstPromoter once the order is processing or completed. That order ID is your join key.
  3. The GA4 row the promoter clicks should fill. Google's default channel group puts a visit under Affiliates only when its medium is affiliate. Check what your promoter traffic shows as medium today.

FirstPromoter and the read, row by row

QuestionFirstPromoterCausality Engine
What it isAffiliate, influencer and referral programs on one account (entry)A causal read of one GA4 export (entry)
What earns creditLast promoter link clicked inside the cookie life, 60 days by default, or a promoter's own coupon (campaign guide, coupon article)What each channel caused, set beside a last-click rebuild of the same file (how it works)
Where a sale comes fromServer side only: a billing provider, the Tracking API or the WooCommerce plugin, never a browser pixel (sales API)The Attribution paths CSV, no pixel and no SDK (how it works)
Link format?fpr= or fp_ref with the promoter's ID, or a clean URL with no parameter at all (direct URL article)Adds nothing to any link
GA4 channelAffiliates needs medium affiliate; an untagged click from a blog files as Referral (Google's rules)Reads every channel in the export
ConnectionNoneNone: the read takes the GA4 file, not a FirstPromoter account (integrations)
Cost of checkingPart of the planFree first finding; €99 for the full read, excluding VAT (pricing, checked on 11 November 2026)

The rule behind a FirstPromoter sale

The campaign's Main Settings hold the whole rule. Cookie life (days) sets how long the tracking cookie lasts after an affiliate link is clicked, and a conversion inside that window credits the affiliate; the guide gives 60 as the default. Last click wins unless you tick First click attribution. The pricing page adds that the cookie can run up to 9999 days on every plan.

A sale exists only when money moves. The Tracking API page rules out JavaScript conversion pixels as easy to fake and asks for the sale call once payment is confirmed. On WooCommerce the plugin makes that call, and sends refunds back as negative commissions.

Coupons are the second door. A unique code per promoter tracks a sale with no link clicked, which the coupon article suggests for Instagram; a campaign-wide code cannot track, and a 100% discount is never counted.

The same campaign guide lists How to handle traffic and commissions from ads: Allow, Pending or Block for referrals arriving from a paid ad click.

Getting promoter clicks into GA4's Affiliates row

FirstPromoter's job is the cookie, not the tag. The click script sets two cookies, per the fpr.js guide, and the docs read on 11 November 2026 describe no setting that adds UTM parameters. So GA4 sees whatever the browser hands it:

  • A ?fpr= link from a promoter's blog arrives with a referrer and no medium you chose, so Google files it as Referral.
  • A Direct URL link carries no parameter by design: Referral from a website, and from an app or a PDF, with no referrer, (direct) / (none), as Google's direct traffic page explains.
  • A coupon-only sale has no promoter visit at all. GA4 credits whatever brought the buyer in, often Organic Social or Direct.

The fix is a tag you add: utm_medium=affiliate, with utm_source naming the promoter, as Google's URL builder page describes. The campaign's Default referral link URL is the obvious home for it, but the guide does not say a query string there survives, so click a test link and read the address bar first.

A worked example: 212 orders, five channels

For example, with figures invented to show the sums and no store behind them: a WooCommerce store books 1,846 orders in October. FirstPromoter credits 212 of them to promoters, worth €15,870 in sale amounts. Meta's dashboard claims 940 orders and Google Ads claims 805.

For example, the claim sum: 212 + 940 + 805 = 1,957 orders claimed against 1,846 booked, so 1,957 - 1,846 = 111 more than the store took, before email or organic search has said a word.

For example, matching FirstPromoter's 212 order IDs to GA4's last click for the same orders gives this split:

GA4 last click for the 212 credited ordersOrders
Affiliates (tagged promoter links)58
Referral (untagged links from promoter sites)47
Organic Social (promoter coupons used after an Instagram post)39
Direct44
Paid Social and Paid Search24
Total, as an illustration: 58 + 47 + 39 + 44 + 24212

None of the five rows is wrong. For the 44 Direct orders, a cookie set weeks earlier pays the promoter, and GA4 cannot say who sent the buyer.

The read sits beside those figures. Causality Engine's how-it-works page says it splits Direct back to the channels that sent those buyers, shows each channel's caused share next to last-click with a data-health score from 0 to 100, and gives a next step to test in one region first. If the affiliate channel's caused share sits well below FirstPromoter's 212, shorten the cookie life on one campaign first and watch that group's store orders before changing the whole program.

The free check: match order IDs by hand

Nothing here needs a purchase. Google's ecommerce guide has the purchase event carry a transaction_id. If your setup sends the WooCommerce order number there, list last month's credited order IDs from FirstPromoter, build a GA4 exploration with Transaction ID and Session default channel group, and match the two in a spreadsheet. The share in Direct or Organic Social is the part of the program paid on cookie or coupon alone, and that count is a finding on its own.

For what each channel caused, rather than who touched the order, Causality Engine, which I founded, starts with a free first finding on the start page, worked out in your browser; the full read is €99 once, refundable within 30 days, per the pricing page checked on 11 November 2026.

Where the pairing stops

The read sees an affiliate channel, not promoters, so which promoter to drop stays a FirstPromoter question; even promoters' sub-ID results show only in their own dashboard, per the sub-ID article. The read needs history too: the how-it-works page asks for 12 months or more of GA4 data, and the one-off read page says a channel under 1% both causally and on last-click is called too small to act on. A young program can sit under that line.

FirstPromoter does what the read never will: it pays people, claws back refunds and collects tax forms.

Its plans are sized by monthly revenue from affiliates, up to $5,000 on Starter and up to $15,000 on Business per the pricing page checked on 11 November 2026, so every order a long cookie adds to the promoter column also moves the account toward the next plan, and a 60-day default sweeps more orders into that column than a 7-day one would.

See also

FAQ

Does FirstPromoter send its referral data to Causality Engine?

No, and it does not need to. The read works from a GA4 export alone, so promoter traffic reaches it only as the channel GA4 recorded (integrations page). That is why the affiliate medium tag matters.

Should I switch FirstPromoter to first-click attribution?

Only if the promoter who introduced a buyer should keep the sale. The campaign guide presents it as a choice of which link gets credit; either way the order is claimed once.

Why do coupon sales never show as Affiliates in GA4?

Because no promoter link was clicked. The coupon credits the promoter inside FirstPromoter, per the coupon article, while GA4 files the visit under whatever channel delivered it.

TAGS
Causality EngineFirstPromoterAffiliate AttributionGA4Worked Example

ABOUT THE AUTHOR

I am Joris van Huët, an enterprise interim CMO. 15+ years, 50+ organizations, including ING, P&G, Nestlé, BNP Paribas, WeTransfer and Vinted. I take on innovation projects (venture building, design sprints), agentic marketing (setting up and running AI agents) and hands-on multi-channel work. See the track record.

I wrote and published this with AI assistance, and I answer for it. Claims about my own experience are limited to the track record above, and a statistic links to its source or is labelled as an example. I sell interim and fractional CMO work, which is why this site exists. How this site is written.

Agentic marketing, built for your team

The agents in this article, built into your workflows and handed over to your team: the first one within two weeks.

With Joris van Huët, interim and fractional CMO in Utrecht. From EUR 5,000 a month, monthly cycles, a 30-day exit.