Connect

Consultar gasto diario de la cuenta publicitaria de Meta

Lee el gasto y la entrega DIARIOS de la cuenta publicitaria de Meta de esta conexión, YA sincronizados: gasto, impresiones, alcance y clics de cada día, con su moneda y la zona horaria de la cuenta.

Tool IDmeta_ads.gasto_cuenta.consultar
Nombre MCPmeta_ads__gasto_cuenta__consultar
Conectormeta_ads
Planoaction
Lee el alcancegasto (debe estar habilitado en la conexión)
Scope (permiso)meta_ads:read
Authnone
Versión1
Sensiblesí
Deprecadono
ComportamientoreadOnly=true, destructive=false, idempotent=true, openWorld=false

Requiere conexión. Indica cuál en cada llamada: header X-Connect-Connection en REST y campo connectionId en el execute de MCP. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale de conexiones.estado.consultar.

Qué hace

Es el total de la cuenta: no lo sumes con las filas por campaña. Lectura pura: NO contacta a Meta ni dispara una sincronización. Revisa 'cobertura' antes de concluir que no hubo gasto. Las cifras son las que Meta informa en Insights: el gasto es estimado y NO equivale a facturas, cobros ni impuestos. No mezcles monedas. Para traer datos nuevos usa 'meta_ads.conexion.sincronizar'. Pagina con 'cursor'.

Entrada

CampoTipoRequeridoDescripción
desdestring ^\d{4}-\d{2}-\d{2}$noPrimer día (AAAA-MM-DD, día calendario en la zona horaria de la cuenta publicitaria). Omítelo para no filtrar.
hastastring ^\d{4}-\d{2}-\d{2}$noÚltimo día, incluido (AAAA-MM-DD, día calendario en la zona horaria de la cuenta publicitaria). Omítelo para no filtrar.
cursorstringnoPuntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.
limitentero 1-500no · default 100Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.
JSON Schema de entrada
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "desde": {
      "description": "Primer día (AAAA-MM-DD, día calendario en la zona horaria de la cuenta publicitaria). Omítelo para no filtrar.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "hasta": {
      "description": "Último día, incluido (AAAA-MM-DD, día calendario en la zona horaria de la cuenta publicitaria). Omítelo para no filtrar.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "cursor": {
      "description": "Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.",
      "type": "string"
    },
    "limit": {
      "default": 100,
      "description": "Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.",
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    }
  }
}

Ejemplo

curl
curl -X POST https://connect.emisso.ai/api/v1/tools/meta_ads.gasto_cuenta.consultar/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"desde":"2026-10-01","hasta":"2026-10-20"}}'
MCP · meta-tool execute
{
  "tool": "meta_ads.gasto_cuenta.consultar",
  "params": {
    "desde": "2026-10-01",
    "hasta": "2026-10-20"
  },
  "connectionId": "conn_9tKfR2mQx4Vb"
}

Salida esperada (200):

{
  "data": {
    "cuenta": {
      "cuentaId": "1234567890123456",
      "moneda": "CLP",
      "zonaHoraria": "America/Santiago"
    },
    "filas": [
      {
        "fecha": "2026-10-19",
        "moneda": "CLP",
        "zonaHoraria": "America/Santiago",
        "gasto": "48250",
        "impresiones": 61234,
        "alcance": 30211,
        "clics": 1402,
        "clicsEnlace": 988,
        "diaCerrado": true,
        "versionApi": "v26.0",
        "sincronizadoEn": "2026-10-20T16:00:02.000Z"
      }
    ],
    "cobertura": {
      "desde": "2025-09-21",
      "hasta": "2026-10-20",
      "completa": true,
      "diasSinLeer": [],
      "pendiente": null,
      "sincronizadoEn": "2026-10-20T16:00:02.000Z"
    },
    "cursor": null
  },
  "meta": {
    "request_id": "req_…",
    "tool_id": "meta_ads.gasto_cuenta.consultar",
    "plane": "action",
    "latency_ms": 24,
    "audit_status": "recorded"
  }
}

El gasto viene como texto decimal en la moneda de la cuenta. Un día sin fila dentro de la cobertura es un día sin entrega.

Salida

