<!-- BusyBot node reference — https://busybot.net/tools/google-ads/ -->

> Node: Google Ads (`google_ads`) · Action · v1
> Category: Analytics · Credentials: Google Ads OAuth2 API (`googleAdsOAuth2Api`)
> Updated: 2026-08-16

# Google Ads

> Get and list Google Ads campaigns using the Google Ads API.

## Overview

Google Ads tool provides read access to Google Ads campaign data. Campaign operations: get a single campaign by ID, get all campaigns for an account. Queries use GAQL (Google Ads Query Language) via the POST /googleAds:search endpoint. Metrics are returned in micros (divide by 1,000,000 for human-readable values). Supports filtering by campaign status and date range segments.

**Category:** Analytics  
**Tool Name:** `google_ads`  
**Version:** 1

**Appearance:** Icon: `lucide-TrendingUp` | Color: `#4285F4`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Google Ads OAuth2 API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/google-ads-oauth2-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Campaign | `campaign` |

### Operations

| Operation | Value | Description |
|-----------|-------|-------------|
| Campaign: Get | `get` | Get a specific campaign by its ID. |
| Campaign: Get Many | `getAll` | Get many campaigns linked to the specified account. |

### Parameters

#### Campaign: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Manager Customer ID | `string` | No | — | The MCC (Manager) account customer ID. Sent as the login-customer-id header. Dashes are stripped automatically. Leave empty if not using an MCC account. |
| Client Customer ID | `string` | Yes | — | The client account customer ID. Dashes are stripped automatically (e.g. 123-456-7890 becomes 1234567890). |
| Campaign ID | `string` | Yes | — | The ID of the campaign to retrieve. |

#### Campaign: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Manager Customer ID | `string` | No | — | The MCC (Manager) account customer ID. Sent as the login-customer-id header. Dashes are stripped automatically. Leave empty if not using an MCC account. |
| Client Customer ID | `string` | Yes | — | The client account customer ID. Dashes are stripped automatically (e.g. 123-456-7890 becomes 1234567890). |
| Return All | `boolean` | No | `false` | Whether to return all results or limit to a maximum number. |
| Limit | `number` | No | `10` | Maximum number of campaigns to return. _(shown when Return All is `false`)_ |
| Additional Options | `collection` | No | `{}` | Additional options for fetching campaigns. |
| — Date Range | `options` | No | `allTime` | Filters campaign statistics by period using GAQL segments.date. |
| | | | | Options: `allTime`, `TODAY`, `YESTERDAY`, `LAST_7_DAYS`, `LAST_BUSINESS_WEEK`, `THIS_MONTH`, `LAST_MONTH`, `LAST_14_DAYS`, `LAST_30_DAYS` |
| — Show Campaigns by Status | `options` | No | `all` | Filters campaigns by status using GAQL campaign.status. |
| | | | | Options: `all`, `ENABLED`, `PAUSED`, `REMOVED` |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Authentication | `options` | No | `oAuth2` | Authentication method to use. |
| | | | | Options: `oAuth2` (OAuth2 (recommended)), `serviceAccount` |
| Google Account | `credential` | No | — | Connect or select your Google account. _(shown when Authentication is `oAuth2`)_ |
| Service Account Email | `string` | Yes | — | The email address of the Google service account. _(shown when Authentication is `serviceAccount`)_ |
| Private Key | `string` | Yes | — | The private key from the service account JSON key file. _(shown when Authentication is `serviceAccount`)_ |
| Max Concurrency | `number` | No | `5` | Maximum number of items to process concurrently. |

## Output Data

This node **fans out**: one output item per campaign record returned, not one per input item. An input item that matches ten campaigns produces ten output items; one that matches none produces a single pass-through item carrying the input JSON unchanged. Binary data is not forwarded.

Each campaign record is **merged onto the input item JSON**, so upstream fields stay addressable alongside the campaign fields. The campaign, budget and metrics objects are flattened into one level, so the GAQL field `campaign.id` arrives as `id` and `metrics.cost_micros` as `costMicros`.

Every campaign query selects the same fields:

| Group | GAQL fields selected |
|-------|----------------------|
| Campaign | `campaign.id`, `campaign.name`, `campaign.status`, `campaign.optimization_score`, `campaign.advertising_channel_type`, `campaign.advertising_channel_sub_type` |
| Budget | `campaign_budget.amount_micros`, `campaign_budget.period` |
| Metrics | `metrics.impressions`, `metrics.interactions`, `metrics.interaction_rate`, `metrics.average_cost`, `metrics.cost_micros`, `metrics.conversions`, `metrics.cost_per_conversion`, `metrics.conversions_from_interactions_rate`, `metrics.video_views`, `metrics.average_cpm`, `metrics.ctr` |

Money fields are returned in **micros** — divide by 1,000,000 for a currency value. Reference a field downstream by expression, for example `{{ $json.name }}` or `{{ $json.costMicros }}`.

## Usage Examples

- Get all campaigns for a Google Ads account
- Retrieve a specific campaign by ID
- Filter campaigns by status (ENABLED, PAUSED, REMOVED)
- Get campaign metrics for a date range like LAST_30_DAYS
- List campaigns managed under an MCC account

## Example Configuration

Get one campaign by ID from a client account:

```json
{
  "type": "google_ads",
  "parameters": {
    "resource": "campaign",
    "operation": "get",
    "clientCustomerId": "1234567890",
    "campaignId": "987654321"
  }
}
```

List every enabled campaign from the last 30 days, through an MCC account:

```json
{
  "type": "google_ads",
  "parameters": {
    "resource": "campaign",
    "operation": "getAll",
    "managerCustomerId": "1111111111",
    "clientCustomerId": "1234567890",
    "returnAll": true,
    "additionalFields": {
      "dateRange": "LAST_30_DAYS",
      "campaignStatus": "ENABLED"
    }
  }
}
```

Take the account ID from the item and cap the result set:

```json
{
  "type": "google_ads",
  "parameters": {
    "resource": "campaign",
    "operation": "getAll",
    "clientCustomerId": "{{ $json.customerId }}",
    "returnAll": false,
    "limit": 25,
    "maxConcurrency": 3
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Get and list campaigns from Google Ads accounts using GAQL queries via the Google Ads API.

### Behavior notes

- **Dashes in customer IDs are stripped for you.** `123-456-7890` and `1234567890` are both accepted in Manager Customer ID and Client Customer ID.
- **Manager Customer ID is only for MCC setups.** Leave it empty when the credential authenticates directly against the client account; fill it in when one manager account fronts many client accounts.
- **This node reads; it does not write.** Both operations run a GAQL `SELECT` — nothing here creates, pauses or edits a campaign.
- **Prefer a limit over Return All on large accounts.** Return All pages through every matching campaign, which is slow and easy to rate-limit; a limit keeps the run predictable.
- **Filters shrink the query, not the response.** Date Range and Show Campaigns by Status are pushed into the GAQL `WHERE` clause, so filtering there is cheaper than filtering downstream.