> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Campañas de búsqueda de Google

> Crea una campaña de búsqueda de Google Ads con su presupuesto, palabras clave, texto del anuncio y segmentación por ubicación en una sola solicitud

Crea una campaña de búsqueda de Google Ads en una sola solicitud. Ayrshare crea juntos el presupuesto, la campaña, un grupo de anuncios, tus palabras clave, un anuncio de búsqueda responsivo y la segmentación por ubicación. Si Google rechaza cualquier parte, no se crea nada.

La solicitud usa la estructura compartida de [Campañas publicitarias](https://www.ayrshare.com/docs/apis/ads/campaigns.md). Esta página cubre lo que es específico de Google.

<ul>
  <li>Los anuncios de Google se activan por cuenta. Contáctanos para habilitarlos.</li>
  <li>Primero vincula Google Ads desde la página "Social Accounts" (cuentas sociales). `accountId` es el ID de cliente de Google Ads de 10 dígitos, con o sin guiones (`123-456-7890`).</li>
  <li>El usuario de Google que vincules debe tener acceso directo a la cuenta publicitaria. Las cuentas a las que solo accedes a través de una cuenta de administrador no aparecen en la lista y todavía no se pueden usar: agrega ese usuario a la propia cuenta publicitaria. Las cuentas de administrador tampoco aparecen: no pueden contener campañas.</li>
  <li>Las campañas nuevas comienzan en `paused` a menos que envíes `status: "active"`.</li>
  <li>El presupuesto es diario, en la moneda de la cuenta publicitaria. No envíes `budget.currency`: responde `code: 101`.</li>
  <li>El gasto en otra moneda se convierte a USD para la facturación al tipo de cambio de ese día de Open Exchange Rates. Una cuenta en una moneda que no se puede convertir responde `code: 101` antes de crear nada.</li>
  <li>Los anuncios se muestran solo en la Búsqueda de Google, no en los socios de búsqueda ni en la Red de Display.</li>
</ul>

> [!NOTE]
>
> **Seguimiento de conversiones.** `maximizeConversions` solo funciona cuando el seguimiento de conversiones está configurado en tu cuenta de Google Ads. Ayrshare no lo configura por ti. Sin él, usa `maximizeClicks` o `manualCpc`.

## Parámetros del encabezado

**Authorization** `string` *required*

[API Key](https://www.ayrshare.com/docs/apis/overview.md#authorization) of the Primary Profile.

Format: `Authorization: Bearer API_KEY`
**Profile-Key** `string`

[Profile Key](https://www.ayrshare.com/docs/apis/overview.md#profile-key-format) of a User Profile.

Format: `Profile-Key: PROFILE_KEY`

**Idempotency-Key** `string` *required*

Un valor único nuevo, como un UUID, para cada campaña nueva. Repetir una solicitud con la misma clave devuelve la primera respuesta y no crea nada nuevo. Cuando una creación falla antes de que Ayrshare envíe la campaña a Google, la clave se libera, así que puedes corregir la solicitud y reintentar con la misma clave. Esto cubre un valor que Ayrshare rechaza (como una estrategia de puja no admitida), una cuenta en una moneda que no se puede convertir a USD y cualquier fallo de la comprobación de la cuenta que Ayrshare hace primero, incluido que Google la rechace. Una creación que falla una vez enviada la campaña a Google conserva su respuesta: reinténtala con una clave nueva.

## Parámetros del cuerpo

Los campos compartidos funcionan como se describe en [Campañas publicitarias](https://www.ayrshare.com/docs/apis/ads/campaigns.md). En Google:

**type** `string` *required*

`search`.

**bidding.strategy** `string` *required*

`maximizeClicks`, `manualCpc` o `maximizeConversions`. Cualquier otra responde `code: 101`.

**euPoliticalAdvertising** `boolean` *required*

Google exige esta declaración en cada campaña. Mientras alguna campaña de una cuenta no esté declarada, Google rechaza cualquier cambio en las campañas de esa cuenta.

**schedule** `object`

Google programa días completos en la zona horaria de la cuenta publicitaria. `start` comienza a las 00:00:00 de su día y `end` se detiene a las 23:59:59 de su día; la hora que envíes solo determina el día. `start` puede ser hoy, pero no un día anterior. Para una campaña de un día, envía la misma fecha en `start` y `end`. Un `end` en un día anterior a `start` responde `code: 101`.

**targeting** `object`

Google asocia los anuncios de búsqueda con las personas según el idioma del texto de tu anuncio, por lo que no hay una configuración de idioma. Enviar `targeting.languages` responde `code: 101`.

**propiedades**

**locations** `string[]`

IDs de ubicación de Google, por ejemplo `2840` para Estados Unidos. Encuentra los IDs en la [lista de segmentaciones geográficas](https://developers.google.com/google-ads/api/data/geotargets) de Google. Omítelo para segmentar todas las ubicaciones.

**platformOptions.google** `object` *required*

**propiedades**

**finalUrl** `string` *required*

La página `http` o `https` que abre el anuncio.

**headlines** `string[]` *required*

De 3 a 15 títulos, cada uno de hasta 30 caracteres.

**descriptions** `string[]` *required*

De 2 a 4 descripciones, cada una de hasta 90 caracteres.

**path1** `string`

Primera parte de la ruta visible que se muestra después del dominio, de hasta 15 caracteres.

**path2** `string`

Segunda parte de la ruta visible, de hasta 15 caracteres. Requiere `path1`.

**keywords** `object[]` *required*

Al menos una palabra clave: `{ "text": string, "matchType": "exact" | "phrase" | "broad" }`. `text` tiene hasta 80 caracteres y 10 palabras.

**maxCpc** `number`

Lo máximo que se pagará por clic, en la moneda de la cuenta. Obligatorio con `manualCpc`. Con `maximizeClicks`, limita cada puja. No se acepta con `maximizeConversions`.

```bash cURL theme={"system"}
curl \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10" \
-X POST https://api.ayrshare.com/api/ads/google/campaigns \
-d '{
  "accountId": "123-456-7890",
  "name": "Fall sale",
  "type": "search",
  "budget": { "amount": 25, "type": "daily" },
  "bidding": { "strategy": "maximizeClicks" },
  "targeting": { "locations": ["2840"] },
  "euPoliticalAdvertising": false,
  "platformOptions": {
    "google": {
      "finalUrl": "https://example.com/fall-sale",
      "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
      "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
      "path1": "shoes",
      "keywords": [
        { "text": "running shoes", "matchType": "phrase" },
        { "text": "trail running shoes", "matchType": "exact" }
      ]
    }
  }
}'
```

```javascript JavaScript theme={"system"}
const API_KEY = "API_KEY";

fetch("https://api.ayrshare.com/api/ads/google/campaigns", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10"
  },
  body: JSON.stringify({
    "accountId": "123-456-7890",
    "name": "Fall sale",
    "type": "search",
    "budget": { "amount": 25, "type": "daily" },
    "bidding": { "strategy": "maximizeClicks" },
    "targeting": { "locations": ["2840"] },
    "euPoliticalAdvertising": false,
    "platformOptions": {
      "google": {
        "finalUrl": "https://example.com/fall-sale",
        "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
        "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
        "path1": "shoes",
        "keywords": [
          { "text": "running shoes", "matchType": "phrase" },
          { "text": "trail running shoes", "matchType": "exact" }
        ]
      }
    }
  })
})
  .then((res) => res.json())
  .then((json) => console.log(json))
  .catch(console.error);
```

```python Python theme={"system"}
import requests

headers = {
    "Authorization": "Bearer API_KEY",
    "Idempotency-Key": "6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10",
}

payload = {
  "accountId": "123-456-7890",
  "name": "Fall sale",
  "type": "search",
  "budget": { "amount": 25, "type": "daily" },
  "bidding": { "strategy": "maximizeClicks" },
  "targeting": { "locations": ["2840"] },
  "euPoliticalAdvertising": False,
  "platformOptions": {
    "google": {
      "finalUrl": "https://example.com/fall-sale",
      "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
      "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
      "path1": "shoes",
      "keywords": [
        { "text": "running shoes", "matchType": "phrase" },
        { "text": "trail running shoes", "matchType": "exact" }
      ]
    }
  }
}

r = requests.post("https://api.ayrshare.com/api/ads/google/campaigns", headers=headers, json=payload)

print(r.json())
```

```php PHP theme={"system"}
<?php
$payload = <<<'JSON'
{
  "accountId": "123-456-7890",
  "name": "Fall sale",
  "type": "search",
  "budget": { "amount": 25, "type": "daily" },
  "bidding": { "strategy": "maximizeClicks" },
  "targeting": { "locations": ["2840"] },
  "euPoliticalAdvertising": false,
  "platformOptions": {
    "google": {
      "finalUrl": "https://example.com/fall-sale",
      "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
      "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
      "path1": "shoes",
      "keywords": [
        { "text": "running shoes", "matchType": "phrase" },
        { "text": "trail running shoes", "matchType": "exact" }
      ]
    }
  }
}
JSON;

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.ayrshare.com/api/ads/google/campaigns",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer API_KEY",
        "Content-Type: application/json",
        "Idempotency-Key: 6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10"
    ],
    CURLOPT_POSTFIELDS => $payload
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error: " . $err;
} else {
    echo $response;
}
?>
```

```csharp C# theme={"system"}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer API_KEY");
        client.DefaultRequestHeaders.Add("Idempotency-Key", "6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10");

        var payload = """
            {
              "accountId": "123-456-7890",
              "name": "Fall sale",
              "type": "search",
              "budget": { "amount": 25, "type": "daily" },
              "bidding": { "strategy": "maximizeClicks" },
              "targeting": { "locations": ["2840"] },
              "euPoliticalAdvertising": false,
              "platformOptions": {
                "google": {
                  "finalUrl": "https://example.com/fall-sale",
                  "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
                  "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
                  "path1": "shoes",
                  "keywords": [
                    { "text": "running shoes", "matchType": "phrase" },
                    { "text": "trail running shoes", "matchType": "exact" }
                  ]
                }
              }
            }
            """;

        var response = await client.PostAsync(
            "https://api.ayrshare.com/api/ads/google/campaigns",
            new StringContent(payload, Encoding.UTF8, "application/json"));
        var content = await response.Content.ReadAsStringAsync();

        Console.WriteLine(content);
    }
}
```

```go Go theme={"system"}
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := `{
  "accountId": "123-456-7890",
  "name": "Fall sale",
  "type": "search",
  "budget": { "amount": 25, "type": "daily" },
  "bidding": { "strategy": "maximizeClicks" },
  "targeting": { "locations": ["2840"] },
  "euPoliticalAdvertising": false,
  "platformOptions": {
    "google": {
      "finalUrl": "https://example.com/fall-sale",
      "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
      "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
      "path1": "shoes",
      "keywords": [
        { "text": "running shoes", "matchType": "phrase" },
        { "text": "trail running shoes", "matchType": "exact" }
      ]
    }
  }
}`

    req, _ := http.NewRequest("POST", "https://api.ayrshare.com/api/ads/google/campaigns", strings.NewReader(payload))
    req.Header.Add("Authorization", "Bearer API_KEY")
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Idempotency-Key", "6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
```

```java Java theme={"system"}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class CreateCampaign {
    public static void main(String[] args) throws Exception {
        String payload = """
            {
              "accountId": "123-456-7890",
              "name": "Fall sale",
              "type": "search",
              "budget": { "amount": 25, "type": "daily" },
              "bidding": { "strategy": "maximizeClicks" },
              "targeting": { "locations": ["2840"] },
              "euPoliticalAdvertising": false,
              "platformOptions": {
                "google": {
                  "finalUrl": "https://example.com/fall-sale",
                  "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
                  "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
                  "path1": "shoes",
                  "keywords": [
                    { "text": "running shoes", "matchType": "phrase" },
                    { "text": "trail running shoes", "matchType": "exact" }
                  ]
                }
              }
            }
            """;

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.ayrshare.com/api/ads/google/campaigns"))
            .header("Authorization", "Bearer API_KEY")
            .header("Content-Type", "application/json")
            .header("Idempotency-Key", "6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10")
            .POST(HttpRequest.BodyPublishers.ofString(payload))
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
```

```ruby Ruby theme={"system"}
require 'net/http'
require 'uri'

uri = URI.parse('https://api.ayrshare.com/api/ads/google/campaigns')

request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer API_KEY'
request['Content-Type'] = 'application/json'
request['Idempotency-Key'] = '6f1c2d4e-0b7a-4c55-9a3e-2f8d1b7c9e10'
request.body = <<~JSON
  {
    "accountId": "123-456-7890",
    "name": "Fall sale",
    "type": "search",
    "budget": { "amount": 25, "type": "daily" },
    "bidding": { "strategy": "maximizeClicks" },
    "targeting": { "locations": ["2840"] },
    "euPoliticalAdvertising": false,
    "platformOptions": {
      "google": {
        "finalUrl": "https://example.com/fall-sale",
        "headlines": ["Fall sale", "Shoes 30% off", "Free returns"],
        "descriptions": ["Every shoe 30% off this week.", "Free returns on every order."],
        "path1": "shoes",
        "keywords": [
          { "text": "running shoes", "matchType": "phrase" },
          { "text": "trail running shoes", "matchType": "exact" }
        ]
      }
    }
  }
JSON

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts response.body
```

```json 200: Campaign Created theme={"system"}
{
  "status": "success",
  "platform": "google",
  "campaignId": "21534567890",
  "adGroupId": "16812345678",
  "adId": "71234567890",
  "campaignStatus": "paused"
}
```

```json 400: Too Few Headlines theme={"system"}
{
  "action": "request",
  "status": "error",
  "code": 101,
  "message": "Missing or incorrect parameters. Please verify with the docs. https://www.ayrshare.com/docs/apis",
  "details": "platformOptions.google.headlines: Supply at least 3 headlines."
}
```

## Errores

| Código | Cuándo |
| - | - |
| `101` | Falta un campo o no es válido. `details` indica cuál. |
| `205` | Google rechazó la solicitud: por ejemplo, la cuenta ya tiene una campaña con este nombre o el texto del anuncio infringe las políticas publicitarias de Google. `details` indica qué cambiar. |
| `400` | El usuario de Google que vinculaste no puede acceder a esta cuenta publicitaria, se revocó el acceso a Google Ads, la campaña no es tuya o un cambio apunta a una campaña eliminada en Google Ads. |
| `370` | Google no pudo completar la solicitud o todavía no ha aprobado el acceso de Ayrshare. `details` incluye el ID de solicitud de Google cuando existe. Una creación que responde `370` porque se perdió la respuesta de Google puede haber creado la campaña de todos modos. Google rechaza una segunda campaña con el mismo nombre en una cuenta, por lo que reintentar con el mismo `name` responde `205` en lugar de crear un duplicado. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.