I have been having this issue on my multiple Google accounts (all are consumer accounts, not GSuite). Whenever I try to run any requests with use of UrlFetch function I keep getting the error:
"Service invoked too many times for one day: urlfetch."
I went to myaccount.google.com/permissions?pli=1 and revoked permissions for all scripts that could use the external services. In fact I shut down ALL access for all the scripts. That was last week!
And yet I still don't have the quota replenished/restored.
I read all that Google Developers website has to read about the quota.
Related
I have a very simple question which is if we can avoid the error:
Exception: Service invoked too many times for one day: urlfetch.
by attaching our Google Apps Script to a Google Cloud Project?
The current quota is 20K to 100K a day depending if you have a Free or a Google Workspace account.
At this point I would be OK if I had to pay Google for any executions over the limit. Is it possible?
The steps I've taken so far:
Create GCP project
Link Google Apps Script to GCP project
Set up the OAuth of the GCP project
In case it is possible I think I'm missing an additional step to confirm Google I'd like to pay for any extra processing time that the GAS project requires, can anyone please confirm/point me to an example on how to set it up?
UPDATE:
I'm starting to look if that quota can be modified on this IAM & Admin -> Quotas section
You can take a look on your Quotas page at your GCP project:
Cloud Functions Quotas Page
When you reach a quota limit
When a function consumes all of an allocated resource, the resource becomes unavailable until the quota is refreshed or increased. This may mean that your function and all other functions in the same project will not work until then. A function returns an HTTP 500 error code when one of the resources is over quota and the function cannot execute.
To increase quotas above the defaults listed here, go to the Cloud Functions Quotas Page, select the quotas you want to modify, click EDIT QUOTAS, supply your user information if prompted, and enter the new quota limit for each quota you selected.
i don't know if your project is firebase related, but can take a look at complete article about quotas in this link:
Quotas and limits
I've been developing an apps script project for my company that tracks our time/expenses. I've structured the project like so:
The company has a paid Gsuite account that owns all the spreadsheets hosted on the company's google drive.
Each employee has their own "user" spreadsheet which is shared from the company Gsuite account with the employee's personal gmail account.
Each of the user spreadsheets has a container-bound script that accesses a central library script.
The library script allows us to update the script centrally and the effects are immediate for each user. It also prevents users from seeing the central script and meddling with it.
Each of the user container-bound scripts have installable triggers that are authorized by the company account so that the code being run has full authority to do what it needs to to the spreadsheets.
This setup has been working quite well for us with about 40 users. The drawback to this setup is that since all the script activity is run by the company account via the triggers, the activity of all our users is logged under the single company account and therefore capped by the apps script server quotas for a single user. This hasn't been much of an issue for us yet as long as our script is efficient in how it runs. I have looked into deploying this project as a web-app for our company, but there doesn't seem to be a good way to control/limit user access to the central files. In other words, if this project was running as a web app installed by each user, each user would need to have access to all the central spreadsheets that the project uses behind the scenes. And we don't want that.
SO with that background, here is my question. How do I efficiently track apps script activity to see how close we are to hitting our server quota, and identify which of my functions need to be optimized?
I started doing this by writing a entry into a "activity log" spreadsheet every time the script was called. It tracked what function was called, and who the user was and it had a start time entry and and end time entry so I can see how long unique executions took and which ones failed. This was great because I had a live view into the project activity and could graph it using the spreadsheet graphs tools. Where this began to break down was the fact that every execution of the script required two write-actions: one for initialization and another for completion. Since the script is being executed every time a user made an edit to their spreadsheet, during times of high traffic, the activity log spreadsheet became inaccessible and errors would be thrown all over the place.
So I have since transitioned to tracking activity by connecting each script file to a single Google Cloud Platform (GCP) project and using the Logger API. Writing logs is a lot more efficient than writing an entry to a spreadsheet, so the high traffic errors are all but gone. The problem now is that the GCP log browser isn't as easy to use as a spreadsheet and I can't graph the logs or sum up the activity to see where we stand with our server quota.
I've spent some time now trying to figure out how to automatically export the logs from the GCP so I can process the logs in real-time. I see how to download the logs as csv files, which I can then import into a google spreadsheet and do the calcs and graphing I need, but this is a manual process, and doesn't show live data.
I have also figured out how to stream the logs from GCP by setting up a "sink" that transfers the logs to a "bucket" which can theoretically be read by other services. This got me excited to try out Google Data Studio, which I saw is able to use Google Cloud Storage "buckets" as a data source. Unfortunately though, Google Data Studio can only read csv files in cloud storage, and not the json files that my "sink" is generating in my "bucket" for the logs.
So I've hit a wall. Am I missing something here? I'm just trying to get live data showing current activity on our apps script project so I can identify failed executions, see total processing time, and sort the logs by user or function so I can quickly identify where I need to optimize my script.
You've already referenced using GCP side of your Apps Script.
Have a look at Metric explorer, it lets you see quota usage per resource and auto generates graph for you.
But long term I think re-building your solution may be a better idea. At minimum switching to submitting data via Google Forms will save you on operation.
I have used Apps Script successfully on many occasions, and one of the reasons I like it, especially for personal enhancements or projects related to Google Services is just how seamlessly it integrates auth. However, when trying to integrate the YouTube Data API into one of my Google Sheets' Apps Scripts (I am trying to use the sheet to manage a YouTube playlist), I encountered an error that I have never encountered before.
The code is very simple, I am just trying to get some data from a playlist to return to the logger in the context of my Google Sheets Apps Script. Note that this Apps Script belongs to the same account as the YouTube playlist. The OAuth Client Verification docs specifically state:
Note: Verification is not required for Apps Script projects whose
owner and users belong to the same Google Workspace domain or
customer.
However, when I run my script, the OAuth screen says the app is unverified (this has never happened when I have used any other APIs accessing my own account in Apps Script), and even though I authenticate and it says "Authentication Successful", the script is blocked and it repeatedly (as in forever, in an endless loop) asks me to authenticate again.
Completely at a loss for what is going on. 1.) I shouldn't have to verify this script per the docs I referenced above, and I have never had to before for accessing my own content. 2.) The successful authentication but then failing and repeatedly asking me to authenticate again is driving me mad.
Please advise!
Code is very simple, just trying to get this to return ANYTHING:
const syncVideos = () => {
let response = YouTube.PlaylistItems.list('snippet,contentDetails', {'playlistId': '<REDACTED>'});
Logger.log(response);
}
Answer: This turned out to not be a code or OAuth issue really, but more of an unintuitive procedure when authenticating, i.e. when authenticating with Google to access one of your channel's data through the YouTube Data API, authenticate with your main channel, even if requesting data from other channels connected to your account.
I am trying to evaluate Google Apps Script (GAS) as one of the component in my overall SaaS. But, I see there is quota limits.
https://developers.google.com/apps-script/guides/services/quotas#current_limitations
Can someone explain what "Simultaneous executions" stands for? Is it 30 Simultaneous executions per a script? Or 30 Simultaneous executions per an account?
I think it's per account. This is important when publishing web apps. When set to execute as "Me", you're limited to 30 simultaneous executions of all users, since they all run as "Me". But if set to execute as "user accessing the web app", then each user gets 30 simultaneous executions. Refer #Tanaike's answer
This also makes sense in case of add-on, where a single script project is published to execute as many users. If simultaneous executions of 30 applies per script, then a add-on could only have 30 users, which is certainly not the case.
Related Error messages from Google documentation:
Script invoked too many times per second for this Google user account. This indicates that the script began executing too many times in a short period. It most commonly occurs for custom functions that are called repeatedly in a single spreadsheet. To avoid this error, code your custom functions so that they only need to be called once per range of data, as explained in the guide to custom functions.
There are too many scripts running simultaneously for this Google user account. This indicates that you have too many scripts executing at once, although not necessarily the same script. Like the exception above, this most commonly occurs for custom functions that are called repeatedly in a single spreadsheet.
Notice both error messages end in "for this Google user account"
Comments from Google/Issuetracker links:
https://issuetracker.google.com/issues/168987850#comment6
https://issuetracker.google.com/issues/36764854#comment8
https://issuetracker.google.com/issues/144888046
https://issuetracker.google.com/issues/161091247#comment2
In almost all cases, Google representative says "for account". You may also create a new issue in the issuetracker for explicit documentation or clarification.
I have a script running in google sheets that collects data via a Google Form. On form Submit triggers the script to run and create a PDF file which is then sent out as an attachment to a list of emails on my team which is anywhere from 15-30 people. Several of these are sent out per day as progress reports so the whole team can see daily progress.
The script keeps eventually failing and giving an error saying Gmail service is invoked too many times.
I am using GmailApp.sendEmail.
I have looked extensively through the google documentation on limits and quotas, but I cannot seem to understand why it is invoked too many times. It's my understanding that I should be allotted 1500 recipients per day with my business GSuite account.
This account sends through SMTP and also sends an attachment with every email. The script runs several times per day.