Home/Solutions/Developers
Solutions · Developers

Automated user onboarding for developers

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.

TL;DR — the short answer

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.

The build trap

The “simple” in-house version

Software onboarding build vs buy looks easy until you list the parts.

01

The pipeline that grows

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.

02

The cron that pages you

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.

03

The deliverability rabbit hole

SPF, DKIM, bounce handling, send logs. Or: deliverEmail() through our infrastructure or your own SMTP, with every send logged with provider and error metadata.

The integration

The entire API you need to learn

01

Load the widget

Auto-tracks page views (SPA route changes included), clicks, and time on page. Nothing else to wire for baseline tracking.

<script src="…/widget.js?api_key=YOUR_KEY"></script>
02

Identify on login

Ties the anonymous session to a user. Email enables lifecycle emails; everything else keys off this.

ccrm.identify("u_4821", { email: user.email })
03

Track what matters

Signup, login, your aha event, and intent events. Anything you name becomes scoreable.

ccrm.track("sign_up") ccrm.track("report_exported") // your aha event ccrm.track("usage_limit_hit") // queues limit email
Under the hood

What runs after your three lines

Scoring engine

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.

Stage machine

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.

Email orchestration

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.

Your SMTP if you want it

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.

FAQs

Questions, answered

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.

Three lines of code.
The rest is our pager.

Hardened ingestion, scoring crons, and email infra — running tonight, free during beta.

Free during beta · no credit card · 3-minute install