Administra los datos de forma eficiente

Una función principal de muchas aplicaciones de Google Ads es recuperar datos de la cuenta para casos de uso como el análisis de datos, las consultas de los clientes y la verificación de cumplimiento de las políticas. Mientras recuperas los datos, debes optimizar el uso para no sobrecargar los servidores de Google o correr el riesgo de que se limite la frecuencia. Para obtener más detalles, consulta las guías sobre el límite de frecuencia y el mantenimiento de una dirección de correo electrónico de contacto actualizada.

Almacena tus datos en caché

Debes almacenar en caché los detalles de la entidad que recuperas de los servidores de la API en una base de datos local en lugar de llamar al servidor cada vez que necesites los datos, en particular para entidades a las que se accede con frecuencia o que cambian con poca frecuencia. Usa change-event y change-status cuando sea posible para detectar qué objetos cambiaron desde la última vez que sincronizaste los resultados.

Optimiza la frecuencia de los informes en ejecución

Google Ads tiene lineamientos publicados sobre la actualidad de los datos y la frecuencia con la que se actualizan. Debes usar esta guía para determinar la frecuencia con la que quieres recuperar informes.

Si necesitas actualizar las cuentas de forma periódica, te recomendamos que limites la cantidad de esas cuentas a un conjunto pequeño, por ejemplo, solo las veinte principales cuentas de Google Ads. El resto se puede actualizar con una frecuencia menor, por ejemplo, una o dos veces al día.

Optimiza el tamaño de tus informes

Tu aplicación debe recuperar grandes lotes de datos en lugar de ejecutar una gran cantidad de informes pequeños. Un factor que influye en esta elección son los límites de la cuenta.

Por ejemplo, considera el siguiente código que extrae las estadísticas de grupos de anuncios específicos y actualiza una tabla de base de datos de estadísticas:

  List<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  foreach (long adGroupId in adGroupIds)
  {
    string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
        "metrics.cost_micros, metrics.impressions, segments.date FROM " +
        "ad_group WHERE segments.date DURING LAST_7_DAYS AND " +
        "ad_group.id = ${adGroupId}";
    List<GoogleAdsRow> rows = RunGoogleAdsReport(customerId, query);
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

Este código funciona bien en una cuenta de prueba pequeña. Sin embargo, Google Ads admite hasta 20,000 grupos de anuncios por campaña y 10,000 campañas por cuenta. Por lo tanto, si este código se ejecuta en una cuenta grande de Google Ads, puede sobrecargar los servidores de la API de Google Ads, lo que genera un límite de frecuencia y una regulación.

Un mejor enfoque sería ejecutar un único informe y procesarlo a nivel local. Se muestra un enfoque de este tipo que usa un mapa en la memoria.

  Hashset<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
      "metrics.cost_micros, metrics.impressions, segments.date FROM " +
      "ad_group WHERE segments.date DURING LAST_7_DAYS";
  List<GoogleAdsRow> rows = RunGoogleAdsReport(customer_id, query);

  var memoryMap = new Dictionary<long, List<GoogleAdsRow>>();
  for each (GoogleAdsRow row in rows)
  {
    var adGroupId = row.AdGroup.Id;

    if (adGroupIds.Contains(adGroupId))
    {
      CheckAndAddRowIntoMemoryMap(row, adGroupId, memoryMap);
    }
  }
  foreach (long adGroupId in memoryMap.Keys())
  {
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

Esto reduce la carga en los servidores de la API de Google Ads debido a la menor cantidad de informes que se ejecutan.

Si descubres que el informe es demasiado grande para almacenarlo en la memoria, también puedes dividir la consulta en grupos más pequeños. Para ello, agrega una cláusula LIMIT como la siguiente:

SELECT
  ad_group.id,
  ad_group.name,
  metrics.clicks,
  metrics.cost_micros,
  metrics.impressions,
  segments.date
FROM ad_group
WHERE segments.date DURING LAST_7_DAYS
  AND ad_group.id IN (id1, id2, ...)
LIMIT 100000

Las etiquetas son otra forma de agrupar entidades y reducir la cantidad de consultas de informes. Consulta la guía de etiquetas para obtener más información.

Optimiza los datos que obtienes

Cuando ejecutes informes, debes tener en cuenta las columnas que incluyes en tus consultas. Considera el siguiente ejemplo que está programado para ejecutarse cada hora:

SELECT
  customer.id,
  customer.currency_code,
  campaign.id,
  campaign.name,
  ad_group.id,
  ad_group.name,
  ad_group_criterion.keyword.match_type,
  ad_group_criterion.keyword.text,
  ad_group_criterion.criterion_id,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.system_serving_status,
  ad_group_criterion.negative,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  ad_group_criterion.quality_info.post_click_quality_score,
  metrics.historical_landing_page_quality_score,
  metrics.search_click_share,
  metrics.historical_creative_quality_score,
  metrics.clicks,
  metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS

Las únicas columnas que probablemente cambien cada hora son metrics.clicks y metrics.impressions. Todas las otras columnas se actualizan con poca frecuencia o no se actualizan, por lo que es muy poco eficaz recuperarlas una vez por hora. Puedes almacenar estos valores en una base de datos local y ejecutar un informe de evento de cambio o de estado del cambio para descargar los cambios una o dos veces al día.

En algunos casos, puedes reducir la cantidad de filas que descargas si aplicas los filtros adecuados.

Cómo borrar cuentas no utilizadas

Si tu aplicación administra cuentas de anunciantes externos, debes desarrollar la aplicación teniendo en cuenta la deserción de clientes. Debes limpiar periódicamente tus procesos y almacenes de datos para quitar las cuentas de los clientes que ya no usan tu aplicación. Cuando elimines cuentas de Google Ads sin usar, ten en cuenta la siguiente guía:

  • Revoca la autorización que el cliente le otorgó a tu aplicación para administrar su cuenta.
  • Deja de realizar llamadas a la API a las cuentas de Google Ads del cliente. Esto se aplica en especial a los trabajos sin conexión, como los trabajos cron y las canalizaciones de datos que están diseñadas para ejecutarse sin intervención del usuario.
  • Si el cliente revocó su autorización, tu aplicación debería manejar correctamente la situación y evitar enviar llamadas no válidas a los servidores de la API de Google.
  • Si el cliente canceló su cuenta de Google Ads, debes detectarla y evitar enviar llamadas no válidas a los servidores de la API de Google.
  • Borre de su base de datos local los datos que descargó de las cuentas de Google Ads del cliente después de un período adecuado.