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.

Agenso home page with the "Manage Your Business Effortlessly" headline
Client
Agenso
Industry
Agencies and professional services
Services
SaaS Development Company, Custom CRM Development, AI Workflow Automation Agency
  • Django
  • React
  • Inertia.js
  • TypeScript
  • PostgreSQL
  • Celery
  • Redis
  • Django Channels
  • pgvector
  • WhatsApp Cloud API

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.