Step 6 — Connect Meta and Google
Link Meta and Google Ads to import campaigns, spend, and performance data
This page is the In the app track for step 6 of the golden path. The agent track is at the bottom, under With the API / an AI agent.
Connecting your ad platforms lets Atribu pull in your campaigns, ad sets (or ad groups), individual ads, and daily spend data. This is what makes it possible to calculate ROAS (Return on Ad Spend) -- the ratio of revenue earned to money spent on advertising. Without this connection, Atribu can still track visitors and conversions, but it cannot tell you which specific campaigns are profitable.
What gets synced
Once connected, Atribu automatically imports:
| Data | Description |
|---|---|
| Campaigns | All campaigns in your ad account, including name, status, and objective |
| Ad sets / Ad groups | The targeting groups within each campaign |
| Ads | Individual ad creatives, including thumbnails and video references |
| Daily spend | How much you spent each day, broken down by campaign, ad set, and ad |
| Impressions | How many times your ads were shown |
| Clicks | How many times people clicked your ads |
Performance metrics like CPM (cost per thousand impressions), CPC (cost per click), and CTR (click-through rate) are calculated automatically from this data.
Connect your platforms
Open Integrations
In your Atribu dashboard, go to Settings > Integrations.
Click Connect Meta
Find the Meta card and click Connect. You will be redirected to Facebook.
Authorize in Facebook
Log in to Facebook (if not already) and review the permissions Atribu is requesting:
- ads_read -- Read your ad account data (campaigns, spend, performance)
Click Continue to authorize.
Select ad accounts
After authorization, choose which ad accounts you want to sync. You can select multiple accounts if you manage ads for several businesses.
Done
Atribu begins syncing your data immediately. You will see campaigns and spend data in your dashboard within a few minutes.
Sync frequency
Atribu syncs your Meta ad data automatically. After the initial import (which pulls historical data), updates arrive throughout the day. Spend data for the current day may take a few hours to reflect the latest numbers, as Meta's reporting API has its own delays.
Re-authorization
If Atribu adds new features that require additional permissions, you may need to reconnect your Meta account. When this happens, you will see a banner in Settings. Facebook only shows the permissions dialog when Atribu explicitly requests it, so the reconnection process is quick -- your existing data is preserved.
Open Integrations
In your Atribu dashboard, go to Settings > Integrations.
Click Connect Google Ads
Find the Google Ads card and click Connect. You will be redirected to Google.
Sign in with Google
Sign in with the Google account that has access to your Google Ads account. Review the permissions and click Allow.
Select your customer account
If your Google account has access to multiple Google Ads customer accounts (common for agencies using a Manager Account), select the one you want to sync.
Done
Atribu begins syncing your Google Ads data. Campaigns, ad groups, ads, and spend data will appear in your dashboard within minutes.
Manager accounts
If you use a Google Ads Manager Account (MCC), you can connect individual client accounts underneath it. Each client account syncs independently.
Troubleshooting
I do not see my ad accounts
- Meta: Make sure you are logging in with a Facebook account that has at least "Advertiser" access to the ad account. If you manage ads through a Business Manager, the ad account must be shared with your personal Facebook account.
- Google Ads: Make sure you are signing in with the Google account that has direct access (or Manager Account access) to the Google Ads customer account.
Data is missing or incomplete
- Recent changes: After connecting, the initial sync pulls historical data. This can take a few minutes for accounts with many campaigns. Check back in 10-15 minutes.
- Paused campaigns: Atribu imports all campaigns regardless of status (active, paused, archived). If you do not see a specific campaign, check that you connected the correct ad account.
- Spend shows zero: Some campaigns (especially brand awareness campaigns) may have impressions but very low or zero recorded spend on certain days. This is normal.
I need to reconnect
If your connection stops working (for example, if you changed your Facebook password or revoked access), go to Settings > Integrations, find the platform, and click Reconnect. Your historical data is preserved.
With the API / an AI agent
A connect is an OAuth consent: it needs a browser and a person who can grant it. What an agent can do is start it, hand the URL over, and detect completion.
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
"https://api.atribu.app/api/v1/connections"Only connected and syncing are working. Anything else is a connection that
exists and is not delivering — readiness reports it as degraded, never
missing, because the fix is to re-connect.
When one consent exposes several ad accounts, the connect lands pending and the choice is explicit:
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
"https://api.atribu.app/api/v1/connections/pending/meta_ads"
curl -sX POST https://api.atribu.app/api/v1/connections/pending/meta_ads/finalize \
-H "Authorization: Bearer atb_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"account_id": "act_1234567890"}'Mint a session-less URL instead of sending them to the console (#1046):
curl -sX POST https://api.atribu.app/api/v1/connections/meta_ads/handoff \
-H "Authorization: Bearer atb_live_YOUR_KEY" \
-H "Content-Type: application/json" -d '{}'meta_ads · google_ads · google_search_console · gohighlevel · stripe ·
mercadopago. The response is a hand-off — the same
shape GET /api/v1/handoffs/{id} returns, so mint and poll need one parser.
Whoever holds url completes it: signed out, on a phone, with no Atribu
account. Poll until status settles.
A completed connect answers one of two result shapes: connection_id when the
consent resolved to exactly one account, or pending_selection when a human
must choose — which is what the two pending routes above are for. A failure
names its reason (provider_denied, no_candidates, connect_failed,
token_exchange_failed, origin_not_allowed, handoff_unusable).
Shopify cannot have one, and that is not an omission
A Shopify install begins inside Shopify — the merchant opens the App Store listing and Shopify calls Atribu with an HMAC-signed request. There is no consent Atribu can start on the merchant's behalf, so a hand-off URL would have nowhere to go. Send them to the listing. See Connections.
Over MCP
start_connect mints the same hand-off and get_handoff polls it — both thin
wrappers on the two routes above, so the MCP and REST journeys are the same
journey (#1058).
Stop polling — subscribe (#1049)
Subscribe to connection.connected and connection.reconnect_required with
providers: ["atribu"] and stop polling entirely. See
Webhooks.
Next steps
Step 7 — Connect your CRM
Sync contacts, deals, and appointments from your CRM
Connections API
Reading, finalizing and revoking a connection
Meta Integration Details
Video previews, CAPI conversion export, and Meta-specific configuration
Google Ads Integration Details
Conversion export, Manager Account support, and Google Ads-specific setup