Connecting Meta Ads
How to connect your Meta (Facebook/Instagram) Ads account so spend and performance show up in Ordinary reports.
Connecting Meta Ads
Connecting Meta Ads requires Starter or higher. Free-tier stores see organic + pixel attribution but no paid-ad spend or performance.
Meta is how you pull Facebook, Instagram, Reels, and Audience Network campaign spend + performance into Ordinary.
Before you start
- You’re on Starter or higher.
- You have admin access on the Meta Business Manager that owns the ad account.
- Your Facebook account has
ads_readpermission on that ad account.
Step 1 — start the OAuth flow
- Open Settings → Integrations → Meta.
- Click Connect Meta account.
- You’ll be redirected to Facebook to sign in.
Ordinary requests these permissions:
ads_read— pull campaign, ad-set, and ad data.ads_management— minimal (read-only in practice; Meta bundles it).business_management— see which business managers and ad accounts your user has access to.
Step 2 — pick an ad account
After approving, you’ll land on a picker showing every ad account your Facebook user can see. Select the one that runs ads for your Shopify store.
If you run multiple ad accounts per store (e.g. brand vs. DTC performance), pick the primary one now — we only support one Meta ad account per Shopify store in the public app today.
Step 3 — wait for first sync
Ordinary immediately kicks off:
- Last 60 days of daily campaign data — ~3-10 minutes depending on volume.
- Ad-set and ad-level data — same window, pulled after campaigns.
- Creative thumbnails — for the Creatives page (Starter+).
You can keep using the app — the sync runs in the background. The Settings → Integrations → Meta card shows a progress indicator.
After it’s connected
- Campaigns → Meta — see spend, impressions, clicks, orders attributed, revenue attributed, ROAS. See Campaigns — Meta ads.
- Creatives — (Starter+) thumbnails of your running ads with per-ad performance. See Creatives.
- Attribution reports — Meta appears as a source in UTM breakdowns alongside organic + other paid channels.
Refresh cadence
- Today’s data — hourly.
- Historical (yesterday+) — finalized each morning for the previous day’s full data (Meta takes a few hours post-UTC-midnight to close their own reporting windows).
- On-demand refresh — click Refresh on Settings → Integrations → Meta to force-pull. Rate-limited to once every 15 minutes per store.
You can monitor sync progress for every connected integration at Settings → Sync status — per-integration last-sync timestamp, last-data timestamp, and active backfill jobs with progress indicators.
Disconnecting
Settings → Integrations → Meta → Disconnect.
This revokes Ordinary’s access token with Meta, stops future syncs, and marks historical ad data as read-only in the app. Your past reports stay visible.
To fully delete ad data, also click Delete historical Meta data in the disconnect confirmation dialog.
Troubleshooting
- “Needs reauth” — token expired (happens every 60 days per Meta policy unless your Business Manager has long-lived tokens enabled). Click Reconnect.
- Ad account missing from picker — your Facebook user doesn’t have
access to that ad account in Business Manager. Ask a BM admin to
grant
ads_readon your user. - Zero spend for yesterday — usually a sync timing issue. See Meta data is stale or empty.
- Numbers don’t match Meta Ads Manager — expected. Ordinary cross-references Meta spend against pixel-observed attribution, which uses click-only data. See Campaigns — Meta ads § Click-through vs view-through.