
Step 1: Connect your stack
27 native integrations. 3,200+ tools via managed connectors. Most are one-click OAuth, some use API keys - Viktor handles auth and starts working. No webhooks, no Zapier zaps.
Viktor is an AI employee that connects to Expensify and helps you track employee expenses, corporate cards, and business travel, running 9 Expensify actions for you like Get Report, List Reports, and List Policies. Ask in plain English from your workspace; Viktor does the work in Expensify and reports back. Viktor connects with a scoped API key.
A Expensify AI agent is an AI that connects to your Expensify account and completes work in it - it doesn't just answer questions about Expensify, it takes the actions. Viktor is an AI employee that works in Expensify on your behalf and delivers the finished result to your workspace.
Unlike workflow builders such as Zapier or Make, there is nothing to configure - no triggers to map, no workflows to maintain. You describe the outcome in plain English, and Viktor picks the right Expensify actions, chains them with the other 3,200+ tools it connects to, and asks for approval before anything sensitive runs.
About Expensify
From unlimited receipt scanning and mileage tracking to next-day reimbursement, automate your preaccounting system with an easy to use expense tracking app.
You ask in your workspace
Describe what you need in plain English
Viktor picks the actions
Selects from 9 Expensify actions, chains them together
Runs in Expensify
Helps you track employee expenses, corporate cards, and business travel - your real data.
Reports back
Delivers the finished result to your workspace
Messages you'd actually send. Paste one into your workspace, swap in your specifics, and Viktor takes it from there.
“Check Expensify for expense reports awaiting my approval and summarize them.”
— you, to @Viktor
“Find receipts missing from this month's Expensify report and remind the team.”
— you, to @Viktor
“Watch Expensify for a purchase over the policy limit and alert me right away.”
— you, to @Viktor
“Book this trip in Expensify within the standard policy and send me the itinerary.”
— you, to @Viktor

27 native integrations. 3,200+ tools via managed connectors. Most are one-click OAuth, some use API keys - Viktor handles auth and starts working. No webhooks, no Zapier zaps.
Message Viktor in Slack like you'd message a teammate. "Reconcile this month's invoices and flag anything weird." "Pause Meta campaigns above $40 CPA and move the budget to winners." Plain English, any tool.
Viktor opens the tools, runs the work, and posts back what changed. Sensitive actions wait for your approval. Everything is logged. You stop doing the work and start reviewing it.
Ask in plain English from your workspace. Viktor picks the right Expensify actions, runs the work, and reports back. No workflows to build.
Mark an APPROVED Expensify report as REIMBURSED via the Integration Server reportStatus updater. This is the only report-status transition the API supports — Approve and Reject are not available (attempting APPROVED returns responseCode 410). Use List Reports with reportState=APPROVED to find reports eligible for reimbursement.
Search Expensify reports by state and/or date range and return a structured JSON array of report summaries (reportID, reportName, total, status, submitterEmail, etc.), NOT a file. Use this to find reports before acting on them. Under the hood this calls the Report Exporter with an embedded Freemarker JSON template and reads the result in memory (no /tmp file written). You must provide either a reportState or a startDate/endDate range. Note: OPEN reports cannot be returned when an employeeEmail filter is set (API restriction). Use List Policies to discover valid policy IDs for the optional policyId filter. Use Get Report to retrieve a single report's full expense line items.
Retrieves a list of policies.
List individual expenses (transactions) for an employee within a date range, returning a structured JSON array (each with amount, currency, merchant, created date, category, receiptURL, reportID). NOT a file. Implemented via the Report Exporter with an embedded Freemarker JSON template that flattens transactionList, read in memory. Use List Policies to discover valid IDs for the optional policyId filter. To read all expenses on one specific report, use Get Report instead.
Retrieve a single Expensify report by ID, returning a structured object with the report metadata plus its complete expense line-item list (per-expense amount, currency, merchant, date, category, receiptURL, etc.). NOT a file. Implemented via the Report Exporter with reportIDList set to the given ID and an embedded Freemarker JSON template read in memory. Use List Reports to discover report IDs. This action also covers per-expense reads: the returned transactionList contains full expense details, so a separate expense-by-ID lookup is unnecessary.
Export Expensify reports to a file (csv, xls, xlsx, txt, pdf, json, xml).
Export a report to PDF.
Creates a new report with transactions in a user's account.
Creates a new expense.
Ask for outcomes that span tools - Viktor pulls from Expensify, cross-references the rest of your stack, and delivers one finished result.
Yes. Expensify is one of the 3,200+ tools Viktor connects to, via a managed connector. Once connected, anyone on your team can put Viktor to work in Expensify from their workspace - no workflow builder, no code.
One hire. The output of a team.
Viktor works nights, remembers every decision, and connects to 3,200 tools. Start free with $100 in credits, then $50 a month.