Quote Reply Signal - setup

This separate helper records a reply signal for Flowpaja Quote Follow-Up Draft FREE's Quotes columns. It sends nothing and leaves existing drafts intact. Paid Status-based products need separate mapping.

1. Import Flowpaja_Quote_Reply_Signal_blueprint.json into an empty, disabled Make scenario. Connect your own Gmail and Google Sheets accounts. Connection IDs and the source spreadsheet are deliberately blank.
2. Keep A-G: Quote ID, Client Name, Client Email, Project, Sent Date, Replied, Draft Created. Append H Reply Message ID and I Reply Observed At UTC. Headers occupy row 1. Use FALSE/TRUE or checkboxes in F; H/I start blank. Production quote IDs must be unique.
3. FICTIONAL_EXAMPLE.csv is isolated training data, not customers. Its duplicate-ID pair intentionally tests HOLD. Do not import it over live records. Draft Created stays blank for undrafted quotes; its example marker represents an existing fictional draft.
4. When you separately send an authorized original quote yourself, include one subject tag such as [FPQ:DEMO-001]. ID: 1-40 uppercase ASCII letters/digits/underscore/hyphen. The reply must retain the tag. Earlier untagged quotes do not fit. C must hold the client's exact address; aliases need manual handling. This helper creates no sending permission.
5. Configure Gmail Watch for your quote mailbox/label, full format, limit 1, mark-seen off. Choose From now on. Client replies normally land in INBOX (the preset folder); if a Gmail filter skips the inbox, choose that label instead. Your outgoing quote stays in Sent, so it is not picked up. Full format fetches body into Make; no body is written to Sheets. Review retention settings.
6. Select your own spreadsheet and Quotes tab in Search Rows, Column range A-Z, headers in row 1, exact column-A filter, limit 2. Keep the guards and the router after Search Rows. It routes on Total number of bundles: 0 = no matching row, nothing is written; 1 = Update Row maps that row (F=TRUE, H=message ID, I=observation UTC, RAW input) if the sender matches C and F/H show no earlier reply; 2 = the duplicate ID is held and flagged as the variable HOLD_duplicate_quote_id in the run history, nothing is written.
7. Before scheduling, verify your mappings on an isolated copy with owner-controlled inputs. Pause other writers; avoid sorting/deleting rows during runs.

Tested in Make on 6 Oct 2026 against a real Gmail inbox, with one tagged test quote and one reply sent from Flowpaja's own mailbox to itself (both landed in INBOX) and a fictional Quotes sheet. Watch Emails output used: fromEmail, subject, id and headers In-Reply-To. Results: 1 matching row = F/H/I of that row updated, nothing else changed (3 credits per run); 0 rows = nothing written; 2 rows = held and flagged, nothing written; same reply again on an already marked row = nothing written; the quote itself (no In-Reply-To) = skipped. The scenario contains no module that sends email.

Missing/invalid tags, reply headers, sender/ID, zero/multiple matches, unknown Replied state or existing trace cause no update. Duplicate-ID holds show as HOLD_duplicate_quote_id in the run history; other holds show as filtered bundles. No recovery is supplied. Sender/header matching is not authentication, consent, acceptance or payment. Out-of-office/forward/spoof cases need review. No transaction, exactly-once or credit-saving guarantee; one message per run can cause backlog.
