To get GA data click by click you can make queries in a way that gives you the ability to join data together.
First you need to prepare the data in GA.
So with each hit you send, add some hashed value or the clientId + some timestamp into a custom dimension.
This will give you the ability to join each query result.
E.g. (this is how we do it at Scitylana)
This script below hooks into GA's tracking script and makes sure each hit contains a key for later stitching of query results
<script>
var BindingsDimensionIndex = CUSTOM DIMENSION INDEX HERE;
var Version = 1;
function overrideBuildTask() {
var c = window[window['GoogleAnalyticsObject'] || 'ga'];
var d = c.getAll();
if (console) { console.log('Found ' + d.length + ' ga trackers') }
for (var i = 0; i < d.length; i++) {
var e = d[i]; var f = e.get('name');
if (console) { console.log(f + ' modified') }
var g = e.get('buildHitTask');
if (!e.buildHitTaskIsModified) {
e.set('buildHitTask', function(a) {
window['_sc_order'] = typeof window['_sc_order'] == 'undefined' ? 0 : window['_sc_order'] + 1;
var b = ['sl=' + Version, 'u=' + e.get('clientId'), 't=' + (new Date().getTime() + window['_sc_order'])].join('&');
a.set('dimension' + BindingsDimensionIndex, b);
g(a);
if (console) {
console.log(f + '.' + a.get('hitType') + '.set.customDimension' + BindingsDimensionIndex + ' = ' + b)
}
});
e.buildHitTaskIsModified = true
}
}
}
window.ga = window.ga || function() {
(ga.q = ga.q || []).push(arguments);
if (arguments[0] === 'create') { ga(overrideBuildTask) }
};
ga.l = +new Date();
</script>
Of course now you need to make some script that joins all the results you have taken out of GA.