Google Ads¶
Overview¶
The Google Ads task integrates BaseCloud CRM with Google Ads API v19, enabling automated campaign analytics, offline conversion tracking, and custom reporting using GAQL (Google Ads Query Language).
Key Features:
- 3 Actions: Get metrics, upload offline conversions, custom GAQL queries
- OAuth 2.0 Authentication: Secure Google integration with automatic token refresh
- GAQL Support: SQL-like query language for advanced reporting
- Offline Conversions: Enhanced conversion tracking with hashed PII
- Metrics Aggregation: Campaign performance across date ranges
- Developer Token: Enterprise-level API access
Use Cases:
- Automated daily performance reporting
- Offline conversion import from CRM
- Custom analytics dashboards
- Budget optimization workflows
- Multi-account management
- ROAS tracking and alerts
Prerequisites¶
1. Google Ads Account¶
Requirements:
- Active Google Ads account
- Manager account (MCC) recommended for agencies
- Campaigns with conversion tracking enabled
- Admin access to Google Ads account
2. Google Cloud Project¶
Setup Google Cloud:
- Go to https://console.cloud.google.com
- Create new project or select existing
- Enable Google Ads API
- Create OAuth 2.0 credentials:
- Application type: Web application
- Authorized redirect URIs:
https://yourapp.basecloudglobal.com/oauth/callback - Note Client ID and Client Secret
3. Google Ads Developer Token¶
Obtain Developer Token:
- Sign in to Google Ads
- Navigate to Tools & Settings → Setup → API Center
- Apply for Developer Token
- For testing: Use test account token
- For production: Apply for Basic or Standard access
- Approval process: 24-48 hours
Access Levels:
- Test Account: Limited to test account data
- Basic: Production access, rate limits apply
- Standard: Higher limits, requires spending threshold ($10,000+)
4. OAuth Configuration in BaseCloud¶
Create App Connection:
- Navigate to BaseCloud CRM → Settings → Integrations → App Connections
- Click + New App Connection
- Select Google Ads from dropdown
- Enter credentials:
- Client ID: From Google Cloud Console
- Client Secret: From Google Cloud Console
- Developer Token: From Google Ads API Center
- Click Authorize with Google
- Authorize scope:
https://www.googleapis.com/auth/adwords - Select Google Ads account (Manager account if applicable)
- Save connection
OAuth Scopes Required:
5. Customer ID and Account Structure¶
Get Customer IDs:
- Manager Account (MCC): 10-digit ID without hyphens (e.g.,
1234567890) - Client Accounts: Sub-account IDs under manager
- Found in Google Ads top right corner or account selector
Account Hierarchy:
For automation: - Use Manager ID for multi-account access - Use specific Account ID for single-account operations
Configuration¶
Action 1: get_metrics¶
Retrieve aggregated campaign performance metrics for specified date range.
| Field | Required | Description | Example |
|---|---|---|---|
| action | Yes | Must be "get_metrics" | get_metrics |
| app_connection_id | Yes | OAuth connection ID | Select from dropdown |
| customer_id | Yes | Manager/MCC account ID | 1234567890 |
| account_id | Yes | Target Google Ads account | 9876543210 |
| metrics_list | Yes | JSON array of metrics to fetch | ["impressions","clicks","cost"] |
| date_range | Yes | Date range preset or 'CUSTOM' | LAST_30_DAYS |
| start_date | Conditional | Start date if date_range='CUSTOM' | 2024-01-01 |
| end_date | Conditional | End date if date_range='CUSTOM' | 2024-01-31 |
Date Range Options:
| Preset | Description |
|---|---|
TODAY | Today only |
YESTERDAY | Yesterday only |
LAST_7_DAYS | Last 7 days including today |
LAST_14_DAYS | Last 14 days |
LAST_30_DAYS | Last 30 days |
LAST_90_DAYS | Last 90 days |
LAST_30_60_DAYS | Days 31-60 in the past |
THIS_MONTH | Current month to date |
LAST_MONTH | Previous calendar month |
CUSTOM | Custom date range (requires start_date & end_date) |
Available Metrics:
Basic Performance: - impressions - Ad impressions - clicks - Clicks on ads - ctr - Click-through rate (calculated) - average_cpc - Average cost per click - cost - Total spend
Conversions: - conversions - Total conversions - conversions_value - Total conversion value - conversion_rate - Conversion rate (calculated) - cost_per_conversion - Cost per conversion - conversions_from_interactions_rate - Conversion rate from interactions
All Conversions (includes view-through): - all_conversions - all_conversions_value - all_conversions_from_interactions_rate - cost_per_all_conversions - value_per_all_conversions
Impression Share: - search_impression_share - Percentage of eligible impressions received - search_budget_lost_impression_share - Lost due to budget - search_rank_lost_impression_share - Lost due to ad rank
Note: Calculated metrics (ctr, conversion_rate, etc.) are computed post-aggregation.
Output Variables:
task_35001_run // true/false
task_35001_run_text // "Metrics fetched."
task_35001_metrics // Complete metrics object
task_35001_impressions // Individual metric values
task_35001_clicks
task_35001_ctr
task_35001_cost
task_35001_conversions
// ... all requested metrics
How It Works:
- Validates OAuth connection and developer token
- Builds GAQL query:
SELECT metrics.X FROM campaign WHERE segments.date DURING {range} - Fetches data from Google Ads API v19
- Aggregates metrics across all campaigns
- Calculates derived metrics (CTR, conversion rate, etc.)
- Converts cost from micros to currency (÷ 1,000,000)
- Returns unified metrics object
Example Metrics Object:
{
impressions: 125000,
clicks: 4500,
ctr: 3.6,
cost: 12500.50,
average_cpc: 2.78,
conversions: 450,
conversions_value: 45000.00,
conversion_rate: 10.0,
cost_per_conversion: 27.79,
search_impression_share: 85.5
}
Action 2: upload_offline_conversions¶
Upload offline conversion events to Google Ads for conversion tracking.
| Field | Required | Description | Example |
|---|---|---|---|
| action | Yes | Must be "upload_offline_conversions" | upload_offline_conversions |
| app_connection_id | Yes | OAuth connection ID | Select from dropdown |
| customer_id | Yes | Manager/MCC account ID | 1234567890 |
| account_id | Yes | Target Google Ads account | 9876543210 |
| conversion_action | Yes | Conversion action ID | 123456789 |
| Timestamp | Yes | Conversion datetime (ISO 8601) | 2024-02-08T14:30:00+00:00 |
| Value | Yes | Conversion value | 99.99 |
| Currency | Yes | Currency code (ISO 4217) | USD |
| Consent for ad User Data | Yes | GDPR consent status | GRANTED, DENIED, UNSPECIFIED |
| Consent for ad personalisation | Yes | Personalization consent | GRANTED, DENIED, UNSPECIFIED |
User Identifiers (at least ONE required):
Configure with setting_1 = 'upload_offline_conversions_identifier':
| Identifier | Description | Auto-Hashed |
|---|---|---|
| gclid | Google Click ID (preferred) | No |
| gbraid | iOS SKAN identifier | No |
| wbraid | iOS web-to-app identifier | No |
| Email address | Yes (SHA256) | |
| phone | Phone number (digits only) | Yes (SHA256) |
| mobile_id | Mobile advertising ID | No |
| third_party_user_id | Custom user identifier | No |
| address_info | Format: "Country Code, Postal Code" | No |
| customer_match_user_list | Customer Match user ID | No |
Additional Optional Fields:
| Field | Description | Example |
|---|---|---|
| order_id | Transaction/order identifier | ORDER-12345 |
Output Variables:
task_35001_run // true/false
task_35001_run_text // "Offline conversion uploaded successfully."
task_35001_result // Upload result object
task_35001_result.success // true/false
task_35001_result.message // Status message
How It Works:
- Validates required fields and at least one identifier
- Hashes PII (email, phone) with SHA256 automatically
- Builds conversion payload with user identifiers
- Adds GDPR consent headers
- Calls:
POST https://googleads.googleapis.com/v19/customers/{accountId}:uploadClickConversions - Returns success status
Click Identifiers vs Enhanced Conversions:
- With gclid/gbraid/wbraid: Standard click-based conversion
- Without click identifier: Enhanced conversion with hashed PII
Example Request:
{
conversions: [{
conversionAction: "customers/9876543210/conversionActions/123456789",
conversionDateTime: "2024-02-08T14:30:00+00:00",
conversionValue: 99.99,
currencyCode: "USD",
orderId: "ORDER-12345",
gclid: "EAIaIQobChMI..." // Or userIdentifiers if no click ID
}],
partialFailure: true
}
GDPR Consent Headers:
Get Conversion Actions:
Use frontend dropdown or query:
SELECT conversion_action.id, conversion_action.name, conversion_action.type
FROM conversion_action
WHERE conversion_action.status = 'ENABLED'
AND conversion_action.type IN ('WEBPAGE', 'UPLOAD_CLICKS', 'UPLOAD_CALLS')
Action 3: custom_query¶
Execute custom GAQL (Google Ads Query Language) queries for advanced reporting.
| Field | Required | Description | Example |
|---|---|---|---|
| action | Yes | Must be "custom_query" | custom_query |
| app_connection_id | Yes | OAuth connection ID | Select from dropdown |
| customer_id | Yes | Manager/MCC account ID | 1234567890 |
| account_id | Yes | Target Google Ads account | 9876543210 |
| Query | Yes | GAQL query string | See examples below |
Output Variables:
task_35001_run // true/false
task_35001_run_text // "Custom query executed successfully."
task_35001_query // Executed query string
task_35001_data // Array of result objects
task_35001_row_count // Number of rows returned
GAQL Query Examples:
Get Campaign Names and Performance:
SELECT
campaign.id,
campaign.name,
campaign.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.impressions DESC
LIMIT 100
Get Ad Group Keywords:
SELECT
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
metrics.impressions,
metrics.clicks,
metrics.cost_micros
FROM keyword_view
WHERE campaign.id = 12345
AND segments.date DURING LAST_7_DAYS
ORDER BY metrics.clicks DESC
Get Conversion Actions:
SELECT
conversion_action.id,
conversion_action.name,
conversion_action.type,
conversion_action.category,
conversion_action.status
FROM conversion_action
WHERE conversion_action.status = 'ENABLED'
Get Ad Performance by Device:
SELECT
ad_group_ad.ad.id,
ad_group_ad.ad.name,
segments.device,
metrics.impressions,
metrics.clicks,
metrics.ctr
FROM ad_group_ad
WHERE segments.date DURING THIS_MONTH
AND ad_group_ad.status = 'ENABLED'
Get Search Terms Report:
SELECT
search_term_view.search_term,
search_term_view.status,
metrics.impressions,
metrics.clicks,
metrics.conversions
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
AND metrics.impressions > 0
ORDER BY metrics.impressions DESC
LIMIT 500
GAQL Resources:
campaign- Campaign-level dataad_group- Ad group dataad_group_ad- Individual adsad_group_criterion- Keywords, placementskeyword_view- Keyword performancesearch_term_view- Search query performanceconversion_action- Conversion definitionscustomer- Account information
GAQL Segments:
segments.date- Date dimensionsegments.device- Device type (MOBILE, DESKTOP, TABLET)segments.ad_network_type- Network (SEARCH, DISPLAY, YOUTUBE)segments.conversion_action- Conversion breakdownsegments.hour- Hour of day
Documentation: https://developers.google.com/google-ads/api/fields/v19
Real-World Examples¶
Example 1: Daily Performance Email Report¶
Scenario: Send daily email with yesterday's campaign performance to marketing team.
Workflow:
-
Trigger: Timer - Daily at 8:00 AM
-
Task: Google Ads - Get Metrics
-
Task: Variable - Calculate ROAS
-
Task: Email - Send Report
To: marketing@company.com Subject: Google Ads Daily Report - {{yesterday_date}} Body: 📊 Yesterday's Google Ads Performance Impressions: {{task_35001_impressions}} Clicks: {{task_35001_clicks}} CTR: {{task_35001_ctr}}% Cost: ${{task_35001_cost}} Average CPC: ${{task_35001_average_cpc}} Conversions: {{task_35001_conversions}} Conversion Value: ${{task_35001_conversions_value}} Cost per Conversion: ${{task_35001_cost_per_conversion}} ROAS: {{roas}}x ✅ Have a great day! -
Task: Workflow Note
Result: Automated daily performance visibility for marketing team.
Example 2: Offline Conversion Import from CRM¶
Scenario: When deal closes in CRM, upload conversion to Google Ads for ROAS tracking.
Workflow:
-
Trigger: CRM Event - Deal Won
-
Task: If Condition - Has GCLID
-
Task (Inside If): Google Ads - Upload Offline Conversion
action: upload_offline_conversions app_connection_id: [Select connection] customer_id: 1234567890 account_id: 9876543210 conversion_action: 987654321 Timestamp: {{trigger_deal_close_date}}T{{trigger_deal_close_time}}+00:00 Value: {{trigger_deal_value}} Currency: USD order_id: DEAL-{{trigger_deal_id}} Consent for ad User Data: GRANTED Consent for ad personalisation: GRANTED setting_1: upload_offline_conversions_identifier gclid: {{trigger_gclid}} -
Task (Inside If): Edit Client - Tag
-
Task (Inside If): Workflow Note
-
Task (Else): Email - Alert Missing GCLID
Result: Accurate ROAS measurement with offline CRM conversions attributed to Google Ads campaigns.
Example 3: Budget Alert System¶
Scenario: Alert when daily spend exceeds budget threshold to prevent overspend.
Workflow:
-
Trigger: Timer - Every 2 hours during business hours
-
Task: Google Ads - Get Metrics
-
Task: Variable - Daily Budget Threshold
-
Task: If Condition - Budget Exceeded
-
Task (Inside If): Email - Alert Marketing Team
To: marketing@company.com, cfo@company.com Subject: 🚨 Google Ads Budget Alert Body: ⚠️ Daily budget threshold exceeded! Current Spend Today: ${{task_35001_cost}} Daily Budget: ${{daily_budget}} Overspend: ${{task_35001_cost - daily_budget}} Time: {{current_time}} Action Required: Review campaigns and adjust bids/budgets if needed. -
Task (Inside If): MySQL - Log Alert
-
Task: Workflow Note
Result: Proactive budget management prevents unexpected overspend.
Example 4: Advanced Campaign Analysis with GAQL¶
Scenario: Analyze campaign performance by device and time of day for optimization insights.
Workflow:
-
Trigger: Manual Button - Run Analysis
-
Task: Google Ads - Custom Query (Campaigns by Device)
-
Task: Variable - Store Campaign Data
-
Task: Google Ads - Custom Query (Search Terms)
-
Task: Loop - Process Each Search Term
-
Task (Inside Loop): If Condition - High Converting Term
-
Task (Inside If): MySQL - Log High Performer
-
Task: Email - Send Analysis Report
To: marketing@company.com Subject: Google Ads Performance Analysis Body: 📊 Campaign Analysis Complete Top Performing Search Terms: {{high_performer_count}} Device Breakdown: [Summary from campaign_device_data] See attached MySQL data for detailed insights. Recommendations: 1. Increase bids on high-converting search terms 2. Optimize device targeting based on performance 3. Review low-CTR campaigns for improvements
Result: Data-driven optimization insights for campaign management.
Example 5: Multi-Account Reporting for Agencies¶
Scenario: Agency managing multiple client Google Ads accounts needs consolidated reporting.
Workflow:
-
Trigger: Timer - Weekly on Monday 9:00 AM
-
Task: MySQL Query - Get Client Accounts
-
Task: Loop - Process Each Client
-
Task (Inside Loop): Google Ads - Get Metrics
-
Task (Inside Loop): MySQL - Store Weekly Metrics
INSERT INTO weekly_google_ads_reports (client_id, week_start, impressions, clicks, cost, conversions, conversion_value, created_date) VALUES ( {{loop_item_client_id}}, DATE_SUB(CURDATE(), INTERVAL 7 DAY), {{task_35001_impressions}}, {{task_35001_clicks}}, {{task_35001_cost}}, {{task_35001_conversions}}, {{task_35001_conversions_value}}, NOW() ) -
Task (Inside Loop): Delay 2 seconds
-
Task: MySQL Query - Get Summary Stats
SELECT SUM(impressions) as total_impressions, SUM(clicks) as total_clicks, SUM(cost) as total_cost, SUM(conversions) as total_conversions, SUM(conversion_value) as total_value, COUNT(DISTINCT client_id) as client_count FROM weekly_google_ads_reports WHERE week_start = DATE_SUB(CURDATE(), INTERVAL 7 DAY) -
Task: Email - Agency Summary Report
To: agency-team@company.com Subject: 📊 Weekly Google Ads Summary - All Clients Body: Agency Performance Summary Week: {{week_start_date}} to {{week_end_date}} Clients Managed: {{mysql_result_client_count}} 📈 Totals: Impressions: {{mysql_result_total_impressions}} Clicks: {{mysql_result_total_clicks}} Spend: ${{mysql_result_total_cost}} Conversions: {{mysql_result_total_conversions}} Conversion Value: ${{mysql_result_total_value}} Overall ROAS: {{mysql_result_total_value / mysql_result_total_cost}}x See database for per-client breakdowns.
Result: Consolidated multi-account reporting for agency portfolio management.
Troubleshooting¶
Error: "No app connection selected"¶
Cause: OAuth connection not configured
Solutions:
- Go to Settings → Integrations → App Connections
- Create Google Ads connection
- Enter Client ID, Client Secret, and Developer Token
- Complete OAuth authorization
- Select connection in task dropdown
Error: "Developer token required"¶
Cause: Missing or invalid developer token in OAuth config
Solutions:
- Obtain developer token from Google Ads API Center
- Edit app connection in BaseCloud
- Add developer token to OAuth configuration
- For testing: Use test account token
- For production: Apply for Basic/Standard access
Error: "Invalid customer ID"¶
Cause: Customer ID format incorrect or inaccessible
Solutions:
- Use 10-digit ID without hyphens:
1234567890(not123-456-7890) - Verify account access in Google Ads
- Use Manager Account (MCC) ID for multi-account access
- Check OAuth connection has access to specified customer
- Remove any special characters or spaces
Error: "Token expired" or 401 Unauthorized¶
Cause: OAuth access token expired
Solutions:
- BaseCloud automatically refreshes tokens
- If error persists, re-authorize app connection:
- Settings → App Connections → Edit
- Click Re-authorize with Google
- Verify OAuth scope is correct:
https://www.googleapis.com/auth/adwords - Check refresh token hasn't been revoked
Metrics List Empty or Invalid¶
Cause: metrics_list field is empty array '[]' or invalid JSON
Solutions:
- Provide at least one metric:
["impressions"] - Use valid JSON array format with quotes
- Check metric names match available options
- Remove spaces from metric names
- Valid example:
["impressions","clicks","cost"]
Custom Query Returns No Data¶
Cause: GAQL query syntax error or no matching data
Solutions:
- Test query in Google Ads Query Builder first
- Verify resource names (e.g.,
campaign, notcampaigns) - Check date range has data
- Validate WHERE clause filters
- Use LIMIT to prevent large result sets
- Check API field reference: https://developers.google.com/google-ads/api/fields/v19
Offline Conversion Upload Failed¶
Cause: Missing required identifiers or invalid format
Solutions:
- Provide at least ONE identifier (gclid preferred)
- Verify conversion action ID is correct (get from dropdown or custom query)
- Check timestamp format: ISO 8601 with timezone (
2024-02-08T14:30:00+00:00) - Validate value is numeric (no currency symbols)
- Use valid currency code (USD, EUR, GBP, etc.)
- Email/phone are auto-hashed, provide plain text
- Check consent fields are: GRANTED, DENIED, or UNSPECIFIED
Error: "Conversion action not found"¶
Cause: Invalid conversion action ID or not uploadable type
Solutions:
- Get conversion actions via custom query:
- Use conversion actions with types: WEBPAGE, UPLOAD_CLICKS, UPLOAD_CALLS
- Cannot use PHONE_CALL_LEAD or STORE_VISIT types for API upload
- Verify conversion action belongs to correct account
Rate Limiting / Quota Exceeded¶
Cause: Exceeded Google Ads API rate limits
Solutions:
- Standard Access Limits:
- 15,000 operations per day
-
Requests count against quota
-
Immediate Actions:
- Add delays in bulk processing loops (2-5 seconds)
- Reduce frequency of metric fetches
-
Cache results when possible
-
Long-term:
- Apply for Standard Access (requires $10,000+ spend)
- Use batch operations where possible
- Implement exponential backoff on errors
- Monitor quota usage in Google Cloud Console
Permission Denied on Specific Account¶
Cause: OAuth token doesn't have access to target account
Solutions:
- Verify account hierarchy:
- Manager account must link to client accounts
- User must have access to manager account
- Check Google Ads permissions:
- Navigate to Tools → Access & Security → Users
- Verify email has Admin or Standard access
- Re-authorize OAuth connection
- Use correct customer_id (manager) and account_id (client)
Best Practices¶
Authentication Management¶
- Developer Token:
- Store securely in OAuth config
- Use test token for development/staging
- Apply for production access before launch
-
Monitor approval status in API Center
-
OAuth Connections:
- Create separate connections for dev/staging/production
- Use descriptive names: "Google Ads - Main Account", "Google Ads - Client ABC"
-
Document which connection accesses which accounts
-
Token Refresh:
- BaseCloud handles automatic refresh
- Monitor for refresh failures
- Re-authorize if persistent issues
Metrics Strategy¶
- Metric Selection:
- Request only needed metrics to reduce processing time
- Use calculated metrics (CTR, conversion rate) instead of computing manually
-
Avoid mixing incompatible metrics in same query
-
Date Ranges:
- Use presets when possible (faster than custom)
- For historical analysis, use custom ranges
-
Be aware of data freshness (typically 3-hour delay)
-
Aggregation:
- Metrics are aggregated across all campaigns by default
- Use custom queries for campaign-level breakdown
- Consider impression share metrics for competitive analysis
GAQL Best Practices¶
- Query Optimization:
- Select only needed fields
- Use WHERE clauses to filter data
- Add LIMIT to prevent oversized results
-
Order by relevant metrics
-
Resource Selection:
- Use
campaignfor campaign-level data - Use
ad_group_adfor ad-level data - Use
keyword_viewfor keyword performance -
Use
search_term_viewfor actual search queries -
Segmentation:
- Add
segments.datefor daily breakdown - Use
segments.devicefor device analysis - Include
segments.ad_network_typefor network split
Offline Conversion Best Practices¶
- Identifier Strategy:
- Preferred: Use gclid (Google Click ID)
- Fallback: Enhanced conversions with email/phone
- Store gclid in CRM on form submission
-
Validate identifier exists before upload
-
Data Quality:
- Use accurate conversion timestamps
- Provide actual conversion value (not estimated)
- Include order IDs for deduplication
-
Set appropriate consent values
-
Conversion Actions:
- Create specific actions for different conversion types
- Use consistent naming: "Purchase - Website", "Lead - Phone"
- Set appropriate counting methods (One per click vs Every)
- Configure lookback windows appropriately
Performance Optimization¶
- Caching:
- Cache metric results for dashboards (hourly refresh)
- Store conversion action lists (reload daily)
-
Cache account hierarchy (reload weekly)
-
Rate Limiting:
- Add 2-5 second delays in multi-account loops
- Batch operations when possible
- Schedule large queries during off-peak
-
Implement exponential backoff for retries
-
Error Handling:
- Wrap critical queries in If Conditions
- Log failures for troubleshooting
- Provide fallback workflows
- Alert admins on persistent failures
Reporting Strategy¶
- Automated Reports:
- Daily performance summary (yesterday's data)
- Weekly trends analysis (7-day rolling)
- Monthly campaign reviews (full month)
-
Real-time alerts (budget, performance)
-
Data Storage:
- Log metrics to MySQL for historical trends
- Create time-series data for visualization
- Archive raw query results for auditing
-
Maintain client-level reporting tables
-
Stakeholder Communication:
- Executive summary: High-level metrics (ROAS, conversions)
- Marketing team: Detailed campaign performance
- Finance: Spend tracking and budget adherence
- Clients: Campaign-specific results
FAQ¶
Q: What's the difference between customer_id and account_id?
A: - customer_id: Manager Account (MCC) ID - top-level account managing others - account_id: Specific Google Ads account where ads run - For single accounts: Both can be same ID - For agencies: customer_id = MCC, account_id = client account
Q: Do I need a Manager Account (MCC)?
A: - Not required for single account management - Recommended for agencies or multi-account setups - Benefits: Centralized billing, cross-account reporting, user management
Q: How long does it take for data to appear?
A: - Performance data: Typically 3 hours delay - Conversion data: Can take 24-48 hours - Offline conversions: Usually within a few hours of upload
Q: What's a developer token and how do I get one?
A: Developer token authenticates API access. Get from Google Ads → Tools → API Center. Test tokens work immediately; production requires application approval (24-48 hours).
Q: Can I modify campaigns via API?
A: This task focuses on reporting and conversion upload. Campaign modification requires additional actions not currently implemented. Use Google Ads UI or consider custom development.
Q: What are micros and why does cost use them?
A: Google Ads API returns costs in micros (1/1,000,000 of currency). BaseCloud automatically converts: cost_micros / 1,000,000 = actual cost.
Q: How accurate is GAQL query execution?
A: GAQL queries execute directly against Google Ads API with same accuracy as Google Ads UI. Results match reporting UI but may have slight timestamp differences.
Q: Can I track phone call conversions?
A: Yes, using offline conversion upload with phone call conversion action. Store call details in CRM and upload with appropriate conversion action ID.
Q: What happens if I exceed rate limits?
A: API returns quota exceeded error. Implement delays between requests (2-5 seconds) and apply for Standard Access for higher limits.
Q: Can I access competitor data?
A: No, API only accesses accounts you manage. Use impression share metrics to gauge competitive landscape.
Q: How do I handle multi-currency accounts?
A: Specify currency in offline conversion uploads. For metrics, Google Ads converts to account currency automatically.
Q: Can I export data to Google Sheets?
A: Yes, use Google Sheets task after getting metrics. Store data in variables and write to sheets.
Related Tasks¶
- Facebook Marketing - Social media advertising analytics
- Google Sheets - Export metrics to spreadsheets
- MySQL Query - Store historical metrics
- Loop - Process multiple accounts
- If Statement - Conditional logic based on metrics
- Email - Send performance reports
- Variable - Calculate custom metrics (ROAS)
Technical Details¶
- Type ID: 35
- Function:
taskGoogleAds()in automationService.js (lines 9795-10046) - Service:
googleAdsService.js(936 lines) - API Version: Google Ads API v19
- NPM Package:
google-ads-apiv12+ - Authentication: OAuth 2.0 + Developer Token
- Scope:
https://www.googleapis.com/auth/adwords - Output Prefix:
task_35001_* - Rate Limits: 15,000 operations/day (Standard Access)
- GAQL Documentation: https://developers.google.com/google-ads/api/docs/query/overview
- API Reference: https://developers.google.com/google-ads/api/reference/rpc/v19