Expensify ACTION
List Reports
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. See the documentation
- Action
- Read only
- API key
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's Expensify account once, then configure and run List Reports from your backend or agent.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "expensify-list-reports",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
expensify: { authProvisionId: "apn_xxxxxxx" },
reportState: "Report State",
startDate: "Start Date",
},
})
console.log(result)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "expensify-list-reports",
"configured_props": {
"expensify": { "authProvisionId": "apn_xxxxxxx" },
"reportState": "Report State",
"startDate": "Start Date"
}
}'// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "expensify",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
name: "expensify-list-reports",
arguments: {
reportState: "Report State",
startDate: "Start Date",
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
reportState Report State | string | Filter by a single report state. Closed set: OPEN, SUBMITTED, APPROVED, REIMBURSED, ARCHIVED. Leave empty to return reports of ALL states in one call — do not call this action once per state. Provide this or a startDate/endDate range. Optional |
startDate Start Date | string | Only include reports on/after this date, formatted yyyy-mm-dd (e.g. 2026-01-01). Required if reportState is omitted. Optional |
endDate End Date | string | Only include reports on/before this date, formatted yyyy-mm-dd (e.g. 2026-07-24). Required by the API when the date range exceeds one year. Optional |
employeeEmail Employee Email | string | Restrict results to this employee's reports. OPEN reports are not returned when this filter is set (API restriction). Optional |
policyId Policy ID | string | Optional policy ID to filter by. Free-form string; run List Policies first to obtain valid IDs. Optional |
limit Limit | integer | Maximum number of reports to return. Min 1, max 1000. Optional |
REFERENCE
Tool details
Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.
- Registry key
- expensify-list-reports
- Version
- 0.0.2
- App
- Expensify
- Authentication
- API key
- Read-only
- Yes
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