Connect a Meta Ad Account — spend and ROAS in the UTM report

Authorize your Meta Ads account in Projects → Ad Accounts to import ad spend, then turn on the Spend and ROAS columns in the UTM report to see which campaigns actually pay off.

web2wave already knows what every campaign earns — it stores the payments that came from each UTM tag. What it doesn't know is what those campaigns cost, because that number lives in Meta Ads Manager.

Connecting a Meta Ad Account closes the loop. web2wave pulls your ad spend and puts it next to your revenue in the UTM report, so you can read profitability per source, campaign, ad set, and ad without exporting anything into a spreadsheet.

In the cabinet, the tab describes it in one line:

Connect your Meta Ads account to import spend data and show ROAS in UTM report.


What you get

ColumnWhat it shows
SpendAd spend imported from the connected Meta Ad Account, matched to the UTM values of the row.
ROASReturn on ad spend — revenue web2wave recorded for that row, divided by the spend imported for it.
ClicksClicks imported from the ad account for the row.
Conversion EventsConversions the ad account reported for the row, so you can compare Meta's view with web2wave's own numbers.

Revenue, subscriptions, and funnel numbers in the UTM report work without any of this. The ad account only adds the cost side.


Before you start

  1. Your ads carry UTM tags. Spend is matched to report rows by UTM values, so an ad with no UTMs (or with UTMs that change between runs) has nothing to line up with. Use the dynamic Meta macros for campaign, ad set, and ad names — see Meta Ads launch & pixels for the recommended link format.
  2. You can access the ad account in Meta. You authorize with your own Meta login, so you need a role on the ad account that allows reading its performance data. If you are not sure, ask whoever administers the Business Manager to give you access first.
  3. Payments are tracked in web2wave. ROAS divides revenue by spend, so revenue has to be there. If your checkout happens outside web2wave, send the purchase back with the Web2Wave JS SDK first.

Connect the ad account

  1. In the left sidebar, open Projects and open the project you want to connect. Ad accounts are connected per project, so repeat this for every project that runs paid traffic.
  2. Go to the Ad Accounts tab.
  3. Click Add Ad Account.
  4. In the modal, choose the account type Meta (Facebook/Instagram).
  5. Click Authorize to Meta Ads Account and complete the Meta login window. Approve the request for your ads data and pick the ad account you want to import.
  6. Confirm the connection. The account then appears in the list on the Ad Accounts tab, and web2wave starts pulling its spend.

TikTok and Google Ads are listed but not available yet. Both appear in the account type list as coming soon and can't be selected. Spend import works with Meta today. This is separate from pixels and Conversions API — TikTok and Google event tracking does work and is set up in Project settings → Analytics.

If you can't use the Meta login

The older Access Token method is still available on the same screen: instead of authorizing through Meta, paste an access token for the ad account manually. Use it when the OAuth window can't be completed — for example when the person with access to the ad account can't log in from your cabinet, or when your Business Manager restricts third-party logins.

The authorized connection is the easier of the two: there is no token to copy around, and nothing to re-paste when it expires. If a manual token stops working, spend simply stops updating, so re-connect the account when you see the Spend column stop moving.


Turn on the Spend and ROAS columns

Cost columns are not in the report by default — you add them.

  1. Open UTM report in the left sidebar.
  2. Click Add ROAS column.

The button carries its own reminder: hover it and the tooltip says connect Meta Ads to import Spend. If you haven't connected an ad account yet, do that first — the columns need imported spend to have anything to divide by.

You can also switch the columns on for the whole project: in Project → Analytics, the Show pLTV-XX / ROAS columns in UTM report toggle controls whether the predicted-LTV and ROAS columns are part of the report by default, so your team doesn't have to add them by hand each time. The number in the label is the day horizon the prediction uses.


Read the report

The UTM report is hierarchical: start at Source, then expand a row with the + button to drill into campaign, ad set, and finally individual ads. Spend and ROAS are summed at every level, so you can start from "is Meta profitable at all" and end at "which three ads are burning the budget".

A few things worth knowing before you make decisions on these numbers:

  • Spend is imported once every 24 hours. Today's row will look incomplete until the next import runs — compare finished days, not the day in progress.
  • ROAS is only as complete as your revenue window. A funnel with a trial earns most of its money days after the click, so a young campaign always looks worse than it is. Read ROAS together with the pLTV columns, and give a new campaign the same number of days you give your trials.
  • web2wave and Ads Manager will not match to the cent. web2wave attributes a payment to the UTM values the user actually arrived with; Meta attributes conversions to its own click and view windows (see the attribution notes in Advanced analytics and event tracking). The Clicks and Conversion Events columns exist so you can see the size of that gap instead of guessing at it.

Troubleshooting

The Spend column is empty.
Check, in this order: the ad account is connected on this project's Ad Accounts tab; the campaign actually spent money in the period you're looking at; and the import has run since then (it runs once every 24 hours, so a campaign launched this morning won't be there yet).

Spend appears on some rows but not others.
That is a UTM matching problem, not an import problem. Ads whose links have no UTM tags — or whose campaign, ad set, or ad names were renamed in Ads Manager after launch — end up on a different row from the traffic they bought. Keep dynamic macros in the link so the names always follow the campaign, and avoid renaming live campaigns.

Traffic shows up with no spend at all and no clicks.
Check the link itself. A # anywhere before the query string drops everything after it, so the UTM values never reach the server — this is the same failure described in the UTM troubleshooting on Advanced analytics and event tracking.

ROAS looks far too low.
Usually the revenue window, not the math: trials, weekly plans, and refunds all land after the click. Also confirm nothing is missing on the revenue side — off-site checkouts have to report back via the JS SDK, otherwise the spend is real and the revenue isn't counted.

Spend stopped updating.
Most often access changed on the Meta side: someone removed your role on the ad account, or a manually pasted access token expired. Re-connect the account with Authorize to Meta Ads Account.

A teammate can't see the report.
UTM reports are available to the Analyst role and above. Connecting an ad account is a project-level change — see Team members and access levels.


Related pages