Birch With Causality Engine: Check the ROAS Your Rules Obey
By Joris van Huët
Enterprise Interim CMO & Marketing Leader · 15+ years · 50+ orgs
Published
2026-11-11
The short answer: a Birch rule that raised a budget overnight did exactly what it was told. It read a ROAS that Meta computed, compared it with your threshold and acted. The question it never asks is whether the store booked the revenue behind that ROAS. Birch, the ad automation tool formerly called Revealbot, lists eight Meta attribution windows in its rules and marks 7-day click as the default (attribution window article). Before a rule scales on that number, put the store's GA4 export through Causality Engine, a causal attribution tool that reads one GA4 file per channel. The first finding is free at app.causalityengine.ai/start.
Disclosure: I founded Causality Engine and own it, and this page recommends it. Every claim about it links to Causality Engine's own pages.
Before a rule moves money:
- Price the threshold in store money. For example, a rule that raises budgets above a ROAS of 2.5 on €4,000 of weekly spend is betting that €4,000 x 2.5 = €10,000 of revenue arrived because of those ads. Write that €10,000 next to the week's orders.
- Open the logs you already have. Every Birch rule records the values it saw at each check (rule logs). Those values are Meta's, read through the ad platform's API (creating rules).
- Read one tick box. In the rule builder, "Use ad set attribution window" decides whether the rule sees Ads Manager's figures or the window you picked (attribution window article).
- Set the GA4 row beside it. Paid Social in GA4 is the last-click count for the same traffic, if the ads carry tags it can read.
Birch and the read, side by side
| Question | Birch | Causality Engine |
|---|---|---|
| What it is | Rules that pause, start and rebudget ads on Meta, Google, TikTok and Snapchat (entry) | A causal read of the GA4 Attribution paths CSV (entry) |
| Number it acts on | Platform metrics such as Website purchase ROAS; ROAS defined as Purchase Revenue / Spend (pause rules) | What each channel caused, next to a last-click rebuild (how it works) |
| Whose attribution | Meta's: the ad set's window, or one picked in the rule, 7-day click by default (window article) | Its own model, run on the purchase paths GA4 recorded (one-off read) |
| Link tags | None added; URL parameters are set in Meta Ads Manager (Meta help) | Adds no tag, no pixel, no SDK |
| GA4 channel | Paid Social needs a social source and a paid medium such as paid or ppc (Google's rules) | Reads whatever channels the export holds |
| Connection between them | None | None; it reads channels from the GA4 file (integrations) |
| Cost of the check | A Notify rule costs nothing extra (test run) | Free first finding; €99 per full read, excluding VAT (pricing, checked on 11 November 2026) |
What a Birch rule treats as a result
Birch builds on the ad platforms' APIs, so a rule sees what Meta Ads, Google Ads, TikTok Ads or Snapchat Ads report, and nothing more (creating rules). Its pause examples show the logic: "ROAS < 3 (Last 3 Days) and Spend > $20" (pause rules), with purchases as the Meta Pixel reports them.
The window moves the number. The attribution window article lists 1-day click, 1-day view, 7-day click, 28-day click and four combinations, 7-day click marked as default. Ticking "Use ad set attribution window" makes the logs match Ads Manager. Two traps, both in that article:
- Mixed windows at campaign level read as zero. If ad sets in one campaign use different attribution settings, pixel metrics such as Website purchases come back as 0 for the campaign, in Ads Manager and in Birch alike.
- Untick the box and the logs drift. A rule set to its own window can show values that differ from Ads Manager.
Meta credits a purchase to an ad if it happened within a set number of days after someone viewed or clicked it, shown by default under the ad set's setting (Meta's attribution system). A rule inherits that. It cannot see a sale Meta did not claim, nor discount one that would have happened anyway. Custom metrics can bring in Google Sheets, Wicked Reports or Hyros figures (custom metrics), each with its own credit rule.
How Meta traffic reaches GA4 as Paid Social
Birch adds no tracking parameters of its own. Tagging happens in Ads Manager, under Tracking, in the URL parameters field, where parameters you enter override duplicates already in the website URL (Meta's URL parameters page). The same page says that since 1 January 2024 ad traffic may get a campaign source of Facebook or Instagram and a medium of paid added automatically.
GA4 files a visit under Paid Social when the source matches its list of social sites and the medium matches the paid pattern: anything containing "cp", ppc, retargeting, or anything starting with "paid" (default channel group). Birch's own blog suggests "ppc" as the medium for Meta ads (Birch blog), which passes; the post predates GA4's menus, so follow its parameter advice and not its report paths. A medium such as "facebook_ads" fails the paid pattern, and with a social source the visit is filed as Organic Social instead.
Birch also connects to GA4. Its Google Analytics integration builds reports from GA4 data and feeds GA metrics into Google Ads rules, or into Meta rules through a Google Sheet. A GA4 metric in a rule swaps Meta's credit rule for GA4's: a second opinion, not a referee.
The claim gap: a worked example
For example, with figures invented for the arithmetic and no store behind them: in October a store books €148,300 of sales. Meta reports €96,400 of purchase revenue on €31,000 of spend, a ROAS of 96,400 / 31,000 = 3.11. Google Ads claims €71,250. Together the two platforms claim 96,400 + 71,250 = €167,650, which is 167,650 - 148,300 = €19,350 more than the store took, before email or organic search say a word.
GA4's last click gives Paid Social €38,900. Against the same spend that is 38,900 / 31,000 = 1.25.
Now the rule: "if Website purchase ROAS (Last 7 days) > 2.5, raise budget by 20%". By Meta's figure it fires every week; by GA4's, never. Neither says what the ads caused.
A causal read sits in that gap. Per its how-it-works page, Causality Engine splits Direct back to the channels that sent those buyers, shows each channel's caused share beside a last-click rebuild from the same file, grades each with a data-health score from 0 to 100, and gives a next step: raise, cut or hold, tested in one region first. If Paid Social's caused share lands nearer GA4 than Meta, lower the rule's threshold on a test region before touching the rest of the account.
A free check with Birch's own filters
No purchase needed. Run the rule as a Notify rule for a week first: Birch suggests exactly that as a test run, and the logs show which ad sets would have been touched (test run).
Then split by geography, by hand. A rule's filter can select ad sets by name (creating rules). If your ad sets are named by country, apply the scaling rule to one country only and leave a comparable one under manual budgets for four weeks. For example, if orders in the rule's country rise from 1,120 to 1,264 while the manual country moves from 980 to 1,006, the rule's country grew 144 orders against 26: that is 118 more than the comparison country grew. That answer stands on its own, with the usual caveat that two countries are never perfect twins.
For every channel at once, Causality Engine, which I founded, takes the GA4 export on its start page: the first finding is free and worked out in the browser, and a full read is €99 once, refundable within 30 days (pricing, checked on 11 November 2026).
Where the pairing stops
Birch works on ad sets every 15 minutes (Birch homepage). Causality Engine reads channels. It will say what Paid Social caused; it will not say which ad set, creative or audience did, so the rule's targets stay Birch's job. The read needs GA4 key events to work from (one-off read) and 12 months or more of history (how it works). A channel under 1% of credit on both methods is called too small to act on, and where spend is too small for a signal the homepage says the product declines.
Birch prices its plans on the monthly ad spend of every connected account, not on the spend its rules touch (billing), so a scaling rule that trusts Meta's ROAS raises the very figure Birch bills against. Nothing in that is hidden. It is a reason to check the ROAS before the rule does.
See also
- Birch (Revealbot): what it automates, costs and gets criticised for
- How to use Birch: a stop-loss rule and a scaling rule
- Birch on the marketplace: Birch's affiliate program terms
- Causality Engine: the product, its prices and its limits
- How to use Causality Engine: from GA4 export to a regional test
- Causality Engine on the marketplace: its affiliate terms, as the owner states them
- Birch vs Madgicx: rules you write or recommendations first
- Break-even ROAS calculator: the threshold your margin allows
FAQ
Does Birch send data to Causality Engine?
No. There is no connector, key or sync between them. Causality Engine works from a GA4 export, where Birch-managed Meta ads show up as Paid Social only if their URL parameters say so (integrations page).
Why do my Birch logs show zero purchases for a campaign that sold?
Its ad sets probably use different attribution windows. Meta cannot total pixel metrics at campaign level then, and Birch reports the same zero; apply the rule at ad set level or align the windows (attribution window article).
Should my rules run on GA4 data instead of Meta's?
My recommendation: use the GA4 connection as a cross-check in reports, not as the new truth. Birch can feed GA metrics into Google Ads rules, and into Meta rules through a Google Sheet (GA integration), but GA4's last click undercounts views just as Meta's window overcounts them.
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.
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.