Connect Meta and Google Ads over read-only OAuth. Spend syncs daily and lands in the ladder as profit after marketing. Available on every paid plan.
Advertising is usually the largest single cost after goods, and it is the one most often judged by a metric that cannot see cost at all. ROAS divides revenue by spend. It has no view of what the goods cost, what shipping cost, or what the payment processor took, so a campaign can post a healthy return on ad spend while losing money on every order it brings in.
Connecting the account replaces the guess. Spend arrives daily against real campaigns, sits in the ladder underneath contribution margin, and produces profit after marketing — the figure that answers whether the advertising paid for itself once the orders it generated were fulfilled.
Both connections use OAuth with read-only scopes. NetNet can read spend and campaign metadata; it cannot create campaigns, change budgets, pause anything or spend money. Access is revocable from Meta or Google at any time without involving NetNet.
Ad spend sync is available on every paid plan, and throughout the trial.
If any connected account has not synced in 24+ hours, a warning banner appears on the Ad spend page and the dashboard. Missing spend otherwise looks like a good month.
After connecting Meta or Google Ads, historical spend syncs for the past 12 months (365 days).
Spend pulls automatically. Yesterday's spend is in place by the time you open your dashboard.
Spend is stored by day and by campaign, then deducted at the period level to give profit after marketing. It is not divided across individual orders — see below.
This is the part worth being precise about, because it is a genuine design decision rather than a limitation.
Spend is stored by day and by campaign. At period level it is deducted from contribution margin to give profit after marketing. It is not divided across the individual orders in that period, and no order carries an ad cost of its own.
The reason is that a per-order ad cost would be fictional. Dividing a day's spend evenly across that day's orders assigns identical acquisition cost to a returning customer who came in by direct link and a first-time buyer who clicked a paid ad — and produces a precise-looking number for both that neither actually incurred. Attribution at that granularity is a modelling exercise with wide error bars, and presenting the output as a per-order fact would be the same category of error as ROAS: a number that looks solid and is not.
Period level is where the figure is defensible. Total spend over a period is exact, it reconciles to the invoice, and the profit it produces is real money rather than an allocation.
Spend in an ad account denominated differently from your store is converted at that day's exchange rate, and the rate used is stored so the conversion can be audited later rather than silently re-derived.
Timezone is the other common source of a mismatch. Platforms report in the ad account's configured timezone, which is frequently not your store's. Comparing a single day will usually show a small difference; comparing a closed month should reconcile.
If a figure looks wrong, check the closed period before the open one. Today's spend is provisional on every platform.
A connection that has not reported in over 24 hours raises a warning banner on the Ad spend page and the dashboard. It appears rather than failing quietly because silently missing spend does not look like an error — it looks like a good month.
Google tokens refresh on their own and transient failures retry with backoff, so a banner that clears itself needed nothing from you. One that persists almost always means access was revoked or the ad account was closed or restructured at the platform end; reconnecting from Settings resolves it.
Historical spend already synced is unaffected by a broken connection. Only the days after the break are missing, and they backfill when the connection is restored.
No. Spend is recorded per day and per campaign, and deducted at the period level to produce profit after marketing. Splitting a day's spend across that day's orders would invent a per-order figure that no platform reports and that no order actually incurred.
Every paid plan — Starter, Growth, Pro and Scale — and it is active throughout the trial. Stores without an active subscription are gated at the plan wall rather than on this page specifically.
Usually currency or window. Spend is converted to your store currency at daily rates, and the platform reports in the ad account's currency and its own timezone. A same-day comparison will differ; a full closed month should reconcile closely.
If any connected account has not synced for more than 24 hours, a warning banner appears on the Ad spend page and the dashboard. Google tokens refresh automatically and transient failures retry with backoff, so a persistent banner usually means access was revoked at the platform.
No. The OAuth scopes requested are read-only. NetNet reads spend and campaign metadata; it cannot create, edit, pause or spend against your account.