Windsor.ai With Causality Engine: Weigh the Blended Totals
By Joris van Huët
Enterprise Interim CMO & Marketing Leader · 15+ years · 50+ orgs
Published
2026-11-11
The short answer: when a Windsor.ai table shows Facebook, Google and TikTok revenue that together beats the Shopify total in the row below, both rows are correct by their own rules. Windsor.ai, a no-code connector that pulls data from 350+ platforms into BI tools, spreadsheets, warehouses and AI chats (entry, homepage), returns each platform's figure, and its Meta guide says the differences come from "Facebook's independent calculation methods, which Windsor.ai cannot override" (Meta discrepancy guide). For what each channel caused, take the GA4 Attribution paths export to the start page of Causality Engine, which reads that one file for cause (entry). The first finding is free.
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 anyone divides by spend:
- Check the denominator of every ROI field. A custom field that divides Shopify revenue by Facebook Ads spend, the example on Windsor.ai's answers page, credits Facebook with every order the store took, from every channel.
- Read the source column you already get. The Blended Data connector returns one table with a source column per row (answers page). Sum the platform rows and the Shopify rows separately before comparing them.
- Match the Meta setting to Ads Manager. In Looker Studio it sits under Edit connection; elsewhere, at account level in step 1 of onboarding or per query in step 2 (Meta discrepancy guide).
Windsor.ai beside the read
| Point | Windsor.ai | Causality Engine |
|---|---|---|
| Kind of tool | Data integration from 350+ sources (homepage) | Causal attribution from one GA4 export (entry) |
| Platform conversions | Passed through; Meta's windows set by query options such as attribution_window (Meta discrepancy guide) | Not read; only GA4's channels |
| Combining sources | Blended Data connector and custom fields across destinations (answers page) | Every channel in the file, each with a 0 to 100 data-health score (how it works) |
| Attribution it offers | An Ad Data + Attribution connector and a multichannel dashboard template (template page) | Each channel's caused share beside a last-click rebuild (how it works) |
| Link between the two | None | None (integrations) |
| Price of the check | Your existing plan | First finding free; €99 per read, excluding VAT (pricing, checked on 11 November 2026) |
What Windsor.ai says about attribution, word for word
Windsor.ai uses the word in three places, and they mean different things.
The connector. Its Looker Studio page sells "Ad Data + Marketing Attribution" and says its "marketing attribution software" shows "which marketing channels have the greatest impact on revenue" (connector page). The template built on it reports Google Ads, Facebook Ads, LinkedIn Ads and Bing Ads at Channel Groupings level (template page). Neither page names the method behind the attribution.
The advice. Its data-driven attribution article recommends moving to multi-touch or data-driven credit and judging channels on a data-driven ROAS. It explains that Google builds its model on the Shapley value and that a Markov model works on less data. Those are descriptions of Google's model and of the method family, not of a Windsor.ai model.
The Shopify fix. For subscription stores, a Windsor.ai article loads Shopify orders and customers into its cloud database and runs a SQL step, then promises that a subscription purchase "will always be attributed to the original acquisition channel". That is a rule: the first channel keeps the customer's later revenue. It is clear and auditable. It decides credit by order of arrival, not by what would have happened without the channel.
Getting the GA4 side right
Windsor.ai's GA4 guide says that in 99% of reported mismatches the cause is a different query, mostly scope: a campaign queried at session scope returns something else than the same campaign at event or user scope. Pull purchases by session default channel group and you get GA4's filing under Google's channel definitions, which put Performance Max in Cross-network.
The read needs another shape. It takes the Key event attribution paths report, the sequence of channels before each key event, which GA4 shows under Advertising and downloads as a CSV (Google's report help). The Windsor.ai GA4 pages describe field and scope queries, not that report, so download it from GA4 directly; the export walkthrough has the steps, and the how-it-works page asks for 12 months or more.
Worked example: the ROI field and the blended sum
For example, with sterling figures made up for illustration and no store behind them. One quarter, one Blended Data query:
- Facebook Ads purchase value under the account's setting: £38,900, on £11,400 of spend
- Google Ads conversion value: £29,600
- TikTok Ads purchase value: £7,350
- Shopify net revenue: £64,250
The platform rows sum to 38,900 + 29,600 + 7,350 = £75,850, which is 75,850 - 64,250 = £11,600 more than the store took.
Now the custom field. Shopify revenue divided by Facebook spend gives 64,250 / 11,400 = 5.64. Facebook's own claim over the same spend gives 38,900 / 11,400 = 3.41. Neither is what Facebook caused. The first gives Facebook every order, the second gives it every order Facebook's window touched.
A causal read sets a third kind of figure beside these: each channel's caused share against a last-click rebuild from the same export, a data-health score from 0 to 100, and a next step to test in one region (how it works). If the read's share for Paid Social lands well under Facebook's 3.41, test before budget moves; the pricing page shows how a sample read words each next step.
The free check: matched postcode areas
Windsor.ai documents no holdout, so this one is done by hand. List postcode areas, pair them by last quarter's orders, and leave one of each pair out of one channel's targeting for 28 days. Count Shopify orders per area from the store's own report. For example, 18 kept areas take 1,146 orders and their 18 matched partners take 1,071: 1,146 - 1,071 = 75 orders the channel made in that month. Compare that with what the channel's dashboard claims for the same areas.
When you want every channel read at once, Causality Engine, which I founded, takes the GA4 export on the start page. The first finding runs in the browser without uploading the file; the full read is €99 once, refundable within 30 days (pricing, checked on 11 November 2026).
What the pairing will not do
The products do not touch. Causality Engine's integrations page lists no connector to set up: it reads the channels the GA4 export records. It works at channel level, so keyword-level questions, which the Windsor.ai article above discusses, stay in Windsor.ai. It needs a purchase key event in GA4 (one-off read), and where spend is too small for a signal, it declines (homepage).
Windsor.ai's plans count data sources and accounts, while destinations are included on every plan (answers page). An attribution story told inside Windsor.ai, with Shopify, GA4 and every ad account all wired up, is therefore also the story of a larger plan, and nothing in that story asks whether the summed platform rows are too high.
See also
- Windsor.ai: sources, accounts and what cancelling deletes
- How to use Windsor.ai: one reporting job, set up end to end
- Windsor.ai on the marketplace: Windsor.ai's affiliate program terms
- Causality Engine: the read, the price and the limits
- How to use Causality Engine: from the GA4 file to a decision
- Causality Engine on the marketplace: affiliate terms, as the owner states them
- Causality Engine vs Windsor.ai: moving data versus reading it
- Break-even ROAS calculator: the return a channel must clear
FAQ
Can Windsor.ai push data into Causality Engine?
No, there is no link either way. Causality Engine reads the Attribution paths CSV you download from GA4, and its integrations page says there is no connector to wait for.
Does the Ad Data + Attribution connector use a causal model?
Its pages do not say which method it uses (connector page). Windsor.ai's writing favours data-driven, multi-touch credit, and its Shopify fix credits the original acquisition channel.
Why does Facebook revenue in Windsor.ai not match Ads Manager?
Usually the attribution setting. The Meta discrepancy guide says to update each affected query, for example with use_unified_attribution_setting and an attribution_window option, so it matches the account.
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.