Three fields on every enquiry
- Service line
- Engagement type
- Estimated start
Engagement type is a dropdown of fixed-scope project, retainer, and time and materials, which is the distinction the rest of your billing hangs on.
Enquiry, proposal, delivery and billing on one record, with the hours you bill for landing on the invoice rather than in a spreadsheet. Installing the professional services app puts your own words on the navigation and adds the three fields your billing turns on.
No per-consultant fee, unlimited users, self-hosted. The app installs from Settings, Apps, in a click.
The number you quoted is the number on the invoice, because it is the same set of line items moved forward rather than a second document somebody types out again.
A referral, a call, or the form you embed on your own site lands as an enquiry with its source recorded against it, and the list filters by that source.
Set the expected value, pick the service line and whether it is fixed-scope, a retainer or time and materials, and hand it to an owner.
Send a line-item estimate with a short introduction and, if you want one, a deposit. The client opens a private link and accepts it without an account. Acceptance records who accepted and when, starts the project and drafts the deposit invoice for you to check and send.
Convert the accepted estimate and the invoice comes out the other side with the same lines, the same client and nothing retyped.
A won engagement becomes a project. Its tasks, time and files sit on it, its budget burns down as hours are logged, and client questions become tickets with a response clock.
Bill a project's unbilled hours up to a date onto a draft invoice, or bill part of a fixed fee, record part payments as they land, and put the retainer on a schedule that raises itself overnight.
The professional services app is a file in the repository, so this list is exactly what you get. Every item is an ordinary record you can rename, reprice or delete afterwards.
Engagement type is a dropdown of fixed-scope project, retainer, and time and materials, which is the distinction the rest of your billing hangs on.
Enough to separate a referral from a cold enquiry and a renewal from a rebid, without inventing a taxonomy in week one.
Fixed-fee engagements, monthly retainers, hourly advisory and a day rate, ready to drop onto an estimate. Change the prices to yours before you send one.
Optionally the app also seeds sample clients, engagements and tickets so you can see the shape of it. Every seeded row is tagged, so you can delete the lot in one action when you are done.
Each one is checked against the source rather than written from a feature list, and where a capability is on one client and not the other, it says so. The next section is the other half of that promise.
Your navigation reads Enquiries and Engagements on the web app, and the Enquiries pages carry the word throughout. Other page headings keep the stock label and the phone app does not read the map at all, so it still says Leads. The record underneath is unchanged either way.
Service line, engagement type (fixed-scope, retainer, or time and materials) and estimated start, on every enquiry. They render on both clients, filter in list views, and come back through the API.
An itemised proposal with an introduction above the lines, opened through a tokenised URL with no login. Acceptance stores the name, the email and the time, starts the project if you asked for one, drafts the deposit invoice if the estimate has a deposit, and tells you.
One action converts it. Same line items, same client, and the estimate keeps a link to the invoice it produced, so nothing gets quoted twice.
Log time against a project or a client ticket, and the rate fills itself from the person's rate on the project, else the project's. An admin bills everything unbilled up to a date onto a draft invoice, as one line or a line per person, task or entry. Billed time stays locked until its invoice is cancelled.
A project billed as a retainer has a monthly fee, the hours it includes, a rate for hours beyond them and, if you want, unused hours rolling into next month. When a month ends its invoice is drafted for you: the fee, plus any hours over, with that month's time marked billed. Fixed charges can also go on a recurring invoice, monthly or quarterly, until its end date.
Record money as it arrives, several times against the same invoice, and the balance follows. Overdue is marked by a scheduled check rather than by eye.
A first-response target and a resolution target on every client ticket, counted against your business calendar and holidays, and paused while you are waiting on the client rather than punishing you for their delay.
Start one from a won engagement, with a budget in hours or money and a rate per person that only admins set. Tasks, time, files and comments sit on it, the budget shows how much is used, and the team hears at 80% and at 100%.
Revenue goals by period for a person or a team, ranked, with a notification at half, at ninety percent and at the line. On the web app and the phone.
Django and PostgreSQL, deployed where you choose, with tenant isolation enforced by row-level security in the database rather than by application code. The data never has to leave your infrastructure.
Add associates, subcontractors and account managers without a seat fee. In a trade where headcount moves with the pipeline, a per-user price charges you for the peak.
Several of these are the ones a professional services CRM is usually sold on. If your week turns on one of them, this is the wrong tool today, and knowing that now is worth more than a demo that steers around the subject.
The time report shows each person's billable share of the hours they log, but cost against revenue per project is absent, and project expenses do not pass through to the client invoice. The one report that ships beyond time is accounts-receivable aging, in buckets.
Nothing rates or ranks an enquiry for you. You set an expected value, a service line and an owner, and deciding what is worth chasing stays a judgement somebody makes.
The website form you build in Settings is a flat list of questions. Showing one only when another was answered a certain way, or splitting a long enquiry across pages, is not built.
The estimate model, the time-entry billing helper and the professional services app are all in the open repository.
There is a free plan on the hosted app with unlimited users, and the core CRM is open source and free to self-host. Either way there is no per-user fee and no seat cap. Self-hosting means the bill is your own infrastructure.
Yes. It is a Django and PostgreSQL application you deploy yourself, which is the reason firms handling client-confidential work pick it over a hosted product. Tenant isolation is enforced by row-level security in the database.
Yes. A fixed-fee project bills its fee whole or in parts, a time-and-materials project bills its hours, and a retainer project drafts its invoice when each month ends: the monthly fee, plus any hours over the allowance at your overage rate.
Yes. An estimate can be shared as a private tokenised link the client opens and accepts with no signup. The acceptance records who accepted it and when, so the agreement has a trail. If the estimate asks for a deposit or a project, accepting drafts the deposit invoice and starts the project, and you are notified.
Yes. Log time against a project or a client ticket; billable entries take the person's rate on the project, else the project's, and an admin bills everything unbilled up to a date onto a draft invoice. The project shows its budget used as you go, and billed time stays locked until its invoice is cancelled.
Yes. An admin defines deal pipelines and their stages in Settings, on the web or the phone, marking each stage open, won or lost and, if you like, how many days an engagement may sit in it before it is flagged. The app's new-business pipeline for enquiries is drawn as a board too, and existing client contacts can be imported from a CSV.
Yes. Self-hosted means the database is yours, there is no export fee and no lock-in. Enquiries, contacts, accounts, engagements, tickets and invoices each export to CSV from their list, and the API is documented with the schema in the open repository, so getting your data back out is a download or a query rather than a support request.
Install the professional services app, put the whole firm on it, and pay nothing per head. Self-host it and your clients' work never leaves your server.