Here is how you can do this: **1. Create reporting query item** Create somewhere an item of template `/sitecore/templates/System/Analytics/ReportQuery` Example fields configuration: Write down an item **ID** somewhere, we will need it later. [![enter image description here][1]][1] **2. Create item based reporting query class** Example code: **Note**: This `Constants.ReportingQueries.ItemVisits` is an item ID of your reporting query item, put this into constant or pull from configuration. <!-- language: lang-c# --> public class ExampleVisitsQuery : ItemBasedReportingQuery { public ExampleVisitsQuery(ReportDataProviderBase reportProvider = null) : base(Constants.ReportingQueries.ItemVisits, reportProvider) { } public ID ItemId { get; set; } public long Visits { get; protected set; } public override void Execute() { var parameters = new Dictionary<string, object> { {"@ItemId", ItemId} }; var dt = this.ExecuteQuery(parameters); if (dt != null && dt.Rows.Count > 0) { var result = dt.Rows[0]["Visits"]; if (result != null && result != DBNull.Value) Visits = (long)dt.Rows[0]["Visits"]; } } } **3. Get your data** This is where we get the data. <!-- language: lang-c# --> var query = new ExampleVisitsQuery (this.ReportDataProvider) { ItemId = id }; query.Execute(); long itemViews = query.Visits; **Note:** `this.ReportDataProvider` is an instance of `ReportDataProviderBase` type. In this can be null As a output you get number of views. **4. Sort your data** Once you get Visits for all items you can easily sort them. Assuming you have got a list of items ids as an input here is what you can do: <!-- language: lang-c# --> if (entryIds.Any()) { var views = new Dictionary<ID, long>(); foreach (var id in entryIds) { var query = new ExampleVisitsQuery(this.ReportDataProvider) { ItemId = id }; query.Execute(); var itemViews = query.Visits; if (itemViews > 0) views.Add(id, itemViews); } var ids = views.OrderByDescending(x => x.Value).Take(maxCount).Select(x => x.Key).ToArray(); } [1]: https://i.sstatic.net/pHXm7.png