Meta vs Shopify ROAS: why the two rarely agree and how to reconcile them
Meta credits purchases inside each ad set's attribution setting; Shopify credits an order to the last non-direct click it saw. What Meta changed in 2025 and 2026, how Shopify's models work, and a reconciliation you can run in a spreadsheet.
TL;DR
- Meta and Shopify ROAS differ because each credits different sales. Meta credits purchases inside each ad set's attribution setting, which can include a sale after a view or a non-link engagement. Shopify credits an order to the last non-direct click it saw on your store.
- Since March 2026, Meta's click-through attribution counts only link clicks for website and in-store conversions. Likes, shares and saves moved to a renamed engage-through setting, and an engaged video view now takes 5 seconds instead of 10.
- Shopify's marketing data defaults to last non-direct click, and a custom report that pairs a sales metric with a marketing dimension preselects last click. Shopify says its any click model can help reconcile what each channel reports.
- To reconcile, match time zone, currency and dates, then set Meta's 7-day click purchase value beside Shopify's any-click sales for your Meta ad traffic. For budget calls, total store sales over total ad spend avoids attribution altogether.
- Neither report shows what an ad caused. Meta's own March 2026 post calls incrementality experiments such as Conversion Lift the gold standard for that question.
What changed: updated on October 26, 2026 to add X Ads, which overads has read since October 23, 2026, to the platforms it reads; the Meta and Shopify method is unchanged. It was rewritten on September 28, 2026 for Meta's 2025 and 2026 attribution changes and Shopify's current attribution models. The earlier version described Meta's old defaults, called Shopify a last-click tool and made product claims about overads that were not accurate.
Why Meta and Shopify credit different sales
Meta and Shopify report a different ROAS for the same ads because each one decides for itself which sales an ad earned. Meta counts a purchase event from your pixel or the Conversions API when it falls inside the ad set's attribution setting. Shopify credits an order to a channel it saw in the shopper's visits to your store, using referrers and campaign tags.
The two also measure different amounts. Meta's pixel reference requires a value and a currency on every Purchase event, so Meta's purchase value is whatever your store sends in that field. Shopify's sales reports define total sales as gross sales minus discounts and sales reversals, plus taxes, duties, shipping charges and fees. Net sales is the same figure without taxes, duties, shipping and fees. Shopify includes pending, unpaid and canceled orders in these reports. A return lowers total sales on the date it is processed.
Meta's guide to conversion count differences and Shopify's marketing reports help between them name most of the causes. The table groups them by which number each one tends to raise.
| Cause | What happens | Tends to raise | Source |
|---|---|---|---|
| View and engagement credit | Meta can credit a sale to an ad someone saw or engaged with without clicking; Shopify only sees visits to the store | Meta | Meta attribution settings help |
| Journeys across devices | Meta measures people across devices; Shopify counts sessions and visitors with cookies on each device | Meta | Meta conversion count differences; Shopify marketing reports |
| Lost referrers | A shopper who comes back later in a new tab, or through a shortened link, reaches the store with no referrer, so the visit is not tied to the ad | Meta | Meta conversion count differences; Shopify marketing reports |
| Ad blockers | The Meta pixel may not fire, so Meta never receives the purchase | Shopify | Meta conversion count differences |
| Organic social clicks | Shopify's Social referrer covers any link clicked on social media, including unpaid posts and shared links | Shopify | Shopify marketing reports |
| Repeat purchases | Meta's All conversions counts every conversion after the ad; its First conversion counts only the first | Meta, when All conversions is used | Meta compare attribution settings help |
| Time zone, currency and date | Different settings move sales between days or change the value | Either | Meta troubleshooting help |
What Meta changed about attribution in 2025 and 2026
Meta changed what counts as a click in 2026: for website and in-store conversions, click-through attribution now counts only link clicks. Meta's announcement of March 3, 2026 said the rollout would begin later that month. Until then, Meta credited every kind of click, including a share, a save or a like, while many third-party tools credit only website link clicks. Conversions after a share, a save or another non-link click now fall under engaged-view attribution, which Meta renamed engage-through attribution. Meta also shortened an engaged view on a video ad from 10 seconds to 5 seconds.
Meta's attribution settings help page now lists three standard settings for website and in-store conversions. Click-through counts events within 1 day or 7 days after a link click. View-through counts events within 1 day after an impression. Engage-through counts events within 1 day after any click on the ad other than a link click, or after a video play of 5 seconds (97% of the video when it is shorter). The page adds that some accounts may still use the earlier click-through and engage-through versions while the change rolls out.
Two earlier changes on Meta's API side matter to anyone who exports Meta data into a spreadsheet or a reporting tool. Meta's Insights API best practices page says that from June 10, 2025 the API follows each ad set's attribution setting, as Ads Manager does, and dates off-Meta actions such as web purchases by when they happened. Meta's 2025 API change log adds that from January 12, 2026 the 7-day and 28-day view-through windows return no data.
| Date | Change | What it means for the comparison |
|---|---|---|
| June 10, 2025 | The Insights API follows each ad set's attribution setting, as Ads Manager does, and dates web purchases by when they happened | Meta made the change to reduce gaps between an API export and Ads Manager |
| January 12, 2026 | 7-day and 28-day view-through windows return no data in the API | Older spreadsheets built on those windows stop filling |
| March 2026 onward | Click-through counts link clicks only; shares, saves and likes move to engage-through; an engaged video view takes 5 seconds | Meta's click-through figure is closer in kind to Shopify's click-based view; the engage-through figure is credit Shopify cannot see |
Meta states the aim plainly: it hopes the new definition makes its reporting line up better with third-party tools such as Google Analytics. It does not promise that the numbers will match, and the view-through and engage-through credit still has no counterpart in a store's own reports.
How Shopify attributes a sale by default
Shopify credits a sale with its last non-direct click model by default when you view marketing activity data: the last channel the shopper came from before buying, ignoring direct visits. If a journey holds only direct visits, the order stays direct. That is not the same as last click, which counts direct visits too. Shopify's marketing reports help names both as defaults in different places. It says a report that combines a sales metric with a marketing dimension, such as gross sales by referring channel, selects the last click model by default. Check which model a report shows before comparing it with Meta.
| Model | How it credits an order | What Shopify says it is for |
|---|---|---|
| Last non-direct click | All credit to the last channel before purchase, skipping direct visits | The default for marketing activity data; the last channel that influenced a sale |
| Last click | All credit to the last channel, direct visits included | The final impact before purchase |
| First click | All credit to the first channel, direct visits included | Channels that create top-of-funnel interest |
| Any click | Full credit to every channel the shopper clicked, so credit adds up to more than your orders | One channel at a time, and reconciling what each channel reports |
| Linear | Equal credit to each click in the journey, direct visits included | More complex journeys |
Shopify's tracking has limits of its own. Its marketing reports cover Online Store orders. If a visitor does not buy within 30 days of a session, the first-interaction referrer resets to the next one. After an order, the next referrer starts a new journey. Performance by referring channel, Performance by marketing activity and Performance by UTM campaign are the default reports that let you choose the model.
A four-step reconciliation you can run in a spreadsheet
A Meta vs Shopify reconciliation compares like with like in four steps, and its job is to explain the gap, not to close it. The steps follow Meta's troubleshooting checklist and Shopify's attribution models. The order and the choice of columns are this article's method.
- Align the frame. Use the same time zone, the same currency with the same decimal places, and the same dates in both tools. Meta lists each of these as a common cause of mismatched counts. Leave out the last few days, which are still settling, as our guide to how fresh ad platform data is explains.
- Pull two Meta figures. In Ads Manager, export purchase value under the ad sets' own attribution setting and, from Compare attribution settings, under 7-day click. Meta says you can compare 1-day view, 1-day click, 7-day click and 28-day click regardless of what a campaign optimizes for. Choose First conversion if customers reorder quickly, because Shopify starts a new journey after each order.
- Pull two Shopify figures. Open Performance by UTM campaign, filtered to the tags on your Meta ads, and read sales under the any click model and the last non-direct click model. Without UTM tags on the ads, Performance by referring channel is the fallback, and its Facebook and Instagram rows include unpaid social clicks. Pick the sales figure that matches what your Purchase event sends as its value, for example total sales if it sends the order total.
- Record the gap each week and label it. When the ad sets count views or engagements as well as 7-day clicks, the difference between Meta's setting and its 7-day click figure is roughly the view-through and engage-through credit, which Shopify cannot see by design. The gap between Meta's 7-day click figure and Shopify's any-click figure estimates cross-device journeys, lost referrers and window differences. Watch the gap's trend over several weeks rather than its size in one.
The table works one week through with invented figures, to show the arithmetic. It is not data from any store.
| Figure | Where it comes from | Sales | ROAS |
|---|---|---|---|
| Meta, ad set setting | Ads Manager, the ad sets' own attribution setting | $9,000 | 4.5x |
| Meta, 7-day click | Ads Manager, Compare attribution settings | $6,000 | 3.0x |
| Shopify, any click | Performance by UTM campaign, Meta ad tags | $4,800 | 2.4x |
| Shopify, last non-direct click | Performance by UTM campaign, Meta ad tags | $3,600 | 1.8x |
Read top to bottom, the example explains the whole gap without either tool being wrong. In this example, $3,000 of Meta's figure came from view-through or engage-through credit. Of the $6,000 left, Shopify's any click model found $4,800, so $1,200 was lost to devices, referrers or the longer Meta window. Last non-direct click gave Meta $1,200 less again, because another channel was clicked later in some of those journeys.
Exporting Meta data without counting a sale twice
A Meta export counts one sale more than once if every purchase row in it is added up, because Meta reports purchases under several action types at the same time. Meta's Ads Action Stats reference lists pixel purchases (offsite_conversion.fb_pixel_purchase) and on-Facebook purchases (onsite_conversion.purchase) as action types, and lists omni_purchase among grouped action types, which combine others. Summing a grouped type with the types it groups repeats the same sales.
Revenue rows need the same care. Meta's pixel reference lists value as a parameter on events such as ViewContent and Search, not only Purchase, so the value column of an export can also carry events that are not sales. Take one purchase value per row, from one action type, and leave the rest out.
overads' own Meta connector is built around this. It reads one purchase value per row, taking omni_purchase first and falling back to the other purchase types in a fixed order, and it never adds them together. It counts conversions the same way, with one purchase type and one lead type per row.
When a blended number is the better check
A blended ratio, total store sales divided by total ad spend across every platform, is the better check when the question is whether the whole ad budget pays. Some teams call it MER, marketing efficiency ratio. It needs no attribution at all, so no platform can inflate it. It also cannot say which channel earned a sale. And it includes sales that ads did not cause, such as repeat and organic orders.
Platform ROAS stays useful inside the platform. Meta's help page warns that results cannot be compared across ad sets with different attribution models, so compare ad sets and creatives only under the same setting. For what an ad caused, Meta's March 2026 post points to incrementality experiments such as Conversion Lift. Meta's help page also describes an incremental attribution model that predicts whether a conversion was caused by an ad.
Where overads fits
overads does not read Shopify, so it cannot run this reconciliation for you. It has no Shopify connector and never reads a store's orders, which the overads page for DTC operators states plainly. Use the spreadsheet method above to set store sales against ad data.
overads reads Meta, Google, X and Snapchat ad accounts read-only. It proposes changes, and a person applies them in the platform's own ad manager. Meta, Google and X sync every campaign, ad set and ad; Snapchat shows spend totals only. overads counts each Meta purchase once, as described above. Its Meta sync sets no attribution window of its own, so under Meta's June 2025 rule its Meta figures follow each ad set's attribution setting.
The ROAS that Ads manager calls blended is not the store-sales ratio in this article. It divides the conversion value the ad platforms report by total ad spend, so it carries each platform's attribution. When connected accounts report in different currencies, overads labels the totals as unconverted rather than converting them; our guide to normalizing cross-platform ad metrics shows how to put them on one basis yourself. A team that needs order-level attribution from its own store data needs a dedicated attribution tool. Meta says it has started working with analytics providers such as Northbeam and Triple Whale to include both clicks and views in their attribution.
Frequently asked questions
Should I switch my ad sets to 1-day click so Meta matches Shopify?
Not just for reporting. Meta's help page says the attribution choice also informs ad delivery, so changing it changes what the ad set optimizes for. Meta's Compare attribution settings columns show other windows without touching the campaign.
Did Meta's March 2026 attribution change affect what I pay?
No. Meta's announcement says there is no change to how advertisers are billed; only how conversions are credited in reporting changes.
Does the link-click change apply to app or messaging campaigns?
Meta's announcement scopes the new click-through definition to website and in-store conversions, and says it rolls out to campaigns optimizing for those. Its help page lists separate rules for iOS 14 and later app campaigns.
Sources
- Simplifying Ad Measurement for a Social-First World. Meta for Business, Mar 3, 2026. Accessed Sep 28, 2026.
- About attribution models and attribution settings. Meta Business Help Centre. Accessed Sep 28, 2026.
- Compare attribution settings in Meta Ads Manager. Meta Business Help Centre. Accessed Sep 28, 2026.
- Troubleshoot common reporting differences between Meta Ads Reporting and third-party reporting tools. Meta Business Help Centre. Accessed Sep 28, 2026.
- About conversion count differences between Meta Ads Reporting and third-party reporting tools. Meta Business Help Centre. Accessed Sep 28, 2026.
- Limits and Best Practices (Ads Insights API). Meta for Developers. Accessed Sep 28, 2026.
- 2025 Out-of-cycle changes (Marketing API). Meta for Developers. Accessed Sep 28, 2026.
- Ads Action Stats (Marketing API reference). Meta for Developers. Accessed Sep 28, 2026.
- Meta Pixel API reference. Meta for Developers. Accessed Sep 28, 2026.
- Marketing reports. Shopify Help Center. Accessed Sep 28, 2026.
- Sales reports. Shopify Help Center. Accessed Sep 28, 2026.
- overads product summary (llms.txt). overads. Accessed Oct 10, 2026.
- overads for DTC operators. overads. Accessed Sep 28, 2026.
Drafted with AI assistance, then checked against primary sources and the product itself by the overads team.
Keep reading
Guides · 8 min read
The best cross-platform ad management tool in 2026, ranked honestly
Seven tools and one editorial opinion: the category has fractured. Here is what is actually worth paying for if you run paid media across more than two channels in 2026.
Paid media · 12 min read
Google's AI Max auto upgrade: which Search campaigns moved and what to check
Through September 2026, Google is moving Search campaigns that used campaign-level broad match or automatically created assets to AI Max. Dynamic Search Ads wait until February 2027. What each campaign gets, the dates, and how to judge it.
Guides · 10 min read
WhatsApp Business API pricing 2026: what changes on October 1
Meta starts charging for WhatsApp service replies and in-window utility templates on October 1, 2026. What stays free, how the 1,000 free service messages work, what Meta Business Agent costs, and a worked bill for five markets.
Read Meta, Google, X and Snapchat ad data in one place
overads reads Meta, Google, X and Snapchat ad accounts read-only, counts each Meta purchase once, and proposes changes that you apply in the platform. It does not read your Shopify store.
Get started