This workflow corresponds to n8n.io template #10333 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.
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 →
{
"id": "xl4Z2irVR0uBoHoJ",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Influencer Deliverable & Contract Compliance Automation For Instagram",
"tags": [],
"nodes": [
{
"id": "03e0f79e-fd01-474c-8135-4bf0f0faeb1d",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.cron",
"position": [
-624,
-176
],
"parameters": {},
"typeVersion": 1
},
{
"id": "33aa1cec-3a0b-418a-b0ed-9af18722ef10",
"name": "Get Contracts",
"type": "n8n-nodes-base.googleSheets",
"position": [
-400,
-176
],
"parameters": {
"options": {},
"sheetId": "your-contracts-sheet-id!A:H"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5516f33e-16a1-4beb-bf07-f573ba8ccd08",
"name": "Loop Over Contracts",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-176,
-176
],
"parameters": {
"options": {},
"batchSize": 1
},
"typeVersion": 1
},
{
"id": "af25ad56-9311-49e8-842c-204b328d0ced",
"name": "Calculate Deadline Status",
"type": "n8n-nodes-base.code",
"position": [
48,
-176
],
"parameters": {
"jsCode": "const deadline = new Date($json['deadline']);\nconst now = new Date();\nconst daysToDeadline = Math.ceil((deadline - now) / (1000 * 60 * 60 * 24));\n\nreturn {\n json: {\n ...$json,\n daysToDeadline,\n isApproaching: daysToDeadline > 0 && daysToDeadline <= 3,\n isPassed: daysToDeadline <= 0\n }\n};"
},
"typeVersion": 1
},
{
"id": "6cb537be-9f88-4ef3-a6a7-d730ab782227",
"name": "IF Approaching Deadline",
"type": "n8n-nodes-base.if",
"position": [
272,
-272
],
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json[\"isApproaching\"] }}",
"value2": true
}
]
}
},
"typeVersion": 1
},
{
"id": "fb583c49-8842-49c1-92ac-45511abeb67b",
"name": "Send Reminder (Slack)",
"type": "n8n-nodes-base.slack",
"position": [
496,
-272
],
"parameters": {
"text": "=Reminder: Influencer {{ $json[\"influencerName\"] }} - Post due in {{ $json[\"daysToDeadline\"] }} days for campaign {{ $json[\"campaignId\"] }}. Required hashtag: {{ $json[\"requiredHashtag\"] }}",
"channel": "your-slack-channel",
"attachments": [],
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2b15e005-aee0-4b23-a078-cb0f07004b1d",
"name": "IF Deadline Passed",
"type": "n8n-nodes-base.if",
"position": [
288,
112
],
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json[\"isPassed\"] }}",
"value2": true
}
]
}
},
"typeVersion": 1
},
{
"id": "a08ad880-39e2-46e4-9428-56f019e43072",
"name": "Get Influencer Posts",
"type": "n8n-nodes-base.httpRequest",
"position": [
544,
96
],
"parameters": {
"url": "=https://graph.facebook.com/v12.0/{{ $json[\"influencerUserId\"] }}/media?access_token=YOUR_INSTAGRAM_ACCESS_TOKEN",
"options": {}
},
"typeVersion": 1
},
{
"id": "07a09646-85c3-4b67-a69b-8386e13589d2",
"name": "Check Post Compliance (Claude AI)",
"type": "n8n-nodes-base.httpRequest",
"position": [
784,
96
],
"parameters": {
"url": "https://api.anthropic.com/v1/messages",
"options": {},
"requestMethod": "POST",
"jsonParameters": true,
"bodyParametersJson": "={\"model\": \"claude-3-5-sonnet-20241022\", \"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Check if any of these recent Instagram posts contain the required hashtag '{{ $json[\"requiredHashtag\"] }}' and match the campaign description '{{ $json[\"campaignDescription\"] }}'. Posts: {{ JSON.stringify($json[\"data\"]) }}. Output: is_compliant: yes/no\"}]}"
},
"typeVersion": 1
},
{
"id": "dcbc21bb-95b1-4041-9bde-50fb12edc097",
"name": "IF Breach Detected",
"type": "n8n-nodes-base.if",
"position": [
992,
96
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json[\"content\"][0][\"text\"].toLowerCase().split(':')[1].trim() }}",
"value2": "no"
}
]
}
},
"typeVersion": 1
},
{
"id": "cf595681-b060-4f83-9733-b8e7fb3966b1",
"name": "Notify Breach (Slack)",
"type": "n8n-nodes-base.slack",
"position": [
1200,
-144
],
"parameters": {
"text": "=Contract Breach Alert! Influencer {{ $json[\"influencerName\"] }} failed to post for campaign {{ $json[\"campaignId\"] }} by deadline {{ $json[\"deadline\"] }}.",
"channel": "manager-slack-channel",
"attachments": [],
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "0f2431e2-d59e-4051-ac2c-29c6708cc529",
"name": "Log Breach",
"type": "n8n-nodes-base.googleSheets",
"position": [
1200,
48
],
"parameters": {
"options": {},
"sheetId": "your-logs-sheet-id!A:F",
"operation": "append"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "17dc2dd5-0e30-47e6-98a3-2ab651b9486e",
"name": "End (Compliant Path)",
"type": "n8n-nodes-base.set",
"position": [
1200,
288
],
"parameters": {
"options": {},
"keepOnlySet": true
},
"typeVersion": 1
},
{
"id": "99da3762-46c3-4f66-b95d-84b818e71011",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
-368
],
"parameters": {
"color": 3,
"width": 176,
"height": 480,
"content": "Runs daily at 9 AM or via webhook (/influencer-compliance)\n"
},
"typeVersion": 1
},
{
"id": "11643a92-6d5d-4899-aef5-a6fc4787eeb9",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-368
],
"parameters": {
"color": 5,
"width": 176,
"height": 336,
"content": "Processes each contract individually\n"
},
"typeVersion": 1
},
{
"id": "a37ac9a7-71b4-4c4a-b835-cb730aef9074",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
-64
],
"parameters": {
"color": 4,
"width": 176,
"height": 336,
"content": "Fetches recent posts from influencer\u2019s Instagram\n"
},
"typeVersion": 1
},
{
"id": "afd669d8-0961-4204-bc74-f04f27d6b25a",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
-64
],
"parameters": {
"width": 176,
"height": 336,
"content": "Branches if deadline has passed\n"
},
"typeVersion": 1
},
{
"id": "5d3990be-46b6-49f7-89e8-98a7d5a974a2",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
-448
],
"parameters": {
"color": 3,
"width": 176,
"height": 336,
"content": "Notifies influencer/team of upcoming deadline\n"
},
"typeVersion": 1
},
{
"id": "a6f8c630-09e3-41ee-93d1-98d2a9463a69",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
-448
],
"parameters": {
"color": 6,
"width": 176,
"height": 336,
"content": "Branches if within 3 days\n"
},
"typeVersion": 1
},
{
"id": "656ce4fc-f52d-477d-83f4-b40f2969bb7a",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
16,
-368
],
"parameters": {
"color": 4,
"width": 176,
"height": 336,
"content": "Computes days to deadline, flags approaching/passed\n"
},
"typeVersion": 1
},
{
"id": "c1844ae1-a433-47af-8d61-b979bd283676",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-448,
-368
],
"parameters": {
"width": 176,
"height": 336,
"content": "Loads influencer contracts from Contracts sheet\n"
},
"typeVersion": 1
},
{
"id": "a69a2e61-b0c5-4430-9dd8-da77a0003450",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
-64
],
"parameters": {
"color": 2,
"width": 176,
"height": 336,
"content": "Branches if non-compliant\n"
},
"typeVersion": 1
},
{
"id": "fada9646-ea1a-41dc-a727-9e2233de03ba",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
736,
-64
],
"parameters": {
"color": 5,
"width": 176,
"height": 336,
"content": "Uses AI to verify if post matches contract requirements\n"
},
"typeVersion": 1
},
{
"id": "8327329c-e485-4c3f-a75b-a9c8699e6dd4",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
1168,
-544
],
"parameters": {
"color": 3,
"width": 176,
"height": 976,
"content": "Alerts manager of contract breach\nand Records breach details in Logs sheet\n also\tTerminates compliant branches"
},
"typeVersion": 1
},
{
"id": "318f9ab4-7200-4975-8e0c-9c401c1c48af",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-624,
-16
],
"parameters": {
"path": "f50af7ff-5c16-4985-9f9f-d10b805b11d4",
"options": {}
},
"typeVersion": 2.1
},
{
"id": "ff7449ef-d08d-4a4f-b5f6-b2f83433aaa9",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1200,
-336
],
"parameters": {
"options": {}
},
"typeVersion": 1.4
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "a53b3923-88f0-485d-a994-5eee37e4b1f5",
"connections": {
"Webhook": {
"main": [
[
{
"node": "Get Contracts",
"type": "main",
"index": 0
}
]
]
},
"Get Contracts": {
"main": [
[
{
"node": "Loop Over Contracts",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get Contracts",
"type": "main",
"index": 0
}
]
]
},
"IF Breach Detected": {
"main": [
[
{
"node": "Notify Breach (Slack)",
"type": "main",
"index": 0
},
{
"node": "Log Breach",
"type": "main",
"index": 0
},
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
],
[
{
"node": "End (Compliant Path)",
"type": "main",
"index": 0
}
]
]
},
"IF Deadline Passed": {
"main": [
[
{
"node": "Get Influencer Posts",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Contracts": {
"main": [
[
{
"node": "Calculate Deadline Status",
"type": "main",
"index": 0
}
]
]
},
"Get Influencer Posts": {
"main": [
[
{
"node": "Check Post Compliance (Claude AI)",
"type": "main",
"index": 0
}
]
]
},
"IF Approaching Deadline": {
"main": [
[
{
"node": "Send Reminder (Slack)",
"type": "main",
"index": 0
}
]
]
},
"Calculate Deadline Status": {
"main": [
[
{
"node": "IF Approaching Deadline",
"type": "main",
"index": 0
},
{
"node": "IF Deadline Passed",
"type": "main",
"index": 0
}
]
]
},
"Check Post Compliance (Claude AI)": {
"main": [
[
{
"node": "IF Breach Detected",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This enterprise-grade n8n workflow automates influencer contract compliance for Instagram campaigns — from deadline tracking to breach detection — using Claude AI, Instagram API, and smart reminders. It ensures timely deliverables by monitoring posts, sending proactive alerts,…
Source: https://n8n.io/workflows/10333/ — 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.
This enterprise-grade n8n workflow automates the Instagram complaint handling process — from detection to resolution — using Claude AI, dynamic ticket assignment, and SLA enforcement. It converts cust
Youtube Videos Checker. Uses httpRequest, googleSheets, slack. Scheduled trigger; 18 nodes.
Turn your best 5-star reviews into a daily stream of branded social proof content -- fully automated. This workflow pulls the oldest unposted 5-star review from Google Sheets, generates a custom quote
This workflow automatically mirrors your YouTube to TikTok and Instagram, so you don’t have to manually download and re-upload your content across platforms.
How it works