Tally
Scheduled Sep 16, 2026Expenses captured, approved and paid, at cost.
Replaces
- Expensify · Expensify, Inc. — $18 per seat per month (Control (annual subscription)), about $86,400/yr at 400 seats
- SAP Concur Expense · SAP SE — no published list price
Rented, per year
$86,400
Expensify list price at 400 seats.
Owned, per year
$5,760
AWS infrastructure only. Azure is $6,060.
Build
9 weeks
2 engineers. To parity on the ten core features above, including card feed onboarding, migration of open and prior-year claims for audit continuity, re-implementation of existing policy rules with a dry run against the last four quarters, and one ERP posting integration.
Difficulty
3/5
Well-understood shape. Low delivery risk.
Reference organisation: 4,000 employees, ~340,000 receipts/year, ~95,000 reports/year, 7-year retention on 1.4 TB of images, single region, prod + non-prod. 3-year Compute Savings Plan on Fargate, 3-year reservation on Container Apps and PostgreSQL Flexible Server. Aurora Serverless v2 minimum 0.5 ACU. Includes Textract or Document Intelligence for the ~40% of receipts not resolved by template match, and seven-year tiered image retention. Excludes bank and card feed fees, vendor support plans and LLM gateway token spend. Figures are infrastructure only and exclude the build.
What it is
Tally handles expense from capture to payment: receipt photographed and read on the phone, expense matched against a card feed, policy evaluated before submission, approval routed by cost centre and amount, and a reimbursement file produced for payroll or the bank. It is for organisations of 1,000 to 20,000 employees where the expense tool is billed per seat or per report even though most employees file four claims a year. Tally charges nothing per claim, because it is your software.
Why this one stops making sense
- Expensify Control is $18 per member per month inside your commitment and $36 above it. At 4,000 employees on subscription that is $864,000 a year, and the discount to $9 requires moving your card spend to their card.
- SAP Concur charges per report from $11 on the Plus tier, so a cost-control initiative that increases scrutiny increases your bill.
- Most employees submit a handful of claims a year. Paying a monthly seat fee for someone who files in March and November is the clearest example of rented software mispricing usage.
- Expense data is spend data. It belongs joined to your general ledger and your card feed in your own warehouse, not exported nightly from a vendor.
- Policy rules — per diems, mileage rates, receipt thresholds, approval limits — are finance controls. They should live in version control with a change history your auditor can read.
What ships
- Mobile receipt capture with on-device compression and offline queueing
- OCR extraction of merchant, date, amount, tax and currency, with confidence shown and one-tap correction
- Corporate card feed ingestion and automatic matching of receipt to transaction
- Policy engine evaluated at submission: limits, receipt thresholds, per diems, mileage rates and blocked categories
- Approval routing by cost centre, amount band and delegation, with out-of-office fallback
- Mileage capture from address pairs with published rates per jurisdiction and per vehicle class
- Multi-currency with the rate applied at transaction date and the reconciliation difference recorded
- VAT and tax treatment per jurisdiction with a reclaim-ready export
- Reimbursement file generation for payroll or direct bank payment, with a matching ledger entry
- Duplicate and anomaly detection across claims, cards and submitters
Data model
Stack
- frontend
- Next.js 15 App Router + Tailwind, with an installable PWA doing camera capture, client-side image compression and IndexedDB queueing
- backend
- NestJS on Node 22 — REST, plus an OCR pipeline, a policy evaluator and a card-matching worker
- database
- PostgreSQL 16 with Row Level Security by cost centre and an append-only approval ledger
- cache
- Redis 7 for exchange rates, policy compilation and approval hierarchy lookups
- queue
- BullMQ for OCR, card feed ingestion, matching, reimbursement file generation and ERP posting
- auth
- OIDC against the customer IdP, with cost-centre scope derived from Ensemble or the HRIS feed
- search
- PostgreSQL tsvector across merchants, descriptions and OCR text
- ai
- Optional line-item categorisation and policy-explanation drafting through an LLM gateway, always with the rule that fired shown alongside
Parity, honestly
What we match, and what we do not.
The rows marked No are the important ones. If one of them is the reason you bought Expensify, keep buying it — and we will tell you that on the first call rather than the fifth month.
| Capability | Expensify | Ours | Note |
|---|---|---|---|
| Mobile receipt capture and OCR | Yes | Yes | — |
| Corporate card feed matching | Yes | Yes | Amex, Visa and Mastercard commercial feeds plus bank CSV. |
| Policy engine with per diems and mileage | Yes | Yes | Rules are code, versioned, with a dry-run against last quarter's claims before a change goes live. |
| Approval routing with delegation | Yes | Yes | — |
| Multi-currency with dated rates | Yes | Yes | — |
| ERP posting to NetSuite, SAP or Dynamics | Yes | Yes | One properly specified posting integration per ERP, with reconciliation, rather than a generic connector. |
| Duplicate and anomaly detection | Yes | Yes | — |
| Corporate card issuance and spend management | Yes | No | Expensify and Brex-style vendors issue cards, hold funds and earn interchange, which is why they can discount the software to $9. Tally is not a card issuer and will not become one. If issuing cards is what you actually want, buy that. |
| Global travel booking with negotiated inventory | Yes | No | SAP Concur Travel carries GDS connections, corporate airline agreements and hotel inventory built over two decades. Tally records travel expense; it does not book travel. Keep your TMC. |
| Automated VAT reclaim filing in multiple jurisdictions | Yes | Partial | Tally produces a reclaim-ready export with the right evidence attached. It does not file on your behalf, and specialist reclaim agents do that better. |
| Per-seat and per-report billing | Yes | No | Tally has neither. Occasional claimants cost nothing. |
| Audit sampling and receipt verification service | Yes | Partial | Tally flags and samples for your own reviewers. Expensify's human receipt-audit service is a labour offering we do not replicate. |
| Offline capture on a plane or in a country with no roaming | Yes | Yes | The PWA queues receipts locally and syncs when a network returns. |
| Direct query access to expense and card data | Partial | Yes | Finance joins expense against the ledger in SQL, without an export job. |
Reference architecture
Built twice, on purpose.
Every application in Techtons ships with a production architecture for AWS and one for Azure, using the same diagram grammar so you can read them side by side. Your cloud, your account, your bill.
Amazon Web Services
- Compute
- ECS Fargate services (api, ocr, matcher, worker) behind an ALB
- Data
- Aurora Serverless v2 PostgreSQL, ElastiCache Redis
- Storage and edge
- S3 for receipt images with a KMS CMK and a seven-year lifecycle to Glacier Instant Retrieval
- Identity
- Cognito federated to the customer IdP
- Observability
- OpenTelemetry to CloudWatch and X-Ray, with OCR confidence distribution tracked as a metric
- Infrastructure as code
- Terraform, one module per environment, remote state in S3 with a DynamoDB lock
Services
The decision worth arguing about
The non-obvious decision is putting a deterministic pre-pass in front of Amazon Textract instead of sending every receipt to it. Textract AnalyzeExpense costs about $0.01 per page and is very good, and the naive pipeline sends all 340,000 receipts a year through it for roughly $280 a month, which nobody would query. The reason we do not is latency and repeat structure: the same eight merchants — one coffee chain, two airlines, the taxi app, the hotel group — account for over half of all receipts in a typical corporate estate, and their receipt layouts are fixed. Tally runs a template matcher first, keyed on a perceptual hash of the header region, which resolves about 60% of receipts in 40 milliseconds on the device's own upload path rather than 3 to 6 seconds round-tripping to Textract. The claimant sees the amount populate before they have put the phone down, which is the single thing that determines whether people file expenses promptly. The trade is maintenance: merchants redesign receipts, templates rot silently, and a stale template produces a confidently wrong amount, which is worse than no extraction. So every template match is scored against the Textract result on a 2% sample, and a template whose agreement drops below 97% is disabled automatically and falls back to Textract until a human re-cuts it.
Microsoft Azure
- Compute
- Azure Container Apps (api, ocr, matcher, worker) with KEDA scaling on Service Bus depth
- Data
- Azure Database for PostgreSQL Flexible Server, Azure Cache for Redis
- Storage and edge
- Blob Storage with customer-managed keys, lifecycle tiering to Cool then Archive at the statutory retention boundary
- Identity
- Microsoft Entra ID, with cost-centre scope from Entra group membership
- Observability
- Azure Monitor with Application Insights
- Infrastructure as code
- Bicep in an azd-compatible layout
Services
The decision worth arguing about
Azure's equivalent of Textract is Document Intelligence with the prebuilt-receipt model, and it is priced comparably at roughly $10 per 1,000 pages, so the template pre-pass argument carries across unchanged. Where Azure differs is the archive tier, and it is a trap worth naming. Blob Archive costs about $0.00099 per GB per month against $0.0184 for Hot, which makes seven-year receipt retention look nearly free, and every cost review proposes it. The problem is rehydration: pulling a blob out of Archive takes up to 15 hours on standard priority, or about an hour on high priority at roughly ten times the read cost. A tax audit that asks for 4,000 receipts from 2021 becomes either a two-day wait or a surprise invoice. Tally tiers to Cool at 90 days and Archive only at four years, past the point where any routine audit reaches, and the Bicep sets a rehydration budget alarm because the failure mode here is a finance team quietly spending $900 on an afternoon of restores.
Sources
Every price on this page, with the page we read it from and the date we read it.
| Product | Plan | List price | Checked | Source |
|---|---|---|---|---|
| Expensify | Control (annual subscription) | $18 / seat/month | 2026-09-05 | help.expensify.com/articles/new-expensify/bi $18 per member per month inside your committed subscription size, but $36 per active member per month above it and $36 on pay-per-use. The rate drops to as low as $9 only if you also run company spend on the Expensify Card. |
| SAP Concur Expense | Concur Expense — Plus | Not published | 2026-09-05 | www.concur.com/about/pricing SAP Concur prices per expense report rather than per seat and publishes only starting rates: Base from $7 per report and Plus from $11 per report, with Premium quoted custom, so total cost tracks submission volume and is not a per-seat figure you can compare directly. |
Should you still be paying for Expensify?
Two weeks, fixed price. We audit what you actually use, map it against Tally, cost the replacement on your own AWS or Azure account, and give you a delivery plan. If the honest answer is to keep the licence, that is what the report will say.