Analysis Automation

Google Apps Script vs Power Automate: limits and prices compared

Both are free with the suite. Apps Script needs code and stops each run at 6 minutes; Microsoft 365 flows get 6,000 actions a day and standard connectors only.

The short read

A daily digest would use 8 of Apps Script's 1,500 email recipients and 5 of Power Automate's 6,000 actions.

  • Both come free with the suite: Apps Script with any Gmail account, Power Automate's standard connectors with Microsoft 365 plans.
  • Power Automate's Google Sheets connector has no trigger, and Apps Script reaches Microsoft only through Graph code and an app registration.

What you can do with this

Write down what starts the job before you pick. If it starts in Google, use Apps Script; if in Outlook, use Power Automate. Either way, name a second owner.

A hand on a black computer mouse beside a keyboard on a desk, with the background out of focus.
Photo: www.Pixel.la Free Stock Photos, CC0
In this article
  1. Both cost nothing extra until a premium connector appears
  2. The limits side by side, read October 20, 2026
  3. Power Automate reaches Google through two standard connectors
  4. Apps Script reaches Microsoft only through code
  5. One task counted both ways: a daily digest of new rows
  6. The downsides, stated plainly
  7. What this means for you
  8. How we made this

An office that pays for both Google Workspace and Microsoft 365 already owns two automation tools at no extra cost. Google says Apps Script needs nothing but a Gmail account, and Microsoft says a flow without premium connectors runs on a Microsoft 365 license. Each can reach the other suite. Their limits differ, and the limits decide the fit.

We read both vendors’ quota and licensing pages on October 20, 2026, along with the connector references, and set the numbers side by side. Then we counted what one ordinary job, a daily email digest of new spreadsheet rows, uses in each tool. The digest costs nothing in either. What separates them is what can start a job and who can fix it when it breaks.

Both cost nothing extra until a premium connector appears

Apps Script runs on Google’s servers, and Google lists no price for it. Its FAQ asks “Do I need to pay for Google Workspace to use Apps Script?” and answers: “No. All you need is a Gmail account to begin building with Apps Script.” A paid Workspace account buys higher quotas, not access.

Power Automate is free in a narrower sense. Plans such as Office 365 Business Basic, Business Standard, Business Premium, E3 and E5 include limited use rights that Microsoft describes as meant “for personal productivity scenarios”. Those rights cover cloud flows with standard connectors only; premium and custom connectors are “Not included”.

The step up is Power Automate Premium at $15.00 per user a month, paid yearly. A Process license costs $150.00 per bot a month (also paid yearly) and gives one flow its own capacity. For a scheduled or automated flow that uses a premium connector, Microsoft says “only the owner needs to have a Premium license”, so one $15 license can cover a flow the whole office relies on.

The limits side by side, read October 20, 2026

Every cell below comes from a vendor page read that day, listed under Sources: mainly Google’s quotas page (updated September 3, 2026), its trigger guide, and Microsoft’s limits page, its license types page and the licensing FAQ.

Apps Script, Gmail account Apps Script, Workspace account Power Automate, Microsoft 365 rights Power Automate Premium
Cost on top of the suite $0 $0 $0 $15 per user a month, paid yearly
Longest single run 6 minutes 6 minutes 30 days 30 days
Daily budget 90 minutes of trigger runtime 6 hours of trigger runtime 6,000 actions per user 40,000 actions per user
Email from the tool 100 recipients a day 1,500 recipients a day Each send counts as 1 action Each send counts as 1 action
Calls to other web services 20,000 URL Fetch calls a day 100,000 URL Fetch calls a day Standard connectors only Premium and custom connectors too
Most frequent schedule Every minute Every minute Every 60 seconds Every 60 seconds
How many per person 20 triggers per script 20 triggers per script 600 flows owned 600 flows owned
Idle flows No rule listed No rule listed May be turned off after 90 days without a trigger Exempt
At the limit Script throws an error and stops Script throws an error and stops Runs slow down Runs slow down

Google’s quotas are per user and “reset 24 hours after the first request”. Google also says they can change “at any time, without notice”.

Microsoft’s action numbers need one footnote. Its limits page lists higher figures for now, 10,000 a day for Microsoft 365 users and 200,000 for Premium. It says they “aren’t guarantees” and sit above the documented limits during a “licensing transition period”. The FAQ adds that during that period per-user limits “aren’t the ones being applied yet”, and each flow gets one shared limit instead.

We would plan on 6,000 and 40,000, the figures Microsoft lists as the license limits, and treat anything above them as temporary.

Power Automate reaches Google through two standard connectors

Microsoft’s Gmail and Google Sheets connectors are both classed Standard. So a Microsoft 365 license covers them, with no Premium needed.

The Google Sheets connector has no trigger. Its reference lists six actions (Get rows, Get row, Insert row, Update row, Delete Row, Get sheets) and nothing that fires when a row is added. So a new row can’t start a flow; the flow has to check the sheet on a schedule. Get rows takes no filter, starts at the first entry by default, and returns 256 entries unless you raise Top Count. Spreadsheets in shared drives “cannot be selected”, so you paste the file’s ID by hand. Each connection gets 100 calls per 5 minutes.

The Gmail connector treats consumer accounts differently. An @gmail.com account “can only connect to a limited set of services”. Google Sheets, Office 365, OneDrive, SharePoint and Teams are on the approved list, and a flow that uses anything else “will end up being saved in a disabled state”. Workspace accounts are not affected.

The Gmail connector also meters work. Each connection gets 90,000 work units a day, and Send email (V2) costs 100, which works out to at most 900 sent emails a day per connection. The new-email trigger “may skip emails” above 300 in 30 seconds, and on Workspace accounts it “may intermittently skip emails with attachments”. We would not build an invoice inbox on that trigger.

Apps Script reaches Microsoft only through code

Apps Script’s built-in libraries cover Google’s own apps, such as Gmail and Drive. To act inside Microsoft 365, a script calls Microsoft Graph with UrlFetchApp. Google’s guide says Apps Script “doesn’t provide built-in support” for OAuth, the token-based sign-in that Graph requires, and points to open-source libraries.

The setup takes four pieces:

  1. An app registration in Microsoft Entra, which gives the script its client ID.
  2. The OAuth2 for Apps Script library, with its callback address https://script.google.com/macros/d/{SCRIPT ID}/usercallback registered in Entra.
  3. The Mail.Send permission and the offline_access scope, without which no refresh token comes back.
  4. A call to POST /me/sendMail for each email.

Every part of that has an edge. The library’s samples folder covers dozens of services, Xero and Zoom among them, but has no Microsoft file. Microsoft’s own protocol page says hand-built requests are something “we do not recommend” and points to its own libraries. Refresh tokens have no fixed lifetime but can “expire, are revoked, or lack sufficient privileges”, so the script needs a way to ask someone to sign in again.

Consent may not be the blocker. By default, Microsoft says, “a user can consent to allow an app to access their mailbox”. An admin can turn that off, and then the script waits until an admin approves the app.

Often a script needs none of this. If the goal is only an email in an Outlook inbox, MailApp sends ordinary email, and an Outlook address is just another recipient. Graph earns its setup when the message must come from the Microsoft 365 mailbox, which Graph saves “in the Sent Items folder”.

One task counted both ways: a daily digest of new rows

A hypothetical eight-person office logs every customer inquiry as a row in a Google Sheet, with a date column. Every weekday morning it wants one email to all eight Outlook inboxes listing yesterday’s rows.

In Apps Script, a script bound to the sheet gets one time-driven trigger at 8 AM. Going by Google’s own example of a 9 AM trigger, it fires at a time Google picks between 8 and 9, then keeps that time. Each run reads the rows, keeps yesterday’s and sends one MailApp email with 8 recipients.

