> ## 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.

# Google-Suchkampagnen

> Erstellen Sie eine Google Ads-Suchkampagne mit Budget, Keywords, Anzeigentext und Standort-Targeting in einer Anfrage

Erstellen Sie eine Google Ads-Suchkampagne mit einer einzigen Anfrage. Ayrshare erstellt das Budget, die Kampagne, eine Anzeigengruppe, Ihre Keywords, eine responsive Suchanzeige und das Standort-Targeting in einem Schritt. Wenn Google einen Teil davon ablehnt, wird nichts erstellt.

Die Anfrage verwendet den gemeinsamen Aufbau der [Werbekampagnen](https://www.ayrshare.com/docs/apis/ads/campaigns.md). Diese Seite behandelt, was speziell für Google gilt.

<ul>
  <li>Google-Anzeigen werden pro Konto aktiviert. Kontaktieren Sie uns, um sie freizuschalten.</li>
  <li>Verknüpfen Sie zuerst Google Ads auf der Seite "Social Accounts". `accountId` ist die 10-stellige Google Ads-Kundennummer, mit oder ohne Bindestriche (`123-456-7890`).</li>
  <li>Der Google-Nutzer, den Sie verknüpfen, muss direkten Zugriff auf das Werbekonto haben. Konten, auf die Sie nur über ein Verwaltungskonto zugreifen, werden nicht aufgelistet und können noch nicht verwendet werden: Fügen Sie diesen Nutzer direkt zum Werbekonto hinzu. Verwaltungskonten werden ebenfalls nicht aufgelistet: Sie können keine Kampagnen enthalten.</li>
  <li>Neue Kampagnen starten mit `paused`, sofern Sie nicht `status: "active"` senden.</li>
  <li>Das Budget gilt pro Tag, in der Währung des Werbekontos. Senden Sie kein `budget.currency`: Es gibt `code: 101` zurück.</li>
  <li>Ausgaben in einer anderen Währung werden für die Abrechnung zum Tageskurs von Open Exchange Rates in USD umgerechnet. Ein Konto in einer Währung, die nicht umgerechnet werden kann, gibt `code: 101` zurück, bevor etwas erstellt wird.</li>
  <li>Anzeigen erscheinen nur in der Google Suche, nicht bei Suchnetzwerk-Partnern oder im Displaynetzwerk.</li>
</ul>

> [!NOTE]
>
> **Conversion-Tracking.** `maximizeConversions` funktioniert nur, wenn in Ihrem Google Ads-Konto Conversion-Tracking eingerichtet ist. Ayrshare richtet es nicht für Sie ein. Verwenden Sie ohne Conversion-Tracking `maximizeClicks` oder `manualCpc`.

## Header-Parameter

**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*

Ein neuer eindeutiger Wert, etwa eine UUID, für jede neue Kampagne. Wenn Sie eine Anfrage mit demselben Schlüssel wiederholen, wird die erste Antwort zurückgegeben und nichts Neues erstellt. Wenn eine Erstellung fehlschlägt, bevor Ayrshare die Kampagne an Google sendet, wird der Schlüssel freigegeben, sodass Sie die Anfrage korrigieren und mit demselben Schlüssel erneut senden können. Das gilt für einen Wert, den Ayrshare ablehnt (etwa eine nicht unterstützte Gebotsstrategie), für ein Konto in einer Währung, die nicht in USD umgerechnet werden kann, und für jedes Scheitern der Kontoprüfung, die Ayrshare zuerst durchführt, auch wenn Google sie ablehnt. Eine Erstellung, die fehlschlägt, nachdem die Kampagne an Google gesendet wurde, behält ihre Antwort: Versuchen Sie es mit einem neuen Schlüssel erneut.

## Body-Parameter

Die gemeinsamen Felder funktionieren wie unter [Werbekampagnen](https://www.ayrshare.com/docs/apis/ads/campaigns.md) beschrieben. Bei Google gilt:

**type** `string` *required*

`search`.

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

`maximizeClicks`, `manualCpc` oder `maximizeConversions`. Jeder andere Wert gibt `code: 101` zurück.

**euPoliticalAdvertising** `boolean` *required*

Google verlangt diese Angabe für jede Kampagne. Solange eine Kampagne in einem Konto keine Angabe hat, lehnt Google jede Änderung an den Kampagnen dieses Kontos ab.

**schedule** `object`

Google plant ganze Tage in der Zeitzone des Werbekontos. `start` beginnt um 00:00:00 an seinem Tag und `end` endet um 23:59:59 an seinem Tag. Eine gesendete Uhrzeit bestimmt nur den Tag. `start` kann heute sein, aber kein früherer Tag. Für eine eintägige Kampagne senden Sie dasselbe Datum für `start` und `end`. Ein `end` an einem früheren Tag als `start` gibt `code: 101` zurück.

**targeting** `object`

Google ordnet Suchanzeigen Personen anhand der Sprache Ihres Anzeigentexts zu, daher gibt es keine Spracheinstellung. Wenn Sie `targeting.languages` senden, wird `code: 101` zurückgegeben.

**Eigenschaften**

**locations** `string[]`

Google-Standort-IDs, zum Beispiel `2840` für die Vereinigten Staaten. IDs finden Sie in Googles [Liste der geografischen Ziele](https://developers.google.com/google-ads/api/data/geotargets). Lassen Sie den Wert weg, um alle Standorte anzusprechen.

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

**Eigenschaften**

**finalUrl** `string` *required*

Die `http`- oder `https`-Seite, die die Anzeige öffnet.

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

3 bis 15 Anzeigentitel mit jeweils bis zu 30 Zeichen.

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

2 bis 4 Beschreibungen mit jeweils bis zu 90 Zeichen.

**path1** `string`

Erster Teil des Anzeigepfads, der nach der Domain angezeigt wird, bis zu 15 Zeichen.

**path2** `string`

Zweiter Teil des Anzeigepfads, bis zu 15 Zeichen. Erfordert `path1`.

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

Mindestens ein Keyword: `{ "text": string, "matchType": "exact" | "phrase" | "broad" }`. `text` umfasst bis zu 80 Zeichen und 10 Wörter.

**maxCpc** `number`

Der Höchstbetrag pro Klick, in der Kontowährung. Erforderlich bei `manualCpc`. Bei `maximizeClicks` begrenzt er jedes Gebot. Bei `maximizeConversions` nicht zulässig.

```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."
}
```

## Fehler

| Code | Wann |
| - | - |
| `101` | Ein Feld fehlt oder ist ungültig. `details` nennt es. |
| `205` | Google hat die Anfrage abgelehnt: zum Beispiel, weil das Konto bereits eine Kampagne mit diesem Namen hat oder der Anzeigentext gegen die Werberichtlinien von Google verstößt. `details` gibt an, was zu ändern ist. |
| `400` | Der verknüpfte Google-Nutzer hat keinen Zugriff auf dieses Werbekonto, der Zugriff auf Google Ads wurde widerrufen, die Kampagne gehört nicht Ihnen oder eine Änderung betrifft eine Kampagne, die in Google Ads entfernt wurde. |
| `370` | Google konnte die Anfrage nicht abschließen oder hat den Zugriff von Ayrshare noch nicht genehmigt. `details` enthält die Anfrage-ID von Google, sofern vorhanden. Eine Erstellung, die mit `370` antwortet, weil die Antwort von Google verloren ging, hat die Kampagne möglicherweise trotzdem erstellt. Google lehnt eine zweite Kampagne mit demselben Namen in einem Konto ab. Ein erneuter Versuch mit demselben `name` gibt daher `205` zurück, statt ein Duplikat zu erstellen. |


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