Free tool · Analyze
Switch email providers: scan your repo
Paste a public GitHub repo. In a few seconds you see every place it sends email through SendGrid, Mailgun, Resend or Amazon SES, by SDK, HTTP API or SMTP, with the env vars to change, the code change for Node.js or Python, and a prompt your coding agent turns into a pull request.
How do I move my app to a new email provider?
Find every place the app sends: the provider's SDK, direct calls to its HTTP API, and SMTP settings pointed at its relay. Swap each one for the new SDK or SMTP settings, change the env vars, verify your sending domain, and keep the old provider set up until the new path has sent cleanly for a few days.
The scanner does the finding for you. It reads the repo, lists each file and line, and writes a prompt your coding agent uses to make the change and open a pull request with the env var changes and a switch checklist.
What each finding means
- SDK
- The provider's client library is imported here. Replace the client and its send call; the before and after for your stack shows how the fields map.
- HTTP API
- Code calls the provider's API directly. Replace the request with the Groundmail SDK, or
POST https://api.groundmail.dev/emailswith your API key. - SMTP
- A provider's SMTP host is set here. No code change: point it at
smtp.groundmail.dev, port 587, usernamegroundmail, with an SMTP credential as the password. - Dependency
- The provider's package is listed in
package.jsonor your Python requirements. Remove it after the switch if nothing else uses it. - Nothing found
- No code for these four providers. If the app sends through another library or its own SMTP server, the prompt still adds Groundmail where it sends.
What the scanner looks for
SDKs in Node.js and Python: @sendgrid/mail, mailgun.js, resend and @aws-sdk/client-ses imports, and in Python sendgrid, resend, boto3.client("ses"), django-ses and the Anymail backends.
HTTP calls: requests to api.sendgrid.com, api.mailgun.net, api.resend.com and the SES API, in any language.
SMTP settings: smtp.sendgrid.net, smtp.mailgun.org, smtp.resend.com and email-smtp.*.amazonaws.com in code, env files and config, including Go, PHP and Ruby apps.
Env vars: provider settings like SENDGRID_API_KEY or MAILGUN_DOMAIN, so the plan lists what to add and what to remove after the switch.
Your coding agent opens the pull request
Copy the prompt into Cursor, Claude Code, Codex or any agent working in your repo. It lists the files and lines, the field mapping for each provider, the env var changes and the pull request description with its checklist. The agent makes the change on a branch, runs your tests and opens the pull request from your own account, so nothing needs access to your GitHub.
What the scan reads and keeps
It reads the default branch of a public repo through GitHub's public download and skips dependencies and build output. Your code is read in memory and dropped when the scan ends. Anything in the results that looks like an API key is hidden.
Switch without downtime
Keep your current provider's DNS records and env vars while you switch: Groundmail's DKIM and return-path records use different names, so mail from both keeps passing. Send from a preview deploy first, then production, and remove the old records a few days after the cutover. The SendGrid and Amazon SES guides walk through each step.
Switch in an afternoon
Create a free account, add your domain, and bring your SendGrid or Mailgun templates and suppressions over on the Import page. Free for 3,000 emails a month, with no time limit.
Questions
Does it work with private repos?
The scanner reads public repos only, so it never needs access to your GitHub account. For a private repo, ask your coding agent to find every SendGrid, Mailgun, Resend or SES call and follow the matching migration guide.
Which languages does it support?
SDK detection covers Node.js (JavaScript and TypeScript) and Python, including Django and Flask setups. SMTP hosts and API calls are found in any language. Groundmail has SDKs for Go, PHP and Ruby too, and the before and after shows the field mapping you need there.
Will it change my code?
No. The scanner only reads. Your coding agent makes the change on a new branch and opens a pull request, so you review it like any other change before it merges.
What about my templates and suppression list?
On the Import page in the dashboard, paste a SendGrid or Mailgun API key and Groundmail brings over your templates, suppressions, sending domains and webhooks. The key is used for the import only and never stored. From a terminal: groundmail migrate sendgrid.
Do I have to switch everything at once?
No. Keep the old provider configured, switch one send path at a time, and remove the old env vars and DNS records once the new path has sent cleanly for a few days.
Is it free?
Yes, with no sign-up. Scans are limited to a few a minute per visitor so one person can't tie it up.