The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Agentic Marketing Operator - Preview Template",
"nodes": [
{
"parameters": {
"values": {
"string": [
{
"name": "offer",
"value": "Describe the product, service, or launch offer here."
},
{
"name": "audience",
"value": "Describe the target customer segment."
},
{
"name": "channels",
"value": "instagram,tiktok"
},
{
"name": "approval_mode",
"value": "human_review_required"
}
],
"number": [
{
"name": "posts_per_week",
"value": 5
}
]
},
"options": {}
},
"id": "campaign-intake",
"name": "Campaign Intake",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
-760,
0
]
},
{
"parameters": {
"jsCode": "const item = $input.first().json;\nconst competitors = [\n 'direct competitor with similar offer',\n 'category leader with high engagement',\n 'smaller creator with practical content hooks'\n];\nreturn [{ json: { ...item, competitors, research_brief: `Audience: ${item.audience}\\nOffer: ${item.offer}\\nAngle: useful, specific, low-hype launch content` } }];"
},
"id": "research-brief",
"name": "Research Brief",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-520,
0
]
},
{
"parameters": {
"jsCode": "const item = $input.first().json;\nconst posts = [\n { day: 'Monday', format: 'problem/solution', hook: 'The hidden cost this audience already feels' },\n { day: 'Tuesday', format: 'quick tutorial', hook: 'One practical workflow using the offer' },\n { day: 'Wednesday', format: 'comparison', hook: 'Old way vs new way' },\n { day: 'Thursday', format: 'proof', hook: 'A small receipt, metric, or before/after' },\n { day: 'Friday', format: 'call to action', hook: 'Invite a reply, trial, or purchase' }\n].slice(0, Number(item.posts_per_week || 5));\nreturn [{ json: { ...item, weekly_content_plan: posts } }];"
},
"id": "weekly-plan",
"name": "Weekly Content Plan",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-280,
0
]
},
{
"parameters": {
"jsCode": "const item = $input.first().json;\nconst drafts = item.weekly_content_plan.map((post) => ({\n ...post,\n instagram_caption: `${post.hook}. Keep it visual, concrete, and useful. End with one simple CTA tied to: ${item.offer}`,\n tiktok_script: `0-2s hook: ${post.hook}\\n3-12s show the practical contrast\\n13-20s show the outcome\\nCTA: ask viewers to comment or try the offer`,\n visual_prompt: `Create a clean vertical short-form concept for ${post.format}: real product/workflow signal, no generic stock look.`\n}));\nreturn [{ json: { ...item, drafts } }];"
},
"id": "draft-posts",
"name": "Draft Posts And Prompts",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-40,
0
]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.approval_mode}}",
"operation": "equals",
"value2": "human_review_required"
}
]
}
},
"id": "approval-gate",
"name": "Manual Approval Required",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
200,
0
]
},
{
"parameters": {
"jsCode": "const item = $input.first().json;\nreturn [{ json: { status: 'needs_human_approval', message: 'Review drafts before connecting live social publishing nodes.', drafts: item.drafts } }];"
},
"id": "approval-handoff",
"name": "Approval Handoff",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
440,
-120
]
},
{
"parameters": {
"jsCode": "const item = $input.first().json;\nreturn [{ json: { status: 'ready_to_publish_placeholder', note: 'Replace this node with buyer-approved Instagram/TikTok API integrations.', drafts: item.drafts } }];"
},
"id": "publish-placeholder",
"name": "Publish Placeholder",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
440,
120
]
},
{
"parameters": {
"jsCode": "const item = $input.first().json;\nreturn [{ json: { logged_at: new Date().toISOString(), campaign_status: item.status, record: item } }];"
},
"id": "campaign-log",
"name": "Campaign Log",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
680,
0
]
}
],
"connections": {
"Campaign Intake": {
"main": [
[
{
"node": "Research Brief",
"type": "main",
"index": 0
}
]
]
},
"Research Brief": {
"main": [
[
{
"node": "Weekly Content Plan",
"type": "main",
"index": 0
}
]
]
},
"Weekly Content Plan": {
"main": [
[
{
"node": "Draft Posts And Prompts",
"type": "main",
"index": 0
}
]
]
},
"Draft Posts And Prompts": {
"main": [
[
{
"node": "Manual Approval Required",
"type": "main",
"index": 0
}
]
]
},
"Manual Approval Required": {
"main": [
[
{
"node": "Approval Handoff",
"type": "main",
"index": 0
}
],
[
{
"node": "Publish Placeholder",
"type": "main",
"index": 0
}
]
]
},
"Approval Handoff": {
"main": [
[
{
"node": "Campaign Log",
"type": "main",
"index": 0
}
]
]
},
"Publish Placeholder": {
"main": [
[
{
"node": "Campaign Log",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"meta": {
"templateCredsSetupCompleted": false,
"preview": true,
"safeHandoff": "No credentials, private account data, or live publishing tokens are included."
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Agentic Marketing Operator - Preview Template. Manual trigger; 8 nodes.
Source: https://gist.github.com/Bortlesboat/7a028c5db5868871b16758caee81285c — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
24-Agent Parallel Orchestrator. Uses start, httpRequest, executeCommand. Manual trigger; 15 nodes.
Inbox Agent (ep11). Uses emailReadImap, emailSend. Manual trigger; 9 nodes.
Lead to AI Call - SniperThink. Uses httpRequest. Manual trigger; 6 nodes.
Email Agent (real-time). Uses emailReadImap, httpRequest, executeCommand, telegram. Manual trigger; 6 nodes.
OMNIKAI - Tor Integration Agent. Uses start, executeCommand. Manual trigger; 5 nodes.