I bumped our QPS setting to 10 (the max) but we're still seeing the "User Rate Limit Exceeded" error. This usually happens when a customer has a lot of accounts/profiles since our app is making an API call for each entity of the hierarchy. Your suggestions on caching won't help because this is the initial scenario when the user is trying to connect their GA account for the first time. We have to retrieve all accounts/webproperties/profiles in order to show them so they can select a profile.
Can a new API endpoint be exposed so that this entire hierarchy is returned in one call. Individual calls seem very inefficient and is causing these rate limit errors.
Here's an instance from our logs (as you can see, our app is traversing the hierarchy and making API calls but it eventually fails):
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA accounts. Dur=[153ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA web properties. GAAcct=[616571] Dur=[113ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[616571] GAWebProperty=[UA-616571-34] Dur=[130ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[616571] GAWebProperty=[UA-616571-36] Dur=[161ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[616571] GAWebProperty=[UA-616571-45] Dur=[162ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[616571] GAWebProperty=[UA-616571-48] Dur=[114ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA web properties. GAAcct=[16199019] Dur=[93ms]
Jul 25 07:19:54 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[16199019] GAWebProperty=[UA-16199019-1] Dur=[63ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA web properties. GAAcct=[19533941] Dur=[79ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[19533941] GAWebProperty=[UA-19533941-2] Dur=[107ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA web properties. GAAcct=[19836368] Dur=[97ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[19836368] GAWebProperty=[UA-19836368-1] Dur=[96ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[19836368] GAWebProperty=[UA-19836368-11] Dur=[105ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[19836368] GAWebProperty=[UA-19836368-2] Dur=[103ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[19836368] GAWebProperty=[UA-19836368-3] Dur=[66ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[19836368] GAWebProperty=[UA-19836368-9] Dur=[103ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA web properties. GAAcct=[26551614] Dur=[94ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA profiles. GAAcct=[26551614] GAWebProperty=[UA-26551614-1] Dur=[90ms]
Jul 25 07:19:55 localhost S=[App] Env=[prod] T=[play-thread-2] INFO U=[5008c28ee4b0845436b959cc] ~ Successfully retrieved GA web properties. GAAcct=[26949035] Dur=[88ms]
Jul 25 07:19:56 localhost S=[App] Env=[prod] T=[play-thread-2] ERROR U=[5008c28ee4b0845436b959cc] ~ Error while invoking GA API: Code=[403] Msg=[Quota Error: User Rate Limit Exceeded] Errors=[[{"domain":"global","message":"Quota Error: User Rate Limit Exceeded","reason":"userRateLimitExceeded"}]] Dur=[95ms]