{"id":83061,"date":"2026-05-08T16:09:33","date_gmt":"2026-05-08T14:09:33","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=83061&#038;preview=true&#038;preview_id=83061"},"modified":"2026-05-12T13:07:43","modified_gmt":"2026-05-12T11:07:43","slug":"api-kinsta-e-ia-google","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/","title":{"rendered":"Automatiza los informes de clientes con la API de Kinsta y la IA de Google"},"content":{"rendered":"<p>Para las agencias modernas, un sistema de informes coherente y de alta calidad es esencial para mantener la confianza de los clientes y fidelizarlos a largo plazo. Un informe claro e informativo te permite controlar las tendencias de ventas, demostrar la eficacia de las campa\u00f1as, calcular el retorno de la inversi\u00f3n (ROI) y mucho m\u00e1s.<\/p>\n<p>Sin embargo, para una agencia que gestiona docenas o incluso cientos de sitios, la generaci\u00f3n de estos informes peri\u00f3dicos puede convertirse en un gran cuello de botella, comprometiendo la escalabilidad de tus operaciones.<\/p>\n<p>Por eso es fundamental optimizar y automatizar la recuperaci\u00f3n de datos. As\u00ed se recupera la eficiencia y tu equipo puede dedicarse a actividades de mayor valor, como desarrollar nuevos proyectos.<\/p>\n<p>En este art\u00edculo, aprender\u00e1s a aprovechar la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\" target=\"_blank\" rel=\"noopener noreferrer\">API de Kinsta<\/a> para obtener autom\u00e1ticamente los datos de tu alojamiento y generar informes estrat\u00e9gicos con el poder de la IA.<\/p>\n<p>\u00bfEst\u00e1s preparado para ampliar tu sistema de informes? Sigue leyendo.<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>Acceso a las Anal\u00edticas de Kinsta a trav\u00e9s de MyKinsta y la API de Kinsta<\/h2>\n<p>Los clientes de Kinsta tienen acceso a una gran cantidad de datos a trav\u00e9s del <a href=\"https:\/\/kinsta.com\/es\/mykinsta\/\" target=\"_blank\" rel=\"noopener noreferrer\">panel de control de alojamiento MyKinsta<\/a>. Puedes acceder a los datos de tu plan en la secci\u00f3n Anal\u00edticas de tu panel de control.<\/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=\"Vista general de la secci\u00f3n Anal\u00edticas de MyKinsta.\" width=\"2568\" height=\"774\"><figcaption id=\"caption-attachment-208745\" class=\"wp-caption-text\">Vista general de la secci\u00f3n Anal\u00edticas de MyKinsta.<\/figcaption><\/figure>\n<p>La p\u00e1gina de Anal\u00edticas est\u00e1 dividida en varias pesta\u00f1as, cada una centrada en un aspecto espec\u00edfico de la actividad de tu sitio:<\/p>\n<ul>\n<li><b>Uso del plan:<\/b> Muestra el consumo de recursos de tu plan, tanto de forma acumulada como desglosado por cada sitio web.<\/li>\n<li><b>Solicitudes m\u00e1s frecuentes:<\/b> Te permite identificar las solicitudes m\u00e1s habituales de tu sitio, clasificadas por ancho de banda y visitas.<\/li>\n<li><strong>Cach\u00e9:<\/strong> Proporciona un desglose del uso de la cach\u00e9, incluyendo el desglose de la cach\u00e9, los componentes de la cach\u00e9 del servidor y las omisiones (bypasses) de la cach\u00e9 del servidor.<\/li>\n<li><b>CDN y edge:<\/b> Ofrece datos sobre el consumo de ancho de banda de la CDN y el ancho de banda de la cach\u00e9 edge, adem\u00e1s de listas de los archivos m\u00e1s solicitados desde la cach\u00e9 de la CDN.<\/li>\n<li><strong>Dispersi\u00f3n:<\/strong> Muestra el porcentaje de visitas desde escritorio, tableta y m\u00f3vil.<\/li>\n<li><strong>Rendimiento:<\/strong> Incluye varias m\u00e9tricas de rendimiento, como el tiempo medio de respuesta PHP MySQL, el rendimiento PHP, el l\u00edmite de hilos PHP, etc.<\/li>\n<li><strong>Respuesta:<\/strong> Proporciona estad\u00edsticas sobre los c\u00f3digos de respuesta, incluido un desglose detallado de los c\u00f3digos de error.<\/li>\n<li><strong>Geo &#038; IP:<\/strong> Muestra listas de los principales pa\u00edses, principales ciudades y principales IP de clientes desde los que se originan las solicitudes a tu sitio.<\/li>\n<\/ul>\n<p>Puedes acceder a estas mismas anal\u00edticas a nivel de sitio navegando a <strong>Sitios<\/strong> &gt; <strong>nombre de sitio<\/strong> &gt; <strong>Anal\u00edticas<\/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=\"Anal\u00edticas del sitio en MyKinsta.\" width=\"2570\" height=\"1140\"><figcaption id=\"caption-attachment-208746\" class=\"wp-caption-text\">Anal\u00edticas del sitio en MyKinsta.<\/figcaption><\/figure>\n<p>Las Anal\u00edticas de Kinsta ofrecen un impresionante conjunto de datos; con solo echar un vistazo al panel de control de MyKinsta, tendr\u00e1s una idea muy clara del consumo de recursos, la eficiencia y el rendimiento de tu sitio. Sabr\u00e1s exactamente de d\u00f3nde provienen la mayor\u00eda de las solicitudes y cu\u00e1les consumen m\u00e1s recursos.<\/p>\n<p>Junto con nuestra <a href=\"https:\/\/kinsta.com\/es\/herramienta-apm\/\">herramienta APM de Kinsta<\/a>, las anal\u00edticas de Kinsta te permiten optimizar el rendimiento de tus sitios de WordPress.<\/p>\n<p>Lo que no todo el mundo sabe es que tambi\u00e9n se puede acceder a los datos de las anal\u00edticas de Kinsta a trav\u00e9s de la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API de Kinsta<\/a>. Esto te permite recuperar datos mediante programaci\u00f3n y crear m\u00e9tricas de alojamiento, que luego puedes usar para generar informes autom\u00e1ticos y compartirlos con tus clientes.<\/p>\n<p>Vamos a ver los endpoints de la API de Kinsta.<\/p>\n<h3>El endpoint de Anal\u00edtica de la API de Kinsta<\/h3>\n<p>Con el endpoint de Anal\u00edtica de la API de Kinsta, puedes acceder a datos sin procesar sobre el uso de recursos y el estado de tu sitio web.<\/p>\n<ul>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-usage\">Uso de visitas<\/a>, <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth-usage\">uso de ancho de banda del servidor<\/a> y <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth-usage\">uso de ancho de banda de la CDN<\/a>: estas m\u00e9tricas registran el uso de tus recursos en relaci\u00f3n con tu plan de alojamiento durante el periodo de facturaci\u00f3n actual.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits\" target=\"_blank\" rel=\"noopener noreferrer\">Visitas<\/a>: Proporciona el n\u00famero total de visitas a un entorno determinado dentro de un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-disk-space\" target=\"_blank\" rel=\"noopener noreferrer\">Espacio en disco<\/a>: Proporciona el espacio total en disco utilizado por un entorno determinado durante un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth\">Ancho de banda del servidor<\/a>: Proporciona el ancho de banda consumido por un entorno determinado durante un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth\">Ancho de banda CDN<\/a>: Proporciona el ancho de banda CDN consumido por un entorno determinado durante un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-countries\" target=\"_blank\" rel=\"noopener noreferrer\">Principales pa\u00edses<\/a>: Proporciona una lista de los principales pa\u00edses desde los que se originan las peticiones al sitio en un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-countries\">Principales ciudades<\/a>: muestra una lista de las principales ciudades desde las que se han recibido solicitudes en tu sitio durante un periodo de tiempo determinado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-client-ips\" target=\"_blank\" rel=\"noopener noreferrer\">Principales IPs de Clientes<\/a>: Proporciona una lista de las principales direcciones IP de clientes desde las que se originaron solicitudes al sitio durante un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-dispersion\" target=\"_blank\" rel=\"noopener noreferrer\">Dispersi\u00f3n de Visitas<\/a>: Proporciona datos sobre la distribuci\u00f3n de las visitas entre ordenadores de sobremesa, tabletas y dispositivos m\u00f3viles durante un periodo de tiempo especificado.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-response-code-breakdown\" target=\"_blank\" rel=\"noopener noreferrer\">Desglose de c\u00f3digos de respuesta<\/a>: Proporciona un desglose de los c\u00f3digos de estado HTTP devueltos por el servidor en un periodo de tiempo especificado.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n te mostramos algunos ejemplos de c\u00f3mo usar el endpoint <code>analytics<\/code>.<\/p>\n<h4>Visitas<\/h4>\n<p>La siguiente solicitud proporciona el n\u00famero total de visitas a tu sitio y el n\u00famero de direcciones IP \u00fanicas que han accedido a \u00e9l en los \u00faltimos 30 d\u00edas:<\/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>La respuesta tendr\u00e1 la siguiente estructura:<\/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>Ancho de banda<\/h4>\n<p>El siguiente ejemplo muestra c\u00f3mo consultar la API de Kinsta para recuperar el uso de ancho de banda del servidor durante los \u00faltimos 30 d\u00edas:<\/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>La respuesta del servidor Kinsta proporciona el uso diario de ancho de banda de los \u00faltimos 30 d\u00edas:<\/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>Ancho de banda CDN<\/h4>\n<p>En este otro ejemplo, consultamos la API de Kinsta para averiguar el uso del ancho de banda de la CDN durante los \u00faltimos 7 d\u00edas:<\/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>El servidor proporcionar\u00e1 los siguientes datos:<\/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>Puedes probarlo t\u00fa mismo introduciendo tu clave API de Kinsta (bearer token), el ID de entorno y el ID de empresa en el <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits?playground=open\">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=\"Prueba la API de Kinsta en el API playground.\" width=\"2352\" height=\"1218\"><figcaption id=\"caption-attachment-208758\" class=\"wp-caption-text\">Prueba la API de Kinsta en el API playground.<\/figcaption><\/figure>\n<p>Ahora que ya sabes c\u00f3mo acceder a los datos anal\u00edticos de tu sitio en Kinsta, puedes utilizarlos para automatizar tus operaciones. Esto tambi\u00e9n incluye la automatizaci\u00f3n del sistema de informes.<\/p>\n<p>En las siguientes secciones te mostraremos c\u00f3mo automatizar el sistema de informes de tu agencia utilizando la API de Kinsta. Crearemos un script en Python y utilizaremos <a href=\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\">GitHub Actions<\/a> para automatizar la construcci\u00f3n y la ejecuci\u00f3n. Esto transformar\u00e1 los datos sin procesar que devuelve la API en tablas y gr\u00e1ficos, y consultar\u00e1 a la IA de Google para generar un informe final.<\/p>\n<p>Es hora de ponerse manos a la obra.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>El c\u00f3digo completo de este tutorial est\u00e1 disponible en <a href=\"https:\/\/github.com\/carlodaniele\/kinsta-gemini-reporting\" target=\"_blank\" rel=\"noopener noreferrer\">este repositorio de GitHub<\/a>.<\/p>\n<\/aside>\n\n<h2>Construye un sistema automatizado de informes utilizando la API de Kinsta y la IA de Google<\/h2>\n<p>Nuestro objetivo es crear un informe automatizado que se genere a intervalos espec\u00edficos. El sistema consultar\u00e1 la API de Kinsta para recuperar datos sobre visitas, ancho de banda del servidor y ancho de banda de la CDN. Estos datos se utilizar\u00e1n para crear gr\u00e1ficos y tablas en un archivo PDF. Como parte de este proceso, los datos se enviar\u00e1n a la API Gemini para producir un an\u00e1lisis de los datos extra\u00eddos, que luego se incluir\u00e1 en el informe.<\/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=\"Vista previa del informe automatizado generado con GitHub Actions y la API Kinsta.\" width=\"3355\" height=\"1572\"><figcaption id=\"caption-attachment-208776\" class=\"wp-caption-text\">Vista previa del informe automatizado generado con GitHub Actions y la API Kinsta.<\/figcaption><\/figure>\n<h3>Configurar el proyecto en GitHub<\/h3>\n<p>En la p\u00e1gina principal de GitHub, haz clic en el bot\u00f3n verde <strong>New<\/strong> para crear un nuevo proyecto. Una vez que tengas un proyecto vac\u00edo, ve a <strong>Settings &gt; Secrets and variables &gt; Actions<\/strong> y a\u00f1ade los secretos que se muestran en la siguiente imagen<\/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=\"Secretos de repositorio para GitHub Actions\" width=\"1580\" height=\"676\"><figcaption id=\"caption-attachment-208781\" class=\"wp-caption-text\">Secretos de repositorio para GitHub Actions<\/figcaption><\/figure>\n<p>Almacenar tus claves API e IDs en los Secretos de GitHub los mantiene inaccesibles para cualquiera y ayuda a garantizar que tu c\u00f3digo permanece seguro.<\/p>\n<h4>GEMINI_API_KEY<\/h4>\n<p>Puedes generar una clave API de Google AI en el <a href=\"https:\/\/aistudio.google.com\/api-keys\" target=\"_blank\" rel=\"noopener noreferrer\">panel de control de Google AI Studio<\/a>. Consulta la <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">documentaci\u00f3n de Google AI<\/a> para obtener m\u00e1s informaci\u00f3n.<\/p>\n<h4>CLAVE DE LA API KINSTA<\/h4>\n<p>A continuaci\u00f3n, sigue las instrucciones de nuestro art\u00edculo para <a href=\"https:\/\/kinsta.com\/es\/blog\/kinsta-api-key\/\">generar una clave API Kinsta<\/a>.<\/p>\n<h4>KINSTA_COMPANY_ID, KINSTA_ENV_ID, KINSTA_SITE_ID<\/h4>\n<p>Puedes encontrar el ID del sitio, el ID del entorno y el ID de la empresa en <strong>Sitios<\/strong> &gt; <strong>nombre del sitio<\/strong> &gt; <strong>Informaci\u00f3n<\/strong> en tu panel de MyKinsta.<\/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=\"Informaci\u00f3n del sitio en MyKinsta.\" width=\"2080\" height=\"828\"><figcaption id=\"caption-attachment-208778\" class=\"wp-caption-text\">Informaci\u00f3n del sitio en MyKinsta.<\/figcaption><\/figure>\n<p>Ahora pasemos a los archivos del proyecto.<\/p>\n<h3>Bibliotecas necesarias y configuraci\u00f3n de GitHub Actions<\/h3>\n<p>En el directorio ra\u00edz de tu proyecto GitHub, crea un archivo llamado <code>requirements.txt<\/code> y a\u00f1ade lo siguiente:<\/p>\n<pre><code>google-genai\nrequests\nmatplotlib\nfpdf2<\/code><\/pre>\n<p>Este archivo enumera los componentes necesarios para tu proyecto.<\/p>\n<ul>\n<li><code>google-genai<\/code>: Esta es la biblioteca de Google para interactuar con los modelos Gemini.<\/li>\n<li><code>requests<\/code>: Una biblioteca para realizar peticiones HTTP. En este proyecto, se utilizar\u00e1 para enviar peticiones HTTP a la API de Kinsta.<\/li>\n<li><code>matplotlib<\/code>: Una biblioteca de Python para <a href=\"https:\/\/matplotlib.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">crear gr\u00e1ficos y visualizar datos<\/a>.<\/li>\n<li><code>fpdf2<\/code>: Es una biblioteca que te permite <a href=\"https:\/\/py-pdf.github.io\/fpdf2\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">generar archivos PDF<\/a>.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n, crea un archivo llamado <code>.github\/workflows\/generate_report.yml<\/code> con el siguiente c\u00f3digo:<\/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 usa este archivo para ejecutar autom\u00e1ticamente tu c\u00f3digo a trav\u00e9s de GitHub Actions. Analicemos esto m\u00e1s de cerca:<\/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>: El nombre de tu proyecto tal y como aparece en la pesta\u00f1a <b>Actions<\/b> de GitHub.<\/li>\n<li><code>on<\/code>: Determina cu\u00e1ndo activar el flujo de trabajo.<\/li>\n<li><code>push<\/code>: El flujo de trabajo se ejecuta cada vez que env\u00edas un cambio de c\u00f3digo a la rama principal.<\/li>\n<li><code>workflow_dispatch<\/code>: Te permite ejecutar el flujo de trabajo manualmente.<\/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>: El inicio de las tareas a realizar.<\/li>\n<li><code>build-and-run<\/code>: Un nombre arbitrario que identifica una secuencia espec\u00edfica de acciones.<\/li>\n<li><code>runs-on<\/code>: Especifica el sistema en el que debe ejecutarse el flujo de trabajo.<\/li>\n<li><code>ubuntu-latest<\/code>: Establece la \u00faltima versi\u00f3n de Ubuntu Linux.<\/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>: La secuencia de operaciones a realizar.<\/li>\n<li><code>name<\/code>: El nombre de la operaci\u00f3n a realizar<\/li>\n<li><code>uses<\/code>: El m\u00f3dulo preconfigurado de GitHub (Acci\u00f3n)<\/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>: Actualiza pip (el <a href=\"https:\/\/pypi.org\/project\/pip\/\" target=\"_blank\" rel=\"noopener noreferrer\">gestor de paquetes de Python<\/a>) a la \u00faltima versi\u00f3n disponible.<\/li>\n<li><code>pip install -r requisitos.txt<\/code>: Lee el archivo <code>requirements.txt<\/code>\u00a0e instala los paquetes que aparecen en \u00e9l.<\/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>: Recupera los valores de las variables de entorno de GitHub Secrets.<\/li>\n<li><code>run: python main.py<\/code>: Lanza el int\u00e9rprete de Python y ejecuta el archivo <code>main.py<\/code>.<\/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: Utiliza la GitHub Action para gestionar artefactos, que son archivos o carpetas generados durante la ejecuci\u00f3n del script.<\/li>\n<li><code>with<\/code>: Establece los par\u00e1metros de configuraci\u00f3n.<\/li>\n<\/ul>\n<p>La configuraci\u00f3n de tu proyecto de automatizaci\u00f3n est\u00e1 completa. Ahora es el momento de crear los scripts de Python.<\/p>\n<h3>Consultar la API Kinsta mediante programaci\u00f3n<\/h3>\n<p>Una vez que hayas completado la configuraci\u00f3n, navega hasta el directorio ra\u00edz de tu proyecto de GitHub y crea un nuevo archivo llamado <code>kinsta_utils.py<\/code> con el siguiente c\u00f3digo:<\/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>Las dos primeras sentencias <code>import<\/code> cargan la biblioteca est\u00e1ndar para realizar peticiones HTTP y el m\u00f3dulo para interactuar con el sistema operativo (<code>os<\/code>).<\/li>\n<li>Las cuatro l\u00edneas siguientes (<code>os.getenv<\/code>) recuperan tus credenciales de GitHub Secrets.<\/li>\n<li><code>BASE_URL<\/code> define el endpoint principal de la API Kinsta utilizado por el script.<\/li>\n<li>La funci\u00f3n <code>get_headers<\/code> genera la cabecera de autorizaci\u00f3n, que incluir\u00e1 la clave de la API de Kinsta.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n, crea una funci\u00f3n de ayuda que convierta los datos brutos devueltos por la API en 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>Este c\u00f3digo ofrece dos opciones. La primera utiliza el est\u00e1ndar binario (<code>1024 x 1024<\/code>), y la segunda utiliza el est\u00e1ndar decimal. Dividir por <code>1_000_000<\/code> garantiza que el n\u00famero de tu informe PDF coincide con el n\u00famero que ver\u00edan tus clientes en las Anal\u00edticas de MyKinsta.<\/li>\n<\/ul>\n<p>La siguiente funci\u00f3n consulta la API de Kinsta y devuelve un conjunto de datos sin procesar:<\/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>La funci\u00f3n <code>fetch_kinsta_metric<\/code> toma tres argumentos: <code>endpoint<\/code>, <code>start_date<\/code> y <code>end_date<\/code>. Estos se usan para construir la URL de la solicitud. El endpoint puede ser <code>visits<\/code>, <code>bandwidth<\/code> o <code>cdn-bandwidth<\/code>.<\/li>\n<li>El array <code>params<\/code> almacena los par\u00e1metros de la solicitud.<\/li>\n<li>La respuesta de Kinsta es un objeto JSON anidado (<code>data_node<\/code>) que proporciona los valores agregados para el periodo (<code>total<\/code>) y una lista de valores diarios (<code>dataset<\/code>).<\/li>\n<\/ul>\n<p>La \u00faltima funci\u00f3n del archivo <code>kinsta_utils.py<\/code> recupera el nombre del sitio.<\/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>Este c\u00f3digo deber\u00eda ser bastante claro. Consulta la Referencia de la API para obtener m\u00e1s detalles sobre el <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/wordpress-sites\/get-site-by-id\">endpoint <code>sites<\/code><\/a>.<\/p>\n<p>Ahora s\u00f3lo queda configurar el flujo de trabajo.<\/p>\n<h3>Automatizar el flujo de trabajo con Python y Gemini<\/h3>\n<p>El \u00faltimo archivo que necesitas crear es el motor de tu aplicaci\u00f3n. Siempre en el directorio ra\u00edz de tu proyecto de GitHub, crea un archivo <code>main.py<\/code>. Para empezar, a\u00f1ade el siguiente c\u00f3digo:<\/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>As\u00ed se configura el script:<\/p>\n<ul>\n<li>Las sentencias <code>import<\/code> cargan las bibliotecas necesarias, y <code>matplotlib.use('Agg')<\/code> indica a Python que genere los gr\u00e1ficos y los guarde en memoria.<\/li>\n<li>El siguiente bloque establece el idioma (<code>en<\/code>) y el modelo (<code>gemini-2.5-flash<\/code>), y luego inicializa el cliente Google.<\/li>\n<li>A continuaci\u00f3n, define ventanas de tiempo para comparar los valores de los \u00faltimos siete d\u00edas con los de los siete d\u00edas anteriores.<\/li>\n<li>Por \u00faltimo, establece las etiquetas para las tablas y los gr\u00e1ficos.<\/li>\n<\/ul>\n<p>El siguiente paso es definir una clase <code>KinstaReport<\/code> para generar p\u00e1ginas de informes utilizando la biblioteca FPDF:<\/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>No vamos a entrar en demasiados detalles sobre este c\u00f3digo. Para obtener m\u00e1s informaci\u00f3n sobre la biblioteca FPDF, consulta los recursos online:<\/p>\n<ul>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tutorial.html\">Tutorial sobre FPDF<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tables.html\">Crear tablas<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Images.html\">A\u00f1adir im\u00e1genes<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Maths.html#charts-graphs\">Tablas y gr\u00e1ficos<\/a><\/li>\n<\/ul>\n<p>A continuaci\u00f3n, define una funci\u00f3n <code>generated_chart<\/code>. Esta funci\u00f3n convierte los datos sin procesar recibidos de Kinsta en gr\u00e1ficos.<\/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>Esta funci\u00f3n utiliza la biblioteca Matplotlib para convertir los datos extra\u00eddos de Kinsta en gr\u00e1ficos para incluirlos en el informe PDF. Para m\u00e1s informaci\u00f3n sobre el uso de la biblioteca Matplotlib, consulta la documentaci\u00f3n online:<\/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\">Personalizar Matplotlib<\/a><\/li>\n<\/ul>\n<p>Por \u00faltimo, a\u00f1ade la funci\u00f3n que combina todas las partes que hemos descrito hasta ahora.<\/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>Esto es lo que hace este c\u00f3digo<\/p>\n<ul>\n<li>El bucle <code>for<\/code> recorre el array <code>metrics<\/code> y consulta la API de Kinsta dos veces: una para la semana actual y otra para la semana anterior.<\/li>\n<li>Si los datos se refieren al ancho de banda, la funci\u00f3n <code>format_bytes_to_mb()<\/code> convierte los datos brutos en MB.<\/li>\n<li>La funci\u00f3n <code>report_data()<\/code>\u00a0almacena los datos recuperados.<\/li>\n<li>A continuaci\u00f3n, <code>KinstaReport<\/code> crea un PDF para cada centro.<\/li>\n<li>El siguiente bucle <code>for<\/code> genera im\u00e1genes PNG para los gr\u00e1ficos y crea una nueva p\u00e1gina para cada m\u00e9trica.<\/li>\n<li>La siguiente secci\u00f3n genera el resumen ejecutivo, calcula el n\u00famero total de visitas y el total de megabytes del periodo, y env\u00eda una consulta din\u00e1mica a Gemini 2.5 Flash. Por \u00faltimo, la respuesta se utiliza para completar la \u00faltima p\u00e1gina del PDF.<\/li>\n<li>El script guarda el documento con un nombre de archivo que incluye la fecha actual.<\/li>\n<li>* La condici\u00f3n final garantiza que el proceso s\u00f3lo se ejecute cuando el script se ejecute como programa principal.<\/li>\n<\/ul>\n<p>Es hora de construir y ejecutar tu aplicaci\u00f3n.<\/p>\n<h3>Recuperaci\u00f3n del Artefacto<\/h3>\n<p>Ya puedes ejecutar tu aplicaci\u00f3n. En la p\u00e1gina de tu proyecto en GitHub, haz clic en la pesta\u00f1a <strong>Actions<\/strong>. Busca el nombre de tu acci\u00f3n en el men\u00fa de la izquierda (en nuestro ejemplo, es <strong>Generate Kinsta Analytics Report<\/strong>, tal y como se especifica en tu archivo <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=\"La pesta\u00f1a Actions muestra una lista de los flujos de trabajo\" width=\"1998\" height=\"1020\"><figcaption id=\"caption-attachment-208765\" class=\"wp-caption-text\">La pesta\u00f1a Actions muestra una lista de los flujos de trabajo<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, haz clic en el men\u00fa desplegable <strong>Run workflow<\/strong> de la derecha y, despu\u00e9s, pulsa el bot\u00f3n verde <strong>Run workflow<\/strong> (actualmente solo est\u00e1 disponible la rama main).<\/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=\"Ejecutar flujo de trabajo de GitHub.\" width=\"2558\" height=\"1008\"><figcaption id=\"caption-attachment-208766\" class=\"wp-caption-text\">Ejecutar flujo de trabajo de GitHub.<\/figcaption><\/figure>\n<p>La siguiente p\u00e1gina muestra el flujo de trabajo actual. Haz clic en \u00e9l para ver la lista de operaciones en curso.<\/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=\"Usar flujo de trabajo de la rama\" width=\"1918\" height=\"884\"><figcaption id=\"caption-attachment-208767\" class=\"wp-caption-text\">Usar flujo de trabajo de la rama<\/figcaption><\/figure>\n<p>La secci\u00f3n <strong>Run Report Script<\/strong> muestra una lista de las operaciones realizadas, mientras que la secci\u00f3n <strong>Upload Report<\/strong> proporciona la URL de descarga del artefacto. Haz clic en este enlace para descargar tu informe en formato PDF.<\/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=\"La secci\u00f3n Upload Report proporciona el enlace al informe en PDF.\" width=\"1554\" height=\"816\"><figcaption id=\"caption-attachment-208768\" class=\"wp-caption-text\">La secci\u00f3n Upload Report proporciona el enlace al informe en PDF.<\/figcaption><\/figure>\n<p>Encontrar\u00e1s el mismo enlace en la secci\u00f3n <strong>Artifacts<\/strong>, en la parte inferior de la p\u00e1gina <strong>Summary<\/strong> (Resumen) del flujo de trabajo<\/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=\"Los pasos Run Report Script (Ejecutar script de informe) y Upload Report (Cargar informe).\" width=\"1788\" height=\"1310\"><figcaption id=\"caption-attachment-208769\" class=\"wp-caption-text\">Los pasos Run Report Script (Ejecutar script de informe) y Upload Report (Cargar informe).<\/figcaption><\/figure>\n<p>Las im\u00e1genes a continuaci\u00f3n muestran el informe completo, incluyendo el <strong>Executive Summary<\/strong> (Resumen ejecutivo) generado por la IA de Google<\/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=\"P\u00e1ginas del informe Visitas al sitio y Ancho de banda del servidor.\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208770\" class=\"wp-caption-text\">P\u00e1ginas del informe Visitas al sitio y Ancho de banda del servidor.<\/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=\"P\u00e1ginas de los informes de Ancho de banda de CDN y Resumen ejecutivo.\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208771\" class=\"wp-caption-text\">P\u00e1ginas de los informes de Ancho de banda de CDN y Resumen ejecutivo.<\/figcaption><\/figure>\n<h2>Pr\u00f3ximos pasos: C\u00f3mo mejorar la escalabilidad y automatizar la entrega<\/h2>\n<p>Esto es s\u00f3lo una muestra de lo que puede hacer la API de Kinsta cuando se combina con herramientas de automatizaci\u00f3n avanzadas como GitHub Actions. La integraci\u00f3n de la IA va m\u00e1s all\u00e1, transformando las cifras brutas en informes de profundidad listos para compartir con tus clientes.<\/p>\n<p>Puedes mejorar a\u00fan m\u00e1s tus informes de varias maneras:<\/p>\n<ul>\n<li>Puedes configurar tu aplicaci\u00f3n a\u00f1adiendo una l\u00ednea al archivo YAML (<code>schedule: '0 9 * * 1'<\/code>) para generar el informe todos los lunes por la ma\u00f1ana a las 9:00.<\/li>\n<li>Puedes integrar una biblioteca como <code>smtplib<\/code> o un servicio como SendGrid para enviar el informe directamente a tu cliente.<\/li>\n<li>Si eres una agencia con docenas o incluso cientos de sitios, podr\u00edas implementar un bucle que itere sobre una lista de ID de sitios para generar todos tus informes en una sola ejecuci\u00f3n.<\/li>\n<li>Puedes enriquecer a\u00fan m\u00e1s el contenido de tu informe utilizando la API de Kinsta para recuperar datos geogr\u00e1ficos, desgloses de c\u00f3digo HTTP, registros de servidor y cualquier otro dato que quieras incluir. Analizando estos datos, la IA puede identificar intentos de ataque (c\u00f3digos 4xx) o picos de tr\u00e1fico procedentes de regiones inesperadas.<\/li>\n<li>Puedes afinar tu consulta para obtener respuestas de la IA m\u00e1s detalladas y completas.<\/li>\n<li>Puedes personalizar la plantilla PDF con los logotipos de tu agencia y de tu cliente.<\/li>\n<\/ul>\n<p>Los informes automatizados reducen la carga de trabajo de tu equipo, y la coherencia y precisi\u00f3n que proporcionan refuerzan la confianza y fidelidad de tus clientes.<\/p>\n<p>\u00bfQuieres empezar ya a automatizar los informes de tus clientes? <a href=\"https:\/\/kinsta.com\/es\/precios\/\">Suscr\u00edbete al plan<\/a> que mejor se adapte a tus necesidades y empieza a crear con la API de Kinsta hoy mismo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para las agencias modernas, un sistema de informes coherente y de alta calidad es esencial para mantener la confianza de los clientes y fidelizarlos a largo &#8230;<\/p>\n","protected":false},"author":36,"featured_media":83062,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1391,1268,1270],"class_list":["post-83061","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-agencia","topic-analiticas","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>Automatiza Informes con la API de Kinsta e IA de Google<\/title>\n<meta name=\"description\" content=\"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.\" \/>\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\/es\/blog\/api-kinsta-e-ia-google\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatiza los informes de clientes con la API de Kinsta y la IA de Google\" \/>\n<meta property=\"og:description\" content=\"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-08T14:09:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-12T11:07:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Automatiza los informes de clientes con la API de Kinsta y la IA de Google\",\"datePublished\":\"2026-05-08T14:09:33+00:00\",\"dateModified\":\"2026-05-12T11:07:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/\"},\"wordCount\":3258,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/\",\"name\":\"Automatiza Informes con la API de Kinsta e IA de Google\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"datePublished\":\"2026-05-08T14:09:33+00:00\",\"dateModified\":\"2026-05-12T11:07:43+00:00\",\"description\":\"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Automatiza los informes de clientes con la API de Kinsta y la IA de Google\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatiza Informes con la API de Kinsta e IA de Google","description":"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.","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\/es\/blog\/api-kinsta-e-ia-google\/","og_locale":"es_ES","og_type":"article","og_title":"Automatiza los informes de clientes con la API de Kinsta y la IA de Google","og_description":"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.","og_url":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2026-05-08T14:09:33+00:00","article_modified_time":"2026-05-12T11:07:43+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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":"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Carlo Daniele","Tiempo de lectura":"26 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Automatiza los informes de clientes con la API de Kinsta y la IA de Google","datePublished":"2026-05-08T14:09:33+00:00","dateModified":"2026-05-12T11:07:43+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/"},"wordCount":3258,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/","url":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/","name":"Automatiza Informes con la API de Kinsta e IA de Google","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","datePublished":"2026-05-08T14:09:33+00:00","dateModified":"2026-05-12T11:07:43+00:00","description":"Crea gr\u00e1ficos PDF y res\u00famenes con IA usando la API de Kinsta y la IA de Google para tus datos brutos de alojamiento.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/api-kinsta-e-ia-google\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/es\/secciones\/api\/"},{"@type":"ListItem","position":3,"name":"Automatiza los informes de clientes con la API de Kinsta y la IA de Google"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/83061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=83061"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/83061\/revisions"}],"predecessor-version":[{"id":83115,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/83061\/revisions\/83115"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83061\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/83062"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=83061"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=83061"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=83061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}