I figured it out by using the listMetadata
method of the Metadata-API Apex wrapper provided by Financeforce.
https://github.com/financialforcedev/apex-mdapi
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
List<MetadataService.ListMetadataQuery> queries = new List<MetadataService.ListMetadataQuery>();
MetadataService.ListMetadataQuery queryCustomField = new MetadataService.ListMetadataQuery();
queryCustomField.type_x = 'CustomField';
queries.add(queryCustomField);
MetadataService.FileProperties[] fileProperties = service.listMetadata(queries, 25);
// Debug results
for(MetadataService.FileProperties fileProperty : fileProperties) {
System.debug(fileProperty.fullName + ': createdby=' + fileProperty.createdByName + ', createddate=' + fileProperty.createdDate + ', manageableState=' + fileProperty.manageableState);
}