Here is my take on kevin's sort using [Soapi.JS][1] - get a list of sites from stackauth /sites - get the community user from each site to get creation date - attach each meta to it's parent - sort by date - group by 'state' or type. - render grouped or as a single list. [**Live Demo HERE**][2] --- ![alt text][3] --- /* This is the money shot */ // get a list of sites from stackauth Soapi.RouteFactory("", apiKey).Sites() .getResponse(function(sitesResponse) { // count down so we know when we are done var count = sitesResponse.items.length; // determine the increment of the progress bar for each operation progressStep = document.getElementById("progressOuter").clientWidth / count; function checkCount() { stepProgress(); if (--count == 0) { // all sites reported in // perform meta assocations while (sitesResponse.items.length > 0) { // take the site of the bottom var item = sitesResponse.items.shift(); // if it is not a meta site, add it to the site list // cannot depend on linked_meta right not if (item.api_endpoint.toLowerCase().indexOf(".meta.") == -1) { sites.push(item); } else { // check the site list to see if the parent has been seen yet var parent = sites.tryGetParentByEndpoint(item.api_endpoint); if (parent) { // attach the meta to the parent parent.linked_meta = item; } else { // parent not seen yet, stick it back on top sitesResponse.items.push(item); }; }; }; // do sorting and arrangement // now we have a list of sites similar to this // stackoverflow.com // meta.stackoverflow.com // stackapps.com // gaming.stackexchange.com // meta.gaming.stackexchange.com // lets sort by date sites = sites.sort(function(a, b) { return a.creation_date - b.creation_date; }); // and segregate the sites by state as we sites.normal = []; sites.open_beta = []; sites.closed_beta = []; sites.linked_meta = []; // empty the array var tmp = sites.splice(0, sites.length); // and push them in order of appearance to maintain date sort // into both the parent array and the group arrays while (tmp.length > 0) { var site = tmp.shift(); sites.push(site); sites[site.state].push(site); if (site.linked_meta) { sites.linked_meta.push(site.linked_meta); }; }; progressComplete(); // return results callback(sites); }; }; // get community user from each site to get creation date for (var i = 0; i < sitesResponse.items.length; i++) { var site = sitesResponse.items[i]; Soapi.RouteFactory(site.api_endpoint, apiKey) .UsersById(-1).getResponse(function(usersResponse, context) { // add the date to the site so we can sort context.creation_date = usersResponse.items[0].creation_date; checkCount(); }, function(error, context) { // probably timed out. set now as creation date // attach the error context.creation_date = new Date(); context.error = error.message; // still need to decrement count so we don't get stuck checkCount(); }, 10000, site); // we want to give a reasonable timeout value because // we are doing a bunch of stuff here. it should not // take this long, just being safe }; }); [1]: http://stackapps.com/questions/494/soapi-js-v1-0-fluent-javascript-wrapper-for-the-stackoverflow-api [2]: http://soapi.info/code/js/stable/siteordering.htm [3]: http://img121.imageshack.us/img121/451/pantheon.png