Streak

streak.comcontributed by Samuele Ongaro

ALMOST

A weekend of work, and real gaps remain.

A CRM built entirely inside Gmail: pipelines appear as a view over your inbox, so a deal is a set of threads rather than a record in another application.

Promptfree, for everyone, and the only version there is
Build me a CRM inside my inbox that replaces Streak — and know why this is ALMOST.

The idea is **pipelines drawn over the inbox itself**: a thread is a deal, and the stages sit above your mail rather than in another application. Reproducing it means a browser extension injected into a mail interface that changes without warning, and that maintenance is the recurring cost. The mail sync is the valuable half and it is buildable; the injection is the fragile half.

STACK
- Node 20+ with Fastify, server-rendered HTML with a little vanilla JS
- SQLite through better-sqlite3, WAL mode, with FTS5
- A browser extension, Manifest V3, injecting the pipeline view
- Caddy in front

THE DATA MODEL
- pipelines: id, name, stages_json, fields_json
- boxes: id, pipeline_id, stage, title, value_cents, currency, owner_id, notes_md, custom_json, created_at, closed_at, outcome — a box is the deal, and it is attached to threads rather than replacing them
- box_threads: box_id, thread_id, external_id, linked_at, is_primary
- stage_history: id, box_id, from_stage, to_stage, at, actor_id — append-only, and where every honest number comes from
- contacts: id, email, name, company, last_contacted_at
- messages: id, thread_id, message_id, direction, from_address, to_json, subject, snippet, occurred_at — mirrored, never the body
- tasks, reminders, snippets — the small features that get used constantly
- The thread identifier from the mail provider is the join. It is stable, and matching on subject would not be

THE MAIL SIDE, WHICH IS THE VALUABLE HALF
- Read-only sync over the provider's API, incremental with a cursor, idempotent by message id
- Store the address, direction, subject, timestamp and a short snippet. Never the body. Say so in the README — that restraint is what makes somebody willing to connect their work mailbox
- A box's last activity, response time and days quiet all derive from these rows, so nobody ever updates a record
- Attaching a thread to a box is one action, and afterwards everything in that thread follows automatically
- When a message could belong to two open boxes, file it against the contact and ask. Never guess, because a message on the wrong deal is worse than one on none

THE EXTENSION, WHICH IS THE FRAGILE HALF
- A sidebar on an open thread showing its box, the stage, the value, the notes and the tasks — and a control to change the stage without leaving the message
- A pipeline view: the boxes as a board, reachable from inside the mail interface
- Write it as one small adapter with a saved page fixture and a test. The host interface will change, and a failing test is better than a mystery
- Per-host permission, a token to your own server, and nothing sent anywhere else
- Say in the README that maintaining this is the ongoing cost of the whole approach

THE SMALL FEATURES THAT MAKE IT USED
- **Snippets**: canned replies inserted with a shortcut and variable substitution. Used more than anything else in the product
- **Send later**: a message scheduled from the extension and sent by a worker through the provider, once, idempotently
- **Follow-up reminders**: remind me if nobody replies to this thread in four days, computed from the mirrored messages rather than from a timer
- **Thread splitting and merging**, because a long conversation eventually contains two subjects
- Mail merge is where this category gets people into trouble. If you build it, cap the volume hard, require a stop-on-reply, and put a one-click unsubscribe in every message

REPORTING
- Conversion between stages and time in each stage, from stage_history
- Boxes with no activity for longer than a threshold, ranked — that list is the actual pipeline problem
- Required outcome and reason on a closed box, because losing without a recorded reason teaches nothing
- Everything computed at query time

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, SESSION_SECRET, ENCRYPTION_KEY, HASH_SALT, provider credentials
- Migrations on boot, each once; credentials encrypted at rest
- Nightly backup off the machine, restore script
- Health endpoint reporting mail sync age

WHAT MATTERS MOST
Thread-level linking and stage history. The first is what keeps the record current with no effort; the second is the only thing that will ever tell you something you did not already know.

What you lose

  • A pipeline rendered inside Gmail, which needs deep integration with an interface Google keeps changing
  • Mail merge, tracking and snippets in the same place you write
  • Threads as the unit of work, so nothing needs to be copied into a record

If you would rather not build

  • A Google Sheet driven by Apps Script
  • Twenty, if you would rather leave the inbox

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$59/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

EspoCRM

$0

Self-hosted CRM that can archive mail against records.

espocrm/espocrmfree · open source

Monica

$0

For relationship tracking rather than deal tracking.

monicahq/monicafree · open source

Why this verdict

our own opinion · changed only by a person

58/100

Verdict kinda at 58. Using labels as stages is a genuinely good shortcut; the add-on and Gmail quotas are what makes it a weekend rather than an evening.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 1/day
views0130 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Streak

answered from the record above

Is Streak free?

No — the plan we track is $59 a month. Pro at $59 per user per month billed monthly, $49 annually; a free tier covers personal use.

Can you replace Streak by building your own?

ALMOST. A weekend of work, and real gaps remain. Replacement score 58 out of 100, build time a weekend. Read what you lose before you decide.

How much does Streak cost?

$59 a month on Pro — $708 a year. Recorded 10 Aug 2026.

What do you lose by replacing Streak?

A pipeline rendered inside Gmail, which needs deep integration with an interface Google keeps changing; Mail merge, tracking and snippets in the same place you write; Threads as the unit of work, so nothing needs to be copied into a record. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Streak?

Yes: EspoCRM, Monica. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 19 in CRM & sales

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc