Agency management SaaS
Agenso: one platform to run an agency
Agenso is the business management platform we built for our own agency and now run as a SaaS for agencies and service businesses.

- Client
- Agenso
- Industry
- Agencies and professional services
The product
Agenso is a multi-tenant business management platform for agencies and service businesses. Clients, CRM, projects, invoicing, HR and payroll, and accounting live in one application, so a lead can become a project, a project phase can become an invoice, and the payment lands in the books without being typed in twice.
It started as the internal tool for running EqualPixels. The first requirements document describes our own workflow: clients billed in their currency, payments received in local currency, project income and expenses tracked per project, and partner withdrawals recorded against the accounts.
The challenge
Agency finances do not fit a simple invoicing tool. Work is quoted in one currency and paid in another, payments arrive in parts, and the owners need to know what each project actually earned. Each of those had to be handled properly before the product could be offered to other companies.
Multi-currency billing
Invoices are raised in the client’s currency and settled in local currency, with the exchange rate calculated or entered by hand and the difference booked as a gain or loss.
Partial payments
An invoice can be paid in several parts, and each part has to update the invoice, the bank account and the ledger at the same moment.
Project profitability
Income, expenses and time all needed to link back to a project so its real margin could be read without a spreadsheet.
Many companies, one deployment
As a SaaS, every company’s data had to stay isolated from every other company’s while running on one codebase and one deploy.
What we built
The modules a company switches on from one dashboard, each wired into the others.
CRM and lead capture
Leads, contacts, RFPs and RFQs, with a path from lead to project. Leads can be entered by hand or arrive from ad platforms.
- Meta Lead Ads and LinkedIn Lead Gen Forms over OAuth and webhooks
- Lead form fields mapped to CRM fields per connection
- Slack notifications for the team
Projects and time
Projects belong to clients and are split into phases and tasks, with people assigned and time tracked against them.
- Phases with deadlines
- Kanban task boards
- Timesheets and billable time
Invoicing
Invoices are built from manual lines or from a project, sent by email or downloaded as a PDF, and tracked to paid.
- Client currency and local currency
- Partial payments
- Credit notes
- PDF rendering with WeasyPrint
HR and payroll
Employees, departments, salaries, allowances, attendance and leave, so payroll runs from the same records the projects use.
- Employee records
- Payroll runs
- Leave and attendance
Accounting
A double-entry general ledger that every invoice, bill, payment and expense posts into, with the reports an accountant expects.
- Chart of accounts and manual journals
- Trial balance, profit and loss, balance sheet and cash flow
- Foreign exchange revaluation
- Fiscal periods and year-end close
AI workflows
Configurable AI tasks inside the CRM, each with its own provider and model chosen by the company.
- Proposal generation, lead summaries and follow-up emails
- OpenAI, Anthropic, Google, DeepSeek or Ollama
- Provider keys stored encrypted, every request logged
WhatsApp messaging
WhatsApp Business messaging through the WhatsApp Cloud API from Meta, or Twilio, built around approved templates and the 24-hour customer service window.
- Template messages
- Session replies inside the window
- Webhook delivery updates
Help center with Ask AI
User help is written as Markdown articles in the repo, published with the app and searchable by meaning, with an AI assistant that answers from the articles.
- Articles versioned with the code
- Embeddings stored in PostgreSQL with pgvector
- A docs check that keeps articles in step with the screens
How it works
Agenso is a Django application that renders a React and TypeScript frontend through Inertia.js. Django owns routing, permissions and data; React owns the screens. There is no separate API layer to keep in sync, and each page receives exactly the props its view sends.
We followed a package-first rule: a well-maintained Django package is preferred over custom code wherever one fits, for example django-auditlog for the activity trail and django-cleanup for file cleanup.
Tenant isolation
Each company is a tenant resolved from its subdomain, and every tenant-owned model is filtered to the current company automatically.
Webhooks routed to the right company
Webhooks from Meta, LinkedIn and Twilio arrive on the main domain. A routing table maps the integration id in the URL to its company, and the work is handed to a Celery task that runs inside that company’s context.
One posting engine for the ledger
Only one module writes the general ledger. Every entry is posted inside the same database transaction as the document that caused it, nothing edits a posted line, and corrections are made by reversing and reposting.
Shadow mode before go-live
The ledger first ran in shadow beside the old cash book. A company switches to it only when a set of integrity checks all pass, and the cutover is one locked transaction that seals the replayed history and rebuilds bank balances from the ledger.
Background work and real time
Celery with Redis handles webhooks, emails and scheduled jobs, with django-celery-beat for periodic tasks. Django Channels pushes in-app notifications to the browser.
Where it is now
Agenso is live at agenso.app with a 14-day free trial and three public plans: Starter at $29, Professional at $79 and Enterprise at $199 a month. We still run EqualPixels on it, and the accounting side keeps growing release by release, from the product catalog and tax codes to the help center that ships with every change.
Have a similar project in mind?
Tell us about your project. We’ll reply within 24 hours with a clear plan and estimate.

