Skip to content

Remit

Scheduled Oct 6, 2026

Invoice capture to payment run, on your bank rails.

Replaces

  • BILL (Bill.com) · BILL Operations, LLC $89 per seat per month (Corporate), about $427,200/yr at 400 seats
  • Tipalti · Tipalti Inc. $99 per org per month (Accounts Payable (starting price)), about $1,188/yr at 400 seats

Rented, per year

$427,200

BILL (Bill.com) list price at 400 seats.

Owned, per year

$5,640

AWS infrastructure only. Azure is $7,680.

Build

10 weeks

2 engineers. To parity on the ten core features, including one bank connection with ISO 20022 pain.001 output and camt.053 reconciliation, and migration of open invoices and supplier bank details. Each additional bank is roughly one to two weeks depending on whether it offers an API or only SFTP.

Difficulty

4/5

Substantial. Compliance or realtime depth involved.

Reference organisation: 400 employees of whom 25 are finance staff and invoice approvers with system access, ~14,000 invoices per year, 900 suppliers, 3 legal entities, 4 bank accounts, 2 currencies, 10-year document retention, single region, prod + non-prod. 3-year Compute Savings Plan on Fargate / 3-year reservation on Container Apps. Aurora minimum 0.5 ACU. Azure figure includes the workload-profiles environment and NAT Gateway floor described above. Document extraction modelled at roughly 21,000 pages a year, which is a negligible line on both clouds. Excludes bank charges, transaction fees, FX spread and any sanctions screening data subscription. These figures are infrastructure only and exclude the build.

What it is

Remit is accounts payable automation: invoice capture from email and portal, extraction, coding, matching against purchase orders and receipts, approval routing, duplicate detection, payment run assembly and remittance advice, with the resulting payment instructions handed to your own banks over your own connectivity. It suits finance teams processing roughly five thousand to a hundred thousand invoices a year across several entities. Remit does not hold your money and is not a payment provider. It replaces the workflow, the coding and the controls; the rails stay with your bank.

Why this one stops making sense

  • BILL Corporate is $89 per user per month, which at a 25-person finance and approver population is $26,700 a year before a single transaction fee. Tipalti starts at $99 a month and then charges per invoice and per payment on top.
  • Per-user pricing in AP is backwards. Approvers are occasional users — a department head approving four invoices a month — and they are the population you most need inside the system rather than approving over email.
  • Transaction fees mean the tool's revenue rises with your payment volume, which is a strange alignment for a control system whose job is to stop payments.
  • Your AP ledger is the highest-fidelity record of what the company actually buys, and it is the input to every spend negotiation. Behind an export limit it is much less useful.
  • Duplicate detection, three-way match tolerance and approval thresholds are all policy decisions specific to you. In Remit they are versioned rules with test cases; in a SaaS product they are settings screens nobody can review.

What ships

  • Invoice intake from a dedicated mailbox, a supplier portal upload and EDI or e-invoicing feeds
  • Extraction of header and line data with per-supplier layout learning, and a correction UI that feeds the model
  • Duplicate detection across supplier, amount, invoice number and fuzzy date windows
  • Two- and three-way matching to purchase orders and goods receipts with configurable tolerances
  • GL coding with per-supplier defaults, split coding across cost centres and project codes
  • Approval routing from the same delegation-of-authority matrix Procure uses, with mobile-friendly approval
  • Payment run assembly: due-date selection, early-payment discount capture, per-bank batching and a maker-checker release step
  • Payment file generation in ISO 20022 pain.001, NACHA and BACS formats, plus bank API submission where available
  • Remittance advice to suppliers and automated reconciliation from bank statement import (camt.053)
  • Accrual reporting for invoices received but not yet posted, straight into the period-end close

Data model

SupplierBankAccountInvoiceInvoiceLineMatchResultCodingRuleApprovalStepPaymentRunPaymentInstructionPaymentFileRemittanceAdviceBankStatementReconciliationMatchAuditEvent

Stack

