Horoshop ↔ Google Sheets integration for accurate ROAS
Matching Horoshop orders with Meta Ads campaigns for real ad profitability: spend, taxes, CPA, average order value, and ROAS per campaign — accurate to about 98%.
Standard analytics weren't enough for ad decisions. We needed to match orders with ad campaigns, pull in UTM tags, reconcile them with the actual Meta Ads structure, calculate ROAS accounting for spend and taxes, and understand which campaigns drive real sales rather than just clicks or good-looking ad-manager numbers.
- Format
- ROAS analytics
- Data source
- Horoshop + Meta Ads
- Processing
- Google Sheets + Apps Script
- Accuracy
- about 98%
How the integration was built
Set up authorization with the Horoshop API.
Created a workflow for a historical order export starting 2026-01-01.
Created a daily workflow that automatically pulls new orders from the previous day.
Set up mapping of order fields, UTM tags, and ad parameters.
We pass the data into Google Sheets for further analysis.
Connected an Apps Script that calls the Meta Ads API and pulls campaigns, ad sets, ads, spend, statuses, budgets, and UTM from creatives.
Added custom matching of Horoshop orders with actual Meta Ads campaigns.
Set up several matching levels: by Meta ID from UTM, by campaign/ad set/ad ID, by campaign/ad set/ad names, by UTM from creatives, and fallback logic for ambiguous cases.
Based on this data we calculate ROAS, CPA, revenue, order count, spend, taxes, average order value, and average check.
Added a separate sheet for unmatched Meta paid orders to spot gaps in UTM tagging and improve analytics accuracy.
How the integration works
The path of an order from Horoshop to a real ad-profitability calculation.
Scheduled run
n8n runs the scenario on a daily schedule.
Authorization
The workflow authorizes with the Horoshop API.
Orders + UTM
Pulls orders for the needed period along with UTM tags.
Splitting records
Splits orders into individual records.
Structuring
Transforms the data into the required structure.
Google Sheets
Writes the result into Google Sheets.
Meta Ads data
Apps Script pulls actual Meta Ads data on campaigns, ad sets, ads, statuses, budgets, and spend.
Matching
The script matches orders with ad campaigns by UTM, Meta ID, campaign/ad set/ad names, and creative UTM parameters.
Efficiency calc
The sheet calculates ad efficiency by campaign, ad set, and creative.
Unmatched orders
A separate list of unmatched orders is built so the team can see where to fix UTM tagging or campaign structure.



In May, the strongest scaling candidate was the campaign with ROAS 2.03 and CPA 649 UAH. Campaigns with ROAS 0.64 and 0.69 were not scaled directly and were treated as sources of hypotheses for creative and audience tests.
- ✓Meta paid order matching quality for May: 178 out of 181.
- ✓Order coverage: 98.34%. Revenue coverage: 98.86%.
- ✓The team sees which campaigns actually generate purchases.
- ✓Real Meta Ads costs are visible with conversion into UAH.
- ✓Taxes are included in the report, so ROAS and CPA are closer to the real business economics.
- ✓The report shows orders, revenue, spend, ROAS, CPA, average purchase value, and average check by campaign, ad set, and ad.
- ✓The ad budget can be scaled based on actual revenue, not assumptions.
- ✓Weak campaigns are not scaled and remain under control or go into targeted tests.
The Horoshop, Google Sheets, Apps Script, and Meta Ads API integration extracts order UTM data, matches it with actual Meta Ads campaigns, and calculates real ad profitability at about 98% accuracy — spend, taxes, orders, CPA, average check, and ROAS.
We finally see not only spend and orders, but real return by campaign. That helps us scale strong links and keep weak ones under control.
