Es gibt zwei Arten von Google Ads-Konten: Google Ads-Verwaltungskonten und Google Ads-Werbekonten. Eine detaillierte Erklärung der Beziehung zwischen diesen Begriffen und anderen (z. B. Kundenkonto und Kunde) finden Sie unter Kontotypen.
Mit Verwaltungskonten können andere Google Ads-Verwaltungskonten oder Google Ads-Werbekonten verwaltet werden. Sie können ein Werbekonto mit einem Verwaltungskonto verknüpfen und es dann über das Verwaltungskonto verwalten. Die gesamte verknüpfte Struktur ist ein gerichteter azyklischer Graph mit Werbekonten auf der Blattebene.
Sie können einzelnen Nutzern oder Dienstkonten Zugriff auf Google Ads-Konten gewähren. Es gibt zwei Möglichkeiten, Nutzern Zugriff auf ein Werbekonto zu gewähren:
- Gewähren Sie dem Nutzer direkten Zugriff auf das Werbekonto, indem Sie ihn einladen dazu.
- Gewähren Sie dem Nutzer indirekten Zugriff auf das Werbekonto, indem Sie ihn zu einem Verwaltungskonto einladen, das mit diesem Konto verknüpft ist. Der Nutzer erhält Zugriff auf das Werbekonto, da das Verwaltungskonto Zugriff auf alle darunter verknüpften Konten hat.
Sie können auch Nutzerrollen zuweisen, wenn Sie einen Nutzer einladen, ein Konto zu verwalten.
Sehen Sie sich die folgende Kontohierarchie an. Angenommen, alle Nutzer haben Standardzugriff.

