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": "AmazonLuna-Games-Fetch",
"nodes": [
{
"parameters": {
"method": "POST",
"url": "https://proxy-prod.eu-west-1.tempo.digital.a2z.com/getPage",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "={{ $json['Content-Type'] }}"
},
{
"name": "Origin",
"value": "={{ $json.Origin }}"
},
{
"name": "Referer",
"value": "={{ $json.Refer }}"
},
{
"name": "x-amz-locale",
"value": "={{ $json['x-amz-locale'] }}"
},
{
"name": "x-amz-platform",
"value": "={{ $json['x-amz-platform'] }}"
},
{
"name": "x-amz-device-type",
"value": "={{ $json['x-amz-device-type'] }}"
},
{
"name": "x-amz-marketplace-id",
"value": "={{ $json['x-amz-marketplace-id'] }}"
},
{
"name": "Accept-Language",
"value": "={{ $json['Accept-Language'] }}"
},
{
"name": "User-Agent",
"value": "={{ $json['User-Agent'] }}"
},
{
"name": "searchContext",
"value": "={{ $json.searchContext }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "{\"timeout\":10000,\"searchContext\":{\"query\":\"included_with_prime\",\"sort\":\"TITLE_A_TO_Z\",\"filtersList\":[]},\"featureScheme\":\"WEB_V1\",\"pageContext\":{\"pageType\":\"multistate_browse_results\",\"pageId\":\"default\"},\"clientContext\":{\"browserMetadata\":{\"browserClientRole\":\"browser\",\"browserType\":\"Chrome\",\"browserVersion\":\"141.0.0.0\",\"deviceModel\":\"unknown\",\"deviceType\":\"unknown\",\"osName\":\"Windows\",\"osVersion\":\"11\"}},\"inputContext\":{\"gamepadTypes\":[]},\"dynamicFeatures\":[]}",
"options": {}
},
"id": "6b95e9e1-d883-4e05-932f-c67963ddf17d",
"name": "HTTP Request1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1408,
352
],
"typeVersion": 4.2
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "2014c337-009b-4c72-ab7a-cfc94318875e",
"name": "Content-Type",
"type": "string",
"value": "text/plain;charset=UTF-8"
},
{
"id": "af3dfb87-355d-40d3-8cc6-3074c7d99382",
"name": "Origin",
"type": "string",
"value": "https://luna.amazon.it"
},
{
"id": "971f2ce5-9d5e-4abd-b6f8-9815af9d1d6f",
"name": "Refer",
"type": "string",
"value": "https://luna.amazon.it/"
},
{
"id": "adc28f7c-1ad0-4e33-b4f8-1d4b678c1c2c",
"name": "x-amz-locale",
"type": "string",
"value": "en_US"
},
{
"id": "8852885e-013d-4b76-97e2-7393551e1f39",
"name": "x-amz-platform",
"type": "string",
"value": "web"
},
{
"id": "75790b6d-bdba-4547-866e-f078dae263b9",
"name": "x-amz-device-type",
"type": "string",
"value": "browser"
},
{
"id": "eb7c07a8-a963-41a3-8b44-9b94cd0c9f05",
"name": "x-amz-marketplace-id",
"type": "string",
"value": "ATVPDKIKX0DER"
},
{
"id": "cc5cf070-b37b-46b6-a5f5-5c588446395e",
"name": "Accept-Language",
"type": "string",
"value": "en-US"
},
{
"id": "9adc0222-535d-4c1d-9b9c-323184484875",
"name": "User-Agent",
"type": "string",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
},
{
"id": "0f9694c2-307f-4c84-85eb-4602351deeff",
"name": "searchContext",
"type": "string",
"value": "{ \"query\": \"included_with_prime\" }."
}
]
},
"options": {}
},
"id": "46d0296b-bf10-45a1-b936-590db25bbb7c",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
1216,
352
],
"typeVersion": 3.4
},
{
"parameters": {
"rule": {
"interval": [
{
"daysInterval": 5,
"triggerAtHour": 15
}
]
}
},
"id": "853ee870-2926-48a4-b7bb-69efab9dd2ff",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
848,
352
],
"typeVersion": 1.2
},
{
"parameters": {
"authentication": "serviceAccount",
"documentId": {
"__rl": true,
"mode": "list",
"value": "1-YOUR_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-Your_ID/edit?usp=drivesdk",
"cachedResultName": "Folder_Name"
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1234567,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-Your_ID/edit#gid=Your_ID",
"cachedResultName": "Sheet_Name"
},
"options": {}
},
"id": "6a6b35e4-cac9-46fa-a69b-83be9fbd5331",
"name": "Get row(s) in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1040,
352
],
"executeOnce": false,
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"parameters": {
"content": "### Section 3 \u2013 New game notifications\n\nThe \u201cisNew\u201d and \u201cIf1\u201d nodes keep only new titles. For each new game, the image is fetched, items are processed in small batches and a Wait node adds a short pause to avoid rate limits. Finally a message is sent to your notification channel.\n\n#### Choose a notification provider\n\nBy default this template uses a Discord node to post messages in a channel. Select your Discord credentials and channel ID, or replace this node with another service (Telegram, Slack, email, webhooks, etc.) while keeping the rest of the flow unchanged.",
"height": 536,
"width": 640,
"color": 5
},
"id": "7947a59c-696e-44b0-a952-d2daea6c5606",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2640,
0
],
"typeVersion": 1
},
{
"parameters": {
"jsCode": "// Parse GAME_TILE widgets and extract game info\nconst data = items[0].json;\nconst out = [];\n\nfunction walk(n) {\n if (Array.isArray(n)) return n.forEach(walk);\n if (n && typeof n === 'object') {\n if (n.type === 'GAME_TILE') {\n const target = n.actions?.[0]?.target || '';\n const parts = target.replace(/^\\/|\\/$/g,'').split('/');\n const slug = parts[1] || null;\n const asin = parts[2] || null;\n\n let pd = {};\n try { pd = JSON.parse(n.presentationData || '{}'); } catch(e){}\n\n out.push({\n asin,\n slug,\n title: pd.title || null,\n releaseYear: pd.releaseYear || null,\n publishers: pd.publishersText || null,\n genres: Array.isArray(pd.genreTags) ? pd.genreTags.join(', ') : null,\n productUrl: pd.productUrl || null,\n imagePortrait: pd.imagePortrait || null,\n imageLandscape: pd.imageLandscape || null,\n ageRating: pd.ageRating?.categoryText || null,\n target\n });\n }\n Object.values(n).forEach(walk);\n }\n}\nwalk(data);\n\nreturn out.map(x => ({ json: x }));\n"
},
"id": "6ffc3165-6d9c-4bdd-b56a-f15f5cf5eb57",
"name": "parsing",
"type": "n8n-nodes-base.code",
"position": [
1616,
352
],
"typeVersion": 2
},
{
"parameters": {
"jsCode": "// Leggo tutte le righe dal nodo \"Get row(s) in sheet\"\nconst existingRows = $items('Get row(s) in sheet');\n\n// Se il foglio \u00e8 vuoto: tutti nuovi\nif (!existingRows || existingRows.length === 0) {\n return items.map(item => {\n item.json.isNew = true;\n return item;\n });\n}\n\n// Costruisco le chiavi gi\u00e0 presenti nel foglio:\n// prima asin, se vuoto uso il titolo (Title nel foglio, title negli item)\nconst existingKeys = new Set(\n existingRows\n .map(r => {\n const asin = (r.json.asin || '').trim().toUpperCase();\n const title =\n (r.json.Title || r.json.title || '').trim().toUpperCase(); // \ud83d\udc48 QUI la differenza\n return asin || title;\n })\n .filter(k => k !== '')\n);\n\n// Aggiungo isNew agli item in ingresso\nreturn items.map(item => {\n const asin = (item.json.asin || '').trim().toUpperCase();\n const title =\n (item.json.Title || item.json.title || '').trim().toUpperCase();\n\n const key = asin || title;\n\n // se non ho n\u00e9 asin n\u00e9 titolo, lo considero nuovo\n item.json.isNew = key === '' ? true : !existingKeys.has(key);\n\n return item;\n});"
},
"id": "8f1a7332-659b-47e6-9baf-cc4f140de00c",
"name": "isNew",
"type": "n8n-nodes-base.code",
"position": [
1792,
352
],
"typeVersion": 2
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "message",
"guildId": {
"__rl": true,
"mode": "list",
"value": "YOUR_ID",
"cachedResultUrl": "https://discord.com/channels/YOUR_ID",
"cachedResultName": "AmazonLuna-games"
},
"channelId": {
"__rl": true,
"mode": "list",
"value": "Your_ID",
"cachedResultUrl": "https://discord.com/channels/YOUR_ID/YOUR_ID",
"cachedResultName": "new-games-notifications"
},
"content": "=New game added on Amazon Luna!\nTitle: {{ $('If1').item.json.title }}\nGeneres: {{ $('If1').item.json.genres }}\nRelease Year: {{ $('If1').item.json.releaseYear }}\n \n\n",
"options": {},
"files": {
"values": [
{}
]
}
},
"id": "1ddad36e-291b-469e-bc72-e47ec4e1d736",
"name": "Send a message1",
"type": "n8n-nodes-base.discord",
"position": [
3136,
352
],
"typeVersion": 2,
"credentials": {
"discordOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"authentication": "serviceAccount",
"operation": "appendOrUpdate",
"documentId": {
"__rl": true,
"mode": "list",
"value": "1-YOUR_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-YOUR_ID/edit?usp=drivesdk",
"cachedResultName": "n8n"
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1234567,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-YOUR_ID/edit#gid=1234567",
"cachedResultName": "AmazonLunaGames-Fetch"
},
"columns": {
"value": {
"asin": "={{ $('parsing').item.json.asin }}",
"isNew": "=FALSE",
"title": "={{ $('parsing').item.json.title }}",
"genres": "={{ $('parsing').item.json.genres }}",
"releaseYear": "={{ $('parsing').item.json.releaseYear }}",
"imagePortrait": "={{ $('parsing').item.json.imagePortrait }}",
"imageLandscape": "={{ $('parsing').item.json.imageLandscape }}"
},
"schema": [
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "releaseYear",
"type": "string",
"display": true,
"required": false,
"displayName": "releaseYear",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "genres",
"type": "string",
"display": true,
"required": false,
"displayName": "genres",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "asin",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "asin",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "imagePortrait",
"type": "string",
"display": true,
"required": false,
"displayName": "imagePortrait",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "imageLandscape",
"type": "string",
"display": true,
"required": false,
"displayName": "imageLandscape",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "isNew",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "isNew",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"title"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"id": "ea4ad23c-0658-43a6-b84b-4bfe85198e25",
"name": "Append or update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2288,
336
],
"typeVersion": 4.7,
"credentials": {
"googleApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b51ea07a-8e6c-41c6-8d9b-45a0253f6712",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.isNew }}",
"rightValue": "true"
}
]
},
"options": {}
},
"id": "c1ba88a4-ba57-4aaf-a135-2d2412c575c4",
"name": "If1",
"type": "n8n-nodes-base.if",
"position": [
1984,
352
],
"typeVersion": 2.2
},
{
"parameters": {
"batchSize": 6,
"options": {}
},
"id": "6bb72785-2d49-41b2-88d8-1517abf5efda",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
2736,
336
],
"typeVersion": 3
},
{
"parameters": {},
"id": "e3c2a176-adae-4049-8a4e-c94e7ad789f4",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
2960,
352
],
"typeVersion": 1.1
},
{
"parameters": {
"content": "### Section 2 \u2013 Update Google Sheet\n\nThe \u201cAppend or update row in sheet\u201d node writes the parsed games to your Google Sheet. Rows are matched by title so existing entries are updated and only new games are appended with their ASIN, genres and image URLs.",
"height": 532,
"width": 376,
"color": 5
},
"id": "3e1941a4-c6a6-4a71-b976-ab8e66e768de",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2144,
0
],
"typeVersion": 1
},
{
"parameters": {
"content": "### Section 1 \u2013 Amazon request parameters\n\nThe **Edit Fields** node defines all required headers for the Amazon Luna request. \nHere you should set:\n\n- `x-amz-locale` (language/region)\n- `x-amz-marketplace-id` (marketplace for your region)\n- `Accept-Language`\n- `User-Agent`\n- platform and device type\n\nThe **HTTP Request** node uses these values to call the Luna endpoint and retrieve the list of \u201cIncluded with Prime\u201d games.\n\n",
"height": 528,
"width": 1312,
"color": 5
},
"id": "18d4c8bd-0114-4b73-8fa0-6f9e3780b474",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
0
],
"typeVersion": 1
},
{
"parameters": {
"content": "## Amazon Luna \u2013 Included with Prime\n\nThis workflow periodically fetches the list of \u201cIncluded with Prime\u201d games from Amazon Luna, parses the response, and keeps a Google Sheet in sync without duplicates. \n\nNew titles are flagged and can be sent as notifications to a channel of your choice (for example Discord, Telegram, Slack, or email). \n\nBefore activating the workflow, configure the Amazon request headers, region/marketplace, and Google Sheets document.\n\n#### Full Guide: https://paoloronco.it/amazon-luna-fetch-included-with-prime-games/\n\n### Video\n[](https://youtu.be/PS6qdCbc5fU)\n\n\n### Important notes\n\n- The data returned by this workflow comes from Amazon Luna and remains the property of Amazon. \nUse it only for personal or testing purposes. \n\n- Do not republish, redistribute, or share the results publicly without permission. \nHeaders, endpoint and response format may change over time, so if the workflow stops working, double-check the values used in the **Edit Fields** and **HTTP Request** nodes.\n\n",
"height": 912,
"width": 784
},
"id": "37eefa2e-cb7c-4f9f-b828-55b106a620cf",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"typeVersion": 1
},
{
"parameters": {
"url": "={{ $('isNew').item.json.imageLandscape }}",
"options": {}
},
"id": "d00de91b-a784-4fa2-9c17-0bcec8e29374",
"name": "GetImage",
"type": "n8n-nodes-base.httpRequest",
"position": [
2528,
336
],
"typeVersion": 4.2
}
],
"connections": {
"If1": {
"main": [
[
{
"node": "Append or update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Send a message1",
"type": "main",
"index": 0
}
]
]
},
"isNew": {
"main": [
[
{
"node": "If1",
"type": "main",
"index": 0
}
]
]
},
"parsing": {
"main": [
[
{
"node": "isNew",
"type": "main",
"index": 0
}
]
]
},
"GetImage": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request1": {
"main": [
[
{
"node": "parsing",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Send a message1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get row(s) in sheet",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Append or update row in sheet": {
"main": [
[
{
"node": "GetImage",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "2f5afecd-87a5-43cf-8f24-c3e85a3971d0",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "A8imlsPnCWETHm6k",
"tags": []
}
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.
discordOAuth2ApigoogleApi
About this workflow
AmazonLuna-Games-Fetch. Uses httpRequest, scheduleTrigger, googleSheets, stickyNote. Scheduled trigger; 16 nodes.
Source: https://github.com/paoloronco/n8n-templates/blob/main/free-templates/1-amazonluna-fetch/workflow.json — original creator credit. Request a take-down →