{ "name": "Spintax cold-email bridge — unique copy per lead (and per product)", "nodes": [ { "parameters": { "content": "## Cold-email bridge — render here, send there\n\n### How it works\n\nSending platforms parse flat `{a|b|c}` at best — so this flow renders full-syntax spintax first and hands finished text to your sender. It loads lead rows, renders a unique subject and body per row (every top-level row field automatically becomes a `%variable%`), and ends at a placeholder where your sending integration connects.\n\n### Setup steps\n\n- Replace \"Load Sample Leads\" with your real source — Google Sheets, Airtable, a CRM or a database query.\n- Edit the spintax templates in the subject/body nodes to match your offer and fields.\n- Replace the final placeholder with your email node (Gmail, SMTP, an ESP API) and map the rendered `subject` + `body`.\n\n### Customization\n\n- Feed a **product catalog** instead of leads — the same Render-per-row flow writes a unique product description per product per storefront, with no duplicate content across sites.\n- Seeds are per-row expressions (`company + ':subject'`): every lead keeps a **stable, reproducible** variant across re-runs. Change the suffix to re-roll everyone, or seed by product + storefront (`:site-a`, `:site-b`) for multi-site catalogs.\n- Incoming values are **neutralized by default** — scraped data containing `{` or `|` stays text, never markup. Fixed variables you type yourself may deliberately contain spintax (e.g. `{Mr|Ms}`).", "width": 520, "height": 768 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -608, 32 ], "id": "120309ae-82bc-4c80-8034-a29dda68c445", "name": "Sticky Note" }, { "parameters": { "content": "## Start and load leads\n\nManual execution starts the workflow and the sample code node provides lead records, intended to be replaced by a real lead source such as a CRM, spreadsheet, or database.", "width": 416, "height": 336, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -48, 80 ], "id": "e2e957de-92cd-4a8e-ab11-200b16c0f11f", "name": "Sticky Note1" }, { "parameters": { "content": "## Render email copy\n\nTwo nearby spintax nodes generate unique variations for each lead, first rendering the email subject and then the email body. Conditionals (`{?has_discount?…|…}`) switch copy on data fields, and `{plural %in_stock%: unit|units}` keeps counts grammatical.", "width": 416, "height": 320, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 400, 96 ], "id": "3cd82464-62c1-4678-9582-cc68053933d8", "name": "Sticky Note2" }, { "parameters": { "content": "## Send prepared emails\n\nA placeholder pass-through node marks where the rendered subject and body should be handed off to the user's actual email-sending tool.", "width": 240, "height": 384, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 864, 32 ], "id": "dd669efb-eaf8-4362-87fc-1a6647ed956c", "name": "Sticky Note3" }, { "id": "sx-trigger", "name": "Manual Workflow Trigger", "type": "n8n-nodes-base.manualTrigger", "position": [ 0, 260 ], "parameters": {}, "typeVersion": 1 }, { "id": "sx-leads", "name": "Load Sample Leads", "type": "n8n-nodes-base.code", "position": [ 220, 260 ], "parameters": { "jsCode": "// REPLACE ME with your real source: Google Sheets, Airtable, your CRM…\n// Every top-level string/number/boolean field of an item automatically\n// becomes a %variable% in the Spintax node downstream.\nreturn [\n { json: { first_name: 'Ada', company: 'Brightline Gear', category: 'outdoor equipment', product: 'Trekker 45L backpack', price: '$129', in_stock: 14, has_discount: 'yes' } },\n { json: { first_name: 'Grace', company: 'Nordic Home', category: 'kitchenware', product: 'cast-iron skillet set', price: '$89', in_stock: 1, has_discount: '' } },\n { json: { first_name: 'Linus', company: 'Pixelparts', category: 'PC components', product: 'silent GPU cooler', price: '$59', in_stock: 230, has_discount: 'yes' } },\n];" }, "typeVersion": 2 }, { "id": "sx-subject", "name": "Generate Email Subject", "type": "n8n-nodes-spintax.spintax", "position": [ 440, 260 ], "parameters": { "operation": "render", "template": "{Quick|One|Small} {question|idea} for %company% — the %product% {listing|page}", "seed": "={{ $json.company }}:subject", "outputField": "subject" }, "typeVersion": 1 }, { "id": "sx-body", "name": "Generate Email Body", "type": "n8n-nodes-spintax.spintax", "position": [ 660, 260 ], "parameters": { "operation": "render", "template": "{Hi|Hello|Hey} %first_name%,\n\n{We noticed|Saw that|Noticed} %company% {carries|sells|stocks} %category% — {nice|solid|great} {lineup|selection}.\n\n{Quick|One} {idea|thought} about your %product% {listing|page}: {?has_discount?with the {current|running} {promo|discount} at %price% it {deserves|warrants}|at %price% it {deserves|warrants}} {fresh|distinct} copy per {storefront|channel} — and with %in_stock% {plural %in_stock%: unit|units} in stock, {now|this week} is the {right|perfect} time.\n\n{Worth|Open to} a {quick|15-minute} {look|chat} {this|next} week?\n\n{Best|Cheers|Regards},\n{Alex|Sam} from Spintax", "seed": "={{ $json.company }}:body", "outputField": "body" }, "typeVersion": 1 }, { "id": "sx-send", "name": "Placeholder for Email Send Tool", "type": "n8n-nodes-base.noOp", "position": [ 912, 256 ], "parameters": {}, "typeVersion": 1 } ], "connections": { "Generate Email Body": { "main": [ [ { "node": "Placeholder for Email Send Tool", "type": "main", "index": 0 } ] ] }, "Generate Email Subject": { "main": [ [ { "node": "Generate Email Body", "type": "main", "index": 0 } ] ] }, "Manual Workflow Trigger": { "main": [ [ { "node": "Load Sample Leads", "type": "main", "index": 0 } ] ] }, "Load Sample Leads": { "main": [ [ { "node": "Generate Email Subject", "type": "main", "index": 0 } ] ] } }, "settings": {}, "pinData": {} }