[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Create and submit a weekly Expensify expense report

> Group the week's Expensify expenses into one report and submit it for approval every Friday, skipping held ones. Runs weekly, nothing to maintain.

Source: https://cotlet.dev/integrations/expensify-api-mcp-server/submit-weekly-expense-report

Every week someone has to remember to open Expensify, build a report from the loose expenses and press Submit, and the reimbursement waits until they do.

Cotlet does it in your own Expensify account with list\_expenses, create\_report, add\_expense\_to\_report and submit\_report, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=expensify) [All Expensify tools](https://cotlet.dev/integrations/expensify-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Expensify do this on its own?

Expensify can submit on a schedule by itself, but only through its own settings (checked 14 Oct 2026). Its help center describes How to Set Up Automatic Report Submissions and an instant submit option for a workspace. The Integration Server can create a report only for domain and policy admins after Expensify enables it, and no job submits one.

## How you do it in Expensify today

1. Click + Create, then Create report; the draft opens on your default workspace.
2. Select Add expense and create a new expense or add an existing one, or use More > Add expense from the report later.
3. To use another workspace, open More > Change workspace, choose it and select Save.
4. Open the report with at least one expense and select Submit; on a workspace with no approval workflow the button reads Mark as done.
5. The step repeats weekly and is easy to forget, and an expense that is on hold needs a fix before it can go.

## How to create and submit a weekly Expensify expense report

Prompt

```
Every Friday at 16:00, put all my unreported Acme Studio expenses from this week into a new report called "Week of {date}" and submit it for approval. Skip held expenses and tell me what you left out.
```

1. 01  
### Collect the week  
The agent lists expenses that are not on a report yet for Acme Studio, dated since Monday. It checks the held ones separately and leaves them out, because Expensify moves held expenses to a new Draft report on submit anyway.
2. 02  
### Check what is submittable  
It stops when nothing is left or when every expense is on hold or is a pending Expensify Card transaction, because Expensify hides Submit in both cases.
3. 03  
### Build the report  
create\_report makes the draft with your title, and add\_expense\_to\_report puts each expense in. Only expenses in your own account can go in a report, so the agent never tries a colleague's.
4. 04  
### Submit once  
submit\_report sends the report to the approval workflow. It asks for your OK first by default, and it reports a Mark as done result when the workspace has no approver.
5. 05  
### Say what is left over  
Held expenses and anything older than the week go back to you in a short list with the reason, so next Friday starts clean.

### What you get back

Example data

```
Created "Week of 12 Oct" in Acme Studio
Added 7 expenses, total USD 612.90
Submitted to Dana Reyes for approval
Left out 1: Uber, USD 31.20, on hold ("receipt unreadable")
```

### Other ways to ask

- On the last day of each month, submit all my draft reports in Acme Studio at once and list who approves them.
- Create the weekly report but do not submit it; show me the total and wait for my OK.
- Every Monday, submit last week's open report if it has at least one expense and nothing on hold.

## What Expensify allows, and what to know first

- A report cannot be submitted if every expense on it is on hold, or if every transaction is a pending Expensify Card transaction; the Submit button does not appear.
- If you submit a mix of held and unheld expenses, the held ones move to a new Draft report.
- Reports on a free Submit workspace must be submitted one at a time, so the batch Submit option is hidden for them.
- Only the person who submitted a report can retract it, with More > Retract, then edit the report and resubmit.
- If your workspace uses instant submit, valid expenses may go to a new report automatically without you submitting manually.

submit\_report asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [Expensify Help: Create and submit reports](https://help.expensify.com/articles/new-expensify/reports-and-expenses/Create-and-Submit-Reports) · [Expensify Help: Understanding report statuses and actions](https://help.expensify.com/articles/new-expensify/reports-and-expenses/Understanding-Report-Statuses-and-Actions) · [Expensify Integration Server: API reference](https://integrations.expensify.com/Integration-Server/doc/)

## Call submit\_report from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/expensify/reports/R10042/submit \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

Example response

```
{
"report_id": "R10042",
"status": "submitted",
"approver": "Dana Reyes",
"total": 612.9,
"currency": "USD",
"submitted_at": "2026-10-16T16:00:00+02:00"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is expensify\_write → submit\_report. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/expensify-api-mcp-server.md#automations)

## Expensify tools this automation uses

__Cotlet Expensify tools used to create and submit a weekly Expensify expense report__
| Tool | Parameters |
| ------------------------ | ---------------------------------------------------------------- |
| list\_expenses | workspace, since, until, on\_report, has\_receipt, limit, cursor |
| create\_report | workspace, title |
| add\_expense\_to\_report | report\_id, expense\_id |
| submit\_report | report\_id |

[All 14 Expensify tools with descriptions](https://cotlet.dev/integrations/expensify-api-mcp-server.md#tools)

## Frequently asked questions

### What if my workspace has no approval workflow?

Expensify shows Mark as done instead of Submit, and the report is finished without an approver. The agent reports that result as it is and does not claim an approval happened.

### Is it safe to connect Expensify to Cotlet?

Yes. You sign in to Expensify yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Expensify once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Expensify automations

- [Create Expensify expenses from receipts](https://cotlet.dev/integrations/expensify-api-mcp-server/create-expenses-from-receipts.md)
- [Approve Expensify expense reports by your own rule](https://cotlet.dev/integrations/expensify-api-mcp-server/approve-expense-reports-by-rule.md)
- [Expensify API and MCP server: every tool](https://cotlet.dev/integrations/expensify-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Expensify.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Expensify.

[Sign up free](https://cotlet.dev/app/signup?app=expensify)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
