Pricing
Free software. Here is what it actually costs to run.
MailSignals is MIT-licensed and has no plans, seats or tiers. You pay your domain registrar and, in theory, Google. In practice one person's email stays inside Firebase's free quotas.
- Licence. MIT, forever.
- $0
- A month to run, mostly the domain
- $0–3
- Per user per year, what commercial trackers charge
- $36–72
- Gmail OAuth scopes requested
- 0
The bill, line by line
Everything runs in one Firebase project on the pay-as-you-go Blaze plan. The free quotas below are Google's published allowances at the time of writing; check the current pricing page before relying on a number.
| Item | What it is used for | Typical monthly cost |
|---|---|---|
| Domain | A .io or .app domain you probably already own, with two spare subdomains | $1–3 |
| Firestore | A few thousand reads and a few hundred writes a day for one person's mail; the free quota is 50,000 reads and 20,000 writes a day | $0 |
| Cloud Functions | One invocation per pixel fetch, click, registration or sync; the free quota is 2 million a month | $0 |
| Firebase Hosting | The dashboard, the tracking host and this site; the free quota is 10 GB of egress a month | $0 |
| Cloud Scheduler, Secret Manager, Cloud Tasks | Three schedules, four secrets, no tasks; all inside the free allowances | $0 |
| Digest email | Handed to the Trigger Email extension and whichever SMTP provider you point it at; most have a free tier | $0 |
| Total | For one person, or a small team on one project | $0–3 a month |
What the paid tiers of commercial trackers gate, and where it stands here
People pay $3 to $6 per user per month mostly for history, branding removal, link tracking and reminders. Each of those is simply included. The one paid feature that is not here is named honestly.
| Feature | Commercial trackers | MailSignals |
|---|---|---|
| Full tracking history | Paid; free tiers keep 7 days or the first open only | Included, kept as long as you choose |
| No "Sent with…" branding | Paid | There is no branding. An optional disclosure footer is yours to write |
| Link click tracking | Paid, often capped | Included, on your own domain |
| Custom tracking domain | Paid | It is your domain, always |
| Follow-up reminders, hot and revived threads | Paid | Included, thresholds adjustable |
| Daily or weekly report email | Paid for weekly | Included, your hour, your timezone |
| Per-contact engagement, best-time heatmap | Paid, where offered | Included |
| Per-recipient tracking of group emails | Paid, done by re-creating one message per recipient through the Gmail API | Not offered. It needs a Gmail scope, and the tooltip says "N recipients, so we cannot tell which one" instead |
| Mobile app, Outlook add-in, campaigns | Paid | Not offered |
What you need to have
The guide budgets about an hour for a first run, most of it waiting for DNS and certificates.
- Node 22 and pnpm 10, plus the Firebase and gcloud command-line tools.
- A Google account, and a Firebase project on the Blaze plan.
- A domain you control with two spare subdomains: one for the dashboard, one for tracking.
- A Google OAuth web client. Because only openid, email and profile are requested, publishing it needs no security assessment.
- A free InboxSDK app id, registered with a Google sign-in.
Questions about cost
Why does it need the Blaze plan if it is free to run?
Cloud Functions do not run on the free Spark plan, so the project has to be on Blaze, which is pay-as-you-go and needs a card. The free quotas still apply on Blaze; you are billed only for usage beyond them, and one person's email does not get there. Set a budget alert at $5 anyway. The guide says so twice.
What if an email gets thousands of opens?
Each pixel fetch is one function invocation and a couple of Firestore writes, and the response is 42 bytes. A flood of junk tokens is absorbed by a per-instance negative cache before it can reach the database, so a scanner hammering the endpoint does not turn into a bill. Thousands of genuine opens a month is still inside the free tier.
Do I need to keep an instance warm?
No. Cold starts on the tracking path are acceptable because the pixel and the redirect are flushed before any database work starts, so a slow start costs a few hundred milliseconds on the recipient's image load and never a broken image. Keeping one instance warm would cost about $3–6 a month and is not the default.
Is there a team or business tier?
There are no tiers. Several people can use one deployment; each signs in with Google, links their own Gmail addresses, and sees only their own data, enforced by Firestore rules that a security suite checks as a real end user. The schedules iterate every user, which is right for tens of users and noted in the code as the thing to revisit at ten thousand.
What about the Chrome Web Store?
The extension is loaded unpacked from the build output today, which is how a self-hoster runs a build pointed at their own project. There is no store listing to pay for and no per-seat licence to track.
Run it in your own project.
One Firebase project, two subdomains, one deploy script. About an hour the first time, and no subscription afterwards.