Resource Used per run Limit (Workspace / Gmail account)
Triggers 1 in total 20 per user per script
Email recipients 8 1,500 / 100 a day
Recipients on one message 8 50
URL Fetch calls 0 (about 2 if sent through Graph) 100,000 / 20,000 a day
Runtime One read and one send; we did not time it 6 minutes a run, 6 hours / 90 minutes a day
Extra license None

In Power Automate, one Microsoft 365 user owns a scheduled cloud flow with five steps: Recurrence (weekdays at 8:00), Google Sheets Get rows, Filter array (date equals yesterday), Create HTML table, and Office 365 Outlook Send an email (V2) to the 8 addresses. Microsoft counts “every trigger and action execution” as one action.

Resource Used per run Limit (Microsoft 365 rights)
Actions 5 (1 trigger and 4 actions) 6,000 a day per user
Share of the daily limit 0.08%
Actions in a month of 22 weekdays 110
Google Sheets calls 1 100 per 5 minutes per connection
Connectors Google Sheets, Office 365 Outlook: both Standard Standard only
Extra license None

Neither tool comes near a limit: 8 of 1,500 recipients (or 100 on a Gmail account), 5 of 6,000 actions.

The flow’s one real trap is Get rows. It starts at the first entry and stops at 256 by default, so once new rows at the bottom pass row 256, they fall outside the read. The digest then goes out quietly short until someone raises Top Count. Build the flow with an Apply to each loop over the rows instead of Filter array, and Microsoft counts each action inside the loop once per row.

The downsides, stated plainly

Apps Script is code, and it belongs to one person. Someone has to read JavaScript to change the digest. Google says installable triggers “always run under the account of the person who created them”, and that one account “can’t see triggers installed from a second account”. When it fails, Apps Script emails a failure summary instead of showing an error on screen. A run also stops at 6 minutes, so a long job has to be split into batches.

Power Automate charges for reach and slows under load. Premium connectors are off limits on Microsoft 365 rights, and for a custom connector Microsoft says you “must have a premium or trial license”. When a flow runs too many actions, runs are delayed, and a flow that is “consistently throttled” for 14 days is turned off. On Microsoft 365 rights a failed action gets “up to two retries”, against 12 on Premium. The Outlook connector warns that a retried send can produce duplicate emails.

Both tie the job to an owner. If a flow’s owner leaves, the flow “reverts to the Low performance profile”. For a flow outside a solution, the original creator’s limits “can’t be changed”; if the creator leaves, co-owners can export it and import it under a new owner. A flow that fires quarterly also risks the 90-day idle rule on Microsoft 365 rights. A daily digest does not.

What this means for you

The quotas will rarely decide this. Two questions will: where does the event that starts the job happen, and who on staff will fix it.

  • The job starts in Google (a form response, a sheet edit): use Apps Script. It has an installable form submit trigger, and Power Automate’s Sheets connector has no trigger at all.
  • The job starts in Outlook, Teams or SharePoint and writes to a Google Sheet: use Power Automate with the standard Sheets connector, at $0 on Microsoft 365.
  • The job runs on a schedule and nobody writes JavaScript: use Power Automate, and add a second person as co-owner on day one.
  • Someone does write JavaScript: Apps Script skips Microsoft’s action counting and the idle rule. Send plain mail with MailApp unless the message must sit in an Outlook Sent Items folder.
  • Before buying Premium, check each connector’s class on its reference page. For a scheduled flow, only the owner needs the $15 license, which is $180 a year.

If the job needs apps neither suite connects well, our Zapier, Make and n8n price comparison prices a third route. For Apps Script quotas in practice, see Gmail to Google Sheets, and for a flow on the free Microsoft license, saving Outlook attachments. Our checks for scheduled scripts make a silent failure speak up. More is under automation.

Write your job as one line before you pick: what starts it, which suite it reads and which it writes. Give it to the tool that owns the starting event, and name a second person who can open it.

How we made this

We read Google’s and Microsoft’s quota, licensing and connector pages on October 20, 2026, and built both tables from them. The digest is a hypothetical task: we counted its quota use from the documentation and did not build or run either version, because we have no Workspace or Microsoft 365 tenant for testing.

Sources