Disabling a Vercel Cron to Avoid Neon Quota Limits
TL;DR:
I removed the nightly /api/cron/sync cron from vercel.json to stop hitting Neon’s free tier quota. The change is a single line edit that stops Vercel from invoking the sync endpoint every morning.
The Problem
My pcview app uses a nightly sync endpoint (/api/cron/sync) to pull fresh data from an external API and write it to a Neon database. On July 28th the app started throwing:
2026-07-28 09:15:23 UTC | neon | ERROR | Quota exceeded: 500 write requests per hour
Every time Vercel executed the cron at 15 9 * * *, it hit the write‑limit and the sync failed. The logs showed repeated 429 responses from Neon, causing the whole sync pipeline to stall.
What I Tried First
- Increase Neon Plan – I checked the Neon dashboard and saw I was on the free tier. Upgrading would cost $5/month, which I didn’t want for a small dev project.
- Add Retry Logic – I wrapped the sync handler with exponential backoff, but the quota error was immediate; retries didn’t help.
- Throttle Writes – I tried batching writes into smaller chunks, but the external API only provided data in a single payload, so I still hit the 500‑write limit.
None of these worked because the root cause was the frequency of the cron, not the payload size.
The Implementation
The fix was to disable the cron entirely. Vercel’s cron configuration lives in vercel.json. The original file looked like this:
{
"crons": [{ "path": "/api/cron/sync", "schedule": "15 9 * * *" }]
}
I replaced it with an empty object to tell Vercel that there are no scheduled jobs:
-{
- "crons": [{ "path": "/api/cron/sync", "schedule": "15 9 * * *" }]
-}
+{}
After pushing this commit (chore: disable nightly cron sync — preventive, before hitting Neon quota), Vercel stopped invoking the sync endpoint. I verified in the Vercel dashboard that the cron job no longer appeared under Scheduled Functions.
Why an Empty Object?
Vercel treats the absence of a crons key as “no cron jobs”. By setting it to {} we explicitly override any previous configuration, ensuring the platform doesn’t attempt to run the sync again until I add it back.
Key Takeaway
When a scheduled job is causing external quota violations, the quickest technical fix is to remove or disable the cron configuration in vercel.json.
This approach stops the offending traffic instantly, gives you time to re‑architect the job (e.g., move it to a serverless function triggered by a queue or a different schedule), and avoids paying for a higher tier.
What's Next
-
Re‑implement the sync as a manual trigger – expose a protected
/api/cron/syncendpoint that can be called from a CI pipeline or a manual button in the admin UI. - Add a queue layer – use something like Cloudflare Workers KV or a simple Redis queue to batch sync requests and respect Neon’s write limits.
- Monitor Neon usage – set up alerts for write‑quota thresholds so we’re notified before hitting the limit again.
By moving the sync out of an automatic cron and into a controlled, on‑demand process, we’ll keep the app reliable without incurring extra costs.
vibecoding #buildinpublic #vercel #cron #neon #prisma #fullstack #devops #serverless #latamdevs
Part of my Build in Public series — sharing the real process of building SaaS projects from Playa del Carmen, México.
Repo: zaerohell/pcview · 2026-07-29
#playadev #buildinpublic
Top comments (0)