{"id":65523,"date":"2026-05-08T16:24:46","date_gmt":"2026-05-08T14:24:46","guid":{"rendered":"https:\/\/kinsta.com\/nl\/?p=65523&#038;preview=true&#038;preview_id=65523"},"modified":"2026-05-13T08:41:08","modified_gmt":"2026-05-13T06:41:08","slug":"kinsta-api-en-google-ai","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/","title":{"rendered":"Rapporten voor klanten automatiseren met Kinsta API en Google AI"},"content":{"rendered":"<p>Voor moderne bureaus is een consistent rapportagesysteem van hoge kwaliteit essentieel om het vertrouwen van klanten te behouden en langdurige loyaliteit op te bouwen. Met een duidelijk, informatief rapport kun je verkooptrends bijhouden, de effectiviteit van campagnes aantonen, het rendement op investering (ROI) berekenen en nog veel meer.<\/p>\n<p>Voor een bureau dat tientallen of zelfs honderden sites beheert, kan het genereren van periodieke rapporten echter een groot knelpunt worden dat de schaalbaarheid van je bedrijfsvoering onder druk zet.<\/p>\n<p>Daarom is het optimaliseren en automatiseren van gegevensophaling zo belangrijk. Het herstelt de effici\u00ebntie en maakt je team vrij om zich te richten op activiteiten met hoge waarde, zoals het ontwikkelen van nieuwe projecten.<\/p>\n<p>In dit artikel leer je hoe je de <a href=\"https:\/\/kinsta.com\/nl\/docs\/kinsta-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kinsta API<\/a> gebruikt om automatisch je hostinggegevens op te halen en strategische rapporten te genereren met behulp van AI.<\/p>\n<p>Klaar om je rapportagesysteem op te schalen? Lees verder.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Toegang tot Kinsta Analytics via MyKinsta en de Kinsta API<\/h2>\n<p>Klanten van Kinsta hebben toegang tot een grote hoeveelheid data via het <a href=\"https:\/\/kinsta.com\/nl\/mykinsta\/\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta-hostingdashboard<\/a>. Je vindt je pakketgegevens in het Analytics-gedeelte van je dashboard.<\/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=\"Overzicht van het Analytics-gedeelte in MyKinsta.\" width=\"2568\" height=\"774\"><figcaption id=\"caption-attachment-208745\" class=\"wp-caption-text\">Overzicht van het Analytics-gedeelte in MyKinsta.<\/figcaption><\/figure>\n<p>De Analytics-pagina is verdeeld in meerdere tabbladen, elk gericht op een specifiek aspect van de activiteit op je site:<\/p>\n<ul>\n<li><strong>Pakketgebruik:<\/strong> Toont het resourcegebruik van je pakket, zowel cumulatief als uitgesplitst per individuele site.<\/li>\n<li><strong>Belangrijkste verzoeken:<\/strong> Hiermee identificeer je de voornaamste verzoeken aan je site, gecategoriseerd op bandbreedte en weergaven.<\/li>\n<li><strong>Cache:<\/strong> Geeft een uitsplitsing van het cachegebruik, inclusief cache-breakdown, servercache-componenten en servercache-omleidingen.<\/li>\n<li><strong>CDN &#038; edge:<\/strong> Biedt gegevens over CDN-bandbreedteverbruik, edge cache-bandbreedte en een overzicht van de meest opgevraagde bestanden vanuit de CDN-cache.<\/li>\n<li><strong>Spreiding:<\/strong> Toont het aandeel bezoeken vanaf desktop, tablet en mobiel.<\/li>\n<li><strong>Prestaties:<\/strong> Bevat diverse prestatiecijfers, zoals de gemiddelde responstijd van PHP + MySQL, PHP-doorvoer, PHP-threadlimiet en meer.<\/li>\n<li><strong>Respons:<\/strong> Geeft statistieken over responscodes, inclusief een gedetailleerde uitsplitsing van foutcodes.<\/li>\n<li><strong>Geo &#038; IP:<\/strong> Toont lijsten met de belangrijkste landen, steden en client-IP&#8217;s waarvan verzoeken naar je site afkomstig zijn.<\/li>\n<\/ul>\n<p>Je hebt toegang tot dezelfde statistieken op siteniveau via <strong>Sites<\/strong> &gt; <strong>sitenaam<\/strong> &gt; <strong>Analytics<\/strong>.<\/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=\"Site analytics in MyKinsta.\" width=\"2570\" height=\"1140\"><figcaption id=\"caption-attachment-208746\" class=\"wp-caption-text\">Site-analytics in MyKinsta.<\/figcaption><\/figure>\n<p>Kinsta Analytics biedt een uitgebreide set aan data. Door simpelweg door je MyKinsta-dashboard te navigeren, krijg je een helder beeld van het resourcegebruik, de effici\u00ebntie en de prestaties van je site. Je ziet precies waar de meeste verzoeken vandaan komen en welke de meeste resources verbruiken.<\/p>\n<p>In combinatie met onze <a href=\"https:\/\/kinsta.com\/nl\/apm-tool\/\">Kinsta APM-tool<\/a> stelt Kinsta Analytics je in staat om de prestaties van je WordPress sites te optimaliseren.<\/p>\n<p>Wat niet iedereen weet: de gegevens uit Kinsta Analytics zijn ook toegankelijk via de <a href=\"https:\/\/kinsta.com\/nl\/docs\/kinsta-api\/\">Kinsta API<\/a>. Daarmee kun je gegevens programmatisch ophalen en hostingstatistieken opbouwen, die je vervolgens gebruikt om geautomatiseerde rapporten te genereren om met je klanten te delen.<\/p>\n<p>Laten we de endpoints van de Kinsta API bekijken.<\/p>\n<h3>Het Analytics-endpoint van de Kinsta API<\/h3>\n<p>Via het Analytics-endpoint van de Kinsta API heb je toegang tot ruwe gegevens over het resourcegebruik en de gezondheid van je website.<\/p>\n<ul>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-usage\" target=\"_blank\" rel=\"noopener noreferrer\">Bezoekgebruik<\/a>, <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth-usage\" target=\"_blank\" rel=\"noopener noreferrer\">serverbandbreedtegebruik<\/a> en <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth-usage\" target=\"_blank\" rel=\"noopener noreferrer\">CDN-bandbreedtegebruik<\/a>: Deze statistieken volgen je resourcegebruik ten opzichte van je hostingpakket tijdens de huidige factureringsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits\" target=\"_blank\" rel=\"noopener noreferrer\">Bezoeken<\/a>: Geeft het totale aantal bezoeken aan een bepaalde omgeving binnen een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-disk-space\" target=\"_blank\" rel=\"noopener noreferrer\">Schijfruimte<\/a>: Geeft de totale schijfruimte die door een bepaalde omgeving wordt gebruikt gedurende een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth\" target=\"_blank\" rel=\"noopener noreferrer\">Serverbandbreedte<\/a>: Geeft de bandbreedte die door een bepaalde omgeving wordt verbruikt gedurende een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth\" target=\"_blank\" rel=\"noopener noreferrer\">CDN-bandbreedte<\/a>: Geeft de CDN-bandbreedte die een bepaalde omgeving gedurende een opgegeven tijdsperiode heeft verbruikt.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-countries\" target=\"_blank\" rel=\"noopener noreferrer\">Belangrijkste landen<\/a>: Geeft een lijst van de landen waarvan de meeste verzoeken aan de site afkomstig zijn, binnen een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-cities\" target=\"_blank\" rel=\"noopener noreferrer\">Belangrijkste steden<\/a>: Geeft een lijst van de steden waarvan de meeste verzoeken aan de site afkomstig zijn gedurende een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-client-ips\" target=\"_blank\" rel=\"noopener noreferrer\">Belangrijkste client-IP&#8217;s<\/a>: Geeft een lijst van de client-IP-adressen waarvan de meeste verzoeken aan de site afkomstig zijn gedurende een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-dispersion\" target=\"_blank\" rel=\"noopener noreferrer\">Bezoekspreiding<\/a>: Geeft inzicht in de verdeling van bezoeken over desktop-, tablet- en mobiele apparaten gedurende een opgegeven tijdsperiode.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-response-code-breakdown\" target=\"_blank\" rel=\"noopener noreferrer\">Response Code Breakdown<\/a>: Geeft een uitsplitsing van de HTTP-statuscodes die de server heeft geretourneerd binnen een opgegeven tijdsperiode.<\/li>\n<\/ul>\n<p>Hieronder vind je enkele voorbeelden van het gebruik van het <code>analytics<\/code>-endpoint.<\/p>\n<h4>Bezoeken<\/h4>\n<p>Het volgende verzoek geeft het totale aantal bezoeken aan je site en het aantal unieke IP-adressen dat de site de afgelopen 30 dagen heeft bezocht:<\/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>Het antwoord heeft de volgende structuur:<\/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>Bandbreedte<\/h4>\n<p>Het volgende voorbeeld laat zien hoe je de Kinsta API bevraagt om het bandbreedtegebruik van de server over de afgelopen 30 dagen op te halen:<\/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>Het antwoord van de Kinsta-server geeft het dagelijkse bandbreedtegebruik over de afgelopen 30 dagen:<\/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-bandbreedte<\/h4>\n<p>In dit voorbeeld bevragen we de Kinsta API om het CDN-bandbreedtegebruik over de afgelopen 7 dagen op te halen:<\/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>De server retourneert de volgende gegevens:<\/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>Je kunt dit zelf uitproberen door je Kinsta API-sleutel (bearer token), omgevings-ID en bedrijfs-ID in te voeren in de <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits?playground=open\" target=\"_blank\" rel=\"noopener noreferrer\">API playground<\/a>.<\/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=\"Test de Kinsta API in de API playground.\" width=\"2352\" height=\"1218\"><figcaption id=\"caption-attachment-208758\" class=\"wp-caption-text\">Test de Kinsta API in de API playground.<\/figcaption><\/figure>\n<p>Nu je weet hoe je toegang krijgt tot de analysegegevens van je site op Kinsta, kun je deze gebruiken om je werkzaamheden te automatiseren, inclusief het rapportagesysteem.<\/p>\n<p>In de volgende secties laten we je zien hoe je het rapportagesysteem van je bureau automatiseert met de Kinsta API. We bouwen een Python-script en gebruiken <a href=\"https:\/\/kinsta.com\/nl\/blog\/ci-cd-pipeline-maken\/\">GitHub Actions<\/a> om het bouwen en uitvoeren te automatiseren. Het script zet de ruwe API-gegevens om in tabellen en grafieken, en bevraagt Google AI om een eindrapport te genereren.<\/p>\n<p>Tijd om aan de slag te gaan.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>De volledige code van deze tutorial is beschikbaar in <a href=\"https:\/\/github.com\/carlodaniele\/kinsta-gemini-reporting\" target=\"_blank\" rel=\"noopener noreferrer\">deze GitHub-repository<\/a>.<\/p>\n<\/aside>\n\n<h2>Een geautomatiseerd rapportagesysteem bouwen met de Kinsta API en Google AI<\/h2>\n<p>Het doel is een geautomatiseerd rapport dat op vaste intervallen wordt gegenereerd. Het systeem bevraagt de Kinsta API om gegevens op te halen over bezoeken, serverbandbreedte en CDN-bandbreedte. Die gegevens worden vervolgens verwerkt tot grafieken en tabellen in een PDF-bestand. Tegelijkertijd worden de gegevens naar de Gemini API gestuurd voor een analyse, die eveneens in het rapport wordt opgenomen.<\/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=\"Voorbeeld van het geautomatiseerde rapport gegenereerd met GitHub Actions en de Kinsta API.\" width=\"3355\" height=\"1572\"><figcaption id=\"caption-attachment-208776\" class=\"wp-caption-text\">Voorbeeld van het geautomatiseerde rapport gegenereerd met GitHub Actions en de Kinsta API.<\/figcaption><\/figure>\n<h3>Het project instellen op GitHub<\/h3>\n<p>Klik op de GitHub-startpagina op de groene knop <strong>New<\/strong> om een nieuw project aan te maken. Zodra je een leeg project hebt, ga je naar <strong>Settings<\/strong> &gt; <strong>Secrets and variables<\/strong> &gt; <strong>Actions<\/strong> en voeg je de secrets toe die in de onderstaande afbeelding worden getoond.<\/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=\"GitHub Actions repository secrets.\" width=\"1580\" height=\"676\"><figcaption id=\"caption-attachment-208781\" class=\"wp-caption-text\">GitHub Actions repository secrets.<\/figcaption><\/figure>\n<p>Door je API-sleutels en ID&#8217;s op te slaan in GitHub Secrets zijn ze voor niemand toegankelijk en blijft je code veilig.<\/p>\n<h4>GEMINI_API_KEY<\/h4>\n<p>Je genereert een Google AI API-sleutel in het <a href=\"https:\/\/aistudio.google.com\/api-keys\" target=\"_blank\" rel=\"noopener noreferrer\">Google AI Studio-dashboard<\/a>. Raadpleeg de <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">Google AI-documentatie<\/a> voor meer informatie.<\/p>\n<h4>KINSTA_API-KEY<\/h4>\n<p>Volg de instructies in ons artikel om <a href=\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-sleutel\/\">een Kinsta API-sleutel te genereren<\/a>.<\/p>\n<h4>KINSTA_COMPANY_ID, KINSTA_ENV_ID, KINSTA_SITE_ID<\/h4>\n<p>Je vindt de site-ID, omgevings-ID en bedrijfs-ID onder <strong>Sites<\/strong> &gt; <strong>sitenaam<\/strong> &gt; <strong>Info<\/strong> in je 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=\"size-full wp-image-208778\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/site-info.png\" alt=\"Site Information in MyKinsta.\" width=\"2080\" height=\"828\"><figcaption id=\"caption-attachment-208778\" class=\"wp-caption-text\">Site-informatie in MyKinsta.<\/figcaption><\/figure>\n<p>Laten we verdergaan met de projectbestanden.<\/p>\n<h3>Benodigde bibliotheken en GitHub Actions-configuratie<\/h3>\n<p>Maak in de hoofdmap van je GitHub-project een bestand met de naam <code>requirements.txt<\/code> en voeg het volgende toe:<\/p>\n<pre><code>google-genai\nrequests\nmatplotlib\nfpdf2<\/code><\/pre>\n<p>Dit bestand bevat de benodigde onderdelen voor je project.<\/p>\n<ul>\n<li><code>google-genai<\/code>: De bibliotheek van Google voor interactie met Gemini-modellen.<\/li>\n<li><code>requests<\/code>: Een bibliotheek voor het uitvoeren van HTTP-verzoeken. In dit project wordt deze gebruikt om verzoeken naar de Kinsta API te sturen.<\/li>\n<li><code>matplotlib<\/code>: Een Python-bibliotheek voor het <a href=\"https:\/\/matplotlib.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">maken van grafieken en het visualiseren van gegevens<\/a>.<\/li>\n<li><code>fpdf2<\/code>: Een bibliotheek waarmee je <a href=\"https:\/\/py-pdf.github.io\/fpdf2\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">PDF-bestanden genereert<\/a>.<\/li>\n<\/ul>\n<p>Maak vervolgens een bestand aan met de naam <code>.github\/workflows\/generate_report.yml<\/code> met de volgende 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 gebruikt dit bestand om je code automatisch uit te voeren via GitHub Actions. Een korte toelichting:<\/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>: De naam van je project zoals die verschijnt op het tabblad <strong>Actions<\/strong> op GitHub.<\/li>\n<li><code>on<\/code>: Bepaalt wanneer de workflow wordt geactiveerd.<\/li>\n<li><code>push<\/code>: De workflow wordt uitgevoerd elke keer als je een codewijziging naar de main-branch pusht.<\/li>\n<li><code>workflow_dispatch<\/code>: Hiermee kun je de workflow handmatig starten.<\/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>: Het begin van de uit te voeren taken.<\/li>\n<li><code>build-and-run<\/code>: Een willekeurige naam die een specifieke reeks acties identificeert.<\/li>\n<li><code>runs-on<\/code>: Geeft aan op welk systeem de workflow moet draaien.<\/li>\n<li><code>ubuntu-latest<\/code>: Stelt de nieuwste versie van Ubuntu Linux in.<\/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>: De volgorde van uit te voeren bewerkingen.<\/li>\n<li><code>name<\/code>: De naam van de bewerking.<\/li>\n<li><code>uses<\/code>: De vooraf geconfigureerde GitHub-module (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>: Werkt pip (de <a href=\"https:\/\/pypi.org\/project\/pip\/\" target=\"_blank\" rel=\"noopener noreferrer\">Python-packagemanager<\/a>) bij naar de nieuwste versie.<\/li>\n<li><code>pip install -r requirements.txt<\/code>: Leest het bestand <code>requirements.txt<\/code> en installeert de daarin vermelde pakketten.<\/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>: Haalt de waarden van omgevingsvariabelen op uit GitHub Secrets.<\/li>\n<li><code>run: python main.py<\/code>: Start de Python-interpreter en voert het bestand <code>main.py<\/code> uit.<\/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: actions\/upload-artifact@v4<\/code>: Gebruikt de GitHub Action voor het beheren van artifacts \u2014 bestanden of mappen die worden gegenereerd terwijl het script draait.<\/li>\n<li><code>with<\/code>: Stelt de configuratieparameters in.<\/li>\n<\/ul>\n<p>De configuratie van je automatiseringsproject is klaar. Nu is het tijd om de Python-scripts te maken.<\/p>\n<h3>De Kinsta API programmatisch bevragen<\/h3>\n<p>Zodra de installatie is voltooid, navigeer je naar de hoofdmap van je GitHub-project en maak je een nieuw bestand aan met de naam <code>kinsta_utils.py<\/code> met de volgende 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>De eerste twee <code>import<\/code> statements laden de standaardbibliotheek voor HTTP-verzoeken en de module voor interactie met het besturingssysteem (<code>os<\/code>).<\/li>\n<li>De volgende vier regels (<code>os.getenv<\/code>) halen je credentials op uit GitHub Secrets.<\/li>\n<li><code>BASE_URL<\/code> definieert het hoofdendpoint van de Kinsta API dat door het script wordt gebruikt.<\/li>\n<li>De functie <code>get_headers<\/code> genereert de autorisatieheader met daarin de Kinsta API-sleutel.<\/li>\n<\/ul>\n<p>Maak vervolgens een helperfunctie die de ruwe gegevens van de API omzet naar megabytes.<\/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>Deze code biedt twee opties. De eerste gebruikt de binaire standaard (<code>1024 x 1024<\/code>), de tweede de decimale standaard. Delen door <code>1_000_000<\/code> zorgt ervoor dat het getal in je PDF-rapport overeenkomt met wat je klanten zien in MyKinsta Analytics.<\/li>\n<\/ul>\n<p>De volgende functie bevraagt de Kinsta API en retourneert een set ruwe gegevens:<\/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>De functie <code>fetch_kinsta_metric<\/code> accepteert drie argumenten: <code>endpoint<\/code>, <code>start_date<\/code> en <code>end_date<\/code>. Deze worden gebruikt om de verzoek-URL samen te stellen. Het endpoint kan <code>visits<\/code>, <code>bandwidth<\/code> of <code>cdn-bandwidth<\/code> zijn.<\/li>\n<li>De array <code>params<\/code> slaat de verzoekparameters op.<\/li>\n<li>Het antwoord van Kinsta is een genest JSON-object (<code>data_node<\/code>) dat de geaggregeerde waarden voor de periode (<code>total<\/code>) en een lijst met dagelijkse waarden (<code>dataset<\/code>) bevat.<\/li>\n<\/ul>\n<p>De laatste functie in het bestand <code>kinsta_utils.py<\/code> haalt de sitenaam op.<\/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\"\n<\/code><\/pre>\n<p>Deze code spreekt voor zich. Raadpleeg de API-referentie voor details over het <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/wordpress-sites\/get-site-by-id\" target=\"_blank\" rel=\"noopener noreferrer\"><code>sites <\/code>\u00a0endpoint<\/a>.<\/p>\n<p>Nu hoeven we alleen nog de workflow in te stellen.<\/p>\n<h3>De workflow automatiseren met Python en Gemini<\/h3>\n<p>Het laatste bestand dat je aanmaakt is de engine van je applicatie. Maak in de hoofdmap van je GitHub-project een bestand <code>main.py<\/code> aan. Voeg om te beginnen de volgende code toe:<\/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>Dit is hoe het script is opgebouwd:<\/p>\n<ul>\n<li>De <code>import<\/code>\u00a0statements laden de benodigde bibliotheken. <code>matplotlib.use('Agg')<\/code> instrueert Python om de plots in het geheugen te genereren zonder een scherm nodig te hebben.<\/li>\n<li>Het volgende blok stelt de taal (<code>en<\/code>) en het model (<code>gemini-2.5-flash<\/code>) in en initialiseert de Google-client.<\/li>\n<li>Vervolgens worden tijdvensters gedefinieerd om de waarden van de afgelopen zeven dagen te vergelijken met die van de zeven dagen daarvoor.<\/li>\n<li>Tot slot worden de labels voor tabellen en grafieken ingesteld.<\/li>\n<\/ul>\n<p>De volgende stap is het defini\u00ebren van een klasse <code>KinstaReport<\/code> voor het genereren van rapportpagina&#8217;s met de FPDF-bibliotheek:<\/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>We gaan niet te diep in op deze code. Voor meer informatie over de FPDF-bibliotheek kun je de online documentatie raadplegen:<\/p>\n<ul>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tutorial.html\">Tutorial over FPDF<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tables.html\">Tabellen maken<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Images.html\">Afbeeldingen toevoegen<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Maths.html#charts-graphs\">Grafieken<\/a><\/li>\n<\/ul>\n<p>Definieer vervolgens een functie <code>generate_chart<\/code>. Deze functie zet de ruwe gegevens van Kinsta om in grafieken.<\/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>Deze functie gebruikt de Matplotlib-bibliotheek om de gegevens uit Kinsta om te zetten in grafieken voor het PDF-rapport. Meer informatie over Matplotlib vind je in de online documentatie:<\/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 aanpassen<\/a><\/li>\n<\/ul>\n<p>Voeg tot slot de functie toe die alle onderdelen samenvoegt.<\/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>Dit doet deze code:<\/p>\n<ul>\n<li>De <code>for<\/code>\u00a0loop itereert door de array <code>metrics<\/code> en bevraagt de Kinsta API twee keer: \u00e9\u00e9n keer voor de huidige week en \u00e9\u00e9n keer voor de vorige week.<\/li>\n<li>Als de gegevens betrekking hebben op bandbreedte, zet de functie <code>format_bytes_to_mb()<\/code> de ruwe gegevens om naar MB.<\/li>\n<li>De functie <code>report_data()<\/code> slaat de opgehaalde gegevens op.<\/li>\n<li><code>KinstaReport<\/code> maakt vervolgens een PDF aan voor elke site.<\/li>\n<li>De volgende <code>for<\/code>\u00a0loop genereert PNG-afbeeldingen voor de grafieken en maakt een nieuwe pagina aan voor elke metric.<\/li>\n<li>Het volgende deel genereert de samenvatting: het berekent het totale aantal bezoeken en het totale aantal megabytes voor de periode, en stuurt een dynamische prompt naar Gemini 2.5 Flash. Het antwoord wordt gebruikt om de laatste pagina van de PDF te vullen.<\/li>\n<li>Het script slaat het document op met een bestandsnaam die de huidige datum bevat.<\/li>\n<li>De laatste voorwaarde zorgt ervoor dat het proces alleen wordt uitgevoerd als het script als hoofdprogramma wordt gestart.<\/li>\n<\/ul>\n<p>Tijd om je applicatie te bouwen en uit te voeren.<\/p>\n<h3>Het artifact ophalen<\/h3>\n<p>Je kunt je applicatie nu uitvoeren. Ga naar je GitHub-projectpagina en klik op het tabblad <strong>Actions<\/strong>. Zoek de naam van je action in het menu aan de linkerkant (in ons voorbeeld is dat <strong>Generate Kinsta Analytics Report<\/strong>, zoals opgegeven in je bestand <code>generate_report.yml<\/code>).<\/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=\"Het tabblad Actions toont een lijst met workflows.\" width=\"1998\" height=\"1020\"><figcaption id=\"caption-attachment-208765\" class=\"wp-caption-text\">Het tabblad Actions toont een lijst met workflows.<\/figcaption><\/figure>\n<p>Klik vervolgens op het menu <strong>Run workflow<\/strong> aan de rechterkant en daarna op de groene knop <strong>Run workflow<\/strong> (momenteel is alleen de main-branch beschikbaar).<\/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 uitvoeren.\" width=\"2558\" height=\"1008\"><figcaption id=\"caption-attachment-208766\" class=\"wp-caption-text\">GitHub workflow uitvoeren.<\/figcaption><\/figure>\n<p>De volgende pagina toont de actieve workflow. Klik erop om de lijst met lopende bewerkingen te bekijken.<\/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 uitvoeren vanuit branch.\" width=\"1918\" height=\"884\"><figcaption id=\"caption-attachment-208767\" class=\"wp-caption-text\">Workflow uitvoeren vanuit branch.<\/figcaption><\/figure>\n<p>De sectie <strong>Run Report Script<\/strong> toont een overzicht van de uitgevoerde bewerkingen, terwijl de sectie <strong>Upload Report<\/strong> de download-URL voor het artifact geeft. Klik op deze link om je rapport als PDF te downloaden.<\/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=\"De sectie Upload Report geeft de link naar het PDF-rapport.\" width=\"1554\" height=\"816\"><figcaption id=\"caption-attachment-208768\" class=\"wp-caption-text\">De sectie Upload Report geeft de link naar het PDF-rapport.<\/figcaption><\/figure>\n<p>Dezelfde link vind je ook in de sectie <strong>Artifacts<\/strong>, onderaan de <strong>Summary<\/strong>\u00a0pagina van de workflow.<\/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=\"De acties Run Report Script en Upload Report.\" width=\"1788\" height=\"1310\"><figcaption id=\"caption-attachment-208769\" class=\"wp-caption-text\">De acties Run Report Script en Upload Report.<\/figcaption><\/figure>\n<p>De onderstaande afbeeldingen tonen het volledige rapport, inclusief de <strong>Executive Summary<\/strong> gegenereerd door Google AI.<\/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=\"Rapportpagina's Sitebezoeken en Serverbandbreedte.\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208770\" class=\"wp-caption-text\">Rapportpagina&#8217;s Site Visits en Server Bandwidth.<\/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=\"Rapportpagina's CDN-bandbreedte en Executive Summary.\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208771\" class=\"wp-caption-text\">Rapportpagina&#8217;s CDN Bandwidth en Executive Summary.<\/figcaption><\/figure>\n<h2>Volgende stappen: schaalbaarheid verbeteren en levering automatiseren<\/h2>\n<p>Dit is slechts een voorproefje van wat de Kinsta API kan doen in combinatie met automatiseringstools zoals GitHub Actions. Met AI-integratie ga je een stap verder: ruwe cijfers worden omgezet in diepgaande rapporten die direct deelbaar zijn met je klanten.<\/p>\n<p>Je kunt je rapportage op verschillende manieren verder uitbreiden:<\/p>\n<ul>\n<li>Voeg een regel toe aan het YAML-bestand (<code>schedule: '0 9 * * 1'<\/code>) om het rapport elke maandagochtend om 9:00 uur automatisch te genereren.<\/li>\n<li>Integreer een bibliotheek zoals <code>smtplib<\/code> of een service zoals SendGrid om het rapport rechtstreeks naar je klant te sturen.<\/li>\n<li>Beheer je als bureau tientallen of honderden sites, dan kun je een lus implementeren die door een lijst met site-ID&#8217;s itereert en alle rapporten in \u00e9\u00e9n keer genereert.<\/li>\n<li>Verrijk de inhoud van je rapport door via de Kinsta API ook geografische gegevens, HTTP-code-uitsplitsingen, serverlogs en andere relevante gegevens op te halen. Op basis van die gegevens kan AI aanvalspogingen (4xx-codes) of verkeerspieken uit onverwachte regio&#8217;s signaleren.<\/li>\n<li>Verfijn je prompt om meer gedetailleerde en uitgebreide AI-analyses te krijgen.<\/li>\n<li>Pas de PDF-template aan met de logo&#8217;s van je bureau en je klant.<\/li>\n<\/ul>\n<p>Geautomatiseerde rapportage vermindert de werkdruk van je team. De consistentie en nauwkeurigheid die het oplevert, versterken het vertrouwen en de loyaliteit van je klanten.<\/p>\n<p>Klaar om je klantrapportage te automatiseren? <a href=\"https:\/\/kinsta.com\/nl\/prijzen\/\">Kies het pakket<\/a> dat het beste bij je past en begin vandaag nog met bouwen met de Kinsta API.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voor moderne bureaus is een consistent rapportagesysteem van hoge kwaliteit essentieel om het vertrouwen van klanten te behouden en langdurige loyaliteit op te bouwen. Met een &#8230;<\/p>\n","protected":false},"author":36,"featured_media":65524,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[821,911,951],"class_list":["post-65523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-analytics","topic-api","topic-bureau"],"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>Rapporten voor klanten automatiseren met Kinsta API en Google AI<\/title>\n<meta name=\"description\" content=\"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.\" \/>\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\/nl\/blog\/kinsta-api-en-google-ai\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rapporten voor klanten automatiseren met Kinsta API en Google AI\" \/>\n<meta property=\"og:description\" content=\"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-08T14:24:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-13T06:41:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/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=\"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/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_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Rapporten voor klanten automatiseren met Kinsta API en Google AI\",\"datePublished\":\"2026-05-08T14:24:46+00:00\",\"dateModified\":\"2026-05-13T06:41:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/\"},\"wordCount\":2539,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"inLanguage\":\"nl-NL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/\",\"name\":\"Rapporten voor klanten automatiseren met Kinsta API en Google AI\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"datePublished\":\"2026-05-08T14:24:46+00:00\",\"dateModified\":\"2026-05-13T06:41:08+00:00\",\"description\":\"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Rapporten voor klanten automatiseren met Kinsta API en Google AI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"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\/nl\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/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\/nl\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rapporten voor klanten automatiseren met Kinsta API en Google AI","description":"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.","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\/nl\/blog\/kinsta-api-en-google-ai\/","og_locale":"nl_NL","og_type":"article","og_title":"Rapporten voor klanten automatiseren met Kinsta API en Google AI","og_description":"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.","og_url":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2026-05-08T14:24:46+00:00","article_modified_time":"2026-05-13T06:41:08+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/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":"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Carlo Daniele","Geschatte leestijd":"22 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Rapporten voor klanten automatiseren met Kinsta API en Google AI","datePublished":"2026-05-08T14:24:46+00:00","dateModified":"2026-05-13T06:41:08+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/"},"wordCount":2539,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","inLanguage":"nl-NL"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/","url":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/","name":"Rapporten voor klanten automatiseren met Kinsta API en Google AI","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","datePublished":"2026-05-08T14:24:46+00:00","dateModified":"2026-05-13T06:41:08+00:00","description":"Zet ruwe hostingdata om in professionele PDF-grafieken en door AI gegenereerde samenvattingen met de Kinsta API en Google AI.","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/kinsta-api-en-google-ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/api\/"},{"@type":"ListItem","position":3,"name":"Rapporten voor klanten automatiseren met Kinsta API en Google AI"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","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\/nl\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/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\/nl\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/65523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=65523"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/65523\/revisions"}],"predecessor-version":[{"id":65556,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/65523\/revisions\/65556"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/translations\/es"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65523\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/65524"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=65523"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=65523"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=65523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}