๐Ÿงพ Process sales CSVs into invoices with data tables and email notifications

โšก 189 views ยท ๐Ÿงพ Invoice Processing

Description

๐Ÿงพ Smart Sales Invoice Processor (Data tables Edition)

Transform uploaded sales CSV files into validated, enriched invoices, all handled natively inside n8n using Data tables, validation logic, enrichment, duplicate detection, and automated email notifications.

This workflow demonstrates a full ETL + business automation pattern, turning raw CSV data into structured, auditable records ready for storage and customer notifications.


โœจ Features


๐Ÿงฉ Use Cases


โš™๏ธ Setup Instructions

1๏ธโƒฃ Create two n8n Data tables

Products

Stores your product catalog with SKU-based pricing and tax details.

ColumnTypeExample
skuStringPROD-001
nameStringPremium Widget
priceNumber49.99
tax_rateNumber0.10

image.png


Invoices

Stores validated, calculated invoices created by this workflow.

ColumnTypeExample
invoice_idStringINV-20251103-001
customer_emailStringjohn@example.com
order_dateDate2025-01-15
subtotalNumber99.98
total_taxNumber10.00
grand_totalNumber109.98
created_atDateTime2025-11-03T08:00:00Z

image.png


2๏ธโƒฃ Import Workflow

Import the provided workflow JSON file into your n8n instance.

3๏ธโƒฃ Test the Workflow

Use cURL or Postman to send a test CSV to your endpoint.

curl -X POST \
  -H "Content-Type: text/csv" \
  --data-binary $'sku,quantity,customer_email,order_date\nPROD-001,2,john@example.com,2025-01-15\nPROD-002,1,jane@example.com,2025-01-15' \
  https://<your-n8n-url>/webhook/process-sales

๐Ÿ“ฆ Example Responses

โœ… Success (HTTP 200)
{
  "success": true,
  "processed_at": "2025-11-04T15:36:52.899Z",
  "invoice_count": 1,
  "invoices": {
    "to": "john@example.com",
    "subject": "Invoice INV-1762270612772-1 - Order Confirmation",
    "body": "Dear Customer,\n\nThank you for your order!\n\nInvoice ID: INV-1762270612772-1\nOrder Date: 1/14/2025\n\nSubtotal: $99.98\nTax: $10.00\nGrand Total: $109.98\n\nThank you for your business!\n\nBest regards,\nSales Team"
  },
  "email_notifications": [
    {
      "to": "jane@example.com",
      "subject": "Invoice INV-1762270612772-2 - Order Confirmation",
      "body": "Dear Customer,\n\nThank you for your order!\n\nInvoice ID: INV-1762270612772-2\nOrder Date: 1/14/2025\n\nSubtotal: $89.99\nTax: $9.00\nGrand Total: $98.99\n\nThank you for your business!\n\nBest regards,\nSales Team"
    }
  ],
  "message": "All invoices processed and customers notified"
}
โŒ Validation Error (HTTP 400)

Occurs when the CSV file is missing required columns or contains invalid data.

{
  "success": false,
  "message": "CSV validation failed",
  "error": "Validation failed: [ { \"row\": 2, \"errors\": [\"Valid email is required\"] } ]"
}

๐Ÿง  How It Works

  1. Webhook receives uploaded CSV or raw text
  2. Code node parses and validates data
  3. Data table node loads product info (price, tax rate)
  4. Calculation node generates invoice totals per customer
  5. Duplicate check prevents reprocessing
  6. Data table insert saves invoices
  7. Email preparation creates personalized confirmations
  8. Webhook response returns structured JSON (200 / 400 / 409)

๐Ÿ” Requirements


๐Ÿ Result Highlights

๐Ÿ”— Nodes Used

Webhook, Extract from File, Data table

๐Ÿ“ฅ Import

Download workflow.json and import into n8n: Workflow menu โ†’ Import from File

๐Ÿ“– Importing guide ยท ๐Ÿ”‘ Credential setup