Google Ads Connector

Connect Google Ads to Brevo through Tajo to synchronize advertising audiences, import conversion data, and create unified customer profiles that bridge paid acquisition with lifecycle marketing.

Overview

PropertyValue
PlatformGoogle Ads
CategoryMarketing
Setup ComplexityAdvanced
Official IntegrationNo
Data SyncedCampaigns, Audiences, Conversions, Customers
Available Skills7

Features

  • Customer Match sync - Upload Brevo contact lists to Google Ads as Customer Match audiences
  • Conversion tracking - Import offline conversions from Brevo events into Google Ads
  • Audience sync - Bidirectional sync between Brevo lists and Google Ads audiences
  • Campaign reporting - Pull campaign performance data into Tajo dashboards
  • GCLID tracking - Capture Google Click IDs for offline conversion attribution
  • Smart bidding data - Feed conversion value data back to Google for bid optimization
  • Lead form sync - Import Google Ads lead form submissions into Brevo contacts

Prerequisites

Before you begin, ensure you have:

  1. A Google Ads account with API access enabled
  2. A Google Cloud project with the Google Ads API enabled
  3. OAuth 2.0 credentials (Client ID and Client Secret)
  4. A Google Ads Developer Token (apply at Google Ads API Center)
  5. A Brevo account with API access
  6. A Tajo account with API credentials

Authentication

OAuth 2.0

Google Ads API uses OAuth 2.0 for authentication. You need to obtain a refresh token through the OAuth consent flow.

Terminal window
# Required OAuth scopes
https://www.googleapis.com/auth/adwords

Developer Token

A Developer Token is required for all Google Ads API requests and must be approved by Google.

Terminal window
# Set up authentication headers
curl -X POST https://googleads.googleapis.com/v18/customers/1234567890/googleAds:search \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "developer-token: DEVELOPER_TOKEN" \
-H "login-customer-id: MANAGER_ACCOUNT_ID"

Configuration

Basic Setup

connectors:
google_ads:
enabled: true
developer_token: "your-developer-token"
oauth:
client_id: "your-client-id"
client_secret: "your-client-secret"
refresh_token: "your-refresh-token"
customer_id: "123-456-7890"
login_customer_id: "111-222-3333" # Manager account (optional)
# Data sync options
sync:
customer_match: true
conversions: true
campaigns: true
lead_forms: true
# Conversion tracking
conversions:
action_id: "123456789"
default_currency: "USD"

Customer Match Configuration

Upload Brevo contacts as Google Ads audiences:

customer_match:
enabled: true
lists:
- brevo_list_id: 5
audience_name: "All Customers"
match_type: "CONTACT_INFO"
- brevo_list_id: 7
audience_name: "High Value Customers"
match_type: "CONTACT_INFO"
# Data fields to match
match_fields:
- email
- phone
- first_name
- last_name
- country_code
- zip_code
# Sync schedule
schedule: "daily"
sync_mode: "mirror" # mirror, append, or remove

Offline Conversion Import

conversion_import:
enabled: true
conversion_action: "purchase"
gclid_attribute: "GCLID" # Brevo attribute storing GCLID
conversion_events:
- brevo_event: "order_completed"
conversion_name: "Purchase"
value_field: "revenue"
- brevo_event: "subscription_created"
conversion_name: "Subscription"
value_field: "plan_value"

API Endpoints

MethodEndpointDescription
POST/v18/customers/{id}/googleAds:searchSearch campaigns and resources (GAQL)
POST/v18/customers/{id}/googleAds:searchStreamStream search results
POST/v18/customers/{id}/offlineUserDataJobs:createCreate Customer Match upload job
POST/v18/customers/{id}/conversionUploads:uploadClickConversionsUpload offline conversions
POST/v18/customers/{id}/conversionUploads:uploadCallConversionsUpload call conversions
GET/v18/customers/{id}/campaignBudgetsGet campaign budgets
POST/v18/customers/{id}/customerLists:mutateManage customer lists

Code Examples

Initialize Google Ads Connector

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
// Connect Google Ads account
await tajo.connectors.connect('google-ads', {
developerToken: process.env.GOOGLE_ADS_DEV_TOKEN,
clientId: process.env.GOOGLE_OAUTH_CLIENT_ID,
clientSecret: process.env.GOOGLE_OAUTH_CLIENT_SECRET,
refreshToken: process.env.GOOGLE_OAUTH_REFRESH_TOKEN,
customerId: '123-456-7890'
});

Upload Customer Match Audience

