Scheduled reports CSV and Excel report emails
Parse CSV and Excel reports sent by email
Many systems can only send a report as an emailed CSV or Excel file. This layout parses the attachment and turns each row into a line item with the columns you name, so the data reaches your webhook or a Google Sheet without anyone opening the file.
Use this layoutFree plan included: 2 layouts per endpoint.
- From
- Acme POS <reports@acme-pos.example>
- Subject
- Daily sales report: 2026-10-29
- Attached
- sales-2026-10-29.csv
Your daily sales report is attached.
{
"parsed": {
"status": "matched",
"layout": {
"id": "csv-reports",
"name": "Sales reports"
},
"fields": {
"date": "2026-10-29"
},
"lineItems": [
{
"sku": "LS-01",
"quantity": "4",
"revenue": "156.00"
},
{
"sku": "CT-02",
"quantity": "2",
"revenue": "48.00"
}
]
}
}Shortened: the delivery also carries parsed.attachments, with the text or rows read from sales-2026-10-29.csv.
The layout
It matches the email by its subject, reads each field with an RE2 pattern, and turns the list into line items, and parses the attachments. Edit any of it in the endpoint's settings, where the preview tries it on an email you captured as you type.
{
"id": "csv-reports",
"name": "Sales reports",
"match": {
"conditions": [
{
"field": "email",
"name": "subject",
"op": "contains",
"value": "sales report"
}
]
},
"fields": [
{
"name": "date",
"from": "subject",
"pattern": "(\\d{4}-\\d{2}-\\d{2})"
}
],
"lineItems": {
"from": "attachment",
"attachment": "*.csv",
"columns": [
{
"name": "sku",
"column": "SKU"
},
{
"name": "quantity",
"column": "Qty"
},
{
"name": "revenue",
"column": "Revenue"
}
]
},
"parseAttachments": true
}