{"id":76183,"date":"2026-05-08T15:03:08","date_gmt":"2026-05-08T14:03:08","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=76183&#038;preview=true&#038;preview_id=76183"},"modified":"2026-05-12T12:16:30","modified_gmt":"2026-05-12T11:16:30","slug":"kinsta-api-und-google-ai","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/","title":{"rendered":"Automatisiere Kundenberichte mit Kinsta API und Google AI"},"content":{"rendered":"<p>F\u00fcr moderne Agenturen ist ein hochwertiges, konsistentes Berichtswesen unerl\u00e4sslich, um das Vertrauen ihrer Kunden zu erhalten und eine langfristige Loyalit\u00e4t aufzubauen. Mit \u00fcbersichtlichen, informativen Berichten kannst du Verkaufstrends \u00fcberwachen, die Wirksamkeit von Kampagnen nachweisen, den Return on Investment (ROI) berechnen und vieles mehr.<\/p>\n<p>F\u00fcr eine Agentur, die Dutzende oder sogar Hunderte von Websites verwaltet, kann die Erstellung dieser regelm\u00e4\u00dfigen Berichte jedoch zu einem gro\u00dfen Engpass werden, der die Skalierbarkeit deines Betriebs beeintr\u00e4chtigt.<\/p>\n<p>Deshalb ist es wichtig, die Datenabfrage zu optimieren und zu automatisieren. Dadurch wird die Effizienz wiederhergestellt und dein Team kann sich auf wichtige Aufgaben konzentrieren &#8211; wie die Entwicklung neuer Projekte.<\/p>\n<p>In diesem Artikel erf\u00e4hrst du, wie du die <a href=\"https:\/\/kinsta.com\/de\/docs\/kinsta-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kinsta-API<\/a> nutzen kannst, um deine Hosting-Daten automatisch abzurufen und strategische Berichte mit der Kraft der KI zu erstellen.<\/p>\n<p>Bist du bereit, dein Berichtssystem zu skalieren? Lies weiter.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Zugriff auf Kinsta Analytics \u00fcber MyKinsta und Kinsta API<\/h2>\n<p>Kinsta-Kunden haben \u00fcber das <a href=\"https:\/\/kinsta.com\/de\/mykinsta\/\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta-Hosting-Dashboard<\/a> Zugang zu einer Vielzahl von Daten. Du kannst auf die Daten deines Plans im Bereich Analytics in deinem Dashboard zugreifen.<\/p>\n<figure id=\"attachment_208745\" aria-describedby=\"caption-attachment-208745\" style=\"width: 2568px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208745 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/mykinsta-analytics.png\" alt=\"\u00dcbersicht \u00fcber den MyKinsta-Analytics-Bereich\" width=\"2568\" height=\"774\"><figcaption id=\"caption-attachment-208745\" class=\"wp-caption-text\">\u00dcbersicht \u00fcber den MyKinsta-Analytics-Bereich<\/figcaption><\/figure>\n<p>Die Analytics-Seite ist in mehrere Registerkarten unterteilt, die sich jeweils auf einen bestimmten Aspekt der Aktivit\u00e4ten auf deiner Website konzentrieren:<\/p>\n<ul>\n<li><strong>Planauslastung:<\/strong> Zeigt den Ressourcenverbrauch deines Plans an, sowohl kumuliert als auch aufgeschl\u00fcsselt nach einzelnen Websites.<\/li>\n<li><strong>Top-Anfragen:<\/strong> Erm\u00f6glicht es dir, die wichtigsten Anfragen an deine Website zu identifizieren, aufgeschl\u00fcsselt nach Bandbreite und Ansichten.<\/li>\n<li><strong>Cache:<\/strong> Hier findest du eine Aufschl\u00fcsselung der Cache-Nutzung, einschlie\u00dflich der Cache-Aufschl\u00fcsselung, der Server-Cache-Komponenten und der Server-Cache-Umgehungen.<\/li>\n<li><strong>CDN &#038; Edge:<\/strong> Bietet Daten zum CDN-Bandbreitenverbrauch, zur Edge-Cache-Bandbreite und Listen der wichtigsten Dateien, die aus dem CDN-Cache ausgeliefert werden.<\/li>\n<li><strong>Streuung:<\/strong> Zeigt den prozentualen Anteil der Besuche von Desktop, Tablet und Handy.<\/li>\n<li><strong>Leistung:<\/strong> Enth\u00e4lt verschiedene Leistungskennzahlen wie die durchschnittliche PHP-MySQL-Antwortzeit, den PHP-Durchsatz, das PHP-Thread-Limit und mehr.<\/li>\n<li><strong>Antwort:<\/strong> Liefert Statistiken zu Antwortcodes, einschlie\u00dflich einer detaillierten Aufschl\u00fcsselung der Fehlercodes.<\/li>\n<li><strong>Geo &#038; IP:<\/strong> Zeigt Listen der Top-L\u00e4nder, Top-St\u00e4dte und Top-Client-IPs an, von denen die Anfragen an deine Website stammen.<\/li>\n<\/ul>\n<p>Du kannst dieselben Analysen auch auf Website-Ebene abrufen, indem du zu <strong>Websites<\/strong> &gt; <strong>Websitename<\/strong> &gt; <strong>Analytics<\/strong> navigierst.<\/p>\n<figure id=\"attachment_208746\" aria-describedby=\"caption-attachment-208746\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208746 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/site-analytics.png\" alt=\"Website-Analysen in MyKinsta\" width=\"2570\" height=\"1140\"><figcaption id=\"caption-attachment-208746\" class=\"wp-caption-text\">Website-Analysen in MyKinsta<\/figcaption><\/figure>\n<p>Kinsta Analytics bietet einen beeindruckenden Datensatz. Wenn du durch dein MyKinsta-Dashboard navigierst, bekommst du ein klares Bild vom Ressourcenverbrauch, der Effizienz und der Leistung deiner Website. Du wirst genau wissen, woher die meisten Anfragen kommen und welche die meisten Ressourcen verbrauchen.<\/p>\n<p>In Kombination mit unserem <a href=\"https:\/\/kinsta.com\/de\/apm-tool\/\">Kinsta APM-Tool<\/a> kannst du mit Kinsta Analytics die Leistung deiner WordPress-Websites optimieren.<\/p>\n<p>Was nicht jeder wei\u00df, ist, dass die Daten von Kinsta Analytics auch \u00fcber die <a href=\"https:\/\/kinsta.com\/de\/docs\/kinsta-api\/\">Kinsta API<\/a> zug\u00e4nglich sind. Damit kannst du programmatisch Daten abrufen und Hosting-Metriken erstellen, die du dann zur Erstellung automatisierter Berichte f\u00fcr deine Kunden verwenden kannst.<\/p>\n<p>Schauen wir uns die Kinsta-API-Endpunkte an.<\/p>\n<h3>Der Analytics-Endpunkt der Kinsta-API<\/h3>\n<p>Mit dem Analytics-Endpunkt der Kinsta-API kannst du Rohdaten \u00fcber die Ressourcennutzung und den Zustand deiner Website abrufen.<\/p>\n<ul>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-usage\" target=\"_blank\" rel=\"noopener noreferrer\">Besucherzahlen<\/a>, <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth-usage\" target=\"_blank\" rel=\"noopener noreferrer\">Server-Bandbreitennutzung<\/a> und <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth-usage\" target=\"_blank\" rel=\"noopener noreferrer\">CDN-Bandbreitennutzung<\/a>: Diese Kennzahlen geben Aufschluss \u00fcber die Ressourcennutzung im Verh\u00e4ltnis zu deinem Hosting-Plan w\u00e4hrend des aktuellen Abrechnungszeitraums.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits\" target=\"_blank\" rel=\"noopener noreferrer\">Besuche<\/a>: Zeigt die Gesamtzahl der Besuche in einer bestimmten Umgebung innerhalb eines bestimmten Zeitraums an.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-disk-space\" target=\"_blank\" rel=\"noopener noreferrer\">Speicherplatz<\/a>: Zeigt den gesamten Speicherplatz an, den eine bestimmte Umgebung in einem bestimmten Zeitraum verbraucht hat.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth\" target=\"_blank\" rel=\"noopener noreferrer\">Server-Bandbreite<\/a>: Gibt die Bandbreite an, die von einer bestimmten Umgebung in einem bestimmten Zeitraum verbraucht wurde.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth\" target=\"_blank\" rel=\"noopener noreferrer\">CDN-Bandbreite<\/a>: Zeigt die CDN-Bandbreite an, die eine bestimmte Umgebung in einem bestimmten Zeitraum verbraucht hat.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-countries\" target=\"_blank\" rel=\"noopener noreferrer\">Top-L\u00e4nder<\/a>: Gibt eine Liste der wichtigsten L\u00e4nder an, aus denen die Anfragen an die Website innerhalb eines bestimmten Zeitraums stammen.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-cities\" target=\"_blank\" rel=\"noopener noreferrer\">Top-St\u00e4dte<\/a>: Gibt eine Liste der wichtigsten St\u00e4dte an, aus denen in einem bestimmten Zeitraum Anfragen an die Website gestellt wurden.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-client-ips\" target=\"_blank\" rel=\"noopener noreferrer\">Top Client IPs<\/a>: Enth\u00e4lt eine Liste der wichtigsten Client-IP-Adressen, von denen in einem bestimmten Zeitraum Zugriffe auf die Website ausgingen.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-dispersion\" target=\"_blank\" rel=\"noopener noreferrer\">Besuchsstreuung<\/a>: Sie liefert Daten \u00fcber die Verteilung der Besuche auf Desktop-, Tablet- und Mobilger\u00e4te in einem bestimmten Zeitraum.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-response-code-breakdown\" target=\"_blank\" rel=\"noopener noreferrer\">Aufschl\u00fcsselung der Antwortcodes<\/a>: Liefert eine Aufschl\u00fcsselung der HTTP-Statuscodes, die vom Server innerhalb eines bestimmten Zeitraums zur\u00fcckgegeben wurden.<\/li>\n<\/ul>\n<p>Im Folgenden findest du einige Beispiele f\u00fcr die Nutzung des <code>Analyse<\/code>-Endpunkts.<\/p>\n<h4>Besuche<\/h4>\n<p>Die folgende Anfrage liefert die Gesamtzahl der Besuche auf deiner Website und die Anzahl der eindeutigen IP-Adressen, die in den letzten 30 Tagen auf die Website zugegriffen haben:<\/p>\n<pre><code>https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\/visits?time_span=30_days&company_id={KINSTA_COMPANY_ID}<\/code><\/pre>\n<p>Die Antwort wird wie folgt aufgebaut sein:<\/p>\n<pre><code class=\"language-json\">{\n\t\"analytics\": {\n\t\t\"analytics_response\": {\n\t\t\t\"key\": \"uniqueip\",\n\t\t\t\"data\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"uniqueip\",\n\t\t\t\t\t\"total\": 1000,\n\t\t\t\t\t\"dataset\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2025-10-28T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"1000\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2025-10-28T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"900\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2025-10-28T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"820\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}<\/code><\/pre>\n<h4>Bandbreite<\/h4>\n<p>Das folgende Beispiel zeigt, wie du die Kinsta-API abfragst, um die Bandbreitennutzung des Servers in den letzten 30 Tagen zu ermitteln:<\/p>\n<pre><code>https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\/bandwidth?time_span=30_days&company_id={KINSTA_COMPANY_ID}<\/code><\/pre>\n<p>Die Antwort des Kinsta-Servers liefert die t\u00e4gliche Bandbreitennutzung f\u00fcr die letzten 30 Tage:<\/p>\n<pre><code class=\"language-json\">{\n\t\"analytics\": {\n\t\t\"analytics_response\": {\n\t\t\t\"key\": \"bandwidth\",\n\t\t\t\"data\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"bandwidth\",\n\t\t\t\t\t\"total\": 1000,\n\t\t\t\t\t\"dataset\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-03-11T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"37347250\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-03-12T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"9276458\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}<\/code><\/pre>\n<h4>CDN-Bandbreite<\/h4>\n<p>In diesem anderen Beispiel fragen wir die Kinsta-API ab, um die CDN-Bandbreitennutzung der letzten 7 Tage herauszufinden:<\/p>\n<pre><code>https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\/cdn-bandwidth?time_span=7_days&company_id={KINSTA_COMPANY_ID}<\/code><\/pre>\n<p>Der Server liefert die folgenden Daten:<\/p>\n<pre><code class=\"language-json\">{\n\t\"analytics\": {\n\t\t\"analytics_response\": {\n\t\t\t\"key\": \"cdn-bandwidth\",\n\t\t\t\"data\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"cdn-bandwidth\",\n\t\t\t\t\t\"total\": 1000,\n\t\t\t\t\t\"dataset\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-04-02T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"753447\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-04-03T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"16911\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}<\/code><\/pre>\n<p>Du kannst es selbst ausprobieren, indem du deinen Kinsta-API-Schl\u00fcssel (Inhaber-Token), die Umgebungs-ID und die Unternehmens-ID in den <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits?playground=open\" target=\"_blank\" rel=\"noopener noreferrer\">API-Spielplatz<\/a> eingibst.<\/p>\n<figure id=\"attachment_208758\" aria-describedby=\"caption-attachment-208758\" style=\"width: 2352px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208758 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/api-playground.png\" alt=\"Teste die Kinsta-API im API-Playground\" width=\"2352\" height=\"1218\"><figcaption id=\"caption-attachment-208758\" class=\"wp-caption-text\">Teste die Kinsta-API im API-Playground<\/figcaption><\/figure>\n<p>Jetzt, wo du wei\u00dft, wie du auf die Analysedaten deiner Website auf Kinsta zugreifen kannst, kannst du sie nutzen, um deinen Betrieb zu automatisieren. Dazu geh\u00f6rt auch das Automatisieren des Berichtswesens.<\/p>\n<p>In den folgenden Abschnitten zeigen wir dir, wie du das Berichtswesen deiner Agentur mithilfe der Kinsta-API automatisieren kannst. Wir werden ein Python-Skript erstellen und <a href=\"https:\/\/kinsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\">GitHub Actions<\/a> nutzen, um die Erstellung und Ausf\u00fchrung zu automatisieren. Damit werden die von der API zur\u00fcckgegebenen Rohdaten in Tabellen und Diagramme umgewandelt und Google AI abgefragt, um einen endg\u00fcltigen Bericht zu erstellen.<\/p>\n<p>Es ist Zeit anzupacken.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Der vollst\u00e4ndige Code dieses Tutorials ist in <a href=\"https:\/\/github.com\/carlodaniele\/kinsta-gemini-reporting\" target=\"_blank\" rel=\"noopener noreferrer\">diesem GitHub-Repository<\/a> verf\u00fcgbar.<\/p>\n<\/aside>\n\n<h2>Baue ein automatisiertes Meldesystem mit der Kinsta API und Google AI<\/h2>\n<p>Unser Ziel ist es, einen automatisierten Bericht zu erstellen, der in bestimmten Abst\u00e4nden generiert wird. Das System wird die Kinsta-API abfragen, um Daten \u00fcber Besuche, Server-Bandbreite und CDN-Bandbreite zu erhalten. Diese Daten werden dann verwendet, um Diagramme und Tabellen in einer PDF-Datei zu erstellen. Als Teil dieses Prozesses werden die Daten an die Gemini API gesendet, um eine Analyse der extrahierten Daten zu erstellen, die dann in den Bericht aufgenommen wird.<\/p>\n<figure id=\"attachment_208776\" aria-describedby=\"caption-attachment-208776\" style=\"width: 3355px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208776 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/automatic-report-preview.png\" alt=\"Vorschau des automatisierten Berichts, der mit GitHub Actions und der Kinsta API erstellt wird\" width=\"3355\" height=\"1572\"><figcaption id=\"caption-attachment-208776\" class=\"wp-caption-text\">Vorschau des automatisierten Berichts, der mit GitHub Actions und der Kinsta API erstellt wird<\/figcaption><\/figure>\n<h3>Einrichten des Projekts auf GitHub<\/h3>\n<p>Auf der GitHub-Startseite klickst du auf die gr\u00fcne Schaltfl\u00e4che <strong>Neu<\/strong>, um ein neues Projekt zu erstellen. Sobald du ein leeres Projekt hast, gehst du zu <strong>Einstellungen<\/strong> &gt; <strong>Geheimnisse und Variablen<\/strong> &gt; <strong>Aktionen<\/strong> und f\u00fcgst die im folgenden Bild gezeigten Geheimnisse hinzu.<\/p>\n<figure id=\"attachment_208781\" aria-describedby=\"caption-attachment-208781\" style=\"width: 1580px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208781 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/repository-secrets-2.png\" alt=\"Geheime Daten in GitHub-Actions-Repositorys\" width=\"1580\" height=\"676\"><figcaption id=\"caption-attachment-208781\" class=\"wp-caption-text\">Geheime Daten in GitHub-Actions-Repositorys<\/figcaption><\/figure>\n<p>Wenn du deine API-Schl\u00fcssel und IDs in GitHub Secrets speicherst, sind sie f\u00fcr jeden unzug\u00e4nglich und dein Code bleibt sicher.<\/p>\n<h4>GEMINI_API_KEY<\/h4>\n<p>Du kannst einen Google AI API-Schl\u00fcssel im <a href=\"https:\/\/aistudio.google.com\/api-keys\" target=\"_blank\" rel=\"noopener noreferrer\">Google AI Studio Dashboard<\/a> erstellen. Weitere Informationen findest du in der <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">Google AI-Dokumentation<\/a>.<\/p>\n<h4>KINSTA_API-KEY<\/h4>\n<p>Befolge als N\u00e4chstes die Anweisungen in unserem Artikel, um <a href=\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-schluessel\/\">einen Kinsta-API-Schl\u00fcssel zu generieren<\/a>.<\/p>\n<h4>KINSTA_COMPANY_ID, KINSTA_ENV_ID, KINSTA_SITE_ID<\/h4>\n<p>Du findest die Site ID, Environment ID und Company ID unter <strong>Websites<\/strong> &gt; <strong>Websitename<\/strong> &gt; <strong>Info<\/strong> in deinem MyKinsta Dashboard.<\/p>\n<figure id=\"attachment_208778\" aria-describedby=\"caption-attachment-208778\" style=\"width: 2080px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208778 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/site-info.png\" alt=\"Informationen zur Website in MyKinsta\" width=\"2080\" height=\"828\"><figcaption id=\"caption-attachment-208778\" class=\"wp-caption-text\">Informationen zur Website in MyKinsta<\/figcaption><\/figure>\n<p>Kommen wir nun zu den Projektdateien.<\/p>\n<h3>Erforderliche Bibliotheken und GitHub Actions Konfiguration<\/h3>\n<p>Erstelle im Stammverzeichnis deines GitHub-Projekts eine Datei namens <code>requirements.txt<\/code> und f\u00fcge Folgendes hinzu:<\/p>\n<pre><code>google-genai\nrequests\nmatplotlib\nfpdf2<\/code><\/pre>\n<p>Diese Datei listet die Komponenten auf, die f\u00fcr dein Projekt ben\u00f6tigt werden.<\/p>\n<ul>\n<li><code>google-genai<\/code>: Dies ist die Bibliothek von Google f\u00fcr die Interaktion mit Gemini-Modellen.<\/li>\n<li><code>requests<\/code>: Eine Bibliothek, um HTTP-Anfragen zu stellen. In diesem Projekt wird sie verwendet, um HTTP-Anfragen an die Kinsta-API zu senden.<\/li>\n<li><code>matplotlib<\/code>: Eine Python-Bibliothek zur <a href=\"https:\/\/matplotlib.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Erstellung von Diagrammen und zur Visualisierung von Daten<\/a>.<\/li>\n<li><code>fpdf2<\/code>: Eine Bibliothek, mit der du <a href=\"https:\/\/py-pdf.github.io\/fpdf2\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">PDF-Dateien erstellen<\/a> kannst.<\/li>\n<\/ul>\n<p>Als N\u00e4chstes erstellst du eine Datei namens <code>.github\/workflows\/generate_report.yml<\/code> mit dem folgenden Code:<\/p>\n<pre><code class=\"language-yaml\">name: Generate Kinsta Analytics Report\n\non:\n  push:\n    branches: [main]\n  workflow_dispatch:\n\njobs:\n  build-and-run:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions\/checkout@v4\n\n      - name: Set up Python\n        uses: actions\/setup-python@v5\n        with:\n          python-version: '3.12'\n\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install -r requirements.txt\n\n      - name: Run Report Script\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          KINSTA_ENV_ID: ${{ secrets.KINSTA_ENV_ID }}\n          KINSTA_SITE_ID: ${{ secrets.KINSTA_SITE_ID }}\n          KINSTA_COMPANY_ID: ${{ secrets.KINSTA_COMPANY_ID }}\n          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}\n        run: python main.py\n\n      - name: Upload Report\n        uses: actions\/upload-artifact@v4\n        with:\n          name: Kinsta-Advanced-Report\n          path: \"*.pdf\"<\/code><\/pre>\n<p>GitHub verwendet diese Datei, um deinen Code automatisch \u00fcber GitHub Actions auszuf\u00fchren. Schauen wir uns das mal genauer an:<\/p>\n<pre><code class=\"language-yaml\">name: Generate Kinsta Analytics Report\n\non:\n  push:\n    branches: [main]\n  workflow_dispatch:<\/code><\/pre>\n<ul>\n<li><code>name<\/code>: Der Name deines Projekts, wie er in der Registerkarte <strong>Aktionen<\/strong>\u00a0auf GitHub erscheint.<\/li>\n<li><code>on<\/code>: Legt fest, wann der Workflow ausgel\u00f6st werden soll.<\/li>\n<li><code>push<\/code>: Der Workflow wird jedes Mal ausgef\u00fchrt, wenn du eine Code\u00e4nderung in den Hauptzweig verschiebst.<\/li>\n<li><code>workflow_dispatch<\/code>: Erm\u00f6glicht es dir, den Workflow manuell auszuf\u00fchren.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">jobs:\n  build-and-run:\n    runs-on: ubuntu-latest<\/code><\/pre>\n<ul>\n<li><code>jobs<\/code>: Der Start der auszuf\u00fchrenden Aufgaben.<\/li>\n<li><code>build-and-run<\/code>: Ein beliebiger Name, der eine bestimmte Abfolge von Aktionen kennzeichnet.<\/li>\n<li><code>runs-on<\/code>: Legt das System fest, auf dem der Arbeitsablauf ausgef\u00fchrt werden soll.<\/li>\n<li><code>ubuntu-latest<\/code>: Legt die neueste Version von Ubuntu Linux fest.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">steps:\n      - name: Checkout Repository\n        uses: actions\/checkout@v4\n\n      - name: Set up Python\n        uses: actions\/setup-python@v5\n        with:\n          python-version: '3.12'<\/code><\/pre>\n<ul>\n<li><code>steps<\/code>: Die Reihenfolge der auszuf\u00fchrenden Operationen.<\/li>\n<li><code>name<\/code>: Der Name der Operation, die durchgef\u00fchrt werden soll<\/li>\n<li><code>uses<\/code>: Das vorkonfigurierte GitHub-Modul (Action)<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install -r requirements.txt<\/code><\/pre>\n<ul>\n<li><code>python -m pip install --upgrade pip<\/code>: Aktualisiert pip (den <a href=\"https:\/\/pypi.org\/project\/pip\/\" target=\"_blank\" rel=\"noopener noreferrer\">Python-Paketmanager<\/a>) auf die neueste verf\u00fcgbare Version.<\/li>\n<li><code>pip install -r requirements.txt<\/code>: Liest die Datei <code>requirements.txt<\/code> und installiert die darin aufgef\u00fchrten Pakete.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">      - name: Run Report Script\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          KINSTA_ENV_ID: ${{ secrets.KINSTA_ENV_ID }}\n          KINSTA_SITE_ID: ${{ secrets.KINSTA_SITE_ID }}\n          KINSTA_COMPANY_ID: ${{ secrets.KINSTA_COMPANY_ID }}\n          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}\n        run: python main.py<\/code><\/pre>\n<ul>\n<li><code>env<\/code>: Ruft die Werte der Umgebungsvariablen von GitHub Secrets ab.<\/li>\n<li><code>run: python main.py<\/code>: Startet den Python-Interpreter und f\u00fchrt die Datei <code>main.py<\/code> aus.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">     - name: Upload Report\n        uses: actions\/upload-artifact@v4\n        with:\n          name: Kinsta-Advanced-Report\n          path: \"*.pdf\"<\/code><\/pre>\n<ul>\n<li><code>uses<\/code>: actions\/upload-artifact@v4: Verwendet die GitHub-Aktion zur Verwaltung von Artefakten, einer Datei oder einem Ordner, die w\u00e4hrend der Ausf\u00fchrung des Skripts erstellt werden.<\/li>\n<li><code>with<\/code>: Legt die Konfigurationsparameter fest.<\/li>\n<\/ul>\n<p>Die Konfiguration deines Automatisierungsprojekts ist damit abgeschlossen. Jetzt ist es an der Zeit, die Python-Skripte zu erstellen.<\/p>\n<h3>Programmatische Abfrage der Kinsta-API<\/h3>\n<p>Sobald du die Einrichtung abgeschlossen hast, navigierst du zum Stammverzeichnis deines GitHub-Projekts und erstellst eine neue Datei namens <code>kinsta_utils.py<\/code> mit dem folgenden Code:<\/p>\n<pre><code class=\"language-python\">import requests\nimport os\n\nKINSTA_API_KEY = os.getenv(\"KINSTA_API_KEY\")\nKINSTA_SITE_ID = os.getenv(\"KINSTA_SITE_ID\")\nKINSTA_ENV_ID = os.getenv(\"KINSTA_ENV_ID\")\nKINSTA_COMPANY_ID = os.getenv(\"KINSTA_COMPANY_ID\")\nBASE_URL = f\"https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\"\n\ndef get_headers():\n    return {\"Authorization\": f\"Bearer {KINSTA_API_KEY}\"}<\/code><\/pre>\n<ul>\n<li>Die ersten beiden <code>Import<\/code>-Anweisungen laden die Standardbibliothek f\u00fcr HTTP-Anfragen und das Modul f\u00fcr die Interaktion mit dem Betriebssystem (<code>os<\/code>).<\/li>\n<li>Die n\u00e4chsten vier Zeilen (<code>os.getenv<\/code>) rufen deine Anmeldedaten von GitHub Secrets ab.<\/li>\n<li><code>BASE_URL<\/code> definiert den Hauptendpunkt der Kinsta-API, den das Skript verwendet.<\/li>\n<li>Die Funktion <code>get_headers<\/code> generiert den Autorisierungs-Header, der den Kinsta-API-Schl\u00fcssel enth\u00e4lt.<\/li>\n<\/ul>\n<p>Als N\u00e4chstes erstellst du eine Hilfsfunktion, die die von der API zur\u00fcckgegebenen Rohdaten in Megabytes umwandelt.<\/p>\n<pre><code class=\"language-python\">def format_bytes_to_mb(bytes_value):\n    \"\"\"Converts raw bytes from API to human-readable Megabytes.\"\"\"\n\n    try:\n        # Standard conversion to MB\n        # return round(int(bytes_value) \/ (1024 * 1024), 2)\n\n        # Decimal standard (used in MyKinsta dashboard) \n        return round(int(bytes_value) \/ 1_000_000, 2)\n\n    except (ValueError, TypeError):\n        return 0<\/code><\/pre>\n<ul>\n<li>Dieser Code bietet zwei M\u00f6glichkeiten. Die erste verwendet den bin\u00e4ren Standard (<code>1024 x 1024<\/code>), die zweite den dezimalen Standard. Die Division durch <code>1_000_000<\/code> stellt sicher, dass die Zahl in deinem PDF-Bericht der Zahl entspricht, die deine Kunden in MyKinsta Analytics sehen w\u00fcrden.<\/li>\n<\/ul>\n<p>Die folgende Funktion fragt die Kinsta-API ab und gibt eine Reihe von Rohdaten zur\u00fcck:<\/p>\n<pre><code class=\"language-python\">def fetch_kinsta_metric(endpoint, start_date, end_date):\n\n    url = f\"{BASE_URL}\/{endpoint}\"\n\n    params = {\n        \"company_id\": KINSTA_COMPANY_ID,\n        \"from\": f\"{start_date}T00:00:00.000Z\",\n        \"to\": f\"{end_date}T23:59:59.000Z\"\n    }\n\n    try:\n        response = requests.get(url, headers=get_headers(), params=params)\n        if response.status_code == 200:\n            data_node = response.json()['analytics']['analytics_response']['data'][0]\n            total = data_node.get('total', 0)\n            dataset = data_node.get('dataset', [])[:7]\n            return total, dataset\n\n    except Exception as e:\n        print(f\"Error fetching {endpoint}: {e}\")\n\n    return 0, []<\/code><\/pre>\n<ul>\n<li>Die Funktion <code>fetch_kinsta_metric<\/code> ben\u00f6tigt drei Argumente: <code>endpoint<\/code>, <code>start_date<\/code> und <code>end_date<\/code>. Diese werden verwendet, um die URL der Anfrage zu erstellen. Der Endpunkt kann <code>visits<\/code>, <code>bandwidth<\/code> oder <code>cdn-bandwidth<\/code> sein.<\/li>\n<li>Im Array <code>params<\/code> werden die Parameter der Anfrage gespeichert.<\/li>\n<li>Die Antwort von Kinsta ist ein verschachteltes JSON-Objekt (<code>data_node<\/code>), das die aggregierten Werte f\u00fcr den Zeitraum (<code>total<\/code>) und eine Liste der t\u00e4glichen Werte (<code>dataset<\/code>) enth\u00e4lt.<\/li>\n<\/ul>\n<p>Die letzte Funktion in der Datei <code>kinsta_utils.py<\/code> ruft den Websitenamen ab.<\/p>\n<pre><code class=\"language-python\">def fetch_site_name():\n    url = f\"https:\/\/api.kinsta.com\/v2\/sites\/{KINSTA_SITE_ID}\"\n    \n    try:\n        response = requests.get(url, headers=get_headers())\n        if response.status_code == 200:\n            data = response.json()\n            site_data = data.get('site', {})\n            \n            site_label = site_data.get('display_name', 'Unknown Site')\n            \n            env_label = \"Unknown Env\"\n            envs = site_data.get('environments', [])\n            for env in envs:\n                if env.get('id') == KINSTA_ENV_ID:\n                    env_label = env.get('display_name')\n                    break\n            \n            return f\"{site_label} ({env_label})\"\n        else:\n            print(f\"Kinsta API Error: {response.status_code} - {response.text}\")\n    except Exception as e:\n        print(f\"Error fetching site name: {e}\")\n        \n    return \"Unknown Site\"<\/code><\/pre>\n<p>Dieser Code sollte selbsterkl\u00e4rend sein. In der API-Referenz findest du weitere Informationen \u00fcber den <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/wordpress-sites\/get-site-by-id\" target=\"_blank\" rel=\"noopener noreferrer\"><code>Sites<\/code>-Endpunkt<\/a>.<\/p>\n<p>Jetzt m\u00fcssen wir nur noch den Workflow einrichten.<\/p>\n<h3>Automatisiere den Arbeitsablauf mit Python und Gemini<\/h3>\n<p>Die letzte Datei, die du erstellen musst, ist die Engine f\u00fcr deine Anwendung. Erstelle im Hauptverzeichnis deines GitHub-Projekts eine Datei <code>main.py<\/code>. F\u00fcge zu Beginn den folgenden Code ein:<\/p>\n<pre><code class=\"language-python\">import os\nimport matplotlib\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\nfrom google.genai import Client\nfrom fpdf import FPDF, XPos, YPos\nfrom datetime import datetime, timedelta\nfrom kinsta_utils import fetch_kinsta_metric, format_bytes_to_mb, fetch_site_name\n\nREPORT_LANG = \"en\" \nMODEL_ID = \"gemini-2.5-flash\" \nGEMINI_API_KEY = os.getenv(\"GEMINI_API_KEY\")\nclient = Client(api_key=GEMINI_API_KEY)\n\ntoday = datetime.now()\ncurr_end_dt = today - timedelta(days=1)\ncurr_start_dt = today - timedelta(days=7)\nprev_end_dt = today - timedelta(days=8)\nprev_start_dt = today - timedelta(days=14)\n\nCURR_RANGE = f\"{curr_start_dt.strftime('%b %d')} - {curr_end_dt.strftime('%b %d')}\"\nPREV_RANGE = f\"{prev_start_dt.strftime('%b %d')} - {prev_end_dt.strftime('%b %d')}\"\n\nDATES = [\n    prev_start_dt.strftime(\"%Y-%m-%d\"), \n    prev_end_dt.strftime(\"%Y-%m-%d\"), \n    curr_start_dt.strftime(\"%Y-%m-%d\"), \n    curr_end_dt.strftime(\"%Y-%m-%d\")\n]\n\nCURR_DAYS_LABELS = [(curr_start_dt + timedelta(days=i)).strftime(\"%d %a\") for i in range(7)]\nPREV_DAYS_LABELS = [(prev_start_dt + timedelta(days=i)).strftime(\"%d %a\") for i in range(7)]\nX_AXIS_LABELS = [(curr_start_dt + timedelta(days=i)).strftime(\"%d\") for i in range(7)]<\/code><\/pre>\n<p>So ist das Skript aufgebaut:<\/p>\n<ul>\n<li>Die <code>Import<\/code>-Anweisungen laden die notwendigen Bibliotheken, und <code>matplotlib.use('Agg')<\/code> weist Python an, die Diagramme zu erstellen und im Speicher zu halten.<\/li>\n<li>Der folgende Block legt die Sprache (<code>en<\/code>) und das Modell (<code>gemini-2.5-flash<\/code>) fest und initialisiert dann den Google-Client.<\/li>\n<li>Als N\u00e4chstes werden Zeitfenster definiert, um die Werte der letzten sieben Tage mit denen der vorherigen sieben Tage zu vergleichen.<\/li>\n<li>Schlie\u00dflich werden die Beschriftungen f\u00fcr Tabellen und Diagramme festgelegt.<\/li>\n<\/ul>\n<p>Im n\u00e4chsten Schritt wird eine <code>KinstaReport<\/code>-Klasse definiert, die mit Hilfe der FPDF-Bibliothek Berichtsseiten erstellt:<\/p>\n<pre><code class=\"language-python\">class KinstaReport(FPDF):\n    def __init__(self, site_name=\"Unknown Site\"):\n        super().__init__()\n        self.site_name = site_name\n\n    def header(self):\n        self.set_font(\"Helvetica\", \"B\", 8)\n        self.set_text_color(150)\n        # Site name\n        self.cell(100, 10, f\"Site: {self.site_name}\", align=\"L\")\n        # Date generated\n        self.cell(0, 10, f\"Kinsta Analytics Report | Generated: {datetime.now().strftime('%Y-%m-%d')}\", \n                  align=\"R\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n\n    def add_metric_page(self, title, chart_path, prev_vals, curr_vals, unit=\"\"):\n        self.add_page()\n        # Page title\n        self.set_font(\"Helvetica\", \"B\", 24)\n        self.set_text_color(83, 51, 237)\n        self.cell(0, 15, title, align=\"C\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n        \n        # Subtitle\n        self.set_font(\"Helvetica\", \"I\", 10)\n        self.set_text_color(120)\n        self.cell(0, 5, f\"Comparison: {CURR_RANGE} vs {PREV_RANGE}\", align=\"C\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n        \n        self.image(chart_path, x=10, y=42, w=190)\n        \n        # Data tables\n        self.set_y(150)\n        self.set_font(\"Helvetica\", \"B\", 10)\n        self.set_fill_color(245, 245, 255)\n        self.set_text_color(83, 51, 237)\n        \n        # Table header\n        col1, col2 = 35, 60\n        self.cell(col1, 10, \" Day (Prev)\", border=1, align='C', fill=True, new_x=XPos.RIGHT, new_y=YPos.TOP)\n        self.cell(col2, 10, f\"Value {unit}\", border=1, align='C', fill=True, new_x=XPos.RIGHT, new_y=YPos.TOP)\n        self.cell(col1, 10, \" Day (Curr)\", border=1, align='C', fill=True, new_x=XPos.RIGHT, new_y=YPos.TOP)\n        self.cell(col2, 10, f\"Value {unit}\", border=1, align='C', fill=True, new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n        \n        self.set_font(\"Helvetica\", \"\", 10)\n        self.set_text_color(50)\n        for i in range(7):\n            # Zebra striping\n            fill = (i % 2 == 0)\n            if fill: self.set_fill_color(250, 250, 250)\n            else: self.set_fill_color(255, 255, 255)\n            \n            self.cell(col1, 9, f\" {PREV_DAYS_LABELS[i]}\", border=1, align='C', fill=fill, new_x=XPos.RIGHT, new_y=YPos.TOP)\n            self.cell(col2, 9, f\" {prev_vals[i]}\", border=1, align='C', fill=fill, new_x=XPos.RIGHT, new_y=YPos.TOP)\n            self.cell(col1, 9, f\" {CURR_DAYS_LABELS[i]}\", border=1, align='C', fill=fill, new_x=XPos.RIGHT, new_y=YPos.TOP)\n            self.cell(col2, 9, f\" {curr_vals[i]}\", border=1, align='C', fill=fill, new_x=XPos.LMARGIN, new_y=YPos.NEXT)<\/code><\/pre>\n<p>Wir werden diesen Code nicht zu sehr ins Detail gehen. Weitere Informationen \u00fcber die FPDF-Bibliothek findest du in den Online-Ressourcen:<\/p>\n<ul>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tutorial.html\">Tutorial zu FPDF<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tables.html\">Tabellen erstellen<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Images.html\">Bilder einf\u00fcgen<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Maths.html#charts-graphs\">Diagramme und Schaubilder<\/a><\/li>\n<\/ul>\n<p>Als n\u00e4chstes definierst du eine Funktion <code>generated_chart<\/code>. Diese Funktion wandelt die von Kinsta erhaltenen Rohdaten in Diagramme um.<\/p>\n<pre><code class=\"language-python\">def generate_chart(labels, curr, prev, title, ylabel, filename, is_bar=False):\n    plt.figure(figsize=(10, 5), dpi=100)\n    ax = plt.gca()\n    \n    ax.spines['top'].set_visible(False)\n    ax.spines['right'].set_visible(False)\n    ax.spines['left'].set_color('#dddddd')\n    ax.spines['bottom'].set_color('#dddddd')\n\n    if is_bar:\n        # Bar Chart for bandwidth\n        bars = plt.bar(labels, curr, color='#00c4b4', alpha=0.6, label='Current Period', width=0.6)\n        # Add labels above the bars\n        for bar in bars:\n            height = bar.get_height()\n            plt.text(bar.get_x() + bar.get_width()\/2., height + 0.02, f'{height}', ha='center', va='bottom', fontsize=8, color='#00a194')\n    else:\n        # Line chart for visits\n        plt.plot(labels, curr, color='#5333ed', marker='o', markersize=6, linewidth=3, label='Current', zorder=3)\n        plt.plot(labels, prev, color='#a1a1a1', linestyle='--', marker='x', markersize=5, linewidth=1.5, label='Previous', alpha=0.6)\n        \n        plt.fill_between(labels, curr, color='#5333ed', alpha=0.1)\n    \n    plt.title(title, fontsize=14, pad=20, color='#333333', fontweight='bold')\n    plt.ylabel(ylabel, color='#666666')\n    plt.xlabel(\"Day of Month\", color='#666666')\n    plt.legend(frameon=False, loc='upper right')\n    plt.grid(axis='y', linestyle='--', alpha=0.3)\n    plt.tight_layout()\n    plt.savefig(filename)\n    plt.close()<\/code><\/pre>\n<p>Diese Funktion verwendet die Matplotlib-Bibliothek, um die aus Kinsta extrahierten Daten in Diagramme umzuwandeln, die in den PDF-Bericht eingef\u00fcgt werden k\u00f6nnen. Weitere Informationen zur Verwendung der Matplotlib-Bibliothek findest du in der Online-Dokumentation:<\/p>\n<ul>\n<li><a href=\"https:\/\/matplotlib.org\/stable\/api\/pyplot_summary.html\" target=\"_blank\" rel=\"noopener noreferrer\">Matplotlib Pyplot<\/a><\/li>\n<li><a href=\"https:\/\/matplotlib.org\/stable\/users\/explain\/customizing.html\" target=\"_blank\" rel=\"noopener noreferrer\">Matplotlib anpassen<\/a><\/li>\n<\/ul>\n<p>Zum Schluss f\u00fcgst du die Funktion hinzu, die alle Teile, die wir bisher beschrieben haben, kombiniert.<\/p>\n<pre><code class=\"language-python\">def main():\n    site_display_name = fetch_site_name()\n\n    metrics = {\n        \"visits\": {\"title\": \"Site Visits\", \"unit\": \"\"},\n        \"bandwidth\": {\"title\": \"Server Bandwidth\", \"unit\": \"(MB)\"},\n        \"cdn-bandwidth\": {\"title\": \"CDN Bandwidth\", \"unit\": \"(MB)\"}\n    }\n    \n    report_data = {}\n    for key in metrics:\n        _, data_curr = fetch_kinsta_metric(key, DATES[2], DATES[3])\n        _, data_prev = fetch_kinsta_metric(key, DATES[0], DATES[1])\n        \n        curr_vals = []\n        prev_vals = []\n        for i in range(7):\n            c = float(data_curr[i]['value']) if i &lt; len(data_curr) else 0\n            p = float(data_prev[i]['value']) if i &lt; len(data_prev) else 0\n            \n            if \"bandwidth\" in key:\n                curr_vals.append(format_bytes_to_mb(c))\n                prev_vals.append(format_bytes_to_mb(p))\n            else:\n                curr_vals.append(int(c))\n                prev_vals.append(int(p))\n                \n        report_data[key] = {\"curr\": curr_vals, \"prev\": prev_vals}\n\n    pdf = KinstaReport(site_name=site_display_name)\n    \n    for key, info in metrics.items():\n        chart_file = f\"{key}_chart.png\"\n        generate_chart(X_AXIS_LABELS, report_data[key][\"curr\"], report_data[key][\"prev\"], \n                       f\"{info['title']} Trends\", \"Units\", chart_file, is_bar=(\"bandwidth\" in key))\n        pdf.add_metric_page(info[\"title\"], chart_file, report_data[key][\"prev\"], report_data[key][\"curr\"], info[\"unit\"])\n\n    # Executive Summary\n    pdf.add_page()\n    pdf.set_font(\"Helvetica\", \"B\", 20)\n    pdf.set_text_color(83, 51, 237)\n    pdf.cell(0, 15, \"Executive Summary\", align=\"C\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n    \n    curr_visits = sum(report_data['visits']['curr'])\n    prev_visits = sum(report_data['visits']['prev'])\n    curr_bw = sum(report_data['bandwidth']['curr'])\n    prev_bw = sum(report_data['bandwidth']['prev'])\n\n    try:\n        summary_prompt = (\n            f\"Analyze Kinsta performance for site {site_display_name}. \"\n            f\"Current Period ({CURR_RANGE}): {curr_visits} visits, {curr_bw:.2f}MB server bandwidth. \"\n            f\"Previous Period ({PREV_RANGE}): {prev_visits} visits, {prev_bw:.2f}MB server bandwidth. \"\n            f\"Compare these periods and identify trends. Language: {REPORT_LANG}. Max 4 sentences.\"\n        )\n        response = client.models.generate_content(model=MODEL_ID, contents=summary_prompt)\n        summary = response.text\n    except Exception as e:\n        summary = f\"Analytical insights unavailable. Error: {str(e)}\"\n\n    pdf.set_y(40)\n    pdf.set_font(\"Helvetica\", \"\", 12)\n    pdf.set_text_color(0)\n    pdf.multi_cell(0, 8, summary)\n    \n    report_filename = f\"Kinsta_Report_{datetime.now().strftime('%Y-%m-%d')}.pdf\"\n    pdf.output(report_filename)\n    print(f\"Report generated: {report_filename}\")\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n<p>Das macht dieser Code:<\/p>\n<ul>\n<li>Die <code>for<\/code>-Schleife iteriert durch das <code>metrics<\/code>-Array und fragt die Kinsta-API zweimal ab: einmal f\u00fcr die aktuelle Woche und einmal f\u00fcr die vorherige Woche.<\/li>\n<li>Wenn sich die Daten auf die Bandbreite beziehen, wandelt die Funktion <code>format_bytes_to_mb()<\/code> die Rohdaten in MB um.<\/li>\n<li>Die Funktion <code>report_data()<\/code> speichert die abgerufenen Daten.<\/li>\n<li><code>KinstaReport<\/code> erstellt dann f\u00fcr jede Website eine PDF-Datei.<\/li>\n<li>Die n\u00e4chste <code>for<\/code>-Schleife erzeugt PNG-Bilder f\u00fcr die Diagramme und erstellt f\u00fcr jede Kennzahl eine neue Seite.<\/li>\n<li>Der n\u00e4chste Abschnitt erstellt die Zusammenfassung, berechnet die Gesamtzahl der Besuche und die Gesamt-Megabytes f\u00fcr den Zeitraum und sendet eine dynamische Eingabeaufforderung an Gemini 2.5 Flash. Schlie\u00dflich wird die Antwort verwendet, um die letzte Seite des PDF-Dokuments zu vervollst\u00e4ndigen.<\/li>\n<li>Das Skript speichert das Dokument unter einem Dateinamen, der das aktuelle Datum enth\u00e4lt.<\/li>\n<li>* Die letzte Bedingung stellt sicher, dass der Prozess nur l\u00e4uft, wenn das Skript als Hauptprogramm ausgef\u00fchrt wird.<\/li>\n<\/ul>\n<p>Jetzt ist es an der Zeit, deine Anwendung zu erstellen und auszuf\u00fchren.<\/p>\n<h3>Abrufen des Artefakts<\/h3>\n<p>Du kannst deine Anwendung jetzt ausf\u00fchren. Klicke auf deiner GitHub-Projektseite auf die Registerkarte <strong>Aktionen<\/strong>. Suche im Men\u00fc auf der linken Seite nach dem Namen deiner Aktion (in unserem Beispiel ist das der Name <strong>Generate Kinsta Analytics Report<\/strong>, wie in deiner Datei <code>generate_report.yml<\/code> angegeben).<\/p>\n<figure id=\"attachment_208765\" aria-describedby=\"caption-attachment-208765\" style=\"width: 1998px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208765 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/github-actions-tab.png\" alt=\"Die Registerkarte Aktionen zeigt eine Liste von Workflows\" width=\"1998\" height=\"1020\"><figcaption id=\"caption-attachment-208765\" class=\"wp-caption-text\">Die Registerkarte Aktionen zeigt eine Liste von Workflows<\/figcaption><\/figure>\n<p>Als N\u00e4chstes klickst du auf das Men\u00fc <strong>Workflow ausf\u00fchren<\/strong> auf der rechten Seite und dann auf die gr\u00fcne Schaltfl\u00e4che <strong>Workflow ausf\u00fchren<\/strong> (derzeit ist nur der Hauptzweig verf\u00fcgbar).<\/p>\n<figure id=\"attachment_208766\" aria-describedby=\"caption-attachment-208766\" style=\"width: 2558px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208766 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/run-workflow.png\" alt=\"GitHub Workflow ausf\u00fchren\" width=\"2558\" height=\"1008\"><figcaption id=\"caption-attachment-208766\" class=\"wp-caption-text\">GitHub Workflow ausf\u00fchren<\/figcaption><\/figure>\n<p>Auf der n\u00e4chsten Seite wird der aktuelle Workflow angezeigt. Klicke darauf, um die Liste der laufenden Vorg\u00e4nge zu sehen.<\/p>\n<figure id=\"attachment_208767\" aria-describedby=\"caption-attachment-208767\" style=\"width: 1918px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208767 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/use-workflow-from-branch.png\" alt=\"Workflow aus Zweig verwenden\" width=\"1918\" height=\"884\"><figcaption id=\"caption-attachment-208767\" class=\"wp-caption-text\">Workflow aus Zweig verwenden<\/figcaption><\/figure>\n<p>Der Abschnitt <strong>Berichtsskript ausf\u00fchren<\/strong> enth\u00e4lt eine Liste der durchgef\u00fchrten Vorg\u00e4nge, w\u00e4hrend der Abschnitt <strong>Bericht hochladen<\/strong> die URL f\u00fcr den Download des Artefakts enth\u00e4lt. Klicke auf diesen Link, um deinen Bericht im PDF-Format herunterzuladen.<\/p>\n<figure id=\"attachment_208768\" aria-describedby=\"caption-attachment-208768\" style=\"width: 1554px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208768 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/generate-kinsta-analytics-report-workflow.png\" alt=\"Im Abschnitt Bericht hochladen findest du den Link zum PDF-Bericht\" width=\"1554\" height=\"816\"><figcaption id=\"caption-attachment-208768\" class=\"wp-caption-text\">Im Abschnitt Bericht hochladen findest du den Link zum PDF-Bericht<\/figcaption><\/figure>\n<p>Denselben Link findest du auch im Abschnitt <strong>Artefakte<\/strong>, unten auf der Seite <strong>Zusammenfassung<\/strong> des Workflows.<\/p>\n<figure id=\"attachment_208769\" aria-describedby=\"caption-attachment-208769\" style=\"width: 1788px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208769 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/run-report-script-upload-report.png\" alt=\"Aktionen \u201eSkript ausf\u00fchren\u201c und \u201eBericht hochladen\u201c\" width=\"1788\" height=\"1310\"><figcaption id=\"caption-attachment-208769\" class=\"wp-caption-text\">Aktionen \u201eSkript ausf\u00fchren\u201c und \u201eBericht hochladen\u201c<\/figcaption><\/figure>\n<p>Die Bilder unten zeigen den vollst\u00e4ndigen Bericht, einschlie\u00dflich der von Google AI erstellten <strong>Zusammenfassung<\/strong>.<\/p>\n<figure id=\"attachment_208770\" aria-describedby=\"caption-attachment-208770\" style=\"width: 2120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208770 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/kinsta-analytics-report-1.png\" alt=\"Seiten mit Berichten zu Website-Besuchen und Serverbandbreite\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208770\" class=\"wp-caption-text\">Seiten mit Berichten zu Website-Besuchen und Serverbandbreite<\/figcaption><\/figure>\n<figure id=\"attachment_208771\" aria-describedby=\"caption-attachment-208771\" style=\"width: 2120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208771 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/kinsta-analytics-report-2.png\" alt=\"Seiten zum Bericht \u00fcber CDN-Bandbreite und zur Zusammenfassung\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208771\" class=\"wp-caption-text\">Seiten zum Bericht \u00fcber CDN-Bandbreite und zur Zusammenfassung<\/figcaption><\/figure>\n<h2>Die n\u00e4chsten Schritte: Wie man die Skalierbarkeit verbessert und die Auslieferung automatisiert<\/h2>\n<p>Dies ist nur ein Vorgeschmack darauf, was die Kinsta-API in Kombination mit fortschrittlichen Automatisierungstools wie GitHub Actions leisten kann. Die KI-Integration geht noch einen Schritt weiter und verwandelt rohe Zahlen in tiefgehende Berichte, die du mit deinen Kunden teilen kannst.<\/p>\n<p>Du kannst deine Berichte auf verschiedene Arten weiter verbessern:<\/p>\n<ul>\n<li>Du kannst deine Anwendung konfigurieren, indem du eine Zeile in die YAML-Datei einf\u00fcgst (<code>schedule: '0 9 * * 1'<\/code>), um den Bericht jeden Montagmorgen um 9:00 Uhr zu erstellen.<\/li>\n<li>Du k\u00f6nntest eine Bibliothek wie <code>smtplib<\/code> oder einen Dienst wie SendGrid integrieren, um den Bericht direkt an deinen Kunden zu senden.<\/li>\n<li>Wenn du eine Agentur mit Dutzenden oder sogar Hunderten von Websites bist, k\u00f6nntest du eine Schleife implementieren, die \u00fcber eine Liste von Website-IDs iteriert, um alle Berichte in einem einzigen Durchlauf zu erstellen.<\/li>\n<li>Du kannst den Inhalt deines Berichts noch weiter anreichern, indem du die Kinsta-API nutzt, um geografische Daten, HTTP-Code-Aufschl\u00fcsselungen, Server-Logs und andere Daten, die du einbeziehen m\u00f6chtest, abzurufen. Durch die Analyse dieser Daten kann die KI Angriffsversuche (4xx-Codes) oder Verkehrsspitzen aus unerwarteten Regionen erkennen.<\/li>\n<li>Du kannst deine Eingabeaufforderung feinabstimmen, um detailliertere und umfassendere KI-Antworten zu erhalten.<\/li>\n<li>Du kannst die PDF-Vorlage mit den Logos deiner Agentur und deines Kunden anpassen.<\/li>\n<\/ul>\n<p>Die automatisierte Berichterstattung entlastet dein Team, und die Konsistenz und Pr\u00e4zision, die sie bietet, st\u00e4rkt das Vertrauen und die Loyalit\u00e4t deiner Kunden.<\/p>\n<p>Du m\u00f6chtest sofort mit der Automatisierung deiner Kundenberichte beginnen? <a href=\"https:\/\/kinsta.com\/de\/preise\/\">Melde dich f\u00fcr den Plan an<\/a>, der am besten zu deinen Bed\u00fcrfnissen passt, und beginne noch heute mit der Kinsta-API zu arbeiten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr moderne Agenturen ist ein hochwertiges, konsistentes Berichtswesen unerl\u00e4sslich, um das Vertrauen ihrer Kunden zu erhalten und eine langfristige Loyalit\u00e4t aufzubauen. Mit \u00fcbersichtlichen, informativen Berichten kannst &#8230;<\/p>\n","protected":false},"author":36,"featured_media":76184,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1053,923,925],"class_list":["post-76183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-agentur","topic-analysen","topic-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Automatisiere die Kundenberichterstattung mit der Kinsta-API und Google AI<\/title>\n<meta name=\"description\" content=\"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatisiere Kundenberichte mit Kinsta API und Google AI\" \/>\n<meta property=\"og:description\" content=\"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-08T14:03:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-12T11:16:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"23\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Automatisiere Kundenberichte mit Kinsta API und Google AI\",\"datePublished\":\"2026-05-08T14:03:08+00:00\",\"dateModified\":\"2026-05-12T11:16:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\"},\"wordCount\":2693,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\",\"name\":\"Automatisiere die Kundenberichterstattung mit der Kinsta-API und Google AI\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"datePublished\":\"2026-05-08T14:03:08+00:00\",\"dateModified\":\"2026-05-12T11:16:30+00:00\",\"description\":\"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Automatisiere Kundenberichte mit Kinsta API und Google AI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatisiere die Kundenberichterstattung mit der Kinsta-API und Google AI","description":"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/","og_locale":"de_DE","og_type":"article","og_title":"Automatisiere Kundenberichte mit Kinsta API und Google AI","og_description":"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.","og_url":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2026-05-08T14:03:08+00:00","article_modified_time":"2026-05-12T11:16:30+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","type":"image\/png"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Carlo Daniele","Gesch\u00e4tzte Lesezeit":"23\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Automatisiere Kundenberichte mit Kinsta API und Google AI","datePublished":"2026-05-08T14:03:08+00:00","dateModified":"2026-05-12T11:16:30+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/"},"wordCount":2693,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/","url":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/","name":"Automatisiere die Kundenberichterstattung mit der Kinsta-API und Google AI","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","datePublished":"2026-05-08T14:03:08+00:00","dateModified":"2026-05-12T11:16:30+00:00","description":"Verwandle mit der Kinsta-API und Google AI rohe Hosting-Daten in professionelle PDF-Diagramme und KI-gest\u00fctzte Zusammenfassungen.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/kinsta-api-und-google-ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/de\/thema\/api\/"},{"@type":"ListItem","position":3,"name":"Automatisiere Kundenberichte mit Kinsta API und Google AI"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/76183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=76183"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/76183\/revisions"}],"predecessor-version":[{"id":76210,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/76183\/revisions\/76210"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/76183\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/76184"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=76183"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=76183"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=76183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}