You could build the events pipeline, the scoring cron, the stage machine, and the email infra. You'd even enjoy it. ConversionCRM is that weekend project, finished, hardened, and maintained — so you can ship product instead.
ConversionCRM gives developers app activation software as an API surface: a widget that auto-tracks pages/clicks/time (SPA-aware), identify() and track() calls, a hardened ingestion endpoint, nightly scoring + staging crons, and 8 lifecycle emails via Resend or your own SMTP. Integration is genuinely ~3 minutes.
Software onboarding build vs buy looks easy until you list the parts.
Event ingestion needs rate limits, body-size caps, email validation, timestamp sanity, and key auth before launch — or it becomes an abuse vector. Ours ships hardened: ~240 events/min per key, 32 KB caps, 401s for unknown keys in production.
Scoring at midnight, staging rules with priority order, email batches with cooldowns and dedupe — each a small thing, together a system that owns your weekends.
SPF, DKIM, bounce handling, send logs. Or: deliverEmail() through our infrastructure or your own SMTP, with every send logged with provider and error metadata.
Auto-tracks page views (SPA route changes included), clicks, and time on page. Nothing else to wire for baseline tracking.
Ties the anonymous session to a user. Email enables lifecycle emails; everything else keys off this.
Signup, login, your aha event, and intent events. Anything you name becomes scoreable.
0–100 across six layers from the last 7 days, recomputed live (every ~3s while the dashboard is open) and nightly at 00:00 UTC. Deterministic, explainable, visible per user.
Seven stages assigned by priority rules — Paid sticks forever, Churned needs 30 silent days, Conversion ready means score 71+. No state for you to manage.
8 lifecycle emails with batch guardrails: one per user per batch, per-trigger cooldowns, limit emails only on true quota exhaustion, never on locked-feature clicks.
Default delivery via platform infrastructure; or store your SMTP host/port/user/pass and every send goes through your server with your From address. One test-send endpoint to verify.
Route changes in single-page apps are tracked as page views automatically — history API navigation included — along with time on page per route and click tracking. You don't need router middleware or manual page() calls.
Ingestion is keyed by api_key with roughly 240 events/min per key, a 32 KB body cap (8 KB for properties), email format validation, and a timestamp sanity window. In production, unknown API keys get a 401 — events can't be written to arbitrary workspaces.
The primary path is the widget plus client calls, which covers page/click/time signals you can't get server-side. For conversion-critical events (payment_success, usage_limit_hit) fire them wherever they're authoritative — they're just events with your user_id; the scoring engine doesn't care where they originated.
Default is platform infrastructure (Resend) sending from a platform address with your sender name and your reply-to. Or configure SMTP — Gmail, Outlook, SES, anything — and sends go through your server with your From address. All sends are logged with provider and error metadata for debugging.
Build if events legally can't leave your infrastructure, or your scoring needs domain logic no general model fits. Otherwise the in-house version is 4–8 engineering weeks to reach parity (pipeline, scoring, stages, templates, deliverability, dashboard) plus permanent maintenance — for a system that isn't your product. We wrote up the comparison on the build-vs-buy section of the compare page.
Hardened ingestion, scoring crons, and email infra — running tonight, free during beta.
Free during beta · no credit card · 3-minute install