Python scripts voor Google Workspace Admin SDK

Praktische Python scripts voor de Google Workspace Admin SDK: gebruikers exporteren, bulk aanmaken, aanmeldingsrapporten ophalen en service account authenticatie instellen.

Total Workspace 20 April 2026 1 min leestijd

De Google Admin SDK geeft programmatische toegang tot vrijwel alle Admin Console functies. Met Python kun je bulk-bewerkingen uitvoeren, rapportages automatiseren en integraties bouwen die in de Admin Console niet mogelijk zijn.

Setup en installatie

pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client

Service Account aanmaken:

  1. console.cloud.google.com > Credentials > Service Account aanmaken
  2. Download de JSON-sleutel
  3. Activeer Domain-Wide Delegation
  4. Autoriseer in Admin Console:
Admin Console > Beveiliging > API-besturing > Domain-wide Delegation
Client ID: [Service Account Client ID]
Scopes: admin.directory.user, admin.directory.group, admin.reports.audit.readonly

Authenticatie instellen

from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ["https://www.googleapis.com/auth/admin.directory.user"]
credentials = service_account.Credentials.from_service_account_file(
    "service-account.json", scopes=SCOPES
).with_subject("admin@jouwdomein.nl")

service = build("admin", "directory_v1", credentials=credentials)

Script 1: Alle gebruikers exporteren naar CSV

def exporteer_gebruikers():
    resultaten, page_token = [], None
    while True:
        resp = service.users().list(
            customer="my_customer", maxResults=500,
            orderBy="email", pageToken=page_token
        ).execute()
        resultaten.extend(resp.get("users", []))
        page_token = resp.get("nextPageToken")
        if not page_token:
            break

    with open("gebruikers.csv", "w") as f:
        f.write("Email,Naam,OE,Aangemaakt\n")
        for u in resultaten:
            f.write(
                f"{u['primaryEmail']},{u['name']['fullName']},"
                f"{u.get('orgUnitPath','/')},"
                f"{u.get('creationTime','onbekend')}\n"
            )
    print(f"{len(resultaten)} gebruikers geexporteerd")

Script 2: Bulk gebruikers aanmaken vanuit CSV

import csv, random, string

def genereer_wachtwoord(n=16):
    return "".join(random.choice(string.ascii_letters + string.digits + "!@#$") for _ in range(n))

def maak_gebruiker(email, voornaam, achternaam, oe="/"):
    pw = genereer_wachtwoord()
    body = {
        "primaryEmail": email,
        "name": {"givenName": voornaam, "familyName": achternaam},
        "password": pw, "changePasswordAtNextLogin": True,
        "orgUnitPath": oe,
    }
    try:
        service.users().insert(body=body).execute()
        print(f"OK: {email} | Wachtwoord: {pw}")
    except Exception as e:
        print(f"Fout {email}: {e}")

with open("nieuwe-gebruikers.csv") as f:
    for r in csv.DictReader(f):
        maak_gebruiker(r["email"], r["voornaam"], r["achternaam"], r.get("oe", "/"))

CSV-formaat:

email,voornaam,achternaam,oe
jan@bedrijf.nl,Jan,Janssen,/Verkoop

Script 3: Aanmeldingsrapporten ophalen

from googleapiclient.discovery import build
from datetime import datetime, timedelta

reports = build("admin", "reports_v1", credentials=credentials)
start = (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%dT%H:%M:%SZ")

resp = reports.activities().list(
    userKey="all", applicationName="login",
    startTime=start, maxResults=1000
).execute()

with open("aanmeldingen.csv", "w") as f:
    f.write("Tijdstip,Gebruiker,IP,Type\n")
    for a in resp.get("items", []):
        for e in a.get("events", []):
            f.write(f"{a['id']['time']},{a['actor']['email']},{a['ipAddress']},{e['name']}\n")

Veelgestelde vragen

Heb ik altijd een service account nodig?
Voor server-side scripts en automatisering wel. Voor interactieve scripts gebruik je OAuth 2.0 User Authorization.
Wat zijn de API-limieten?
Directory API: 2000 requests per 100 seconden. Reports API: 1500 per 100 seconden. Bouw retry-logica in.
Hoe beveilig ik het service account JSON-bestand?
Nooit in Git opslaan. Gebruik omgevingsvariabelen of Google Secret Manager.
Kan ik via de API e-mails sturen namens gebruikers?
Ja, via de Gmail API met de scope gmail.send en DWD.
Hoe handel ik API-fouten af?
Gebruik exponential backoff bij 429 (rate limit) en 503 (service unavailable) fouten.
Kan ik rapporten direct naar Google Sheets exporteren?
Ja, gebruik de Google Sheets API naast de Admin SDK voor directe export.
Is het mogelijk webhook-notificaties te ontvangen bij directory-wijzigingen?
Ja, via de Admin SDK Push Notifications API.
Kan ik via de API Shared Drives beheren?
Ja, via de Drive API (drives.list, drives.create, drives.delete).
Wat is het verschil tussen de Admin SDK en GAM?
GAM is een command-line tool gebouwd bovenop de Admin SDK. GAM is sneller voor ad-hoc beheer; de SDK is beter voor maatwerk automatisering.
Hoe automatiseer ik periodieke rapportages?
Via cron (Linux) of Windows Taakplanner. Exporteer output naar Google Sheets voor eenvoudig delen.

Andere artikelen

Vraag over dit onderwerp?

Wij reageren binnen 1 werkdag met een eerlijk en concreet antwoord.

1
Aanvraag
2
Specificatie
3
Uw gegevens

Waarmee kunnen wij u helpen?

Informatie & advies

Vraag over het artikel.

Offerte aanvragen

Prijsindicatie ontvangen.

Implementatie

Hulp bij toepassing.

Bestaande klant

Vraag of melding indienen.

Kunt u dit specificeren?

Verdieping op dit onderwerp
Toepassing in onze situatie
Algemeen Workspace-advies
Prijsindicatie
Vast projecttarief
Doorlopend support / SLA
Nieuwe implementatie
Uitbreiding bestaande setup
Migratie vanuit ander platform
Technisch probleem
Factuur of contract
Aanvullende wens