// Sync a Brevo list to Google Ads Customer Match
await tajo.connectors.syncAudience('google-ads', {
brevoListId: 5,
audienceName: 'High Value Customers',
matchType: 'CONTACT_INFO',
syncMode: 'mirror'
});

Import Offline Conversions

// Upload offline conversions from Brevo order events
await tajo.connectors.uploadConversions('google-ads', {
conversionAction: 'customers/123456/conversionActions/789',
conversions: [
{
gclid: 'CjwKCAiA...',
conversionDateTime: '2024-01-15 10:30:00-05:00',
conversionValue: 89.99,
currencyCode: 'USD'
}
]
});

Query Campaign Performance (GAQL)

// Query campaign metrics using Google Ads Query Language
const query = `
SELECT
campaign.name,
campaign.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.impressions DESC
LIMIT 20
`;
const results = await tajo.connectors.query('google-ads', { gaql: query });

Rate Limits

ResourceLimitDetails
API requests15,000/dayPer developer token
Mutate operations10,000/dayPer customer account
GAQL queries1,500/dayPer customer account
Customer Match uploads10 jobs/dayPer customer list
Conversion uploads2,000/requestPer upload batch
Page size10,000 rowsMax per search response

Developer Token Approval

Google Ads API requires an approved Developer Token. Apply through the Google Ads API Center in your Manager account. Test accounts have reduced rate limits.

Troubleshooting

IssueCauseSolution
DEVELOPER_TOKEN_NOT_APPROVEDToken pending reviewWait for Google approval or use test account
CUSTOMER_NOT_FOUNDWrong customer IDRemove hyphens from customer ID or check manager account
Customer Match low match rateInsufficient dataInclude multiple identifiers (email, phone, name, zip)
Conversions not appearingAttribution windowConversions may take up to 24 hours to process
OAUTH_TOKEN_EXPIREDRefresh token invalidRe-authenticate and obtain a new refresh token
PERMISSION_DENIEDInsufficient accessCheck API access level and account linking

Best Practices

  1. Use a Manager account - Manage multiple Ads accounts through a single Manager (MCC) account
  2. Hash Customer Match data - Always SHA-256 hash PII before uploading to Customer Match
  3. Track GCLIDs - Store Google Click IDs in Brevo attributes for offline conversion tracking
  4. Batch conversion uploads - Group conversions into daily batches rather than real-time uploads
  5. Use GAQL for reporting - Leverage Google Ads Query Language for flexible campaign reporting
  6. Monitor match rates - Track Customer Match audience match rates and improve data quality
  7. Set up Enhanced Conversions - Use Enhanced Conversions for more accurate conversion measurement

Security

  • OAuth 2.0 - Secure token-based authentication with refresh tokens
  • SHA-256 hashing - Customer Match data is hashed before upload
  • Data minimization - Only required fields are transmitted to Google
  • Google Cloud compliance - SOC 2, ISO 27001, and GDPR compliant
  • Scoped access - API permissions scoped to specific customer accounts
  • Audit logging - All API requests logged in Google Ads change history

Open-Source Implementation Map

This section is derived from official or public repository material discovered for the Google Ads connector. Use it as the engineering companion to the setup guide above: it shows where the API surface lives, what implementation assets exist, and how Tajo should translate them into reliable Brevo sync behavior.

Repository Snapshot

RepositoryCommitLanguages / formatsFiles
googleads/google-ads-mcp0d15712Python (32), Markdown (3), JSON (3), YAML (1), gitignore (1), codeowners (1)46

Integration Shape

graph LR
Source["Google Ads API / repository"] --> Auth["Auth and scopes"]
Source --> Objects["Objects, events, and schemas"]
Auth --> Tajo["Tajo connector runtime"]
Objects --> Tajo
Tajo --> Brevo["Brevo contacts, attributes, lists, campaigns"]
Tajo --> Ops["Backfill, cursor, retries, logs"]

What To Reuse

  • Google Ads MCP Server
  • This repo contains the source code for running an
  • MCP server that interacts with the
  • Google Ads API.
  • Tools

Tajo Revamp Checklist

  • Keep authentication setup aligned with the vendor docs and the public repository’s current API shape.
  • Map primary resources into explicit Tajo sync objects with stable external IDs.
  • Prefer cursor-based or updated-at incremental sync where the API exposes it; otherwise document the fallback.
  • Treat webhook handlers as idempotent and replay-safe, especially for order, contact, ticket, and campaign events.
  • Capture pagination, rate limits, retry headers, and partial-failure behavior in connector smoke tests.
  • Keep examples small and runnable against sandbox or test-mode accounts.

Sources

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI Assistant

Hi! Ask me anything about the docs.