Expenses
Track what your stack costs without leaving your project management tool. Almirant's expense module allows you to record, categorize, and analyze all costs associated with your projects: from SaaS subscriptions and hosting services to AI API costs and vendor invoices.
Why manage expenses in a PM tool
Tech teams handle multiple costs that directly impact projects:
- AI costs: OpenAI, Anthropic APIs, ML models in production
- Infrastructure: AWS, GCP, Vercel, hosting, managed databases
- SaaS subscriptions: GitHub, Figma, Slack, development tools
- External services: CDNs, email services, analytics
- Vendors: freelancers, consultants, professional services
Having visibility into these costs alongside the team's work enables better product decisions and prioritization with complete information.
What is an expense
An expense is a record of a cost associated with your organization or project. Each expense has the following fields:
| Field | Required | Description | Example |
|---|---|---|---|
| Title | Yes | Descriptive name of the expense | "OpenAI API - March 2024" |
| Amount | Yes | Expense amount | 450.00 |
| Currency | Yes | ISO currency code | EUR, USD, GBP |
| Category | No | Expense category | "Infrastructure > Cloud" |
| Date | Yes | Expense date | 2024-03-15 |
| Vendor | No | Vendor or service name | "OpenAI" |
| Description | No | Additional expense details | "GPT-4 API usage for feature X" |
| Project | No | Project to charge | "Mobile App v2" |
| Paid by | No | User who made the payment | "John Smith" |
Expense statuses
Expenses go through different statuses according to your organization's approval flow:
| Status | Description |
|---|---|
| draft | Draft pending completion |
| pending_approval | Submitted for approval |
| approved | Approved, pending payment |
| rejected | Rejected by approver |
| paid | Paid and completed |
| void | Voided (not counted) |
Creating an expense
- Access Expenses from the main menu
- Click New expense
- Complete the required fields (title, amount, currency, date)
- Optionally, select category, project, and attach the invoice
- Save as draft or submit for approval
Hierarchical categories
Expenses are organized in tree-structured categories, allowing for as granular detail as you need:
Expenses
├── Infrastructure
│ ├── Cloud (AWS, GCP, Azure)
│ ├── Hosting (Vercel, Railway)
│ └── Databases
├── SaaS
│ ├── Development (GitHub, GitLab)
│ ├── Design (Figma, Adobe)
│ └── Communication (Slack, Notion)
├── AI and ML
│ ├── APIs (OpenAI, Anthropic)
│ └── Custom models
├── Marketing
│ ├── Advertising
│ └── Tools
└── Professional services
├── Consulting
└── Freelancers
Creating a category
- In expense settings, access Categories
- Click New category
- Enter name, icon, and color
- Optionally, select a parent category
Categories have an order field to control their position and can be deactivated with isActive = false without deleting associated expenses.
Recurring expenses
For costs that repeat periodically (subscriptions, monthly services), you can configure recurring expenses:
| Field | Description | Example |
|---|---|---|
| Title | Recurring expense name | "Vercel Pro" |
| Vendor | Service or company | "Vercel" |
| Amount | Amount per period | 20.00 |
| Currency | Expense currency | USD |
| Recurrence | Expense frequency | monthly |
| Anchor date | Reference date | 2024-01-01 |
| Next renewal | Automatically calculated | 2024-04-01 |
| Alert days before | Days in advance to notify | 7 |
Available recurrences
| Recurrence | Description |
|---|---|
| weekly | Weekly |
| monthly | Monthly |
| quarterly | Quarterly |
| yearly | Yearly |
Active recurring expenses automatically show the next renewal date and can generate configurable alerts.
Multi-currency support
Almirant supports multiple currencies with automatic conversion to EUR for aggregations:
| Currency | Code |
|---|---|
| Euro | EUR |
| US Dollar | USD |
| British Pound | GBP |
| Swiss Franc | CHF |
| Japanese Yen | JPY |
| Canadian Dollar | CAD |
| Australian Dollar | AUD |
| Mexican Peso | MXN |
| Brazilian Real | BRL |
| Chilean Peso | CLP |
| Colombian Peso | COP |
| Argentine Peso | ARS |
Each expense stores:
amount: Amount in original currencycurrency: ISO currency codeamountEur: Amount converted to EURexchangeRate: Applied exchange rate
Aggregations and reports are calculated on amountEur to compare expenses in different currencies.
Invoices and attachments
Each expense can have an attached invoice. Almirant stores:
| Field | Description |
|---|---|
invoiceFileName | File name |
invoiceUrl | S3 document URL |
invoiceFileSize | Size in bytes |
invoiceMimeType | MIME type (application/pdf, image/png, etc.) |
invoiceProcessingStatus | Processing status |
Invoice processing statuses
| Status | Description |
|---|---|
| pending | Pending processing |
| processing | Being processed (OCR/AI) |
| processed | Successfully processed |
| failed | Processing error |
Automatic processing can extract data from the invoice via OCR to auto-fill expense fields.
Dashboard and aggregations
The main expense view includes a dashboard with key metrics:
Available metrics
| Metric | Description |
|---|---|
| Total | Total sum of expenses (in EUR) |
| By person | Breakdown by paying user |
| By category | Distribution by categories |
| By month | Time evolution |
| Recent | Latest recorded expenses |
Filters
You can filter expenses by:
- Date range
- Category (including subcategories)
- Project
- Status
- Vendor
- Paying user
For developers
MCP tools
| Tool | Description | Main parameters |
|---|---|---|
create_expense | Creates a new expense | title, amount, currency, expenseDate, categoryId, projectId |
get_expense | Gets an expense by ID | expenseId |
list_expenses | Lists expenses with filters | projectId, categoryId, status, dateFrom, dateTo |
get_expense_summary | Gets aggregations | projectId, dateFrom, dateTo |
list_expense_categories | Lists categories | includeInactive |
list_recurring_expenses | Lists recurring expenses | isActive |
Example: Create an expense
Tool: create_expense
Parameters:
title: "AWS EC2 - March 2024"
amount: 234.50
currency: "USD"
expenseDate: "2024-03-31"
categoryId: "category-uuid-cloud"
projectId: "project-uuid"
vendor: "Amazon Web Services"
Example: Get expense summary
Tool: get_expense_summary
Parameters:
projectId: "project-uuid"
dateFrom: "2024-01-01"
dateTo: "2024-03-31"
Returns:
- Total expenses in the period (in EUR)
- Breakdown by category
- Breakdown by person
- Monthly evolution
- Recent expenses
Related: Projects | Knowledge base