CampoTipoRequeridoDescripción
cuentaobjetosíLa cuenta publicitaria fijada a esta conexión. Una conexión lee UNA sola cuenta publicitaria.
cuenta.cuentaIdstringnullsí
cuenta.monedastringnullsí
cuenta.zonaHorariastringnullsí
filaslista de objetosíUn día por fila, del más reciente al más antiguo: el total de la cuenta publicitaria ese día.
filas[].fechastringsíEl día (AAAA-MM-DD) en la zona horaria de 'zonaHoraria', la de la cuenta publicitaria. No es un día de Chile si la cuenta usa otra zona.
filas[].monedastringsíLa moneda del gasto (ISO 4217, la de la cuenta publicitaria). Nunca sumes gastos de monedas distintas.
filas[].zonaHorariastringsíLa zona horaria IANA con que Meta cortó este día.
filas[].gastostringsíGasto estimado del día según Meta, decimal en texto en 'moneda' (por ejemplo "15990" o "12.34"). Es una métrica de entrega publicitaria, NO un comprobante: no es lo facturado ni lo cobrado, y no incluye impuestos.
filas[].impresionesenterosíVeces que se mostraron los anuncios ese día.
filas[].alcanceenteronullsí
filas[].clicsenteronullsí
filas[].clicsEnlaceenteronullsí
filas[].diaCerradobooleanosífalse si al leerlo el día todavía no terminaba en la zona de la cuenta: sus cifras pueden crecer.
filas[].versionApistringsíLa versión de la Marketing API con que se leyó la fila (por ejemplo 'v26.0').
filas[].sincronizadoEnstringsíCuándo guardó Connect esta versión de la fila (ISO 8601, UTC). Meta puede corregir días de hasta 28 días atrás; la relectura reemplaza la fila.
coberturaobjetosíQué cubre lo guardado. Dentro de [desde, hasta], un día SIN fila significa que Meta no informó entrega ese día (gasto cero), salvo que caiga en 'diasSinLeer'. Fuera de la cobertura, el gasto es desconocido.
cobertura.desdestringnullsí
cobertura.hastastringnullsí
cobertura.completabooleanosítrue sólo si el histórico llegó al horizonte del conector (~13 meses), no quedó ningún tramo sin leer y la última sincronización no quedó a medias. En false, una lista vacía NO prueba que no hubo gasto: dilo así.
cobertura.diasSinLeerlista de objetosíTramos dentro de la cobertura que no se pudieron leer: ahí el gasto es DESCONOCIDO, no cero.
cobertura.diasSinLeer[].desdestringsíPrimer día del tramo (AAAA-MM-DD).
cobertura.diasSinLeer[].hastastringsíÚltimo día del tramo (AAAA-MM-DD).
cobertura.diasSinLeer[].motivostringsíPor qué no se leyó: 'demasiados_datos', 'datos_ilegibles' o 'agrupada'.
cobertura.pendiente"presupuesto" · "error_transitorio"nullsí
cobertura.sincronizadoEnstringnullsí
cursorstringnullsí
JSON Schema de salida
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cuenta": {
      "type": "object",
      "properties": {
        "cuentaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "El id de la cuenta publicitaria en Meta, sin el prefijo 'act_', como texto. null si la conexión todavía no sincronizó."
        },
        "moneda": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "La moneda de la cuenta (ISO 4217) en la última sincronización. Cada fila trae además la suya."
        },
        "zonaHoraria": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "La zona horaria IANA de la cuenta (por ejemplo 'America/Santiago'): en ella corta Meta los días."
        }
      },
      "required": [
        "cuentaId",
        "moneda",
        "zonaHoraria"
      ],
      "additionalProperties": false,
      "description": "La cuenta publicitaria fijada a esta conexión. Una conexión lee UNA sola cuenta publicitaria."
    },
    "filas": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "fecha": {
            "type": "string",
            "description": "El día (AAAA-MM-DD) en la zona horaria de 'zonaHoraria', la de la cuenta publicitaria. No es un día de Chile si la cuenta usa otra zona."
          },
          "moneda": {
            "type": "string",
            "description": "La moneda del gasto (ISO 4217, la de la cuenta publicitaria). Nunca sumes gastos de monedas distintas."
          },
          "zonaHoraria": {
            "type": "string",
            "description": "La zona horaria IANA con que Meta cortó este día."
          },
          "gasto": {
            "type": "string",
            "description": "Gasto estimado del día según Meta, decimal en texto en 'moneda' (por ejemplo \"15990\" o \"12.34\"). Es una métrica de entrega publicitaria, NO un comprobante: no es lo facturado ni lo cobrado, y no incluye impuestos."
          },
          "impresiones": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Veces que se mostraron los anuncios ese día."
          },
          "alcance": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Personas únicas (cuentas del Centro de cuentas) que vieron los anuncios ese día, estimado por Meta. NO se suma entre días ni entre campañas: una persona puede repetirse. null si Meta no lo informó; null no es cero."
          },
          "clics": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Clics de todo tipo según Meta. null si no lo informó."
          },
          "clicsEnlace": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Clics en el enlace del anuncio según Meta (inline_link_clicks). Es una métrica de interacción, no una conversión ni una venta. null si no lo informó."
          },
          "diaCerrado": {
            "type": "boolean",
            "description": "false si al leerlo el día todavía no terminaba en la zona de la cuenta: sus cifras pueden crecer."
          },
          "versionApi": {
            "type": "string",
            "description": "La versión de la Marketing API con que se leyó la fila (por ejemplo 'v26.0')."
          },
          "sincronizadoEn": {
            "type": "string",
            "description": "Cuándo guardó Connect esta versión de la fila (ISO 8601, UTC). Meta puede corregir días de hasta 28 días atrás; la relectura reemplaza la fila."
          }
        },
        "required": [
          "fecha",
          "moneda",
          "zonaHoraria",
          "gasto",
          "impresiones",
          "alcance",
          "clics",
          "clicsEnlace",
          "diaCerrado",
          "versionApi",
          "sincronizadoEn"
        ],
        "additionalProperties": false
      },
      "description": "Un día por fila, del más reciente al más antiguo: el total de la cuenta publicitaria ese día."
    },
    "cobertura": {
      "type": "object",
      "properties": {
        "desde": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Primer día (AAAA-MM-DD, zona de la cuenta) desde el que están guardados los dos niveles. null si nunca se sincronizó."
        },
        "hasta": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Último día leído (AAAA-MM-DD). Puede ser hoy: las filas con 'diaCerrado' en false todavía pueden crecer."
        },
        "completa": {
          "type": "boolean",
          "description": "true sólo si el histórico llegó al horizonte del conector (~13 meses), no quedó ningún tramo sin leer y la última sincronización no quedó a medias. En false, una lista vacía NO prueba que no hubo gasto: dilo así."
        },
        "diasSinLeer": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "desde": {
                "type": "string",
                "description": "Primer día del tramo (AAAA-MM-DD)."
              },
              "hasta": {
                "type": "string",
                "description": "Último día del tramo (AAAA-MM-DD)."
              },
              "motivo": {
                "type": "string",
                "description": "Por qué no se leyó: 'demasiados_datos', 'datos_ilegibles' o 'agrupada'."
              }
            },
            "required": [
              "desde",
              "hasta",
              "motivo"
            ],
            "additionalProperties": false
          },
          "description": "Tramos dentro de la cobertura que no se pudieron leer: ahí el gasto es DESCONOCIDO, no cero."
        },
        "pendiente": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "presupuesto",
                "error_transitorio"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "Si la última sincronización terminó con trabajo pendiente: 'presupuesto' (quedó historia por leer) o 'error_transitorio' (Meta limitó o no respondió). null si terminó todo lo que tenía."
        },
        "sincronizadoEn": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Cuándo terminó la última sincronización que guardó datos (ISO 8601, UTC). null si nunca."
        }
      },
      "required": [
        "desde",
        "hasta",
        "completa",
        "diasSinLeer",
        "pendiente",
        "sincronizadoEn"
      ],
      "additionalProperties": false,
      "description": "Qué cubre lo guardado. Dentro de [desde, hasta], un día SIN fila significa que Meta no informó entrega ese día (gasto cero), salvo que caiga en 'diasSinLeer'. Fuera de la cobertura, el gasto es desconocido."
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."
    }
  },
  "required": [
    "cuenta",
    "filas",
    "cobertura",
    "cursor"
  ],
  "additionalProperties": false
}

Errores de esta tool

CódigoHTTPReintentableQué hacer
connection_disabled403noReactívala en /connections o usa otra conexión del mismo sistema.
connection_not_found404noUsa uno de los connectionId que lista el error, o revisa la conexión en /connections. No hace falta reactivar nada.
alcance_not_enabled403noHabilita el alcance en /connections o quítalo del input de la sincronización.

Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.

Próximos pasos

En esta página