# Google Ads

> Build and manage Google Ads campaigns, budgets, ad groups and keywords, and pull performance, search term and keyword idea reports.

App · Marketing Automation · 20 actions. Web page: https://docs.lodol.com/docs/integrations/google-ads

## Actions

### Add a keyword

Add a keyword to an ad group, with its match type and an optional bid of its own.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Ad group ID (`ad_group_id`, text, required): The ad group to add the keyword to.
- Keyword (`keyword_text`, text, required): The word or phrase to bid on. At most 80 characters and 10 words.
- Match type (`match_type`, text): Exact matches the term only, Phrase matches it inside longer queries, Broad matches related searches. One of: `EXACT`, `PHRASE`, `BROAD`. Default: `BROAD`.
- Status (`status`, text): Whether the keyword starts serving immediately. One of: `ENABLED`, `PAUSED`. Default: `ENABLED`.
- CPC bid (`cpc_bid`, number): Bid for this keyword in the account's currency. Leave blank to use the ad group's bid. At least 0.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "created",
  "id": "222~444",
  "resourceName": "customers/1234567890/adGroupCriteria/222~444"
}
```

### Create a budget

Create a daily campaign budget. Every campaign needs one, so this is the first step when building a campaign.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Budget name (`name`, text, required): A name for the budget. Must be unique within the account.
- Daily amount (`daily_amount`, number, required): Average amount to spend per day, in the account's currency: enter 25 for 25 dollars, not micros. At least 0.
- Delivery method (`delivery_method`, text): Standard spreads the budget across the day; Accelerated spends it as fast as it can. One of: `STANDARD`, `ACCELERATED`. Default: `STANDARD`.
- Shared budget (`explicitly_shared`, true/false): Let more than one campaign draw on this budget. Default: `false`.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "created",
  "id": "555",
  "resourceName": "customers/1234567890/campaignBudgets/555"
}
```

### Create a campaign

Create a Search or Display campaign against an existing budget. It is created paused unless you say otherwise, so nothing starts spending before you've looked at it.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign name (`name`, text, required): A name for the campaign. Must be unique in the account.
- Budget ID (`budget_id`, text, required): The budget to spend from: the ID from Create a budget, or its full resource name.
- Campaign type (`channel_type`, text): Where the ads run. Other campaign types need extra setup Google won't accept from a single step. One of: `SEARCH`, `DISPLAY`. Default: `SEARCH`.
- Status (`status`, text): Whether the campaign starts serving immediately. One of: `ENABLED`, `PAUSED`. Default: `PAUSED`.
- Start date (`start_date`, date): First day the campaign can serve. Defaults to today if left blank.
- End date (`end_date`, date): Last day the campaign serves. Leave blank to run indefinitely.
- EU political advertising (`eu_political_advertising`, text): A declaration Google requires on every campaign: does this campaign run political advertising in the EU? Answer truthfully; it is a legal declaration, not a setting. One of: `DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING` (No EU political advertising), `CONTAINS_EU_POLITICAL_ADVERTISING` (Contains EU political advertising). Default: `DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING`.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "created",
  "id": "111",
  "resourceName": "customers/1234567890/campaigns/111"
}
```

### Create an ad group

Create an ad group inside a campaign, optionally with its own default cost-per-click bid.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign ID (`campaign_id`, text, required): The campaign the ad group belongs to.
- Ad group name (`name`, text, required): A name for the ad group. Must be unique within the campaign.
- Status (`status`, text): Whether the ad group starts serving immediately. One of: `ENABLED`, `PAUSED`. Default: `PAUSED`.
- Default CPC bid (`cpc_bid`, number): Most you'll pay for a click, in the account's currency: enter 1.50 for one dollar fifty. At least 0.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "created",
  "id": "222",
  "resourceName": "customers/1234567890/adGroups/222"
}
```

### Generate keyword ideas

Ask Google for keyword ideas from seed terms, a page URL, or both, with average monthly searches, competition and top-of-page bid estimates.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Seed keywords (`keywords`, list): Words or phrases to build ideas from. Give these, a page URL, or both.
- Page URL (`page_url`, text): A page to build ideas from, for example https://example.com/running-shoes.
- Language ID (`language_id`, text): Google language constant ID to restrict ideas to. 1000 is English. Leave blank for all languages.
- Location IDs (`geo_target_ids`, list): Google geo target constant IDs to restrict ideas to, at most 10. 2840 is the United States. Leave blank for everywhere.
- Include adult keywords (`include_adult_keywords`, true/false): Include adult keywords in the ideas. Default: `false`.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.

**Outputs**

- `count` (number)
- `ideas` (list)
- `nextPageToken` (text)
- `totalSize` (text)

**Example output**

