Auditoría de licencias y uso de tu Salesforce en 30 minutos: 8 consultas SOQL

Ocho consultas SOQL para saber cuántas licencias usas de verdad, qué objetos, Flows y código siguen vivos y qué pagas sin usar. Listas para copiar.

Por Toni Pérez, cofundador de 2Q Technologies. Salesforce Certified Platform Developer I y Advanced Administrator.Publicado el 3 de noviembre de 20263 min de lectura

En corto

Con ocho consultas sabes en media hora cuántos usuarios entran de verdad, cuántas licencias tienes asignadas y libres, qué paquetes de AppExchange pagas y cuántos objetos custom, Flows, clases Apex y triggers hay en tu org. Es la base para negociar una renovación o para dimensionar una migración.

Antes de empezar

Necesitas un usuario que pueda ver la configuración. Lanza las consultas desde el Developer Console, en el Query Editor, o desde Workbench. Las marcadas como Tooling API requieren activar esa opción. Ninguna cambia nada: todas son de lectura.

1. Usuarios activos que no entran

SOQL

SELECT Name, Profile.Name, LastLoginDate
FROM User
WHERE IsActive = true
AND (LastLoginDate < LAST_N_DAYS:90 OR LastLoginDate = null)

Cada fila es una licencia que pagas y que nadie usa desde hace tres meses.

2. Licencias contratadas y usadas

SOQL

SELECT Name, TotalLicenses, UsedLicenses
FROM UserLicense
WHERE TotalLicenses > 0

Compara la licencia Salesforce con Salesforce Platform. Mucha gente que solo consulta podría ir con una licencia más barata.

3. Licencias de permission sets

SOQL

SELECT MasterLabel, TotalLicenses, UsedLicenses
FROM PermissionSetLicense
WHERE TotalLicenses > 0

Aquí aparecen los add-ons que se asignan por usuario, como CPQ o funciones de IA.

4. Paquetes de AppExchange

SOQL

SELECT NamespacePrefix, Status, AllowedLicenses, UsedLicenses, ExpirationDate
FROM PackageLicense

Cada paquete es otra factura, otro proveedor y otra dependencia en una migración.

5. Objetos custom

Tooling API

SELECT DeveloperName, NamespacePrefix, CreatedDate
FROM CustomObject
WHERE NamespacePrefix = null

Después, cuenta los registros de los que importen con SELECT COUNT() FROM Objeto__c. Un objeto sin registros nuevos en un año es candidato a quedarse fuera.

6. Flows y procesos activos

SOQL

SELECT ApiName, ProcessType, LastModifiedDate
FROM FlowDefinitionView
WHERE IsActive = true

Los que tienen ProcessType = 'Workflow' son procesos de Process Builder, sin soporte desde finales de 2025.

7. Código Apex propio

Tooling API

SELECT Name, LengthWithoutComments, LastModifiedDate
FROM ApexClass
WHERE NamespacePrefix = null

Las clases largas que nadie toca desde hace años son deuda. Las que llevan la lógica del negocio son lo primero que hay que entender, te quedes o te vayas.

8. Triggers

Tooling API

SELECT Name, TableEnumOrId, Status
FROM ApexTrigger
WHERE NamespacePrefix = null

Varios triggers sobre el mismo objeto, más Flows y reglas, es la receta de esos errores que nadie sabe explicar.

Qué hacer con los resultados

  • Ajusta las licencias antes de la renovación.
  • Haz la lista de lo que pagas y no usas: paquetes, add-ons y permission set licenses.
  • Marca qué objetos, Flows y código siguen vivos. Es el alcance real de cualquier cambio.

Si prefieres no hacerlo tú, en la primera semana de un proyecto hacemos este mismo diagnóstico con un usuario de solo lectura. No tocamos nada de tu org.

Preguntas frecuentes

¿Necesito ser administrador?

Necesitas el permiso View Setup and Configuration y, para la Tooling API, acceso a la API. Normalmente, un admin.

¿Estas consultas cambian algo en mi org?

No. Son consultas de lectura.

¿Funcionan en Pro Suite?

Depende del acceso a API de tu edición. En Enterprise, Unlimited, Core o Advanced, sí.

Fuentes: referencia de SOQL (Salesforce Developers), guía de la Tooling API (Salesforce Developers).