Soql query of quering the Apex Class.

SOQL Query for Querying Apex Classes
In Salesforce, Apex Classes are stored as metadata, and Salesforce exposes them through the ApexClass object. Using SOQL, you can query information about Apex Classes, such as their name, status, API version, and even the full source code body (only in certain tools).
This guide covers:
✔ Basic SOQL queries
✔ Advanced queries (search text inside class body)
✔ Queries for status, API version, namespace
✔ Test coverage queries
✔ Permission queries (profile & permission set access)
✔ Apex examples using these SOQL queries
✅ 1. Basic SOQL Query to Retrieve Apex Classes
To fetch all Apex classes:
SELECT Id, Name
FROM ApexClass
JavaScriptThis retrieves:
- Id — unique identifier
- Name — class name
Useful when listing classes or identifying them for metadata operations.
✅ 2. Query Apex Class With API Version, Status, Namespace
SELECT Id, Name, ApiVersion, Status, NamespacePrefix
FROM ApexClass
JavaScriptFields explanation:
- ApiVersion → API version of the class
- Status → Active, Deleted, InDevelopment
- NamespacePrefix → For managed packages
This is useful when cleaning old code, analyzing package classes, or reviewing API usage.
✅ 3. Query the Full Apex Class Code (Body)
⚠ Allowed ONLY in:
- Developer Console
- Workbench
- VS Code using Salesforce Extensions
- API tools
❌ Not allowed inside Apex code (for security reasons).
SELECT Id, Name, Body
FROM ApexClass
WHERE Name = 'YourClassName'
JavaScriptThis returns the entire Apex class code as text.
✅ 4. Find Apex Classes Containing Specific Text
Example: Find all classes using SOQL, Account, HttpCallout, etc.
SELECT Id, Name
FROM ApexClass
WHERE Body LIKE '%Account%'
JavaScriptThis is extremely useful when:
- refactoring code
- finding classes using deprecated fields
- tracking business logic
- searching for hard-coded values
✅ 5. Query Apex Classes by Status
SELECT Id, Name, Status
FROM ApexClass
WHERE Status = 'Active'
JavaScriptPossible status values:
- Active
- InDevelopment
- Deleted
Useful for identifying inactive or removed classes.
✅ 6. Query Apex Classes by API Version
SELECT Id, Name, ApiVersion
FROM ApexClass
WHERE ApiVersion < 55.0
JavaScriptUse case:
- Find old classes that need API version updates
- Ensure Lightning-compatible API versions
- Prepare for Salesforce releases
✅ 7. Query Apex Class Test Coverage
Test coverage is stored in the object ApexCodeCoverageAggregate.
SELECT ApexClassOrTriggerId, NumLinesCovered, NumLinesUncovered
FROM ApexCodeCoverageAggregate
JavaScriptTo join with the class name:
SELECT ApexClassOrTrigger.Name,
NumLinesCovered,
NumLinesUncovered
FROM ApexCodeCoverageAggregate
JavaScriptYou can calculate coverage percentage:
Coverage % = (NumLinesCovered / (NumLinesCovered + NumLinesUncovered)) * 100
JavaScriptUse case:
- CI/CD validation
- Deployment readiness
- Coverage reports
✅ 8. Query Apex Class Permissions (Who Has Access)
To check which Profiles or Permission Sets have been granted access to the class:
SELECT Id, Parent.Name, Parent.Profile.Name, SetupEntityId
FROM SetupEntityAccess
WHERE SetupEntityType = 'ApexClass'
JavaScriptTo join with ApexClass:
SELECT SetupEntityId,
SetupEntity.Name,
Parent.Profile.Name
FROM SetupEntityAccess
WHERE SetupEntityType = 'ApexClass'
JavaScriptUse case:
- Fix “No access to Apex Class” errors
- Validate security for managed classes
- Ensure correct access for integrations
✅ 9. Apex Code Example: Querying Apex Classes Using SOQL
Although you cannot query Body in Apex, you can query basic metadata.
public class ApexClassInfoService {
public static void printClassDetails() {
List<ApexClass> classList = [
SELECT Id, Name, ApiVersion, Status
FROM ApexClass
WHERE Name LIKE 'MyClass%'
];
for (ApexClass ac : classList) {
System.debug('Class Name: ' + ac.Name);
System.debug('API Version: ' + ac.ApiVersion);
System.debug('Status: ' + ac.Status);
}
}
}
JavaScript✅ 10. Apex Code Example: Create a Dynamic Class Search Tool
public class ApexClassSearch {
public static List<ApexClass> searchClasses(String searchKey) {
return [
SELECT Id, Name, ApiVersion, Status
FROM ApexClass
WHERE Name LIKE :('%' + searchKey + '%')
];
}
}
JavaScriptCall it:
ApexClassSearch.searchClasses('Trigger');
JavaScript📝 Summary Note (Copy-Friendly)
SOQL supports querying Apex Class metadata through the ApexClass object. This object contains details such as the class name, Id, API version, namespace, status, and (when queried using supported tools) the actual class code. With SOQL, developers can inspect class properties, search for code patterns, identify classes by API version, analyze outdated code, and troubleshoot Apex access issues.
Salesforce stores Apex test coverage in ApexCodeCoverageAggregate, which can be queried to determine lines covered and uncovered. This is essential for deployment validation and code quality analysis. Additionally, class access permissions can be queried through SetupEntityAccess, allowing developers to check which profiles or permission sets grant access to a specific Apex class—useful for resolving “No access to Apex Class” errors.
While the Body field can only be queried using tools like Developer Console, VS Code, or Workbench (and not Apex code), the ApexClass object still provides valuable insights. Combining these SOQL queries enables deep analysis, refactoring, debugging, and optimizing Salesforce orgs at scale.
Related Posts

How to Automatically create a follow-up Task when a Lead is converted

How You need to update a related child record whenever a parent record’s status changes, but only if the status is “Closed Won.” How would you design this in Apex?
