En esta sección
Guías / Conversiones para Meta y Google Ads

Conversiones para Meta y Google Ads

Avísale a Meta y a Google Ads qué compras, citas y leads salieron de tus anuncios, pasando por la compuerta que decide qué califica.

Actualizada el Ver .md

Cuando un anuncio trae a alguien que termina comprando, agendando o dejando sus datos, la plataforma de anuncios necesita saberlo para optimizar. Con met.conversions le reportas ese hecho desde tu sistema —el que sabe que el pago entró— y Met lo lleva a Meta (Conversions API) y a Google Ads.

No emites directo. Todo lo que reportas pasa por la compuerta de conversiones, la misma por la que pasan las que proponen el Met y los flujos. La compuerta revisa que haya un anuncio detrás, que el evento esté en la lista del negocio y que el hecho esté respaldado, y te dice qué decidió. Es lo que evita que una integración con un error infle los resultados de las campañas.

Hay dos caminos:

MétodoPara quéSe identifica por
conversions.report()Una conversión de un contacto que llegó por un anuncio de WhatsApp, Messenger o Instagram.contact_id
conversions.reportWeb()El espejo en servidor de un evento del Pixel de tu sitio.event_id del Pixel y las cookies o datos del visitante

Antes de empezar

Una conversión de un contacto

const r = await met.conversions.report({
  contact_id: 4821,
  event_name: 'Purchase',
  value: 250000,
  currency: 'COP',
  bucket: 'pedido-10293',
});

if (r.decision !== 'accepted') console.log('No salió:', r.decision, r.reason);
r = met.conversions.report(
    contact_id=4821,
    event_name="Purchase",
    value=250000,
    currency="COP",
    bucket="pedido-10293",
)
if r["decision"] != "accepted":
    print("No salió:", r["decision"], r.get("reason"))
curl -X POST https://api.met.meteor.com.co/api/v1/conversions \
  -H "Authorization: Bearer $METEOR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contact_id":4821,"event_name":"Purchase","value":250000,"currency":"COP","bucket":"pedido-10293"}'
CampoQué es
contact_idEl contacto del CRM (ver CRM y contactos). Tiene que haber llegado por un anuncio: si no, sale no_attribution.
event_nameUn evento de la lista del negocio. Para WhatsApp, Meta pide nombres de mensajería: Purchase, LeadSubmitted, InitiateCheckout… no los del Pixel web (Lead, Contact).
value, currencyValor y moneda ISO 4217 de tres letras (COP, USD). Una compra los exige.
evidenceEn qué te basas, en una frase («pagó la factura 10293»). Casi todos los eventos lo exigen.
bucketLo que hace única a la conversión: el id del pedido, de la cita. Sin él, la unidad es el contacto: un mismo contacto solo convierte una vez por evento.

Qué exige la compuerta

EventoPara que salga
Purchasevalue mayor que cero y currency válida.
LeadSubmitted, InitiateCheckout, AddToCart, Schedule, ReviewProvided, QualifiedLeadevidence.
Cualquier otro de la listaevidence.

Además, un contacto no acepta más de 10 conversiones en 24 horas (el tope por defecto): es el freno para un flujo que se quedó en bucle.

Una conversión web (Pixel)

Si tu sitio dispara el Pixel en el navegador, repórtalo también desde tu servidor con el mismo event_id: Meta junta los dos y no lo cuenta doble.

// En el navegador: fbq('track', 'Purchase', { value: 250000, currency: 'COP' }, { eventID: 'ord-10293' });
const r = await met.conversions.reportWeb({
  event_name: 'Purchase',
  event_id: 'ord-10293',
  fbp: req.cookies._fbp,
  fbc: req.cookies._fbc,
  email: cliente.email,
  event_source_url: 'https://mitienda.co/gracias',
  client_ip_address: req.ip,
  client_user_agent: req.headers['user-agent'],
  value: 250000,
  currency: 'COP',
});
r = met.conversions.report_web(
    event_name="Purchase",
    event_id="ord-10293",
    fbp=request.cookies.get("_fbp"),
    email=cliente_email,
    client_ip_address=ip_del_visitante,
    client_user_agent=user_agent_del_visitante,
    value=250000,
    currency="COP",
)
curl -X POST https://api.met.meteor.com.co/api/v1/conversions/web \
  -H "Authorization: Bearer $METEOR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_name":"Purchase","event_id":"ord-10293","fbp":"fb.1.1730000000.123","gclid":"Cj0KCQ…","value":250000,"currency":"COP"}'

Qué responde

{ "decision": "discarded", "reason": "uncorroborated" }
decisionQué pasó
acceptedPasó la compuerta y va camino a la plataforma. eventId es la llave con la que viaja.
pending_corroborationQueda esperando una confirmación del CRM. Por la API no pasa —tu sistema es la fuente del hecho—: le pasa a una compra o a un lead calificado que propone el Met o un flujo.
duplicateYa había salido una igual: mismo contacto, evento y bucket, o mismo event_id en la web. No se manda dos veces.
discardedNo sale. reason dice por qué.
reasonQué hacer
integration_inactiveEl negocio no tiene las conversiones encendidas.
no_attributionEl contacto no llegó por un anuncio (o su clic ya no sirve).
not_in_taxonomyevent_name no está en la lista del negocio.
uncorroboratedFaltó evidence, o value y currency en una compra.
rate_limitedEl contacto ya tuvo 10 conversiones aceptadas en 24 horas.
missing_wabaEl contacto es de WhatsApp y falta la cuenta de WhatsApp Business en la configuración.
no_match_keyConversión web sin ninguna forma de reconocer al visitante.

Enterarte de la entrega

accepted dice que salió de la compuerta; la entrega a Meta llega después. Suscríbete a los eventos (scope conversions:read; ver Webhooks):

EventoCuándo
conversion.sentMeta recibió la conversión. Trae event_id, event_name y el fbtrace_id de Meta.
conversion.discardedLa compuerta descartó una conversión, la hayas propuesto tú, el Met o un flujo. Trae reason.

Errores comunes

CódigoQué pasó
400 validation_errorFalta contact_id o event_name (event_id en la web), o un campo pasa su largo máximo.
403 missing_scopeLa key no trae conversions:write.
403 test_mode_restrictedUna key met_test_ no reporta conversiones.