Primeros pasos
BetterMeter rastrea cuatro tipos de fuentes. Cada una utiliza una integración ligera que envía eventos al mismo pipeline respetuoso de la privacidad.
Todas las fuentes pasan por el mismo pipeline: evento -> procesamiento (análisis de referente, detección de bots, geolocalización, hash de privacidad) -> base de datos. Puede ver todo en el dashboard, CLI o mediante herramientas MCP.
Espacio de filtros analíticos
Los hubs analíticos principales comparten un espacio de filtros adaptable. Los periodos, pestañas, búsquedas y facetas contextuales viven en la URL para que las investigaciones sean persistentes y compartibles. El gráfico de resumen sigue el periodo seleccionado e incluye las fechas sin actividad.
- Tráfico: busque páginas, fuentes y campañas; segmente por interacción, atribución de IA, canal y volumen.
- Audiencia: encuentre visitantes, sesiones y acciones; segmente por tipo, intención, país y volumen de eventos.
- Agentes: inspeccione rastreadores, CLI, MCP y API por categoría y estado de rendimiento.
- Visibilidad: filtre plataformas de IA, rankings, menciones y dominios de referencia por señal y autoridad.
Rastreo web
Agregue una sola etiqueta de script a su sitio. Sin cookies, sin configuración CNAME, sin instalación compleja. ~4 KB comprimido.
<script defer data-site="example.com" src="https://bettermeter.com/api/script"></script>Opcional: agregue un pixel de rastreo sin JS antes de la etiqueta de cierre </body> para detectar bots y rastreadores que no ejecutan JavaScript:
<img src="https://bettermeter.com/api/pixel?s=example.com" alt="" style="position:absolute;width:0;height:0;overflow:hidden" />El script de rastreo captura automáticamente las vistas de página, la navegación SPA (History API) y los retornos de pestañas. Para eventos personalizados e identificación de usuarios:
// Track custom events
window.bettermeter.track("signup", { plan: "pro" });
// Identify users (optional)
window.bettermeter.identify("account_123");
// Clear the durable identity on sign-out
window.bettermeter.reset();identify() guarda el ID opaco de este sitio en el almacenamiento local y lo adjunta a visitas posteriores; llama a reset() al cerrar sesión. No envíes correos ni otros datos personales directos.
Atributos
data-siterequeridodata-apidata-no-heartbeatdata-fingerprintdata-behaviordata-attributiondata-attribution-fieldsAtribución de clics publicitarios
Un clic publicitario llega con un ID emitido por la plataforma en la URL — gclid de Google, fbclid de Meta. Aparece en una sola vista de página, la de aterrizaje, y es el único token que esas plataformas aceptan cuando más tarde les informas de que el clic convirtió. BetterMeter guarda el más reciente durante 90 días, la misma vida útil que usan las propias cookies de Google y Meta, y lo escribe en el visitante como propiedades bm_*.
<script defer data-site="example.com" data-attribution="true" data-attribution-fields="true" src="https://bettermeter.com/api/script"></script>Con data-attribution-fields se rellena cualquier campo oculto vacío cuyo nombre coincida. Tanto gclid como bm_gclid funcionan, así que un campo de CRM existente no necesita renombrarse. Los campos visibles y los que ya tienen un valor nunca se tocan.
<input type="hidden" name="gclid">
<input type="hidden" name="fbc">
<input type="hidden" name="utm_source">
<input type="hidden" name="utm_campaign">Tres métodos lo controlan manualmente — útil detrás de un banner de consentimiento, o para un formulario inyectado después de cargar la página.
// Capture after a consent banner is accepted
window.bettermeter.captureAttribution();
// Read the parked click, e.g. to POST it yourself
window.bettermeter.getAttribution();
// { bm_gclid: "Cj0KCQ...", bm_utm_source: "google",
// bm_landing_page: "/pricing", bm_first_seen: "2026-08-15T11:34:26.422Z", ... }
// Fill a form injected after page load (HubSpot legacy onFormReady)
hbspt.forms.create({
formId: "...",
onFormReady: (form) => window.bettermeter.fillAttributionFields(form),
});Se suprime por completo bajo Do Not Track y Global Privacy Control, y se borra con reset(). Un clic posterior reemplaza por completo al guardado en lugar de fusionarse, para que una conversión nunca se atribuya a dos plataformas. Un valor de más de 255 caracteres se descarta en lugar de truncarse, porque la plataforma rechaza un ID de clic parcial. Los formularios integrados más recientes de HubSpot se muestran dentro de un iframe y no se pueden rellenar desde la página — usa allí el prerrelleno por parámetros de URL de HubSpot. En iOS, Google envía `gbraid` o `wbraid` en lugar de `gclid`; ambos se capturan, pero solo la API de Google Ads los acepta al subir una conversión — la importación manual de la interfaz los rechaza como GCLID inválidos.
Conversiones de CRM (HubSpot)
Conecta HubSpot y BetterMeter recupera los registros en los que acabaron tus IDs de clic. Los dos sistemas se unen por el ID de clic publicitario, nunca por un correo electrónico — el rastreador escribe el token en tus campos ocultos de formulario, así que ambos lados ya tienen el mismo valor y ningún dato personal tiene que cruzar entre ellos. La conexión también crea las propiedades de contacto bm_*, lo que no es una comodidad: HubSpot descarta en silencio un campo de formulario cuya propiedad no existe, así que sin ellas los campos ocultos se pierden al enviar, sin ningún error en ninguna parte.
Conecta un portal en Configuración → Registros de clientes: crea una aplicación privada en HubSpot, concédele los permisos de lectura y escritura de contactos y pega su token de acceso. BetterMeter lo verifica y crea las propiedades de contacto bm_* por ti.
# Or connect from a script (creates the bm_* contact properties for you)
curl -X POST https://bettermeter.com/api/integrations/crm \
-H "Authorization: Bearer bm_..." -H "Content-Type: application/json" \
-d '{"siteId":"<site-id>","provider":"hubspot","accessToken":"pat-na1-..."}'
# Then pull conversions
bettermeter crm -s <site-id>
bettermeter crm:sync -c <connection-id>
bettermeter conversions --won
# The ad behind a visit. --utm-content resolves one exact creative;
# without it the answer is campaign-level and says so.
bettermeter ad-creative -s <site-id> --campaign "Summer Sale"
bettermeter ad-creative -s <site-id> --utm-content 120001234567890La aplicación privada necesita crm.objects.contacts.read, crm.objects.contacts.write y crm.schemas.contacts.write. Las sincronizaciones son incrementales según la fecha de última modificación de HubSpot; HubSpot se niega a paginar más allá de 10.000 resultados para una misma consulta, así que un portal grande se lee en ventanas móviles y una ejecución que se detiene antes devuelve truncated: true en lugar de parecer completa.
Detección de bots del lado del servidor
La mayoría de los bots (Googlebot, GPTBot, ClaudeBot, etc.) no ejecutan JavaScript, por lo que el script de rastreo nunca se activa para ellos. Para detectar tráfico de bots y rastreadores, agregue una línea a su middleware de Next.js:
import { reportBotVisit } from "@bettermeter/node/middleware";
export function middleware(request) {
reportBotVisit(request, "example.com", { apiKey: "bm_..." });
// ... rest of your middleware
}Instalar el SDK:
npm install @bettermeter/nodeCompatible con edge, no bloqueante, sin impacto en la latencia. Detecta más de 25 bots conocidos, incluyendo rastreadores de IA, motores de búsqueda y servicios de monitoreo. Las visitas de bots aparecen automáticamente en su dashboard de Crawlers.