Connect Google Ads
OAuth flow at /connect/google-ads. Scope: adwords. Import direct accounts or all MCC-managed customers in one flow.
Written By Salvatore Sinigaglia
Last updated About 1 hour ago
OAuth flow at /connect/google-ads. Scope: adwords. Import direct accounts or all MCC-managed customers in one flow.
Connect Google Ads
Open /connect/google-ads, click Connect, sign in to Google with an account that has Google Ads access, grant the requested scopes. Pick which customer accounts (direct or via MCC) to import. Sync starts within 15 minutes.
Who is this for
Mediabuyers, admins, owners, and super_admins running Google Ads. The mediabuyer role or an admin/owner/super_admin role is required to connect (the manager role is not permitted on the connect page).
Before you start
You need:
- A Google account with access to at least one Google Ads customer account (direct) OR an MCC (manager account)
- Browser pop-ups enabled for
app.wevion.ai - The Wevion role mediabuyer, admin, owner, or super_admin
If you're new to MCC vs direct accounts, read gog-102 MCC vs direct first.
How to connect
Step 1: Open the connector page
In the sidebar click Connect β Google Ads or jump to /connect/google-ads. The page shows the permissions Wevion will request plus a list of already-connected Google accounts (if any).
Step 2: Click Connect
Click Connect (top right). A Google OAuth popup opens.
Step 3: Sign in to Google and authorize
In the popup:
- Log in with your Google account
- Google shows the permissions Wevion is requesting. Verified in
apps/backend/src/providers/google/core/constants.ts(GOOGLE_ADS_SCOPES), Wevion requests 5 scopes:https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/content,openid,email, andprofile - Click Continue
These 5 scopes map to three functional groups β the minimum Wevion needs to run and report on your Google Ads:
- Manage campaigns β
adwords: read and write campaigns, ad groups, ads, keywords, audiences, and conversions on the customers you can access. - Read performance / product data β
content: Merchant Center product data for Shopping campaigns. - Identify the account β
openid,email,profile: identify the connecting Google account.
Wevion never asks for Gmail, Drive, or Calendar access β only what an ad-management tool needs.
Step 4: Asset selection
After OAuth completes, Wevion fetches your accessible customer accounts:
- Direct customer: appears as a single row with customer name + ID
- MCC: appears as a manager row that expands to show all child customers Wevion can access via the MCC
Tick which customers to import. Click Import selected. Backend creates google_token + google_ad_account rows.
Step 5: First sync
The first sync backfills the last 30 days of campaigns, ad groups, ads, keywords, audiences, and insights (recurring syncs use a shorter lookback). For typical accounts this takes 5-20 minutes.
Status badge per customer: Syncing β Synced when done.
What you'll see when it works
- Connector card: green badge, Connected
- Account count visible (e.g. "3 customers imported")
- Dashboard at
/dashboardpopulates within 15-30 minutes - Ads Manager at
/ads-managershows imported campaigns - Toast: "Imported N campaigns from Google Ads"
Customer accounts vs Manager accounts
Wevion uses Google's loginCustomerId header internally (verified in apps/backend/src/providers/google/domains/account.provider.ts) to scope API calls when accessing customers via MCC. You don't need to think about this β Wevion handles it.
See gog-102 for the full pattern.
Conversions setup
After connecting, set up at least one conversion action in Google Ads, then import it into Wevion (the import is triggered manually via POST /api/v1/google/conversion-actions/sync, not on the 15-minute sync). See gog-103 conversions setup.
Multiple Google users
Like Meta, different teammates can each connect their own Google account β Wevion sees the union. Useful for agencies where the client manages their own Google Ads and grants the agency access via different Google accounts per client.
Token model
Google's refresh token has no fixed expiry (it lives until the user revokes the app in Google Account settings, or after up to 6 months of inactivity for small apps). A background job runs every 10 minutes and silently refreshes any short-lived access token due to expire within the next ~15 minutes.
If refresh fails with invalid_grant (user revoked, account suspended), the token is marked EXPIRED and the connector card turns yellow with a Reconnect button. See gog-105 token refresh.
Wevion uses Google Ads API (not AdWords)
Heads up: Google rebranded "AdWords API" to "Google Ads API" years ago. Wevion uses the current Google Ads API (verified vs apps/backend/src/providers/google/core/constants.ts GOOGLE_ADS_BASE_URL = https://googleads.googleapis.com/...). Some legacy documentation around the internet still references "AdWords" β Wevion uses current naming throughout.
Common issues
- OAuth popup blocked: enable popups for
app.wevion.aiand retry. - "No customer accounts found": your Google account has no Google Ads access. Verify at ads.google.com.
- OAuth fails with
invalid_grant: clock skew on your machine β sync your OS clock. Or Wevion's OAuth app rejected for the scope (rare; contact support). - Customer not visible in import list: Google user lacks access. Have the Google Ads account admin grant the user access at the customer level.
- MCC link missing: even with MCC role, you must have explicit access to each customer. Verify the MCC has the customer linked + your user has role on the MCC.
- Sync stuck > 1h: rate limit on Google API side. Wait, retry from card menu.
Security
- Access and refresh tokens stored encrypted at rest (
GOOGLE_TOKEN_ENCRYPTION_KEYenv), including the rotated access token on each refresh - Scopes requested:
adwords,content(Merchant Center), plusopenid/email/profilefor identity β no Gmail, Drive, or Calendar data - Never visible to Wevion staff
- Revoke any time at myaccount.google.com/permissions
FAQ
What Google permissions does Wevion request?
Wevion requests 5 scopes: https://www.googleapis.com/auth/adwords, https://www.googleapis.com/auth/content, openid, email, and profile. adwords covers reading and writing campaigns, ad groups, ads, keywords, audiences, and conversions; content covers Merchant Center product data for Shopping; the last three identify the connecting Google account. Wevion never asks for Gmail, Drive, or Calendar access, and you can revoke it any time at myaccount.google.com/permissions.
Do Google Ads tokens expire in Wevion?
Google's refresh token has no fixed expiry β it lives until you revoke the app in Google Account settings, or after up to 6 months of inactivity for small apps. A background job runs every 10 minutes and refreshes any short-lived access token due to expire within about 15 minutes. If refresh fails with invalid_grant, the token is marked EXPIRED and the connector card turns yellow with a Reconnect button.
Can multiple teammates connect Google Ads?
Yes. Like Meta, each teammate can connect their own Google account and Wevion sees the union of accessible customers. This is useful for agencies where each client manages their own Google Ads and grants access through a different Google account per client.
Why does Wevion show "No customer accounts found"?
Your Google account has no Google Ads access. Verify at ads.google.com that the account can reach at least one customer. If a specific customer is missing from the import list, the Google Ads account admin must grant your user access at the customer level, then retry the connection.
How long does the first Google Ads sync take?
The first sync backfills the last 30 days of campaigns, ad groups, ads, keywords, audiences, and insights (recurring syncs use a shorter lookback). For typical accounts this takes 5-20 minutes, and each customer shows a Syncing badge that switches to Synced when done. Your dashboard populates within 15-30 minutes.