Quick overview
This workflow turns Gmail or form-submitted quotation requests into unsent freee Invoice quotation drafts by extracting requested items with Anthropic Claude and pricing them from a Google Sheets price list, then notifies staff with the result.
How it works
- Triggers when a new matching email arrives in Gmail or when someone submits the n8n form with a pasted quote request.
- Normalizes the request into a common structure and loads configuration values like freee company ID, spreadsheet ID, and staff notification email.
- Fetches your price list from Google Sheets and retrieves your partner list from the freee API.
- Sends the request text plus a catalog view of the price list (without prices) to Anthropic Claude to extract requested items, quantities, units, and supporting quotes from the original text.
- Validates Claude’s extraction against the original request, prices only verifiable items using the sheet’s unit_price and tax_rate, and resolves the customer to a freee partner by sender email or exact company-name match.
- Creates an UNSENT quotation draft in freee Invoice with priced lines and adds “※要確認 / To check” note lines for ambiguous or unpriceable items.
- Sends a detailed result to staff via Gmail or shows it as the form completion message, including the freee draft link when available and any items that were dropped or need review.
Setup
- Create and authorize a freee Developers app with access to partners (read) and freee Invoice quotations (read/write), then add an OAuth2 credential in n8n for the freee API.
- Add credentials for Gmail (trigger and send), Google Sheets OAuth2 (to read the price list via the Sheets API), and Anthropic (Claude) in n8n.
- Prepare a Google Sheet tab with headers: code, name, aliases, unit, unit_price, tax_rate, and fill it with your catalog and pricing.
- Update the workflow’s Config values (freee_company_id, price_sheet_id, price_sheet_tab, staff_email, tax settings, timezone) and adjust the Gmail trigger search query to match your incoming request emails.
- If using the form entry path, publish the form and share its URL with your team for manual request pasting.
Requirements
- freee with freee Invoice (freee請求書) and an app in freee Developers (permissions: partners read, [請求書] all document types read/write); an n8n OAuth2 API credential for freee. Gmail and Google Sheets (OAuth2), an Anthropic API key (one Claude call per request). A price list sheet with the header code, name, aliases, unit, unit_price, tax_rate.
Customization
- Set the freee company ID, sheet, staff e-mail, honorific, tax entry method, rounding and expiry in Config. Change which mails count in the Gmail search of New request mail (or use a label). Change how strict the checks are in Check and price. Send the notice to Slack or Teams instead of Gmail.
Additional info
The AI never sets prices: Claude lists items, quantities and the exact words; code checks them and takes every unit price from the sheet. Unknown items and quantities not written in the mail become "To check" lines without a price. Tested on a freee developer test company (corporate Starter) with a made-up price list: five requests including a real Gmail mail and the form; freee's totals matched the workflow's own every time.