# Create or Update Campaign — Google Ads

> Creates or updates a campaign. See the documentation

- Key: `google_ads-create-or-update-campaign`
- Type: Action (Write)
- Version: 1.0.0
- App: Google Ads (`google_ads`) — https://pipedream.com/apps/google-ads.md
- This page (HTML): https://pipedream.com/apps/google-ads/actions/create-or-update-campaign
- Hints: destructive · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/google_ads/actions/create-or-update-campaign/create-or-update-campaign.mjs

## Description

Creates or updates a campaign. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/CampaignService/MutateCampaigns?transport=rest)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `accountId` | `string` | Yes | The ID of an account of a customer directly accessible by the authenticated user. This is usually a Manager Account, used as login-customer-id (e.g., 1234567890). Use the List Account ID Options action to get the list of accessible accounts. Options are loaded from the connected account. |
| `customerClientId` | `string` | No | The ID of a customer client from the list of customers linked to the selected account (e.g., 1234567890). Use the List Customer Clients action to get the list of customer clients. Options are loaded from the connected account. |
| `operationType` | `string` | Yes | Whether to create, update, or remove a campaign. |
| `campaignId` | `string` | No | The campaign to update or remove. Required for Update and Remove operations. Options are loaded from the connected account. |
| `updateMask` | `string` | No | Comma-separated list of fields to update (e.g., name,status). Only used for update operations. |
| `name` | `string` | No | The name of the campaign. Required for create operations. |
| `advertisingChannelType` | `string` | No | The primary serving target for ads within the campaign. Required for create operations. |
| `campaignBudget` | `string` | No | The resource name of the campaign budget (e.g., customers/{customer_id}/campaignBudgets/{budget_id}). Required for create operations. |
| `status` | `string` | No | The status of the campaign. |
| `startDateTime` | `string` | No | When the campaign starts serving ads, in the account's time zone, formatted as YYYY-MM-DD HH:MM:SS (use 00:00:00 for daily granularity). |
| `endDateTime` | `string` | No | The last day and time the campaign serves ads, in the account's time zone, formatted as YYYY-MM-DD HH:MM:SS (use 23:59:59 for daily granularity). Leave blank to run indefinitely. |
| `trackingUrlTemplate` | `string` | No | The URL template for constructing a tracking URL. |
| `containsEuPoliticalAdvertising` | `string` | No | Declares whether the campaign contains EU political advertising. Google requires this on create. |
| `biddingStrategy` | `string` | No | An existing portfolio bidding strategy to attach. Leave blank to use a standard (campaign-level) strategy instead. Options are loaded from the connected account. |
| `biddingStrategyType` | `string` | No | The campaign-level bidding strategy. Google requires either this or a Portfolio Bidding Strategy on create. |
| `enhancedCpcEnabled` | `boolean` | No | Whether bids are enhanced based on conversion optimizer data. Applies to Manual CPC and Percent CPC. |
| `targetCpaMicros` | `string` | No | Average cost per acquisition to target, in micros (1,000,000 micros = 1 unit of the account currency). Applies to Target CPA and Maximize Conversions. |
| `cpcBidCeilingMicros` | `string` | No | Maximum bid limit that can be set by the bid strategy, in micros (1,000,000 micros = 1 unit of the account currency). Applies to Target CPA, Target ROAS, Target Spend, Target Impression Share, Maximize Conversions, Maximize Conversion Value and Percent CPC. |
| `cpcBidFloorMicros` | `string` | No | Minimum bid limit that can be set by the bid strategy, in micros (1,000,000 micros = 1 unit of the account currency). Applies to Target CPA, Target ROAS, Maximize Conversions and Maximize Conversion Value. |
| `targetRoas` | `string` | No | Revenue to target per unit of spend, as a decimal (e.g. 3.5 targets 350% return). Applies to Target ROAS and Maximize Conversion Value. |
| `location` | `string` | No | Where on the search results page the ads should appear. Applies to Target Impression Share. |
| `locationFractionMicros` | `string` | No | Fraction of ads to be shown in the targeted location, in micros (e.g. 650000 targets 65%). Applies to Target Impression Share. |
| `additionalFields` | `object` | No | Additional fields and values to be created. See the documentation for available fields. Values will be parsed as JSON where applicable. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "google_ads",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "google_ads-create-or-update-campaign",
  arguments: {
    accountId: "Use Google Ads As",
    customerClientId: "Managed Account",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "google_ads-create-or-update-campaign",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    google_ads: { authProvisionId: "apn_xxxxxxx" },
    accountId: "Use Google Ads As",
    customerClientId: "Managed Account",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "google_ads-create-or-update-campaign",
    "configured_props": {
      "google_ads": { "authProvisionId": "apn_xxxxxxx" },
      "accountId": "Use Google Ads As",
      "customerClientId": "Managed Account"
    }
  }'
```

---

- App: https://pipedream.com/apps/google-ads.md · All apps: https://pipedream.com/apps
