[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 Expensify expenses from receipts

> Turn a folder of receipts into Expensify expenses with merchant, date, amount and category, receipt attached. Runs daily from Claude Code or a script.

Source: https://cotlet.dev/integrations/expensify-api-mcp-server/create-expenses-from-receipts

After a trip or a busy week you have a pile of receipt photos and PDFs, and each one needs its own expense with the right workspace, category and the image attached before the report can go out.

Cotlet does it in your own Expensify account with get\_workspace, create\_expense and attach\_receipt, 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 does read receipts itself with SmartScan, and the Integration Server has an expense creator job (checked 14 Oct 2026). That job takes values you already extracted, and the API reference describes no job that attaches a receipt image to an expense. Expensify's MCP server is read-only, so it cannot create anything.

## How you do it in Expensify today

1. In Expensify, click Create, choose Create Expense, then Manual, enter the amount and currency, and click Next.
2. Choose a workspace or an individual, then add the description, category, tags and tax, and set whether the expense is reimbursable or billable.
3. Click Create expense, then open it and click the green + on the receipt icon to add the receipt file.
4. The Scan icon in the left navigation tabs takes a receipt through drag and drop or Choose files, and you can also forward it to receipts@expensify.com.
5. Each receipt repeats the same screens, and the category and tags are easy to leave blank when the pile is long.

## How to create Expensify expenses from receipts

Prompt

```
Read the receipts in my Receipts folder. For each one, create an expense in the Acme Studio workspace with the merchant, date, amount and a category, attach the receipt image, and list anything you could not read.
```

1. 01  
### Learn the workspace rules first  
Your agent reads the workspace once with get\_workspace and keeps its category and tag names, so it only picks values the workspace already has. A receipt that fits no category is listed for you instead of getting an invented one.
2. 02  
### Read each receipt  
The agent reads the merchant, date, total and currency off the image or PDF. If the total is unclear, or two amounts compete (subtotal and total with tip), it skips the file and says which.
3. 03  
### Create the expense  
create\_expense runs once per receipt with the workspace, merchant, date, amount, currency, category and a short description. Each call waits for your OK by default, so you see the amount before it lands in your account.
4. 04  
### Attach the image  
attach\_receipt adds the original file to the expense it just created, so approvers see the receipt next to the amount. If the call fails, the agent keeps the expense and reports which receipt is missing.
5. 05  
### Report the batch  
The agent returns what it created, the total per currency and the receipts it skipped, so nothing sits half done in your account.

### What you get back

Example data

```
Receipts read: 6
Created 5 expenses in Acme Studio
- Blue Bottle Coffee, 12 Oct, USD 42.50, Meals
- Uber, 12 Oct, USD 31.20, Travel
- Delta Air Lines, 13 Oct, USD 286.40, Travel
Receipt attached to all 5
Skipped 1: taxi-night.jpg (total not readable)
```

### Other ways to ask

- Create expenses from the PDFs in this folder, all as non-reimbursable and billable to the client "Northwind".
- Every evening, read new receipts from my Downloads folder and create expenses in Acme Studio, then show me the list.
- Read this one receipt and ask me for the category before creating the expense.
- Create expenses for these three emailed invoices, but attach nothing and leave the category blank.

## What Expensify allows, and what to know first

- Expensify creates a manual expense with an amount and currency, then a workspace or individual, then description, category, tags and tax, and a reimbursable or billable setting.
- Attaching a receipt to an existing expense is the green + on the receipt icon, and replacing one is Replace on the receipt image.
- On an Approved report only a Workspace Admin can attach or replace a receipt without unapproving the report first.
- Attaching or replacing a receipt posts an "added a receipt" system message on the expense showing who made the change.
- Workspace Merchant Rules can apply categories, tags and descriptions based on the merchant name, so some fields may be filled by Expensify after the expense exists.

create\_expense asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.

Sources: [Expensify Help: Create an expense](https://help.expensify.com/articles/new-expensify/reports-and-expenses/Create-an-Expense) · [Expensify Help: Attach and edit receipts on expenses](https://help.expensify.com/articles/new-expensify/reports-and-expenses/Attach-and-edit-receipts-on-expenses) · [Expensify Integration Server: API reference](https://integrations.expensify.com/Integration-Server/doc/)

## Call create\_expense from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/expensify/expenses \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workspace":"Acme Studio","amount":42.5,"currency":"USD","merchant":"Blue Bottle Coffee","date":"2026-10-12","category":"Meals","description":"Coffee with client before the Northwind kickoff"}'
```

Example response

```
{
"expense_id": "T7f3a9c",
"workspace": "Acme Studio",
"merchant": "Blue Bottle Coffee",
"date": "2026-10-12",
"amount": 42.5,
"currency": "USD",
"category": "Meals",
"description": "Coffee with client before the Northwind kickoff",
"reimbursable": true,
"has_receipt": false,
"report_id": null,
"created_at": "2026-10-14T09:31:00+02:00"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is expensify\_write → create\_expense. 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 Expensify expenses from receipts__
| Tool | Parameters |
| --------------- | ------------------------------------------------------------------------------------------------ |
| get\_workspace | workspace |
| create\_expense | workspace, amount, currency, merchant, date, category, tags, description, reimbursable, billable |
| attach\_receipt | expense\_id, receipt\_url, replace |

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

## Frequently asked questions

### Does it replace Expensify SmartScan?

No. SmartScan is a feature inside Expensify that reads a receipt you scan or forward. Your agent reads the receipt on your side and creates the expense with the values you approve, which suits receipts in a folder, an inbox or a script.

### 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 and submit a weekly Expensify expense report](https://cotlet.dev/integrations/expensify-api-mcp-server/submit-weekly-expense-report.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.
