Use case
Drive any Apps Script exec URL on a real cron, from one dashboard.
Apps Script is excellent at Google Workspace automation. Its time-driven triggers are not excellent at scheduling dozens of scripts for your team on a real calendar with proper alerting. Crontap takes the clock out of Apps Script and gives you one dashboard for every script.
Free plan · no credit card required
The problem
Why this is painful without the right tool
- Time-driven triggers are per-script and per-Google-account, so a script owned by a former employee silently stops firing when their account leaves the org.
- Trigger granularity is coarse: every 5, 10 or 15 minutes, hourly buckets, daily buckets. Anything in between (every 7 minutes, weekdays only at 07:15) is awkward.
- Failures surface in the Apps Script Executions log that nobody on the team checks, so a quota-blocked script can fail for a week before anyone notices.
- Cross-script visibility does not exist; there is no single page that shows all your team's scheduled scripts, their next run time, and their last status.
The fix
How Crontap solves it
Deploy your Apps Script as a web app to get an https://script.google.com/macros/s/.../exec URL. Remove the internal time-driven trigger. Let Crontap call the exec URL on a real cron in any IANA timezone. Every run gets logged with status, duration and response body; failures alert to email / webhook (Slack / Discord / Telegram).
0 9 * * 1-5Apps Script is one of the largest platforms in the Crontap dataset by job count: 63 jobs across 20 customer domains hitting script.google.com/macros/s/.../exec URLs on cadences from every minute to once a quarter. The reason is mechanical: Apps Script is the cheapest way to write Sheets, Drive and Gmail glue, and once the glue is written, the only missing piece is a real scheduler.
The setup is two clicks. In the Apps Script editor, deploy as a web app with execute permissions set to your service account (or yourself). Copy the resulting /exec URL. Paste into Crontap and pick a cron. Optionally set an Authorization header that your doGet or doPost handler verifies, so the URL is safe to leak.
For multi-script teams, one Crontap schedule per script keeps the dashboard tidy: a name, a cron, a timezone, a last-status indicator. When a script breaks, the failure alert lands in Slack with the response body, and the offending exec URL is one click away from the alert.
FAQ
Common questions
- Do I still need an Apps Script time-driven trigger?
- No. Remove the internal trigger and deploy as a web app; Crontap becomes the only clock. The advantage is having a real cron expression, a real IANA timezone, and a single dashboard across every script your team owns.
- Is the exec URL secure?
- Treat it like any other webhook. Protect with the script's own auth (URL token, Google identity, OIDC if you front it with a Cloud Function), and add an Authorization header check inside doGet/doPost. Crontap will send whatever Authorization header you paste on the schedule.
- What about Apps Script execution quotas?
- Quotas apply per Google account regardless of who triggers the script. Crontap calling your exec URL counts the same as the internal trigger; the difference is visibility. When a run fails because of a quota, the failure alert from Crontap fires and you see the response body, not silence.
- What's the shortest interval Crontap supports?
- Every 1 minute on paid plans. Free tier available for slower cadences. Most Apps Script jobs in the dataset sit at 5 minutes, 30 minutes, hourly or daily; minute cadence is rarer because Apps Script execution is itself slower than that for most useful workloads.
Related guides
Adjacent use cases
Ready to fix it?
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
Free forever tier ・ No credit card required
/wp-cron.php?doing_wp_cron=1
Schedule
"every 5 minutes"
Next
in 23s