The problem with a stack of marketing analytics tools
A typical growth stack has a traffic tool for sessions, an ad manager per platform, a spreadsheet for cost per lead, a CRM for lead quality and a product tool for activation. None of them agree on who a user is, so the week goes to reconciling numbers.
The question growth teams actually ask is one sentence long: which channels bring people who activate and pay, and what does each of them cost? Answering it needs the click, the product behaviour, the lead quality and the spend in the same place.
Orwel is an event analytics SDK that keeps all four together. One script records visits, events and conversions. The same visitor carries their campaign, their path through your conversion funnels, their feature adoption and their lead score.
AARRR with real events
The pirate metrics framework (acquisition, activation, retention, referral, revenue) is only as good as the events behind each stage. Orwel's semantic catalog has 257 events, each with a note on when it should fire, so every stage maps to something concrete:
| Stage | What to measure in Orwel | Example catalog events |
|---|---|---|
| Acquisition | Source, campaign and cost of each lead | Captured automatically from UTMs and click IDs |
| Activation | A journey from signup to the first moment of value | user_signed_up, onboarding_completed, project_created, aha_moment_reached |
| Retention | Feature adoption among active users, weekly usage | report_created, dashboard_created, subscription_renewed |
| Referral | Invites and shared links | invite_sent, invite_accepted, referral_link_shared, referral_converted |
| Revenue | Payment conversions with amount and plan | subscription_started, plan_upgraded, purchase |
Journeys setup has blueprints for acquisition, activation, onboarding, revenue and retention, so you can start from a template and adapt it.
Fire events after the action succeeds, from your service layer, once per action:
import orwel from 'orwel';
// activation: the API confirmed the first project
orwel.track('project_created', { template: 'onboarding' });
// referral: the API accepted the invite batch
orwel.track('invite_sent', { count: 3 });
// revenue: first payment succeeded
await orwel.conversion('subscription_started', { email, plan: 'pro', amount: 49, currency: 'USD' });
Funnels that match how people behave
Orwel journeys are conversion funnels where milestones count in any order within the period. Someone who invites a teammate before creating a project still counts for both steps. An ordered funnel would report them as a drop-off, and you would end up optimizing the wrong step.
Each journey ends in a conversion and reports entered visitors, converted visitors, conversion rate, reach per milestone and the biggest drop between two steps. The biggest drop is your next experiment.
Attribution and cost per qualified lead
The SDK captures UTMs and ad click IDs (gclid, fbclid, msclkid, ttclid, li_fat_id and others) on landing, keeps first touch and last touch across sessions, and attaches both to every conversion. Connect Google Ads and Meta Ads and the Campaigns screen shows per campaign:
- Cost per lead.
- Cost per qualified lead, where qualified means a lead score of 60 or more.
- Wasted spend: campaigns that spent and produced no qualified leads.
- For Google Ads, keywords and search terms that spend without converting.
The marketing attribution page explains how leads are matched to campaigns on each platform.
Orwel does not report a built in cost per activated user. You can work it out from the same data: take a campaign's spend from the Campaigns screen and divide it by the number of activated users you counted for that campaign. The CAC calculator does the arithmetic and shows the formula.
Scored leads, not raw form fills
Every conversion becomes a lead with a 0 to 100 score built from conversions, engagement, recency and visit consistency, plus intent signals from each session and the full history from the first visit. Growth and sales can agree on one definition of a qualified lead instead of arguing over spreadsheets. New leads can go straight to HubSpot, Hyperflow, Zapier, Brevo or your inbox. See lead scoring.
A weekly growth workflow
Here is one way to run a week with Orwel.
- Monday, spend. Open Campaigns for the last 7 days. Sort by cost per qualified lead. Pause or cut budget on campaigns flagged as wasted spend. Add search terms that spend without converting as negative keywords in Google Ads.
- Monday, funnel. Open your main journey. Note the biggest drop and the conversion rate. Open a few of the recent visitors who dropped and read their sessions.
- Tuesday, hypothesis. Pick one change aimed at that drop: a shorter form, a better empty state, a clearer pricing page. Write down the step you expect to move.
- Wednesday, ship and verify. Ship the change. If it needs new events, add them from the catalog and check them in Dev mode with the development key before you deploy.
- Thursday, leads. Review the top scored leads of the week and their intent signals. Hand the strongest ones to sales with their history.
- Friday, ask. Connect an agent through Orwel's MCP server and ask "how did my campaigns perform in the last 30 days?" or "who are my top leads this week and why?". This is MCP analytics: the answer comes from your own workspace data.
Orwel does not run A/B tests, so compare the journey's conversion rate before and after the change over a similar period.
What Orwel does not cover
- No session replay or heatmaps.
- No A/B tests or feature flags.
- No IP based identification of anonymous visitors or companies. People are identified when they sign in or submit a form.
- Ad spend syncs from Google Ads and Meta Ads only. Other click IDs are captured but have no cost attached.
Pricing
One Pro plan covers everything on this page: 49 USD per month, dropping 2 USD every month you pay on time down to 35 USD, or 420 USD per year. Fair use applies, with no caps on leads or visitors, and a 14-day trial. See pricing.