MS doesn’t supply the total because the number of rows returned depends on the current user role access rights, hence 8000 might not be the correct number.
Moreover, you need to consider the current view which makes things complicated.
You should condifer impersonating a user that has full organization level read rights to make the call onbehalf of the current user as well.
If you already considered that then the way to get this done is by injecting
js code inside global.js, identifying the contacts page / crmGrid and making the call (unsupported).
or wrap the contacts grid with your own aspx page and load the contacts page in an iframe.
The returned value can be set using DOM manipulation.