{
  "version": "1.0.0",
  "exported_at": "2026-06-01T06:45:00.000Z",
  "project": {
    "name": "Amazon Germany Review Scraper with URLs",
    "description": "Best-effort Amazon.de review scraper equivalent to the Octoparse template. Accepts Amazon.de product detail URLs, derives the ASIN, navigates to the product review page, handles Amazon 'Weiter shoppen' interstitials, falls back to the product page all-reviews link when needed, extracts product/review fields, paginates through enabled review pages, and continues through the URL list. Amazon frequently serves anti-bot/CAPTCHA/validation pages; if review rows remain unavailable, the current URL is skipped instead of failing.",
    "color": "bg-[#ff9900]",
    "template_id": "ai-generated"
  },
  "blocks": [
    {
      "block_id": "set-window-size-1",
      "block_type": "process",
      "title": "Set Window Size",
      "description": "Set browser window dimensions",
      "position_x": 120,
      "position_y": 220,
      "config": {
        "width": 1920,
        "height": 1080,
        "color": "bg-[#4589ff]"
      }
    },
    {
      "block_id": "navigate-1",
      "block_type": "process",
      "title": "Navigate",
      "description": "Go to a URL",
      "position_x": 456,
      "position_y": 220,
      "config": {
        "urls": [
          "https://www.amazon.de/Floweroyal-Seidenpfingstrosen-Blumenstr%C3%A4u%C3%9Fe-Tischaufs%C3%A4tze-Blumenarrangement/dp/B09SFZDYNQ/ref=cm_cr_arp_d_product_top?ie=UTF8",
          "https://www.amazon.de/Floweroyal-Seidenpfingstrosen-Blumenstr%C3%A4u%C3%9Fe-Tischaufs%C3%A4tze-Blumenarrangement/dp/B09SFZDYNQ/ref=sr_1_2?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34XUIU9IHFZQL&dib=eyJ2IjoiMSJ9.YRWa-6SrSxIOWlN5jf8XmWFxUOIwPNOKFastLox8ZuIpW6_XPuznqpxn-mwSLQsZFKmxCm5R8I4s06L2MG4IMshvMQkC5A3hcCbGIPQcXjjXGAp9ufrYhNfZQvU2714ogjF0wjAD9Hmbzy2T4PhfI9vu7mwq8cizBv-qOM_CniS-r30NnNjcpe1b9weMIj0GH5N98dbqcyZ49MwTv7fIJAlL1CGZCAa6_xwEPzDlSnAqgBqW-RNdlgfvG5u9WLC6dR_gIP7ZXW5k14Q4aJHmAx8k6X3yHRwX5JolCBcrZjA.DGESfe7_DUS_q5UqNs9nY-5i4_Htq1T-Grp9_IVZ-yg&dib_tag=se&keywords=blumen&qid=1714358958&sprefix=bl%2Caps%2C439&sr=8-2"
        ],
        "color": "bg-[#4589ff]",
        "tags": [
          "amazon-de",
          "product-detail-urls",
          "input-urls"
        ]
      }
    },
    {
      "block_id": "wait-for-page-load-1",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 792,
      "position_y": 220,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1128,
      "position_y": 220,
      "config": {
        "duration": 3,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute JavaScript on page",
      "position_x": 1464,
      "position_y": 220,
      "config": {
        "jsCode": "(() => { const hiddenReturn = document.querySelector('input[name=\"amzn-r\"]')?.value || ''; const source = `${location.href} ${hiddenReturn}`; const asin = ((source.match(/\\/(?:dp|gp\\/product|product-reviews)\\/([A-Z0-9]{10})/) || [])[1] || document.querySelector('input[name=\"ASIN\"]')?.value || localStorage.getItem('__uscraper_asin') || '').trim(); if (asin) { localStorage.setItem('__uscraper_asin', asin); const reviewUrl = `https://www.amazon.de/product-reviews/${asin}/?ie=UTF8&reviewerType=all_reviews&pageNumber=1`; if (location.href !== reviewUrl) location.href = reviewUrl; } })();",
        "waitForCompletion": true,
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "wait-for-page-load-2",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 1800,
      "position_y": 220,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-2",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 2136,
      "position_y": 220,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 2472,
      "position_y": 220,
      "config": {
        "selector": "body",
        "timeout": 20,
        "visible": true,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 2808,
      "position_y": 220,
      "config": {
        "selector": "form[action*='/errors/validateCaptcha'] button[type='submit'], form[action*='/errors/validateCaptcha'] input[type='submit'], button.a-button-text[alt*='Weiter'], form[action*='/errors/validateCaptcha'] button.a-button-text",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-1",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 3144,
      "position_y": 520,
      "config": {
        "selector": "form[action*='/errors/validateCaptcha'] button[type='submit'], form[action*='/errors/validateCaptcha'] input[type='submit'], button.a-button-text[alt*='Weiter'], form[action*='/errors/validateCaptcha'] button.a-button-text",
        "timeout": 12,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "wait-for-page-load-3",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 3480,
      "position_y": 520,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-3",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 3816,
      "position_y": 520,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "inject-javascript-2",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute JavaScript on page",
      "position_x": 4152,
      "position_y": 520,
      "config": {
        "jsCode": "(() => { const hiddenReturn = document.querySelector('input[name=\"amzn-r\"]')?.value || ''; const source = `${location.href} ${hiddenReturn}`; const asin = ((source.match(/\\/(?:dp|gp\\/product|product-reviews)\\/([A-Z0-9]{10})/) || [])[1] || document.querySelector('input[name=\"ASIN\"]')?.value || localStorage.getItem('__uscraper_asin') || '').trim(); if (asin) { localStorage.setItem('__uscraper_asin', asin); const reviewUrl = `https://www.amazon.de/product-reviews/${asin}/?ie=UTF8&reviewerType=all_reviews&pageNumber=1`; if (!/\\/product-reviews\\//.test(location.href)) location.href = reviewUrl; } })();",
        "waitForCompletion": true,
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "wait-for-page-load-4",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 4488,
      "position_y": 520,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-4",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 4824,
      "position_y": 520,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "element-exists-2",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 5160,
      "position_y": 520,
      "config": {
        "selector": "div[data-hook='review'], div[id^='customer_review-'], .a-section.review, #cm_cr-review_list div.review, #cm_cr-review_list [data-hook='review']",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "element-exists-6",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 5160,
      "position_y": 520,
      "config": {
        "selector": "a[data-hook='see-all-reviews-link-foot'], a[data-hook='see-all-reviews-link'], a[href*='/product-reviews/'], #reviews-medley-footer a",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-4",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 3312,
      "position_y": 800,
      "config": {
        "selector": "a[data-hook='see-all-reviews-link-foot'], a[data-hook='see-all-reviews-link'], a[href*='/product-reviews/'], #reviews-medley-footer a",
        "timeout": 15,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "wait-for-page-load-7",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 3648,
      "position_y": 800,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-7",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 3984,
      "position_y": 800,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "element-exists-7",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 4320,
      "position_y": 800,
      "config": {
        "selector": "div[data-hook='review'], div[id^='customer_review-'], .a-section.review, #cm_cr-review_list div.review, #cm_cr-review_list [data-hook='review']",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 5496,
      "position_y": 520,
      "config": {
        "rowSelector": "div[data-hook='review'], div[id^='customer_review-'], .a-section.review, #cm_cr-review_list div.review, #cm_cr-review_list [data-hook='review']",
        "fileName": "amazon-germany-review-scraper-mit-urls.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "produktnamen",
            "selector": "(document.querySelector('a[data-hook=\"product-link\"]')?.textContent || document.querySelector('#cm_cr-product_info a')?.textContent || document.querySelector('.product-title')?.textContent || document.querySelector('#productTitle')?.textContent || '').trim()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "produkt_url",
            "selector": "(() => { const asin = ((location.href.match(/\\/(?:dp|gp\\/product|product-reviews)\\/([A-Z0-9]{10})/) || [])[1] || document.querySelector('input[name=\"ASIN\"]')?.value || localStorage.getItem('__uscraper_asin') || '').trim(); return asin ? `https://www.amazon.de/dp/${asin}` : (document.querySelector('a[data-hook=\"product-link\"]')?.href || location.href); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "asin",
            "selector": "((location.href.match(/\\/(?:dp|gp\\/product|product-reviews)\\/([A-Z0-9]{10})/) || [])[1] || document.querySelector('input[name=\"ASIN\"]')?.value || localStorage.getItem('__uscraper_asin') || '').trim()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "durchschnittliche_kundenbewertung",
            "selector": "(document.querySelector('[data-hook=\"rating-out-of-text\"]')?.textContent || document.querySelector('#acrPopover .a-icon-alt')?.textContent || document.querySelector('.AverageCustomerReviews .a-icon-alt')?.textContent || document.querySelector('[class*=\"average\"] .a-icon-alt')?.textContent || '').trim()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "anzahl_der_bewertungen",
            "selector": "(document.querySelector('[data-hook=\"total-review-count\"]')?.textContent || document.querySelector('#filter-info-section')?.textContent || document.querySelector('#acrCustomerReviewText')?.textContent || '').trim()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "benutzername",
            "selector": ".a-profile-name",
            "attribute": "text"
          },
          {
            "name": "kundenbewertung",
            "selector": "(ROW.querySelector('i[data-hook=\"review-star-rating\"] .a-icon-alt, i[data-hook=\"cmps-review-star-rating\"] .a-icon-alt, .review-rating .a-icon-alt, [class*=\"review-rating\"] .a-icon-alt')?.textContent || '').trim()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "titel",
            "selector": "(() => { const el = ROW.querySelector('[data-hook=\"review-title\"], .review-title'); if (!el) return ''; const spans = Array.from(el.querySelectorAll('span')).map(s => s.textContent.trim()).filter(Boolean); return (spans[spans.length - 1] || el.textContent || '').trim(); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "land",
            "selector": "(() => { const t = (ROW.querySelector('span[data-hook=\"review-date\"], .review-date')?.textContent || '').trim(); const m = t.match(/(?:Rezension|Bewertung) aus (.*?) vom /i); return m ? m[1].trim() : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "datum",
            "selector": "(() => { const t = (ROW.querySelector('span[data-hook=\"review-date\"], .review-date')?.textContent || '').trim(); const m = t.match(/ vom (.*)$/i); return m ? m[1].trim() : t; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "inhalt",
            "selector": "span[data-hook='review-body'] span, .review-text-content span, [data-hook='review-body']",
            "attribute": "text"
          },
          {
            "name": "anzahl_hilfreich",
            "selector": "span[data-hook='helpful-vote-statement']",
            "attribute": "text"
          }
        ]
      }
    },
    {
      "block_id": "element-exists-3",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 5832,
      "position_y": 520,
      "config": {
        "selector": "ul.a-pagination li.a-last:not(.a-disabled) a",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-2",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 6168,
      "position_y": 520,
      "config": {
        "selector": "ul.a-pagination li.a-last:not(.a-disabled) a",
        "timeout": 15,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "wait-for-page-load-5",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 6504,
      "position_y": 520,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-5",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 6840,
      "position_y": 520,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "wait-for-element-2",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 7176,
      "position_y": 520,
      "config": {
        "selector": "body",
        "timeout": 20,
        "visible": true,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "element-exists-4",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 7512,
      "position_y": 520,
      "config": {
        "selector": "form[action*='/errors/validateCaptcha'] button[type='submit'], form[action*='/errors/validateCaptcha'] input[type='submit'], button.a-button-text[alt*='Weiter'], form[action*='/errors/validateCaptcha'] button.a-button-text",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-3",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 7848,
      "position_y": 520,
      "config": {
        "selector": "form[action*='/errors/validateCaptcha'] button[type='submit'], form[action*='/errors/validateCaptcha'] input[type='submit'], button.a-button-text[alt*='Weiter'], form[action*='/errors/validateCaptcha'] button.a-button-text",
        "timeout": 12,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "wait-for-page-load-6",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 8184,
      "position_y": 520,
      "config": {
        "timeout": 35,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-6",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 8520,
      "position_y": 520,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "element-exists-5",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 8856,
      "position_y": 758,
      "config": {
        "selector": "div[data-hook='review'], div[id^='customer_review-'], .a-section.review, #cm_cr-review_list div.review, #cm_cr-review_list [data-hook='review']",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 8856,
      "position_y": 520,
      "config": {
        "color": "bg-[#8d8d8d]"
      }
    }
  ],
  "connections": [
    {
      "from_block_id": "set-window-size-1",
      "from_connector_id": "right",
      "to_block_id": "navigate-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "navigate-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-1",
      "from_connector_id": "right",
      "to_block_id": "sleep-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-1",
      "from_connector_id": "right",
      "to_block_id": "inject-javascript-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-2",
      "from_connector_id": "right",
      "to_block_id": "sleep-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-2",
      "from_connector_id": "right",
      "to_block_id": "wait-for-element-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-1",
      "from_connector_id": "right",
      "to_block_id": "element-exists-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-1",
      "from_connector_id": "true",
      "to_block_id": "click-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-1",
      "from_connector_id": "false",
      "to_block_id": "element-exists-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "click-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-3",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-3",
      "from_connector_id": "right",
      "to_block_id": "sleep-3",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-3",
      "from_connector_id": "right",
      "to_block_id": "inject-javascript-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-2",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-4",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-4",
      "from_connector_id": "right",
      "to_block_id": "sleep-4",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-4",
      "from_connector_id": "right",
      "to_block_id": "element-exists-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-2",
      "from_connector_id": "true",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-2",
      "from_connector_id": "false",
      "to_block_id": "element-exists-6",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-6",
      "from_connector_id": "true",
      "to_block_id": "click-4",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-6",
      "from_connector_id": "false",
      "to_block_id": "loop-continue-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "click-4",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-7",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-7",
      "from_connector_id": "right",
      "to_block_id": "sleep-7",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-7",
      "from_connector_id": "right",
      "to_block_id": "element-exists-7",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-7",
      "from_connector_id": "true",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-7",
      "from_connector_id": "false",
      "to_block_id": "loop-continue-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "structured-export-1",
      "from_connector_id": "right",
      "to_block_id": "element-exists-3",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-3",
      "from_connector_id": "true",
      "to_block_id": "click-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-3",
      "from_connector_id": "false",
      "to_block_id": "loop-continue-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "click-2",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-5",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-5",
      "from_connector_id": "right",
      "to_block_id": "sleep-5",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-5",
      "from_connector_id": "right",
      "to_block_id": "wait-for-element-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-2",
      "from_connector_id": "right",
      "to_block_id": "element-exists-4",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-4",
      "from_connector_id": "true",
      "to_block_id": "click-3",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-4",
      "from_connector_id": "false",
      "to_block_id": "element-exists-5",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "click-3",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-6",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-6",
      "from_connector_id": "right",
      "to_block_id": "sleep-6",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-6",
      "from_connector_id": "right",
      "to_block_id": "element-exists-5",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-5",
      "from_connector_id": "true",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-5",
      "from_connector_id": "false",
      "to_block_id": "loop-continue-1",
      "to_connector_id": "left"
    }
  ],
  "canvas_elements": [
    {
      "id": "group-entry",
      "element_type": "group",
      "title": "Entry & Setup",
      "color": "#4589ff",
      "position_x": 48,
      "position_y": 116,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "set-window-size-1"
        ]
      }
    },
    {
      "id": "group-load",
      "element_type": "group",
      "title": "Page Load",
      "color": "#08bdba",
      "position_x": 384,
      "position_y": 116,
      "width": 8384,
      "height": 876,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1",
          "wait-for-page-load-2",
          "sleep-2",
          "wait-for-element-1",
          "wait-for-page-load-3",
          "sleep-3",
          "wait-for-page-load-4",
          "sleep-4",
          "wait-for-page-load-7",
          "sleep-7",
          "wait-for-page-load-5",
          "sleep-5",
          "wait-for-element-2",
          "wait-for-page-load-6",
          "sleep-6"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1392,
      "position_y": 116,
      "width": 3008,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "inject-javascript-1",
          "inject-javascript-2"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 2736,
      "position_y": 116,
      "width": 6368,
      "height": 876,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "click-1",
          "element-exists-2",
          "element-exists-6",
          "click-4",
          "element-exists-7",
          "element-exists-3",
          "click-2",
          "element-exists-4",
          "click-3",
          "element-exists-5",
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 5424,
      "position_y": 416,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort Amazon.de review scraper equivalent to the Octoparse template. Accepts Amazon.de product detail URLs, derives the ASIN, navigates to the product review page, handles Amazon 'Weiter shoppen' interstitials, falls back to the product page all-reviews link when needed, extracts product/review fields, paginates through enabled review pages, and continues through the URL list. Amazon frequently serves anti-bot/CAPTCHA/validation pages; if review rows remain unavailable, the current URL is skipped instead of failing.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-inject-javascript-1",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `(() => { const hiddenReturn = document.querySelector('input[name=\"amzn-r\"]')?.value || ''; const sou...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 1664,
      "position_y": 200,
      "width": 340,
      "height": 140,
      "z_index": 22,
      "data": {
        "block_id": "inject-javascript-1"
      }
    },
    {
      "id": "note-block-element-exists-1",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `form[action*='/errors/validateCaptcha'] button[type='submit'], form[action*='/errors/validateCaptcha'] input[type='submi`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 3008,
      "position_y": 200,
      "width": 340,
      "height": 170,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-1"
      }
    },
    {
      "id": "note-block-element-exists-2",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `div[data-hook='review'], div[id^='customer_review-'], .a-section.review, #cm_cr-review_list div.review, #cm_cr-review_li`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 5360,
      "position_y": 500,
      "width": 340,
      "height": 170,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-2"
      }
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Structured export with JS columns (produktnamen, produkt_url, asin, durchschnittliche_kundenbewertung, anzahl_der_bewertungen). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 5696,
      "position_y": 500,
      "width": 340,
      "height": 144,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    },
    {
      "id": "note-block-element-exists-3",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `ul.a-pagination li.a-last:not(.a-disabled) a`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 6032,
      "position_y": 500,
      "width": 340,
      "height": 145,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-3"
      }
    },
    {
      "id": "note-block-element-exists-4",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `form[action*='/errors/validateCaptcha'] button[type='submit'], form[action*='/errors/validateCaptcha'] input[type='submi`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 7712,
      "position_y": 500,
      "width": 340,
      "height": 170,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-4"
      }
    },
    {
      "id": "note-block-loop-continue-1",
      "element_type": "note",
      "title": "Note: Loop Continue",
      "content": "Loop Continue advances a multi-URL or multi-text loop. Place at the end of the loop body with a clear back-edge to the loop start.",
      "color": "#ee5396",
      "position_x": 9056,
      "position_y": 500,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}