Some years ago the protocol used by Google Play Store internally to query and download app was so nice to present you the exact reason why you can not download an app (e.g. the responses on network level contained the data what feature, library or what so ever your device misses).
Unfortunately some years ago (I think it was about 2016) Google changed the protocol and nowadays you only get the response like INCOMPATIBLE
but no further details.
If you manage to get the APK file you can decompile the app and check it's AndroidManifest.xml
for the technical limitations. However using a device that satisfies all the requirements defined in AndroidManifest.xml
does not necessary means that Play Store allows to to download that app.
Play Store only allows you to download an app it the rules defined by the app developer allows to do so. When uploading an app app developer can explicitly allow or deny certain devices, manufacturer, countries, network operators and many more. Most of those restrictions are not mappable to the restrictions in AndroidManifest.xml. Therefore side-loading may work even if Play Store doe snot allow you do download an app.
As far as I know there is no way to view those rules defined by the app developer. Hence the only way to regenerate those rules is using a large number of devices and test on each one if an app is available or not. Based on that results you can reverse-engineer the rules.
There are some services that collect these information using multiple devices in many countries and provide those information. Service are for example: 42matters.com AppBrain.com and many more.
Most of those service are not free or only provide a very limited data set for the free accounts.