Create quotation drafts from CSV requests with a Google Sheets price list

Go to Workflow
0 views
Built by Andy Andy
Created on October 08, 2026

Description

Quick overview
Create a quotation draft from a request CSV and an approved price list, with unmatched or conflicting items held for review. Built for parts distributors and sales teams using exact SKUs.

How it works
Receives an n8n Form submission with two uploaded CSV files (request and price list) and a chosen delimiter.
Validates that both uploads are UTF-8 .csv files within size limits and reads their contents as text.
Parses both CSVs, enforces required headers, and builds a catalogue from the price list while flagging invalid rows and blocking duplicate SKUs.
Validates each request line (line_id, quantity, unit) and matches it to exactly one case-sensitive SKU in the catalogue, holding unknown, blocked, duplicate, or unit-mismatched lines for review.
Calculates unit prices and line totals for accepted lines, keeps separate totals per currency, and generates report.json plus quotation-draft.csv and review.csv.
Packages the three files into a single ZIP and returns it as the form completion download with a status summary.

Setup
Import the workflow and run it from the editor to open the n8n Form trigger.
Prepare two UTF-8 CSV files matching the required schemas (request: line_id, sku, quantity, unit; price list: sku, description, unit, unit_price, currency).
Upload both CSVs in the form and select the delimiter that both files share (comma, semicolon, or tab). Submit the form and download quotation-review.zip. Inspect report.json and review.csv, resolve all reported issues, and check the accepted line totals before using the draft. A partial draft is not a complete offer.

Requirements
Tested on n8n 2.28.6. Built-in nodes only; no API credentials or paid services. Existing hosting costs apply. Both files must be UTF-8 CSVs using the same delimiter. Limits: 4,000,000 bytes per file, 1,000 request rows, 10,000 catalogue rows. Supported currencies: USD, EUR, GBP, THB, JPY, KWD.

Customization
Change the input files and delimiter in the form. Rename source headers to the documented schema. Validation changes require code edits and retesting.

Additional info
CSV-only: no Google Sheets connection, PDF extraction, tax calculation, or customer delivery. Unknown, duplicate, conflicting, and invalid items remain unpriced for human review. A partial draft is not a complete offer. Enable form authentication before publishing a production form.

This workflow was created by Andy and shared publicly on the n8n community template library. n8nFind indexes it for discovery — the workflow remains the property of its original creator.

Nodes Used (4)

Code
n8n-nodes-base.code
Compression
n8n-nodes-base.compression
Google Sheets
n8n-nodes-base.googleSheets
HTTP Request
n8n-nodes-base.httpRequest