frontend
Next.js 15 App Router + Tailwind + TanStack Query, with a side-by-side document viewer and coding pane
backend
NestJS on Node 22; the payment run implemented as an explicit state machine with database-enforced transitions
database
PostgreSQL 16 with Row Level Security per entity, and an outbox table as the payment-instruction source of truth
cache
Redis 7 for extraction job coordination and matching candidate sets
queue
BullMQ for extraction, matching, remittance dispatch and statement import
auth
OIDC against the customer IdP; payment release requires step-up authentication regardless of session age
search
PostgreSQL tsvector across invoice text, supplier names and reference numbers
ai
Optional: line-item extraction on unseen supplier layouts and coding suggestions, always shown as a suggestion a human accepts. No invoice is ever paid on a model's output alone.

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 BILL (Bill.com), keep buying it — and we will tell you that on the first call rather than the fifth month.

CapabilityBILL (Bill.com)OursNote
Invoice capture and data extractionYesYes
Duplicate detectionYesYesRules are explicit and tunable rather than a vendor black box.
PO and receipt matching with tolerancesYesYes
Approval routing with segregation of dutiesYesYesMaker-checker on payment release is enforced at the database, not just the UI.
Unlimited approver seatsNoYesThe department heads who approve four invoices a month cost nothing.
ISO 20022, NACHA and BACS payment file generationYesYes
Bank statement reconciliationYesYescamt.053 import with automated matching and an exceptions queue.
Accrual and period-end reportingPartialYesDirectly queryable, which is what your auditors actually want.
Moving the moneyYesNoThis is the fundamental boundary. BILL and Tipalti are licensed money transmitters: they hold funds, they debit your account, they disburse, and they carry the regulatory apparatus that requires. Remit instructs your bank and never touches funds. If what you want is one provider who takes money out of one account and makes it appear in a supplier's account in Vietnam, that is a payments business and we are not it.
Global payment network across 190 countries and 120 currenciesYesNoTipalti's real product is the payout network — local rails, FX, method selection per country. Remit reaches whatever your banks reach. For a company paying suppliers in four countries that is fine. For one paying five thousand creators in sixty countries it is not, and you should keep Tipalti.
Tax form collection and 1099 / 1042-S filingYesNoTipalti collects W-9 and W-8 series forms, validates them, applies withholding and files. Remit stores the forms and computes the data; the filing itself goes to your tax provider. Reproducing a filing engine across US and EU regimes is a separate product.
Supplier self-service portal for invoice status and payment historyYesYesShared with Procure's supplier portal, so a supplier has one login.
Payee sanctions screening built inYesPartialWe call the screening provider you already contract with and block release on a hit. We do not bundle the data.
Card issuing and virtual cards for spend controlYesNoOut of scope. Card issuing needs a BIN sponsor and a programme manager, which is a licensing question rather than an engineering one.

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 (api, extraction, worker, payments) with the payments service on its own task role
Data
Aurora Serverless v2 PostgreSQL with an encrypted read replica for reporting
Storage and edge
S3 for invoice documents and generated payment files, Object Lock on the payment file bucket
Identity
Cognito federated to the customer IdP, with a separate WebAuthn step-up for payment release
Observability
OpenTelemetry to CloudWatch; alarms on stuck payment runs and on any duplicate-instruction rejection
Infrastructure as code
Terraform; bank credentials in Secrets Manager, signing keys in CloudHSM or KMS with an asymmetric key

Services

ECS FargateALBAurora Serverless v2ElastiCache RedisS3 Object LockTextractSQSEventBridgeSecrets ManagerKMSNAT Gateway with Elastic IPCognitoSESCloudWatch

The decision worth arguing about

