A partir del 10 de junio de 2025, a fin de mejorar el rendimiento general de la API, ya no se devolverá el campo reach en respuesta a las consultas que apliquen breakdowns y que usen una start_date hace más de 13 meses (en las respuestas a estas solicitudes, se omitirá reach y los campos relacionados, como frequency y cpp).
Para aplicar breakdowns y aún así recuperar valores de reach de hace más de 13 meses, puedes usar trabajos asincrónicos para hacer hasta 10 solicitudes por cuenta publicitaria al día. Revisa el encabezado x-Fb-Ads-Insights-Reach-Throttle para monitorear qué tan cerca estás de ese límite de frecuencia y ten en cuenta que, una vez que alcances el límite, se omitirá reach y los campos relacionados de las respuestas a tus solicitudes.
Cuando se supere el umbral del límite de frecuencia para desgloses relacionados con el alcance, se devolverá el siguiente mensaje de error:
Reach-related metric breakdowns are unavailable due to rate limit threshold.
La API de estadísticas de Facebook proporciona datos sobre el rendimiento de las campañas de marketing de Facebook. Para proteger el rendimiento y la estabilidad del sistema, aplicamos medidas de protección que garantizan que los recursos del sistema se distribuyan de manera equitativa entre las apps. Todas las políticas que se describen a continuación están sujetas a cambios.
Usamos límites de datos por llamada para evitar que en una sola consulta se recupere una cantidad de datos superior a la que el sistema puede manejar. Hay dos tipos de límites de datos:
Estos límites se aplican a las llamadas /insights tanto sincrónicas como asincrónicas, y se devuelve este error:
error_code = 100, CodeException (error subcode: 1487534)
action_target_id o product_id, e intervalos de fechas más extensos (por ejemplo, desde el comienzo de la cuenta)./insights directamente con objetos de anuncio de nivel inferior para obtener datos detallados de ese nivel. Por ejemplo, usa primero una consulta de nivel de cuenta para obtener la lista de los identificadores de objeto de niveles más bajos con los parámetros level y filtering. En este ejemplo, recuperamos la información de todas las campañas que registraron impresiones:curl -G \
-d 'access_token=<ACCESS_TOKEN>' \
-d 'level=campaign' \
-d 'filtering=[{field:"ad.impressions",operator:"GREATER_THAN",value:0}]' \
'https://graph.facebook.com/v2.7/act_<ACCOUNT_ID>/insights'
/<campaign_id>/insights con los valores devueltos en relación con la consulta y agrupar por lotes las solicitudes de estadísticas de estas campañas en una sola llamada:curl \
-F 'access_token=<ACCESS_TOKEN>' \
-F 'batch=[ \
{ \
"method": "GET", \
"relative_url": "v24.0/<CAMPAIGN_ID_1>/insights?fields=impressions,spend,ad_id,adset_id&level=ad" \
}, \
{ \
"method": "GET", \
"relative_url": "v24.0/<CAMPAIGN_ID_2>/insights?fields=impressions,spend,ad_id,adset_id&level=ad" \
}, \
{ \
"method": "GET", \
"relative_url": "v24.0/<CAMPAIGN_ID_3>/insights?fields=impressions,spend,ad_id,adset_id&level=ad" \
} \
]' \
'https://graph.facebook.com'
filtering solo para obtener estadísticas de objetos de anuncio con datos. El valor de campo especificado en filtering usa la notación de PUNTO para indicar los campos contenidos en el objeto. Ten en cuenta que el filtrado con STARTS_WITH y CONTAIN no cambia los datos del resumen. En este caso, utiliza el operador IN. Este es un ejemplo de una solicitud filtering:curl -G \
-d 'access_token=<ACCESS_TOKEN>' \
-d 'level=ad' \
-d 'filtering=[{field:"ad.impressions",operator:"GREATER_THAN",value:0},]' \
'https://graph.facebook.com/v24.0/act_<ACCOUNT_ID>/insights'date_preset. Los intervalos de fechas personalizados ofrecen un rendimiento menos eficaz en nuestro sistema.90 días después del lanzamiento de la versión 3.3 y con efecto en todas las versiones públicas, cambiamos la limitación de frecuencia en el nivel de la cuenta publicitaria para reflejar mejor el volumen de llamadas a la API necesarias. Calculamos el cupo de la limitación de frecuencia en función de tu nivel de acceso a la API de marketing y la empresa que es dueña de la app. Consulta Acceso y autenticación. Este cambio se aplica a todos los puntos de conexión de la API de estadísticas de anuncios: GET {adaccount_ID}/insights, GET {campaign_ID}/insights, GET {adset_ID}/insights, GET {ad_ID}/insights, POST {adaccount_ID}/insights, POST {campaign_ID}/insights, POST {adset_ID}/insights y POST {ad_ID}/insights.
Usamos límites de carga para ofrecer una experiencia de informes óptima. Medimos tanto la frecuencia de las llamadas de API como los recursos que necesitan. Admitimos un límite de carga fijo por app por segundo. Si se supera ese límite, las solicitudes fallan.
Controla el encabezado de HTTP x-fb-ads-insights-throttle en cada respuesta de la API para ver qué tan cerca de su límite está tu app y para calcular el peso estimado de una consulta concreta. Las llamadas de estadísticas también están sujetas a los límites de la cuenta publicitaria predeterminados que se muestran en el encabezado de HTTP x-ad-account-usage. Puedes obtener más detalles en API de marketing, Prácticas recomendadas
Cuando una app alcanza su límite, la llamada recibe una respuesta de error con error_code = 4, CodedException. Procura mantenerte lejos del límite. Si una app alcanza sus límites permitidos, solo se procesa un porcentaje determinado de solicitudes, dependiendo de la consulta y la frecuencia.
Aplicamos la limitación de frecuencia a cada app que envíe llamadas /insights sincrónicas y asincrónicas combinadas. Los límites se aplican principalmente en dos niveles: por app y por cuenta publicitaria.
Este es un ejemplo de encabezado HTTP con el consumo acumulado de una app como porcentaje de los límites:
X-FB-Ads-Insights-Throttle: { "app_id_util_pct": 100, "acc_id_util_pct": 10, "ads_api_access_tier": "standard_access" }El encabezado "X-FB-Ads-Insights-Throttle" es un valor JSON, que contiene la siguiente información:
app_id_util_pct: el porcentaje de la capacidad asignada que consumió el app_id asociado.acc_id_util_pct: el porcentaje de la capacidad asignada que consumió el account_id de la cuenta publicitaria asociada.ads_api_access_tier: los niveles permiten que tu app acceda a la API de marketing. standard_access logra una limitación de frecuencia menor.Durante los períodos de carga global elevada en el punto de conexión /insights, el sistema puede acelerar las solicitudes con el fin de proteger el backend. Esto puede ocurrir en casos poco habituales, cuando llegan demasiadas consultas de alta complejidad al mismo tiempo (grandes intervalos de tiempo, métricas complejas y/o alto número de identificadores de objetos publicitarios). El error se verá de la siguiente manera:
error_code = 4, CodeException (error subcode: 1504022), error_title: Too many API requests
Durante estos períodos, se aconseja reducir las llamadas, esperar un momento y volver a realizar la consulta.
/insights mediante la asignación de una frecuencia con tiempo de espera en tu trabajo./insights o de ponerlas en pausa cuando te aproximes al 100% de tu capacidad en tu app o en tu cuenta publicitaria.ads_api_access_tier que te permite acceder a la API de marketing. De modo predeterminado, las apps se ubican en el nivel development_access, y el standard_access permite lograr una limitación de frecuencia menor. Para obtener una limitación de frecuencia más alta y llegar al nivel estándar, puedes solicitar "Advanced Access" a la característica Acceso estándar de administración de anuncios.Busca estadísticas en muchos objetos, filtra los resultados y ordénalos. El flujo de trabajo asincrónico ahora es más sencillo:
POST al punto de conexión <AD_OBJECT>/insights y responderá con el id para la ejecución del informe publicitario.{
"report_run_id": 6023920149050,
}
No guardes el report_run_id para usarlo a largo plazo, ya que caducará después de 30 días.
async_status. Consulta este campo hasta que async_status sea Job Completed y async_percent_completion sea 100.{
"id": "6044775548468",
"account_id": "1010035716096012",
"time_ref": 1459788928,
"time_completed": 1459788990,
"async_status": "Job Completed",
"async_percent_completion": 100
}
<AD_REPORT_RUN_ID>/insights para obtener el resultado final.{
"data": [
{
"impressions": "9708",
"date_start": "2009-03-28",
"date_stop": "2016-04-04"
},
{
"impressions": "18841",
"date_start": "2009-03-28",
"date_stop": "2016-04-04"
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MQZDZD"
}
}
}
Este trabajo obtiene todas las estadísticas de la cuenta y devuelve un identificador de trabajo asincrónico:
curl \ -F 'level=campaign' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v24.0/<CAMPAIGN_ID>/insights curl -G \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v24.0/1000002 curl -G \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v24.0/1000003/insights
| Estado | Descripción |
|---|---|
| El trabajo aún no se inició. |
| El trabajo se inició, pero aún no se ejecutó. |
| El trabajo ya está en ejecución. |
| El trabajo se completó con éxito. |
| Ocurrió un error al ejecutar el trabajo. Revisa la consulta y vuelve a intentarlo. |
| El trabajo caducó y se omitió. Vuelve a enviarlo e inténtalo nuevamente. |
Proporcionamos un práctico punto de conexión para exportar <AD_REPORT_RUN_ID> a un formato localizado y fácil de leer.
Nota: Este punto de conexión no forma parte de nuestra versión de la API Graph y, por lo tanto, no se incluye en la política de cambios radicales. Los scripts y los programas no deben depender del formato del resultado, ya que este puede cambiar sin previo aviso.
curl -G \ -d 'report_run_id=<AD_REPORT_RUN_ID>' \ -d 'name=myreport' \ -d 'format=xls' \ 'https://www.facebook.com/ads/ads_insights/export_report/'
| Nombre | Descripción |
|---|---|
Cadena | Nombre del archivo descargado |
Enumeración {csv,xls} | Formato del archivo |
Número entero | Identificador del informe que se va a ejecutar |
Cadena | Permisos que otorgó el usuario con la sesión iniciada. Proporciona esta información para exportar los informes de otro usuario. |