Two pipeline types
Leads and deals each get their own pipelines and stages. A new workspace starts with a sensible one of each, already staged and weighted.
Features
No feature on this page is a roadmap item. Where something is still being built, it says so.
Pipelines and the board
Dragging a lead into Qualified changes its stage, its status, its probability and — if the stage is a closing one — its close date and its position on the board. All of it happens as a single action, so a record cannot end up half-moved and your won/lost reporting cannot disagree with what the board shows.
Each column carries a live count and two values: the raw total and the weighted one, using each stage's probability. Those totals are calculated over the records the person looking is allowed to see, so a rep's column header matches a rep's column.
Leads and deals each get their own pipelines and stages. A new workspace starts with a sensible one of each, already staged and weighted.
Give a stage a limit in days. A lead that sits there longer notifies its owner — you find out from the CRM, not from the customer going quiet.
A won lead becomes a contact, joins the right company (reused if you already have it) and opens a deal — while the lead itself stays, so source reporting still works.
Inbound leads
Each workspace has its own inbound address and its own secret. Paste them into the platform, and the leads you are already paying for start arriving on the board within seconds.
| Channel | What it is for | What you have to do |
|---|---|---|
| Meta | Facebook and Instagram lead ads | Subscribe the page. The name, email and phone are fetched from Meta afterwards, because Meta's notification does not include them. |
| Google Ads | Lead form extensions | Paste the address and your key into the form's delivery settings. |
| Website | The contact form you already have | Point it at the address. It reads whatever your form calls its fields — your-name, Your Name and your_name all mean the same thing. |
| Telegram | A bot you advertise as a way to reach you | One setWebhook call. A shared contact card gives you a number; a typed enquiry gives you the handle to reply on. |
| Generic | Zapier, Make, n8n, an internal script | Post our field names as JSON. One request may carry several leads. |
Every delivery is stored exactly as it arrived, whether or not it became a lead. If a field was named something we did not expect, the fix is a change and a replay — not an apology to the customer who never got a call.
Ad platforms retry aggressively, and several keep retrying for hours. The second delivery of the same submission returns the first answer rather than putting the same person on the board twice.
A returning customer enquiring again is a good thing, so nothing is blocked. The response says what the new lead resembles, so your own form can even tell the person filling it that you already know them.
Ad id, campaign, form id and the UTM parameters are lifted out and kept alongside the lead — so revenue by source is a report you run, not a spreadsheet you build.
Calls
Connect your telephony provider once — Exotel and Twilio are built in, and a generic shape covers anything else — and every call comes back on its own: direction, whether it connected, how long it lasted, the outcome, and a link to the recording.
Each one attaches itself to the right lead and the right rep by comparing
the last ten digits of the number, so +91 98765 43210 and
09876543210 are recognised as the same person. That is the
same rule duplicate detection uses, so the two features can never disagree
about who somebody is.
Calls arrive from your provider. There is no dialler built into the product — you place calls the way you place them today.
Reports and dashboard
The reports a sales manager runs are the same everywhere. They are all here, already written, each with a date range and filters for owner, source and pipeline — and each exportable in full, not just the page you are looking at.
Leads by owner and stage, by source and stage, and closed-won and closed-lost counts split both ways. The shape of the funnel, and whose funnel it is.
Won revenue by owner and by source, lost revenue by both, active pipeline by expected close date, plus detail listings of every active, won and lost lead.
Incoming against outgoing, answered against unanswered, call outcomes by rep, first-response times, and the full call log by date.
Open, overdue and completed, per person. The three lists a manager reads before a Monday meeting.
Open leads, pipeline value, weighted value, new and won leads for the period, won value, win rate and overdue tasks — eight figures, a funnel of the open pipeline, and your own day's work. Win rate is calculated over the leads that actually closed in the period, not over everything in the system, which is why the number moves when your selling does.
Team and access
Roles are a starting point; the permissions behind them are what the software actually checks. Nothing anywhere in the product asks "is this person an admin" — it asks whether they may do the specific thing.
Nobody can promote somebody above themselves. Removing a member revokes their access to that workspace and no other — a consultant working with two of your clients keeps the one you did not end.
Data integrity
Clusters leads and contacts on normalised email and phone across the whole workspace. It advises; it never blocks a save, because a repeat enquiry is a real event.
Who changed what, when, from where. Foreign keys are resolved to names, so an entry reads owner: Priya → Arjun. A save that changed nothing writes nothing.
Leads, deals, contacts, companies, calls, activities and notes all go to a recoverable trash. A delete is a decision you can walk back.
If two people edit the same record, the second save is refused and shown what changed underneath it — instead of quietly winning.
A form submitted twice on a flaky connection, or an app resending a queued write, returns the original result rather than creating a second record.
CSV import validates against the same rules the app itself uses and runs as a dry run by default, listing the problem rows before anything is written.
Leads, contacts, companies, deals, calls and every report export to CSV,
streamed so a hundred thousand rows does not time out, written so Excel opens
accented names correctly, and escaped so a value beginning with
= cannot execute as a formula on the machine that opens it —
while +91 98765 43210 stays dialable and -1200.50
stays a number.
Customise
For your developers
Everything the web app does, your systems can do. The specification is not a courtesy document — it is checked against the real routes, so an endpoint cannot ship undocumented.
An OpenAPI 3.1 specification covering every endpoint, served from the API's own address with a live console — sign in, paste your token, and call anything from the browser.
Ask what has changed since a cursor and get back the updates and the deletions, so a local copy can stay correct rather than slowly drifting.
Conditional requests for safe concurrent edits, idempotency keys for safe retries, cursor pagination, CSV streaming. No bespoke protocol to learn.
Docker Compose brings up the whole stack — API, workers, scheduler, web app, docs — in one command, behind your own reverse proxy. MySQL, PostgreSQL, MariaDB or SQL Server.
Mobile
Not released yet. The Android and iOS app is built and under test; it is not something you can download today. It is on this page because it is being built, not because it is available — ask us where it has got to and we will tell you plainly.
The design problem it solves is the one every field team has: a rep in a basement, a lift or a village with one bar needs to open a lead, change its stage and write a note — and needs those changes to survive the journey home.
We will set it up with your stages and your real numbers, and you can decide from there.