```json
{
  "count": 1,
  "ideas": [
    {
      "avgMonthlySearches": "40500",
      "competition": "HIGH",
      "competitionIndex": "84",
      "highTopOfPageBid": 1.73,
      "highTopOfPageBidMicros": "1730000",
      "lowTopOfPageBid": 0.41,
      "lowTopOfPageBidMicros": "410000",
      "text": "trail running shoes"
    }
  ],
  "nextPageToken": null,
  "totalSize": "1"
}
```

### Get a campaign

Fetch one campaign by its ID.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign ID (`campaign_id`, text, required): The campaign's numeric ID, or the full resource name it appears in.

**Outputs**

- `campaign` (object)

**Example output**

```json
{
  "campaign": {
    "advertisingChannelType": "SEARCH",
    "biddingStrategyType": "MANUAL_CPC",
    "campaignBudget": "customers/1234567890/campaignBudgets/555",
    "id": "111",
    "name": "Brand \u2014 Search",
    "resourceName": "customers/1234567890/campaigns/111",
    "startDateTime": "2026-08-01 00:00:00",
    "status": "ENABLED"
  }
}
```

### Get a performance report

Report impressions, clicks, CTR, cost and conversions by campaign, ad group or keyword, over a date range, with the page's totals added up for you.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Report on (`level`, text): What each row should represent. One of: `campaign`, `ad_group` (Ad group), `keyword`. Default: `campaign`.
- Date range (`date_range`, text): The period to report on. Ignored when you set both a start and an end date below. Defaults to the last 30 days. One of: `TODAY`, `YESTERDAY`, `LAST_7_DAYS` (Last 7 days), `LAST_14_DAYS` (Last 14 days), `LAST_30_DAYS` (Last 30 days), `LAST_BUSINESS_WEEK` (Last business week), `THIS_WEEK_SUN_TODAY` (This week (Sun–today)), `THIS_WEEK_MON_TODAY` (This week (Mon–today)), `LAST_WEEK_SUN_SAT` (Last week (Sun–Sat)), `LAST_WEEK_MON_SUN` (Last week (Mon–Sun)), `THIS_MONTH` (This month), `LAST_MONTH` (Last month). Default: `LAST_30_DAYS`.
- Start date (`start_date`, date): First day to include. Set this with an end date for a custom range.
- End date (`end_date`, date): Last day to include. Set this with a start date for a custom range.
- Campaign ID (`campaign_id`, text): Only include rows for this campaign. Leave blank for all campaigns.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `level` (text): The level reported on: campaign, ad_group or keyword.
- `nextPageToken` (text)
- `results` (list)
- `totalResultsCount` (text)
- `totals` (object): The page's metrics added up, for branching on one number.

**Example output**

```json
{
  "count": 1,
  "level": "campaign",
  "nextPageToken": null,
  "results": [
    {
      "campaign": {
        "id": "111",
        "name": "Brand \u2014 Search",
        "status": "ENABLED"
      },
      "metrics": {
        "averageCpc": 1420000.0,
        "clicks": "531",
        "conversions": 21.0,
        "conversionsValue": 3150.0,
        "costMicros": "754020000",
        "ctr": 0.0428,
        "impressions": "12400"
      }
    }
  ],
  "totalResultsCount": "1",
  "totals": {
    "clicks": 531,
    "conversions": 21.0,
    "cost": 754.02,
    "costMicros": 754020000,
    "impressions": 12400
  }
}
```

### List accounts

List the Google Ads accounts the connected user can reach directly, with their ten-digit customer IDs. Ask for details to also get each account's name and whether it is a manager, plus a shortlist of the ones a campaign can be built in.

**Inputs**

- Include account details (`include_details`, true/false): Look each account up to add its name, currency, and whether it is a manager or a test account, and to narrow the list to the usable ones. Costs one extra call per account. Default: `false`.

**Outputs**

- `count` (number)
- `customers` (list)
- `usable` (list): Only present with details: the accounts that are reachable and are not managers — the ones a campaign can be built in.
- `usableCount` (number)

**Example output**

```json
{
  "count": 2,
  "customers": [
    {
      "currencyCode": "USD",
      "customerId": "1234567890",
      "descriptiveName": "Acme \u2014 Manager",
      "manager": true,
      "reachable": true,
      "resourceName": "customers/1234567890",
      "testAccount": false,
      "timeZone": "America/New_York"
    },
    {
      "currencyCode": "USD",
      "customerId": "9876543210",
      "descriptiveName": "Acme Retail",
      "manager": false,
      "reachable": true,
      "resourceName": "customers/9876543210",
      "testAccount": false,
      "timeZone": "America/New_York"
    }
  ],
  "usable": [
    {
      "currencyCode": "USD",
      "customerId": "9876543210",
      "descriptiveName": "Acme Retail",
      "manager": false,
      "reachable": true,
      "resourceName": "customers/9876543210",
      "testAccount": false,
      "timeZone": "America/New_York"
    }
  ],
  "usableCount": 1
}
```

