Most Matomo marketers we talk to have a second browser tab open during a paid-media review. Matomo on one side. Meta Ads Manager and Google Ads on the other. The blended ROAS number that ends up in the client deck lives in a spreadsheet that both tabs feed into separately.
That's the frustrating thing. Matomo's side of the review is fine on its own. UTM parameters carry through to any goal or ecommerce transaction. Matomo's Multi Channel Conversion Attribution plugin (MCCA) gives you first-touch, last-non-direct, linear, position-based, and time-decay models per goal in the UI. The Reporting API exposes everything for whatever BI tool you've standardised on. For anything involving traffic Matomo actually saw, the reporting is honest and complete.
What's missing is the other tab. There's no place inside Matomo that knows a campaign cost money. No ROAS field in any report. That one missing input is why every paid-media review needs a spreadsheet to finish.
Why it stops where it stops
Two structural things, mostly.
The first is the data model. Matomo doesn't have a concept of ad cost. The Campaigns report shows 412 visits and 12 goal conversions from spring_sale and stays silent on the €380 you spent on Meta and Google to produce those clicks. You can shove spend into a Custom Report through Custom Dimensions, but Custom Dimensions attach to visits, not to campaigns, so any aggregation becomes an average of averages. Arithmetically correct, analytically useless. Nothing in the default reports returns CPC, CPA, or ROAS, because nothing in the schema can.
The second is what MCCA can see. The plugin's models run on referrer data Matomo actually captured, which means anything the JavaScript tracker didn't witness is invisible to it. Meta and YouTube impressions that didn't end in a click. View-through conversions on display and video. Cross-device journeys before login. Offline conversions. If you're running last-click-eligible paid search and direct response, MCCA produces honest numbers. If you're running upper-funnel display, video, or awareness, MCCA credits those dollars at close to zero, because the touchpoint never hit the tracker. The more budget you move into brand and upper funnel, the more the attribution lies by omission.
How teams close the gap today
We've talked to a lot of Matomo-heavy teams about this, and the workarounds settle into a few shapes. None are clean.
Most start with a spreadsheet. Pull campaign data from Matomo, cost data from Meta and Google, paste it all into a sheet, compute ROAS in a formula column. Works fine for one client with three campaigns. At ten clients or thirty campaigns each, it becomes someone's actual job, and the numbers are stale by the time the deck ships.
A lot of agencies graduate to Looker Studio, Metabase, or whatever BI tool the team standardised on. Connect Meta Ads, Google Ads, and Matomo through the Reporting API or scheduled CSV exports, and put a blended ROAS dashboard in front of the client. This is the best honest answer short of a real pipeline, and a lot of teams stop there. What it doesn't solve is the attribution side. You've joined cost to last-non-direct traffic, not to an MCCA model. Blended ROAS is recoverable. Attributed ROAS is not.
A few teams build a real pipeline. A data person syncs Matomo, Meta, and Google to a warehouse, joins spend to conversions on date and campaign, and exposes the result as a dashboard. This is the complete answer. It's also the one that requires hiring a data person, which is a bigger commitment than most marketing teams can make.
There are connector plugins that push ad cost straight into Matomo custom reports. None we've tested join spend, cross-channel attribution, and CLV under one schema. They solve the spend-ingestion half without touching the half MCCA can't see.
Our attempt to solve it
Martez is the data platform for Matomo the data person would build. With just a few clicks you can pull Meta Ads and Google Ads on each platform's native cadence, joins spend to Matomo's conversion data on the campaign keys Matomo already uses, and exposes the result as reports. ROAS by campaign and channel, CLV, multi-touch attribution that accounts for view-through where the ad platform shares impressions. Matomo stays authoritative for traffic, events, and conversions. Martez fills in what the tracker was never going to see, and keeps the numbers honest as the ad platforms restate them.
It's in private beta. Join the waitlist if this is the part of your month that currently lives in a spreadsheet. We're building it because we ran into it ourselves.