In der folgenden Tabelle ist diese Kontostruktur zusammengefasst.
| Nutzer | Hat direkten Zugriff auf | Hat indirekten Zugriff auf |
|---|---|---|
| U1, SA1 | M1 | M2, A1, A2, A3 |
| U2 | M2, M3 | A1, A2, A3, A4 |
| U3 | A4 |
Anmelde-Kundennummer
Ein Nutzer hat möglicherweise Zugriff auf mehrere Kontohierarchien. In solchen Fällen müssen Sie bei einem API-Aufruf das Stammkonto angeben, das verwendet werden soll, um die Autorisierungs- und Kontozugriffsebenen korrekt zu bestimmen. Dazu geben Sie im Rahmen der API-Anfrage einen login-customer-id-Header an.
In der folgenden Tabelle wird die Kontohierarchie aus dem vorherigen Beispiel verwendet, um zu zeigen, welche Anmelde-Kundennummern Sie verwenden können, und die entsprechende Liste der Konten, für die Sie Aufrufe ausführen können.
| Nutzer | Zu verwendende Anmelde-Kundennummer | Konten, für die API-Aufrufe ausgeführt werden sollen |
|---|---|---|
| U1, SA1 | M1 | M1, M2, A1, A2, A3 |
| U2 | M2 | M2, A1, A2, A3 |
| U2 | M3 | M3, A1, A4 |
| U3 | A4 | A4 |
Sie können den login-customer-id-Header weglassen, wenn der Nutzer direkten Zugriff auf das Google Ads-Konto hat, für das Sie Aufrufe ausführen. Sie müssen beispielsweise keinen login-customer-id-Header angeben, wenn Sie U3-Anmeldedaten verwenden, um einen Aufruf an A4 zu senden, da die Google Ads-Server die Zugriffsebene anhand der Kundennummer (A4) korrekt bestimmen können.
Wenn Sie eine unserer Clientbibliotheken verwenden, geben Sie den login-customer-id-Header mit den folgenden Einstellungen an.
Java
Fügen Sie die folgende Einstellung in Ihre Datei ads.properties ein.
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
C#
Fügen Sie die folgende Einstellung hinzu, wenn Sie das Objekt GoogleAdsConfig initialisieren und damit ein Objekt GoogleAdsClient erstellen.
GoogleAdsConfig config = new GoogleAdsConfig()
{
...
LoginCustomerId = ******
};
GoogleAdsClient client = new GoogleAdsClient(config);
PHP
Fügen Sie die folgende Einstellung in Ihre Datei google_ads_php.ini ein.
[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
Python
Fügen Sie die folgende Einstellung in Ihre Datei google-ads.yaml ein.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
Ruby
Fügen Sie die folgende Einstellung in Ihre Datei google_ads_config.rb ein.
Google::Ads::GoogleAds::Config.new do |c|
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
Erstellen Sie eine GoogleAdsClient-Instanz, indem Sie den Pfad zu dieser Datei übergeben.
client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')
Perl
Fügen Sie die folgende Einstellung in Ihre Datei googleads.properties ein.
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
curl
Geben Sie beim Ausführen des Befehls curl das folgende Befehlszeilenargument an.
-H "login-customer-id: LOGIN_CUSTOMER_ID"
Mit der
CustomerService.ListAccessibleCustomers
Methode können Sie die Liste der Konten abrufen, auf die ein Nutzer direkten Zugriff hat.
Diese Konten können als gültige Werte für den login-customer-id-Header verwendet werden.
Java
private void runExample(GoogleAdsClient client) { // Optional: Change credentials to use a different refresh token, to retrieve customers // available for a specific user. // // UserCredentials credentials = // UserCredentials.newBuilder() // .setClientId("INSERT_OAUTH_CLIENT_ID") // .setClientSecret("INSERT_OAUTH_CLIENT_SECRET") // .setRefreshToken("INSERT_REFRESH_TOKEN") // .build(); // // client = client.toBuilder().setCredentials(credentials).build(); try (CustomerServiceClient customerService = client.getLatestVersion().createCustomerServiceClient()) { ListAccessibleCustomersResponse response = customerService.listAccessibleCustomers( ListAccessibleCustomersRequest.newBuilder().build()); System.out.printf("Total results: %d%n", response.getResourceNamesCount()); for (String customerResourceName : response.getResourceNamesList()) { System.out.printf("Customer resource name: %s%n", customerResourceName); } } }
C#
public void Run(GoogleAdsClient client) { // Get the CustomerService. CustomerServiceClient customerService = client.GetService(Services.V24.CustomerService); try { // Retrieve the list of customer resources. string[] customerResourceNames = customerService.ListAccessibleCustomers(); // Display the result. foreach (string customerResourceName in customerResourceNames) { Console.WriteLine( $"Found customer with resource name = '{customerResourceName}'."); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample(GoogleAdsClient $googleAdsClient) { $customerServiceClient = $googleAdsClient->getCustomerServiceClient(); // Issues a request for listing all accessible customers. $accessibleCustomers = $customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest()); print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL; // Iterates over all accessible customers' resource names and prints them. foreach ($accessibleCustomers->getResourceNames() as $resourceName) { /** @var string $resourceName */ printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL); } }
Python
def main(client: GoogleAdsClient) -> None: customer_service: CustomerServiceClient = client.get_service( "CustomerService" ) accessible_customers: ListAccessibleCustomersResponse = ( customer_service.list_accessible_customers() ) result_total: int = len(accessible_customers.resource_names) print(f"Total results: {result_total}") resource_names: List[str] = accessible_customers.resource_names for resource_name in resource_names: # resource_name is implicitly str print(f'Customer resource name: "{resource_name}"')
Ruby
def list_accessible_customers() # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new accessible_customers = client.service.customer.list_accessible_customers().resource_names accessible_customers.each do |resource_name| puts "Customer resource name: #{resource_name}" end end
Perl
sub list_accessible_customers { my ($api_client) = @_; my $list_accessible_customers_response = $api_client->CustomerService()->list_accessible_customers(); printf "Total results: %d.\n", scalar @{$list_accessible_customers_response->{resourceNames}}; foreach my $resource_name (@{$list_accessible_customers_response->{resourceNames}}) { printf "Customer resource name: '%s'.\n", $resource_name; } return 1; }
curl
# Returns the resource names of customers directly accessible by the user # authenticating the call. # # Variables: # API_VERSION, # DEVELOPER_TOKEN, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # curl -f --request GET \ "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
Was passiert, wenn die Methode ListAccessibleCustomers meine Kundennummer nicht abruft?
Wenn die CustomerService.ListAccessibleCustomers
Methode keine Kundennummer abgerufen hat, die Sie in den Ergebnissen erwartet haben,
gibt es einige mögliche Erklärungen.
Sie haben Zugriff auf die Kundennummer, aber der Zugriff wird über ein übergeordnetes Verwaltungskonto gewährt. Wenn Sie beispielsweise die
ListAccessibleCustomersMethode mit den Anmeldedaten des NutzersU1im vorherigen Beispiel aufrufen, erhalten Sie in den Ergebnissen nurM1zurück, obwohlU1Zugriff auf weitere Konten hat. Um dies zu bestätigen, rufen Sie die Kontohierarchie ab für jedes der Konten, die von derListAccessibleCustomersMethode zurückgegeben werden. Dazu legen Sie jedes dieser Konten als Anmelde-Kundennummer fest, wie in dem vorherigen Abschnitt beschrieben. Wenn Sie Zugriff auf das Zielkonto haben, sollten Sie es als Teil einer der Kontohierarchien abrufen können.Sie verwenden falsche OAuth-Anmeldedaten. Am häufigsten werden die Anmeldedaten eines anderen Nutzers verwendet. Das kann beispielsweise daran liegen, dass Sie Sandbox- oder Entwickleranmeldedaten versehentlich mit Produktionsanmeldedaten verwechselt oder die Anmeldedaten eines anderen Nutzers falsch aus der Datenbank oder dem lokalen Cache gelesen haben. Eine mögliche Lösung für dieses Problem ist, mit der Google People API den Namen und die E-Mail-Adresse des angemeldeten Nutzers abzurufen und zu prüfen, ob sie mit der erwarteten E-Mail-Adresse übereinstimmen.
Sie haben keinen Zugriff auf das Konto. Folgen Sie der Anleitung, um Zugriff auf das richtige Kunden konto zu erhalten.
Nutzerrollen
Die Google Ads API hat kein eigenes Zugriffsmodell und verwendet keine separaten OAuth 2.0-Bereiche, um die Funktionalität einzuschränken. Beispielsweise werden in der Google Ads API dieselben Bereiche für Lese- und Schreibvorgänge verwendet. Stattdessen werden in der Google Ads API dieselben Nutzerrollen verwendet, die in Google Ads unterstützt werden. Wenn einem Konto auf Verwaltungsebene eine Nutzerrolle zugewiesen wird, wird die Rolle an die Konten in der Hierarchie vererbt. Wenn ein Nutzer widersprüchliche Rollen für ein bestimmtes Konto hat, wird die richtige Ebene durch das in der API-Anfrage angegebene Konto login-customer-id bestimmt.
In der folgenden Tabelle wird die Kontohierarchie aus dem vorherigen Beispiel verwendet und die Auswirkungen der Zuweisung verschiedener Nutzerrollen an Nutzer dargestellt.
| Nutzer | Zugewiesene Nutzerrolle | Anmelde-Kundennummer | Tatsächliche Zugriffsebene |
|---|---|---|---|
| SA1 | Standardzugriff auf Konto M1 | M1 | Standardzugriff auf M1, M2, A1, A2, A3 |
| U2 |
Standardzugriff auf M2 Lesezugriff auf M3 |
M2 | Standardzugriff auf M2, A1, A2, A3 |
| U2 |
Standardzugriff auf M2 Lesezugriff auf M3 |
M3 | Lesezugriff auf M3, A1, A4 |