vTilt
Why vTiltHow It WorksFeaturesFAQDocs
Docs / Google Ads
Quick startEvent forwarding
MCP server
Guides
OverviewAuthenticationOAuthAgent skills (prompts)AI intelligenceGoogle Ads
Client setup
CursorClaude DesktopVS CodeCodex
Realtime
Debug ViewRealtime Dashboard
Integration guides
Frontend frameworks
Next.jsNuxt.jsVue.jsReactReact RouterRemixGatsbySvelte / SvelteKitAstroAngularTanStack StartDocusaurus
Backend frameworks
NestJSHonoCloudflare WorkersDjangoFlaskLaravelPhoenixRuby on Rails
Backend languages
PythonPHPRubyElixirGoJava.NET / C#Rust
Stack guides
Vue + PHP
SDK
Browser SDK
InstallScript bundlesEvent trackingAutocaptureIdentify & aliasWeb VitalsSession recordingChat widgetFeature readinessRemote configurationReverse proxyDebug logging
Node SDK
Install & setupCapture, identify & aliasContext & shutdown

Documentation

vTilt
Quick startEvent forwarding

MCP server

OverviewAuthenticationOAuthAgent skills (prompts)AI intelligenceGoogle Ads

Realtime

Debug ViewRealtime Dashboard

Integration guides

SDK

Google Ads

Connect a Google Ads account to a vTilt project, then read and manage campaigns, ad groups, ads, keywords, and Performance Max through the vTilt MCP server — no separate Google Ads MCP server required.

Note

Note: Part of the MCP server docs — the overview lists every MCP tool; this page covers the Google Ads tools and the one-time connection they require.

vTilt can manage your Google Ads account through the same MCP endpoint your AI client already uses for analytics. There is no second server to run: the google-ads-* tools are always listed in tools/list so your agent knows the capability exists. Calls succeed only after you connect an account in project settings (otherwise the server returns feature_disabled).

Important

Important: The Google Ads tools act on your Google Ads advertiser account (campaigns, ad groups, ads, keywords, spend). They are completely separate from vTilt's on-site analytics. query-run reads your website's events; google-ads-search reads your Google Ads account.

#Connect Google Ads (required first)

The tools are listed immediately, but return feature_disabled until a project has a connected Google Ads account.

  1. Open Project → Settings → Google Ads.
  2. Click Connect Google Ads and complete the Google consent screen. vTilt requests the https://www.googleapis.com/auth/adwords scope.
  3. After the redirect, vTilt discovers the accounts you can access and lists them. Pick the default account the tools should use when a call doesn't name one.
  4. If you manage accounts through an MCC (manager account), set the manager (login) customer id.

vTilt stores the OAuth refresh token encrypted at rest and holds the platform developer token server-side. Your AI client never sees or sends credentials — tool inputs accept neither a refresh token nor a user id.

Tip

Tip: Connecting is a one-time, per-project action done by a workspace admin. Linked accounts and the default selection are shared by everyone using that project's MCP connection.

To stop access, click Disconnect on the same page — vTilt deletes the stored token and linked accounts. The tools stay in tools/list for discoverability; calls return feature_disabled until you connect again.

After switch-project, check features.google_ads in the tool response (or call context-get). You can call google-ads-* tools as soon as that flag is true — re-run tools/list only if your MCP client caches the catalog and still omits other feature-gated tools (replay, AI memory).

#Permissions

Google Ads access is gated by a dedicated google_ads permission resource:

ActionWho has itWhat it allows
google_ads:readmembers and aboveList accounts, read account data via GAQL
google_ads:writeowners and adminsCreate / update / pause / remove campaigns, ad groups, ads, keywords, and more

Write tools additionally require a write-scoped credential (an mcp:write OAuth scope or a personal API key with write access), and every write is recorded in the project audit log.

#Reading account data

Always learn the valid fields before querying — the tools steer you to do this so you never guess field names.

  1. google-ads-resource-metadata-get — pass a resource (e.g. campaign, ad_group_ad, keyword_view) to get the selectable fields.
  2. google-ads-search — assemble a read-only query from resource, fields, and optional conditions, order_by, limit. vTilt builds and validates the GAQL server-side.
  3. google-ads-customers-list — see which accounts are linked to the project.

Every tool takes an optional customer_id (dashed 123-456-7890 or digits 1234567890 — both work). Omit it to use the project's default account.

A search for the last 30 days of campaign spend looks like:

{
  "resource": "campaign",
  "fields": [
    "campaign.id",
    "campaign.name",
    "metrics.cost_micros",
    "metrics.clicks"
  ],
  "conditions": [
    "campaign.status = 'ENABLED'",
    "segments.date DURING LAST_30_DAYS"
  ],
  "order_by": "metrics.cost_micros DESC",
  "limit": 25
}
json

Note

Note: Money is returned in micros — divide cost_micros by 1,000,000 to get the currency amount.

#Managing the account (writes)

Write tools mutate the connected account. They cover the common workflows:

ToolDoes
google-ads-campaign-status-setEnable / pause / remove a campaign
google-ads-campaign-budget-updateChange a campaign budget
google-ads-ad-group-create, google-ads-ad-group-status-setCreate or set the status of an ad group
google-ads-responsive-search-ad-create, google-ads-ad-status-setAdd a responsive search ad, set ad status
google-ads-keyword-add, google-ads-keyword-status-set, google-ads-negative-keyword-addManage keywords and negatives
google-ads-campaign-ai-max-update, google-ads-ad-group-ai-max-updateConfigure AI Max
google-ads-campaign-webpage-criterion-add, google-ads-page-feed-asset-set-create, google-ads-page-feed-assets-addAI Max / DSA webpage targeting and page feeds
google-ads-pmax-asset-group-create, google-ads-responsive-display-ad-create, google-ads-ad-group-user-list-addPerformance Max asset groups, display ads, audience targeting

Tip

Tip: Every write tool accepts validate_only. Set it to true first — Google checks the change and returns any errors without applying it. Then repeat the call without validate_only to commit. This is the safest way to build complex mutations like Performance Max asset groups.

Warning

Warning: Setting a status to REMOVED is permanent and cannot be undone. Budget amounts are in micros (e.g. a $50.00 daily budget is 50000000).

#Troubleshooting

MessageMeaningFix
feature_disabled (feature: google_ads)No Google Ads account is connected to this projectConnect one in Project → Settings → Google Ads
invalid_arguments with next: google-ads-customers-listThe customer_id you passed isn't linked to this projectCall google-ads-customers-list and use a listed account
The tools don't appear at allAccount not connected, or your key lacks google_ads:readConnect the account / check your permissions
Reconnect prompt in settingsThe Google refresh token was revoked or expiredClick Connect Google Ads again
PreviousAI intelligenceNextCursor

On this page

  • Connect Google Ads (required first)
  • Permissions
  • Reading account data
  • Managing the account (writes)
  • Troubleshooting