The non-obvious decision is refusing to let the queue be the source of truth for a payment run, which is the opposite of how every other worker in this library is built. SQS standard delivery is at-least-once: under the right combination of visibility-timeout expiry and consumer slowness, the same message is delivered twice. Everywhere else in this catalogue that is a non-event, because the worst outcome is a duplicated webhook or a repeated email. In accounts payable it is a double payment, and a double payment is the failure mode that ends careers and gets an entire system torn out. So the payment run is a state machine in Postgres with transitions enforced by a check constraint and a unique partial index on (payment_run_id, state) that makes a second transition into RELEASED physically impossible; SQS carries nothing but a wake-up signal saying a run may need attention. If a message is delivered twice, the second worker takes the advisory lock, reads the state, sees the run is already released and exits. If a message is lost entirely — which SQS also permits in principle — a two-minute sweeper finds the pending run and processes it, so the failure mode is a short delay rather than a missing payment. The cost of this design is that we have given up horizontal throughput on the payments path: the run is effectively serialised per bank account, and a batch of forty thousand instructions takes minutes rather than seconds. For AP that is the right trade every time. Two smaller notes: Textract's AnalyzeExpense handles header fields well and line items inconsistently across supplier layouts, so we learn a per-supplier template from the first few human-corrected invoices and use Textract as the fallback for unseen layouts rather than the primary path; and the payment file bucket carries S3 Object Lock so that a generated file cannot be altered between approval and transmission.

Microsoft Azure

Compute
Azure Container Apps on a workload-profiles environment inside a customer VNet
Data
Azure Database for PostgreSQL Flexible Server, private endpoint only
Storage and edge
Blob Storage with immutable policy on the payment file container
Identity
Microsoft Entra ID with Conditional Access requiring phishing-resistant MFA for the payments role
Observability
Azure Monitor and Application Insights
Infrastructure as code
Bicep; bank credentials in Key Vault, signing keys in Key Vault Managed HSM

Services

Container Apps (workload profiles)Application GatewayPostgreSQL Flexible ServerCache for RedisBlob StorageDocument IntelligenceService BusKey Vault Managed HSMNAT GatewayEntra IDCommunication ServicesLog Analytics

The decision worth arguing about

The Azure decision that shapes the deployment is not about documents or workflow — it is about a single IP address. Almost every corporate bank that accepts a payment file over SFTP allowlists the source IP, and several that offer APIs allowlist as well. That means the payments service needs a stable, dedicated egress address, and on Azure Container Apps a stable outbound IP requires a NAT Gateway attached to the subnet, which in turn requires the Container Apps environment to be a workload-profiles environment inside your own VNet rather than the default consumption-only environment. Workload profiles bill a per-node baseline whether or not anything is running, so this one requirement — a fixed IP the bank will accept — puts roughly $150 to $200 a month of floor under the Azure deployment that the AWS shape avoids, because on AWS a NAT Gateway with an Elastic IP is a smaller fixed charge and Fargate needs no equivalent environment upgrade. It is worth knowing before you compare the two numbers below and conclude Azure is simply more expensive. There is a second-order benefit we take while we are there: because the environment is VNet-integrated anyway, PostgreSQL runs with a private endpoint and no public networking at all, which for a system generating payment instructions is a materially better posture and the sort of thing an auditor asks about. Document Intelligence's prebuilt invoice model replaces Textract with broadly comparable behaviour and the same caveat about line items; we run the same per-supplier template learning on top of it, so the extraction layer is genuinely portable between the two clouds rather than being rewritten.

Sources

Every price on this page, with the page we read it from and the date we read it.

ProductPlanList priceCheckedSource
BILL (Bill.com)Corporate$89 / seat/month2026-09-05www.bill.com/pricing

BILL lists AP & AR at $49 per user per month (Essentials), $65 (Team) and $89 (Corporate), with Enterprise quoted. Transaction fees for cheques, international payments and card are charged on top of the subscription.

TipaltiAccounts Payable (starting price)$99 / org/month2026-09-05tipalti.com/pricing/

Tipalti publishes "Plans starting at $99/month" for Accounts Payable and $249/month for Mass Payments. Both are floors: the page states that transaction-based fees apply per invoice and per payment, and that the final price depends on payment volume, legal entities, modules and payment methods. The $99 is not a price you will pay.

Should you still be paying for BILL (Bill.com)?

Two weeks, fixed price. We audit what you actually use, map it against Remit, 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.