### List ad groups

List ad groups in an account, or only those in one campaign.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign ID (`campaign_id`, text): Only include rows for this campaign. Leave blank for all campaigns.
- Status (`status`, text): Only ad groups with this status. Blank means all live ones. One of: `ENABLED`, `PAUSED`, `REMOVED`.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "adGroup": {
        "campaign": "customers/1234567890/campaigns/111",
        "cpcBidMicros": "1500000",
        "id": "222",
        "name": "Brand terms",
        "resourceName": "customers/1234567890/adGroups/222",
        "status": "ENABLED",
        "type": "SEARCH_STANDARD"
      },
      "campaign": {
        "id": "111",
        "name": "Brand \u2014 Search"
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### List ads

List the ads in an account with their type, final URLs and policy approval status. Scope it to a campaign or ad group if you like.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Ad group ID (`ad_group_id`, text): Only ads in this ad group. Leave blank for all.
- Campaign ID (`campaign_id`, text): Only include rows for this campaign. Leave blank for all campaigns.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "adGroup": {
        "id": "222",
        "name": "Brand terms"
      },
      "adGroupAd": {
        "ad": {
          "finalUrls": [
            "https://example.com/brand"
          ],
          "id": "333",
          "type": "RESPONSIVE_SEARCH_AD"
        },
        "policySummary": {
          "approvalStatus": "APPROVED"
        },
        "resourceName": "customers/1234567890/adGroupAds/222~333",
        "status": "ENABLED"
      },
      "campaign": {
        "id": "111",
        "name": "Brand \u2014 Search"
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### List budgets

List the campaign budgets in an account, with their daily amount and how many campaigns use each.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "campaignBudget": {
        "amountMicros": "25000000",
        "deliveryMethod": "STANDARD",
        "explicitlyShared": false,
        "id": "555",
        "name": "Brand daily budget",
        "referenceCount": "1",
        "resourceName": "customers/1234567890/campaignBudgets/555",
        "status": "ENABLED"
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### List campaigns

List the campaigns in an account with their status, channel type, budget and schedule. Removed campaigns are hidden unless you ask for them.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Status (`status`, text): Only campaigns with this status. Blank means all live ones. One of: `ENABLED`, `PAUSED`, `REMOVED`.
- Name contains (`name_contains`, text): Only campaigns whose name contains this text. Quotes and backslashes aren't allowed.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "campaign": {
        "advertisingChannelType": "SEARCH",
        "biddingStrategyType": "MANUAL_CPC",
        "campaignBudget": "customers/1234567890/campaignBudgets/555",
        "id": "111",
        "name": "Brand \u2014 Search",
        "resourceName": "customers/1234567890/campaigns/111",
        "startDateTime": "2026-08-01 00:00:00",
        "status": "ENABLED"
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### List keywords

List the keywords in an account with their match type, status and bid. Scope it to a campaign or ad group if you like.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Ad group ID (`ad_group_id`, text): Only keywords in this ad group. Leave blank for all.
- Campaign ID (`campaign_id`, text): Only include rows for this campaign. Leave blank for all campaigns.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "adGroup": {
        "id": "222",
        "name": "Brand terms"
      },
      "adGroupCriterion": {
        "cpcBidMicros": "1500000",
        "criterionId": "444",
        "keyword": {
          "matchType": "PHRASE",
          "text": "running shoes"
        },
        "negative": false,
        "resourceName": "customers/1234567890/adGroupCriteria/222~444",
        "status": "ENABLED"
      },
      "campaign": {
        "id": "111",
        "name": "Brand \u2014 Search"
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### List search terms

List what people actually typed before an ad showed, with the keyword each term matched and its clicks, cost and conversions. The report to mine for negative keywords.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign ID (`campaign_id`, text): Only include rows for this campaign. Leave blank for all campaigns.
- Date range (`date_range`, text): The period to report on. Ignored when you set both a start and an end date below. Defaults to the last 30 days. One of: `TODAY`, `YESTERDAY`, `LAST_7_DAYS` (Last 7 days), `LAST_14_DAYS` (Last 14 days), `LAST_30_DAYS` (Last 30 days), `LAST_BUSINESS_WEEK` (Last business week), `THIS_WEEK_SUN_TODAY` (This week (Sun–today)), `THIS_WEEK_MON_TODAY` (This week (Mon–today)), `LAST_WEEK_SUN_SAT` (Last week (Sun–Sat)), `LAST_WEEK_MON_SUN` (Last week (Mon–Sun)), `THIS_MONTH` (This month), `LAST_MONTH` (Last month). Default: `LAST_30_DAYS`.
- Start date (`start_date`, date): First day to include. Set this with an end date for a custom range.
- End date (`end_date`, date): Last day to include. Set this with a start date for a custom range.
- Page size (`page_size`, number): How many rows to return, 1 to 10000. From 1 to 10000. Default: `100`.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "adGroup": {
        "id": "222",
        "name": "Brand terms"
      },
      "campaign": {
        "id": "111",
        "name": "Brand \u2014 Search"
      },
      "metrics": {
        "clicks": "44",
        "conversions": 3.0,
        "costMicros": "63000000",
        "impressions": "820"
      },
      "searchTermView": {
        "searchTerm": "best running shoes 2026",
        "status": "ADDED"
      },
      "segments": {
        "keyword": {
          "info": {
            "matchType": "PHRASE",
            "text": "running shoes"
          }
        }
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### Remove a budget

Remove a campaign budget. Remove or re-point the campaigns using it first: Google refuses to remove a budget that is still referenced.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Budget ID (`budget_id`, text, required): The budget to remove.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "removed",
  "id": "555",
  "resourceName": "customers/1234567890/campaignBudgets/555"
}
```

### Remove a campaign

Remove a campaign. Its ad groups and keywords stop serving with it, and this can't be undone, so pause it with Update a campaign instead if you might want it back.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign ID (`campaign_id`, text, required): The campaign to remove.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "removed",
  "id": "111",
  "resourceName": "customers/1234567890/campaigns/111"
}
```

### Remove a keyword

Remove a keyword from its ad group. This can't be undone, so pause it with Add a keyword's status instead if you might want it back.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Keyword ID (`keyword_id`, text, required): The keyword's composite ID, 'adGroupId~criterionId': the ID returned by Add a keyword, or its full resource name.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "removed",
  "id": "222~444",
  "resourceName": "customers/1234567890/adGroupCriteria/222~444"
}
```

### Run a report query

Run any Google Ads Query Language (GAQL) query and return its rows. Use this when the ready-made list and report steps don't cover what you need.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- GAQL query (`query`, text, required): The query to run, for example: SELECT campaign.id, campaign.name, metrics.clicks FROM campaign WHERE segments.date DURING LAST_7_DAYS.
- Page token (`page_token`, text): Return the next page. Use the Next page token from a previous run of this step; leave blank for the first page.

**Outputs**

- `count` (number): Number of rows on this page.
- `nextPageToken` (text): Pass back as Page token to read the next page. Absent on the last page.
- `results` (list)
- `totalResultsCount` (text): Total rows matching the query, across all pages.

**Example output**

```json
{
  "count": 1,
  "nextPageToken": null,
  "results": [
    {
      "campaign": {
        "id": "111",
        "name": "Brand \u2014 Search",
        "resourceName": "customers/1234567890/campaigns/111"
      },
      "metrics": {
        "clicks": "342"
      }
    }
  ],
  "totalResultsCount": "1"
}
```

### Update a campaign

Rename a campaign, pause or enable it, or change when it stops. Only the fields you fill in are changed.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Campaign ID (`campaign_id`, text, required): The campaign to change.
- New name (`name`, text): Leave blank to keep the current name.
- New status (`status`, text): Leave blank to keep the current status. Use Remove a campaign to delete one. One of: `ENABLED`, `PAUSED`.
- New end date (`end_date`, date): Leave blank to keep the current end date.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "updated",
  "id": "111",
  "resourceName": "customers/1234567890/campaigns/111"
}
```

### Update an ad group

Rename an ad group, pause or enable it, or change its default CPC bid. Only the fields you fill in are changed.

**Inputs**

- Account (`customer_id`, text, required): The Google Ads account to work in. Pick one, or type a ten-digit customer ID (hyphens optional) for an account further down a manager hierarchy: the list only shows accounts the connected user can reach directly.
- Ad group ID (`ad_group_id`, text, required): The ad group to change.
- New name (`name`, text): Leave blank to keep the current name.
- New status (`status`, text): Leave blank to keep the current status. One of: `ENABLED`, `PAUSED`.
- New CPC bid (`cpc_bid`, number): In the account's currency. Leave blank to keep the current bid. At least 0.

**Outputs**

- `action` (text): What happened: created, updated or removed.
- `id` (text): The record's ID on its own. For a keyword this is the composite 'adGroupId~criterionId' its removal needs.
- `resourceName` (text): Full resource name of the changed record, for example customers/1234567890/campaigns/98765.

**Example output**

```json
{
  "action": "updated",
  "id": "222",
  "resourceName": "customers/1234567890/adGroups/222"
}
```
