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": "Scrapeless \u2014 price drop alert",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"id": "c3000000-0000-4000-8000-000000000001",
"name": "Every 6 hours",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-220,
0
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "p-1",
"name": "product_url",
"value": "https://www.amazon.com/dp/B09B8V1LZ3",
"type": "string"
},
{
"id": "p-2",
"name": "alert_below",
"value": 45,
"type": "number"
}
]
},
"options": {}
},
"id": "c3000000-0000-4000-8000-000000000002",
"name": "Watch list",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
0,
0
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.scrapeless.com/api/v1/scraper/request",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "x-api-token",
"value": "={{ $env.SCRAPELESS_API_KEY }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ actor: 'scraper.amazon', input: { action: 'product', url: $json.product_url } }) }}",
"options": {
"timeout": 180000
}
},
"id": "c3000000-0000-4000-8000-000000000003",
"name": "Fetch product",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
220,
0
],
"onError": "continueRegularOutput",
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 3000,
"alwaysOutputData": true
},
{
"parameters": {
"jsCode": "// Prices arrive as display strings (\"$49.99\"). Parse to a number before comparing.\n// Do not trust the actor's own `discount` field: a live response returned\n// initial_price $49.99, final_price $49.99 and discount -23% simultaneously.\nconst parsePrice = (raw) => {\n if (typeof raw !== 'string') return null;\n const match = raw.match(/([^\\d\\s]*)\\s*([\\d,]+(?:\\.\\d{1,2})?)/);\n return match ? Number(match[2].replace(/,/g, '')) : null;\n};\n\nconst product = $input.first().json.result ?? {};\nconst watch = $('Watch list').first().json;\n\nreturn [{\n json: {\n asin: product.asin ?? '',\n title: (product.title ?? '').trim(),\n price_raw: product.final_price ?? '',\n price_value: parsePrice(product.final_price),\n availability: (product.availability ?? '').trim(),\n reviews_count: product.reviews_count ?? null,\n url: watch.product_url,\n alert_below: watch.alert_below,\n checked_at: new Date().toISOString(),\n },\n}];"
},
"id": "c3000000-0000-4000-8000-000000000004",
"name": "Parse price",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
440,
0
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "cond-1",
"leftValue": "={{ $json.price_value }}",
"rightValue": "={{ $json.alert_below }}",
"operator": {
"type": "number",
"operation": "lt"
}
}
],
"combinator": "and"
},
"looseTypeValidation": true,
"options": {}
},
"id": "c3000000-0000-4000-8000-000000000005",
"name": "Below threshold?",
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
660,
0
]
},
{
"parameters": {},
"id": "c3000000-0000-4000-8000-000000000006",
"name": "Send alert",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
880,
-100
]
},
{
"parameters": {},
"id": "c3000000-0000-4000-8000-000000000007",
"name": "Record only",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
880,
100
]
}
],
"connections": {
"Every 6 hours": {
"main": [
[
{
"node": "Watch list",
"type": "main",
"index": 0
}
]
]
},
"Watch list": {
"main": [
[
{
"node": "Fetch product",
"type": "main",
"index": 0
}
]
]
},
"Fetch product": {
"main": [
[
{
"node": "Parse price",
"type": "main",
"index": 0
}
]
]
},
"Parse price": {
"main": [
[
{
"node": "Below threshold?",
"type": "main",
"index": 0
}
]
]
},
"Below threshold?": {
"main": [
[
{
"node": "Send alert",
"type": "main",
"index": 0
}
],
[
{
"node": "Record only",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Scrapeless — price drop alert. Uses httpRequest. Scheduled trigger; 7 nodes.
Source: https://github.com/diego-scrapeless/scrapeless-n8n-workflows/blob/main/workflows/03-price-drop-alert.json — 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.
> Watch the full Youtube Video Tutorial [](https://youtu.be/Y-wUr2-UYZk)
Very straightforward workflow. It checks the Epic Games website if the HTML container with free games has changed. If it did then it will send a notification to Discord with a list of embeds containin
This workflow automatically scrapes business leads from Google Maps on a daily schedule and ensures only high-quality, unique leads are processed. New businesses are cleaned, validated, and deduplicat
Women creators, homemakers-turned-entrepreneurs, and feminine lifestyle brands who want a graceful, low-lift way to keep an eye on competitor content and spark weekly ideas.
This workflow automatically searches YouTube Data API for videos related to specific keywords, extracts channel data, filters channels based on performance metrics, and saves the results into Google S