Hi there, I’m trying to replicate Nick Saraev’s workflow (https://youtu.be/2GZ2SNXWK-c?si=vEHZO8dGKFWNXLMq) using data from Google Sheets to send emails to companies via OpenAI. I’m not sure what I’m doing wrong, and I haven’t been able to find a solution even when talking to the AI. Any advice or help would be greatly appreciated — please feel free to reach out to me at pabloserranovasquez2006@gmail.com. Thank you so much!!!
n8n.io - Workflow Automation
Hey @Pablo_Serrano, while you wait for a response, here are some things that might help:
Suggested resources
Automatically matched to your question.
Docs:
Forum:
@solomon, @Jekylls - you’ve helped with similar issues before, can you take a look?
Automatically suggested by n8n’s community bot. It’s a pilot - please share feedback here.
Hi @Pablo_Serrano Welcome!
That is your own editor URL, it only opens on your account, so nobody here can see the workflow. Select all the nodes on the canvas with Ctrl+A, copy them with Ctrl+C, and paste the JSON into a code block in a reply here. Remove credential names from it first, the copy carries them.
Post the error text from the node that fails along with it, plus its input and output panels. Without the failing node and its error there is nothing concrete to debug.
Keep it on the thread rather than email, that way anyone hitting the same problem later finds the fix too.
More on getting a request answered here:
Hi @Pablo_Serrano To help you, we need more specific details, the link to the workflow isn’t accessible to other users cos it’s your private Cloud instance. Could you share:
At which specific node does it fail or stop?
What exact error message do you get screenshot or text?
What did you expect to happen versus what actually happened?
With that information, someone will be able to really help you. Also, you might want to edit your post to remove your personal email, it’s better to keep the conversation here on the forum so it can help others facing the same problem in the future.
Hi Pablo_Serrano,
Provide your workflow json so i can fix it for you, its a great approach for me that i help someone thanks.
Note: Keep it on the thread rather than email, that way if anyone else chases the same problem later they see the fix too.
Hi there, I’m trying to replicate the workflow by Nick Saraev (https://youtu.be/2GZ2SNXWK-c?si=vEHZO8dGKFWNXLMq) where data from Google Sheets is used to send personalized emails to companies via OpenAI. I’m not sure what I’m doing wrong, and even talking to the AI hasn’t gotten me anywhere. Any advice or help would be greatly appreciated. Thanks so much!!!
WORKFLOW IN JSON FORMAT:
{
“nodes”: [
{
“parameters”: {},
“type”: “n8n-nodes-base.manualTrigger”,
“typeVersion”: 1,
“position”: [
-96,
496
],
“id”: “815388b3-0e10-4c2c-8312-4e5180dfa21f”,
“name”: “When clicking ‘Execute workflow’”
},
{
“parameters”: {
“documentId”: {
“__rl”: true,
“mode”: “id”,
“value”: “1yZnRCCrx6_8iA_SHacH_wLsz3aPYSn9yJMDvtFK6wuU”
},
“sheetName”: {
“__rl”: true,
“value”: “gid=0”,
“mode”: “list”,
“cachedResultName”: “Sheet 1”,
“cachedResultUrl”: " prueban8n - Google Sheets "
},
“options”: {}
},
“type”: “n8n-nodes-base.googleSheets”,
“typeVersion”: 4.7,
“position”: [
112,
496
],
“id”: “1deb068f-842a-47f3-82ef-483114838d22”,
“name”: “Get row(s) in sheet”,
“credentials”: {
“googleSheetsOAuth2Api”: {
“id”: “l91Lg09x9gnLmisB”,
“name”: “Google Sheets account”
}
}
},
{
“parameters”: {
“modelId”: {
“__rl”: true,
“value”: “gpt-5.1”,
“mode”: “list”,
“cachedResultName”: “GPT-5.1”
},
“responses”: {
“values”: [
{
“role”: “assistant”,
“content”: “You are a smart email writing assistant.”
},
{
“role”: “=user”,
“content”: “=Your task is to write a personalized email. You will receive as input a LinkedIn URL {{ $json.UrlLinkedin }}. I want you to adapt these 5 templates for the different parts of the email:\n\nSubject Line: Hi {Name}, I think I have something for you about: {Company}.\n\nIcebreaker: I know you’re working on {{ $json[‘companyDescription’] }} and I’ve been following {relatedCompanyDescription} for a while now, so I thought it made sense to chat with you.\n\nElevator Pitch: In short: I believe I can add about $5,000/month to {companyDescription} with a couple of automated systems.\n\nCall to Action: I just did the same thing for a very similar company in {RelatedCompany} and we hit $28,350 in just a few months—they do {similarCompanyDescription}—so I’m very confident I can at least double that with you. It would be 100% risk-free, I guarantee you 60% of the results, and if I don’t deliver, you don’t pay anything\n\nPostscript (PS): Even if we just chat for a bit, I’d love to learn more about what you’re doing with {Company}.\n\nNow I’m going to give you a guide for writing the email:\n\n1. You should use a close, conversational tone, as if you were having a bar conversation. It’s a PRIORITY that the email reads like it was written by a friend rather than a big marketing agency\n\n2. You should search for and highlight throughout the email REAL connections between what the company sells and what we sell (automations)\n\n3. You CANNOT under ANY CIRCUMSTANCE include identical information from the company that is on their LinkedIn profile or on the Internet. At most, paraphrase it. Each email must be unique\n\n4. The Subject Line should be in lowercase.\n\n5. You should express the output in JSON format following this structure:\n\n{{ $json.SubjectLine }},{{ $json.Icebreaker }}, {{ $json.ElevatorPitch }},{{ $json.callToAction }}, {{ $json.PS }}\n”
}
]
},
“builtInTools”: {},
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.openAi”,
“typeVersion”: 2.3,
“position”: [
320,
496
],
“id”: “72eb8b2e-2ca9-46ae-9a32-a1a907fc865d”,
“name”: “Message a model1”,
“credentials”: {}
}
],
“connections”: {
“When clicking ‘Execute workflow’”: {
“main”: [
[
{
“node”: “Get row(s) in sheet”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get row(s) in sheet”: {
“main”: [
[
{
“node”: “Message a model1”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “de8c734c1dc0e7ee34a192c3342867821f37e3e023d4f63a26811d820d59caa0”
}
}
Fix:
-
Change the first message’s role from Assistant to System. Also remove the stray
=in"role": "=user"on the second message. -
Rewrite the end of your prompt. Right now you have
{{ $json.SubjectLine }}, {{ $json.Icebreaker }}...— those fields don’t exist yet, so they resolve to blank and the model gets no format at all. Replace with literal text:
Return ONLY this JSON, nothing else:
{
"SubjectLine": "...",
"Icebreaker": "...",
"ElevatorPitch": "...",
"CallToAction": "...",
"PS": "..."
}
Also switch your {curly} placeholders to [square] — {{ is n8n expression syntax and will misfire.
- Run the Google Sheets node alone and copy your column names exactly from the output panel.
{{ $json.UrlLinkedin }}and{{ $json.companyDescription }}must match your headers character-for-character.
Thank you so much, you’ve been a huge help!!
your welcome, if it is helpful mark it as solution thanks.