Introduction
Setting up Continuous Integration and Continuous Deployment (CI/CD) is a must-have for modern development teams. While Vercel offers built-in GitHub integration, its team collaboration features are gated behind a paid Pro plan. This becomes a blocker when multiple developers need to deploy but aren’t part of the paid team.
In this guide, I’ll show you how to bypass that limitation and set up a working CI/CD pipeline using GitHub Actions and the Vercel CLI — all without needing to pay for Vercel Pro or add developers to your Vercel team.
Why Not Just Use Vercel Teams?
If a non-member tries to deploy to a Vercel team project, they'll see this:
@yourgitusername is attempting to deploy a commit to the Team Name' projects team on Vercel, but is not a member of this team.
This error means:
- The developer is not part of the Vercel team
- The team requires a Pro plan ($20/user/month) to add members
The Solution: Use GitHub Actions + Vercel CLI
Instead of relying on Vercel’s GitHub integration, we use GitHub Actions to automate deployments via the Vercel CLI, authenticated with a token.
What You’ll Need:
- A GitHub repo connected to your project
- A Vercel account (personal or team)
- A Vercel token
- Your Vercel Org ID and Project ID
- Environment variables passed from GitHub Secrets
Step-by-Step Guide
Generate a Vercel Token
Go to:https://vercel.com/account/tokens
Click "Create Token" and copy it.Get Your Org & Project IDs
Run this in your local terminal:
npm install -g vercel
vercel link
Check the .vercel/project.json
file:
{
"orgId": "your-vercel-org-id",
"projectId": "your-vercel-project-id"
}
Alternative: Use Vercel Dashboard → Network Tab → Inspect project requests.
- Add Secrets to GitHub Go to your GitHub repo → Settings → Secrets → Actions → New Repository Secret.
Add:
VERCEL_TOKEN
VERCEL_ORG_ID
VERCEL_PROJECT_ID
- And your required environment variables
-
Create the GitHub Actions Workflow
Create
.github/workflows/deploy.yml
in your repo:
name: Deploy to Vercel
on:
push:
branches:
- main // your deployment branch
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install Bun (if using bun.lock)
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> $GITHUB_PATH
- name: Install Vercel CLI
run: npm install -g vercel
- name: Deploy to Vercel
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
run: |
vercel pull --yes --environment=production --token=$VERCEL_TOKEN
vercel build --token=$VERCEL_TOKEN
vercel deploy --prod --token=$VERCEL_TOKEN
Common Errors & Fixes
❌ spawn bun ENOENT
You're using bun.lock but bun isn't installed.
Fix: Add a step to install Bun in the workflow, or delete the lock file and switch to npm
or yarn
. A command to install bun is added to the yml
file above.
❌ Invalid environment variables
Your app expects env vars at build time, but they’re missing.
Fix: Add them as GitHub secrets and pass them explicitly in env:
section.
âś… Result
- GitHub Actions handling CI/CD
- Vercel builds and deploys on push
- No team member restrictions
- No need to upgrade to Vercel Pro
Conclusion
With this setup, you're no longer limited by Vercel's team billing system. You get full control over deployment, secure CI, and cost-effective collaboration, all powered by GitHub Actions + Vercel CLI.
Top comments (1)
this article helped me so much. thanks for this