How to stop Vercel building on every push
Vercel builds every connected project for every commit you push, on every branch: production on the production branch, a preview everywhere else. To build less, skip previews nobody looks at, skip projects a commit did not touch, and let one deploy cover many commits instead of one build per push.
1. See what is building
Open the project's Deployments tab and filter by Preview. Look for the patterns that cost the most: bot branches (Dependabot, Renovate), agent branches, and several projects building from one push to the same repository.
# the last deployments of a project, with branch and state
vercel ls my-project
2. Skip previews for bot and agent branches
Add this as the Ignored Build Step (Settings → Git, or ignoreCommand in vercel.json). Exit 0 skips, exit 1 builds.
bash -c 'case "$VERCEL_GIT_COMMIT_REF" in dependabot/*|renovate/*|claude/*|cursor/*) exit 0;; *) exit 1;; esac'
Change the branch prefixes to the ones your tools use. Previews for those branches stop; pull requests from people still get one.
3. Skip projects a commit did not touch
In a monorepo one push builds every project connected to the repository. Two ways to skip the ones that did not change:
- With npm, yarn or pnpm workspaces, turn on Vercel's option to skip deployments when the project's root directory and its dependencies did not change (in the project's build settings, under Root Directory).
- With Turborepo, set the Ignored Build Step to
npx turbo-ignore. - Without either, compare the folder yourself; see the Ignored Build Step guide.
4. Skip on demand with a commit message
bash -c 'echo "$VERCEL_GIT_COMMIT_MESSAGE" | grep -qiF "[skip deploy]" && exit 0 || exit 1'
A commit with [skip deploy] in its message then builds nothing. Only the newest commit of a push is checked.
5. Push less often
Commit as often as you like and push when a piece of work is done. Every push is a build per project; every commit is not. This is hard to keep up with AI coding agents, which push after each step: see Your agent pushes 40 times. You deploy once.
6. Deploy production on your schedule
The steps above cut previews. For production, turn off auto-deploy and deploy once when you are ready, for example at the end of the day. The disable auto-deploy guide has three ways; Deploy Center does it for every project at once and then deploys only what changed:
deploys vercel autodeploy-off --all
deploys deploy-changed --yes
Trade-offs. Fewer previews means fewer links to click in review. Deploying by hand means a fix is not live until you deploy it. Keep previews where people review, and skip them where nobody does.
Questions
Why does one push start several builds?
Every Vercel project connected to the repository builds on a push. A monorepo with a web app, docs and an admin app builds three times, even if only the docs changed.
Does Vercel support [skip ci]?
Do not rely on it. An Ignored Build Step that checks VERCEL_GIT_COMMIT_MESSAGE, as shown above, works on every plan and you control the phrase.
Do skipped builds cost money?
A skipped build is cancelled before the build command runs. Check your usage page to see how your plan counts it; it is far less than a full build.
How much can I save?
That depends on your pushes, projects and cost per build. The build cost calculator works it out with your numbers.
Do it for every project in one click.
Deploy Center is a free, open-source Mac app. It turns off auto-deploy on Vercel, Render, Netlify, Cloudflare Pages and more, shows the commits and PRs waiting to go live, and deploys what changed when you decide.