Es gibt zwei Arten von Google Ads-Konten: Google Ads-Verwaltungskonten und Google Ads-Werbekonten. Eine detaillierte Erklärung der Beziehungen zwischen diesen Begriffen und anderen Begriffen wie „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 Verwaltungs konto 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 in dieses Konto.
- Gewähren Sie dem Nutzer indirekten Zugriff auf das Werbekonto, indem Sie ihn in ein Verwaltungskonto einladen, das mit diesem Konto verknüpft ist. Der Nutzer erhält Zugriff auf das Werbekonto, da das Verwaltungskonto Zugriff auf alle Konten hat, die darunter verknüpft sind.
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 |
Kunden-ID für die Anmeldung
Ein Nutzer hat möglicherweise Zugriff auf mehrere Kontohierarchien. Wenn Sie in solchen Fällen einen API-Aufruf ausführen, müssen Sie das Stammkonto angeben, das verwendet werden soll, um die Autorisierungs- und Kontozugriffsebenen korrekt zu bestimmen. Fügen Sie dazu den Header login-customer-id in Ihre API-Anfrage ein.
In der folgenden Tabelle wird die Kontohierarchie aus dem vorherigen Beispiel verwendet, um zu zeigen, welche Kunden-IDs für die Anmeldung Sie verwenden können und welche Konten Sie aufrufen können.
| Nutzer | Zu verwendende Kunden-ID für die Anmeldung | Konten für API-Aufrufe |
|---|---|---|
| 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 Header login-customer-id weglassen, wenn der Nutzer direkten Zugriff auf das Google Ads-Konto hat, das Sie aufrufen. Sie müssen den Header login-customer-id beispielsweise nicht angeben, wenn Sie mit den Anmeldedaten von U3 einen Aufruf an A4 senden, da die Google Ads-Server die Zugriffsebene anhand der Kundennummer (A4) korrekt bestimmen können.
Wenn Sie eine Google Ads API-Clientbibliothek verwenden, geben Sie den Header login-customer-id 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
.NET
Fügen Sie die folgende Einstellung hinzu, wenn Sie das Objekt GoogleAdsConfig initialisieren und damit ein Objekt GoogleAdsClient erstellen.
GoogleAdsConfig config = new GoogleAdsConfig()
{
// ...
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
GoogleAdsClient client = new GoogleAdsClient(config);
Python
Fügen Sie die folgende Einstellung in Ihre Datei google-ads.yaml ein.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
PHP
Fügen Sie die folgende Einstellung in Ihre Datei google_ads_php.ini ein.
[GOOGLE_ADS]
loginCustomerId = "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 das folgende Befehlszeilenargument an, wenn Sie den Befehl curl ausführen.
-H "login-customer-id: INSERT_LOGIN_CUSTOMER_ID_HERE"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 Header login-customer-id 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.V25.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, # 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 "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
Was ist, 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 von NutzerU1im vorherigen Beispiel aufrufen, gibt die Methode nurM1in den Ergebnissen zurück, obwohlU1Zugriff auf weitere Konten hat. Um dies zu bestätigen, rufen Sie die Kontohierarchie ab, indem SiesearchodersearchStreamAbfragen für diecustomer_clientRessource für jedes der Konten ausführen, die von derListAccessibleCustomersMethode zurückgegeben werden. Legen Sie dazu jedes dieser Konten alslogin-customer-idfest, wie in dem vorherigen Abschnitt beschrieben. Wenn Sie Zugriff auf das Zielkonto haben, können Sie es als Teil einer der Kontohierarchien abrufen.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 zum Kontozugriff, um Zugriff auf das richtige Kundenkonto 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. Die Google Ads API verwendet beispielsweise dieselben Bereiche für Lese- und Lese-/Schreibvorgänge. Stattdessen verwendet die Google Ads API dieselben Nutzerrollen, die von 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 | login-customer-id | 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 |