{
  "version": "1.0.0",
  "exported_at": "2026-06-01T00:00:00.000Z",
  "project": {
    "name": "Amazon Review Scraper for Germany",
    "description": "Best-effort Amazon.de review scraper equivalent to the Octoparse Amazon Review Scraper for Germany. It opens the Amazon.de product page, caches product metadata, scrolls to the customer reviews area, normalizes visible Amazon review cards into stable scraper rows, exports review data, and follows an enabled review pagination Next link if Amazon exposes one. If Amazon hides reviews, requires login, or shows anti-bot/sign-in pages, it writes a diagnostic fallback row. This avoids the sign-in-gated all-reviews navigation observed during autonomous testing while still supporting pagination when available.",
    "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": 100,
      "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": 460,
      "position_y": 220,
      "config": {
        "url": "https://www.amazon.de/sspa/click?ie=UTF8&spc=MToyMjA3NzI1ODg0NTg3MTA5OjE3MTM1MTU4MjY6c3BfYXRmOjIwMDI5OTY0MTM2NTAxOjowOjo&url=%2FAmazon-Essentials-Damen-T-Shirt-Rundhalsausschnitt-Herstellergr%25C3%25B6%25C3%259Fe%2Fdp%2FB0775XJB21%2Fref%3Dsr_1_1_ffob_sspa%3Fdib%3DeyJ2IjoiMSJ9.WwnzCaLsF3JK8V-EhmwA2B8OtyFDTvTFPq8ssxOWpO23T2dFQg5VwAJtRtnmETq6svzo57XM_azs1Pnxr6LYFokZVJOK4E6utvds_TrUN9ph59p8niEGdMeWWkN2193oZFwKgJiLyuzD0fkDOQNjHL75lscL6VIreqFTVnJrs4EdlsUqPIceJnajwe8eroxmHh7-N4egQdEvw_7hi-kRktLVgBi5il5GHBtaoEuk5yYiwPh-ntGPU1rbrPUdXjJWE32jWjYGeO3_JD_w6NU_RpvCqey0SY25A6WpvM_-Y4g.Rzk9dBTuh2UjFbcsrs0oDz6zdePke28BuJQFtSW6_nc%26dib_tag%3Dse%26keywords%3Dt-shirt%26qid%3D1713515826%26sr%3D8-1-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9hdGY%26psc%3D1&language=de_DE",
        "color": "bg-[#4589ff]"
      }
    },
    {
      "block_id": "wait-for-page-load-1",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 820,
      "position_y": 220,
      "config": {
        "timeout": 45,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 1180,
      "position_y": 220,
      "config": {
        "selector": "#productTitle",
        "timeout": 45,
        "visible": true,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1540,
      "position_y": 220,
      "config": {
        "jsCode": "(() => { const text = (sel) => { const el = document.querySelector(sel); return el ? el.textContent.trim().replace(/\\s+/g, ' ') : ''; }; const body = document.body.innerText || ''; const asinFromUrl = location.href.match(/\\/dp\\/([A-Z0-9]{10})/); const asinFromBody = body.match(/ASIN\\s*[\\u200e\\u200f\\s:：]*([A-Z0-9]{10})/i); const dateMatch = body.match(/(?:Im Angebot von Amazon seit|Date First Available)\\s*[\\u200e\\u200f\\s:：]*([^\\n\\r]+)/i); const rating = text('#acrPopover .a-icon-alt') || text('[data-hook=\"rating-out-of-text\"]') || text('[data-hook=\"average-star-rating\"] .a-icon-alt'); const data = { product_url: location.href, product_title: text('#productTitle') || document.title.replace(/: Amazon\\.de.*$/i, '').trim(), asin: asinFromBody ? asinFromBody[1] : (asinFromUrl ? asinFromUrl[1] : 'B0775XJB21'), average_rating: rating, date_first_available: dateMatch ? dateMatch[1].replace(/ASIN.*$/i, '').trim() : '' }; localStorage.setItem('uscraper_amazon_product_meta', JSON.stringify(data)); return data; })();",
        "waitForCompletion": true,
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "inject-javascript-2",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1900,
      "position_y": 220,
      "config": {
        "jsCode": "(() => { const anchors = ['#customerReviews', '#reviewsMedley', '#cm_cr_dp_d_rating_histogram', '#reviews-medley-footer', '[data-hook=\"reviews-medley-footer\"]']; const target = anchors.map(s => document.querySelector(s)).find(Boolean); if (target) target.scrollIntoView({ behavior: 'instant', block: 'center' }); else window.scrollTo(0, Math.floor(document.body.scrollHeight * 0.75)); return true; })();",
        "waitForCompletion": true,
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 2260,
      "position_y": 220,
      "config": {
        "duration": 5,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "inject-javascript-3",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 2620,
      "position_y": 220,
      "config": {
        "jsCode": "(() => { const clean = (v) => (v || '').replace(/\\s+/g, ' ').trim(); const qText = (root, selectors) => { for (const sel of selectors) { const el = root.querySelector(sel); if (el && clean(el.textContent)) return clean(el.textContent); } return ''; }; const meta = (() => { try { return JSON.parse(localStorage.getItem('uscraper_amazon_product_meta') || '{}'); } catch(e) { return {}; } })(); document.querySelector('#uscraper-review-normalized')?.remove(); const container = document.createElement('div'); container.id = 'uscraper-review-normalized'; container.style.display = 'none'; const candidates = Array.from(document.querySelectorAll('[data-hook=\"review\"], div[id^=\"customer_review-\"], div[id*=\"customer_review\"], #cm-cr-dp-review-list .a-section, #customerReviews .review, #reviewsMedley .review, .cr-widget-FocalReviews .review')).filter(el => { const t = clean(el.textContent); return t.length > 60 && (/\\d[,.]?\\d?\\s*(von|out of)\\s*5|Sternen|stars/i.test(t) || el.querySelector('[data-hook*=\"review\"]')); }); const seen = new Set(); candidates.forEach((row, idx) => { const author = qText(row, ['.a-profile-name', '[data-hook=\"genome-widget\"] .a-profile-name']); const rating = qText(row, ['[data-hook=\"review-star-rating\"] .a-icon-alt', '[data-hook=\"cmps-review-star-rating\"] .a-icon-alt', '.review-rating .a-icon-alt', 'i.review-rating span', '.a-icon-alt']); let title = qText(row, ['[data-hook=\"review-title\"]', '.review-title']); title = title.replace(/^\\d+[,.]?\\d*\\s*(?:von|out of)\\s*5\\s*(?:Sternen|stars)?\\s*/i, '').trim(); const date = qText(row, ['[data-hook=\"review-date\"]', '.review-date']); const body = qText(row, ['[data-hook=\"review-body\"] span', '[data-hook=\"review-body\"]', '.review-text-content span', '.review-text-content', '.review-text']); const helpful = qText(row, ['[data-hook=\"helpful-vote-statement\"]', '.cr-vote-text']); const key = [author, title, date, body.slice(0,80)].join('|'); if (!body || seen.has(key)) return; seen.add(key); const out = document.createElement('div'); out.className = 'uscraper-review-row'; const fields = { Produkt_url: meta.product_url || location.href, Produkt_Titel: meta.product_title || '', ASIN: (location.href.match(/(?:product-reviews|dp)\\/([A-Z0-9]{10})/) || [null, meta.asin || ''])[1], Durchschnittliche_Kundenbewertung: meta.average_rating || '', Im_Angebot_von_Amazon_seit: meta.date_first_available || '', Name_des_Kundes: author, Personale_Sternebewertung: rating, Titel_der_Rezension: title, Ort_und_Zeit: date, Inhalt: body, Zustimmungsanzahl: helpful }; Object.entries(fields).forEach(([k,v]) => { const span = document.createElement('span'); span.className = k; span.textContent = v || ''; out.appendChild(span); }); container.appendChild(out); }); document.body.appendChild(container); return { normalized_reviews: container.children.length, candidates: candidates.length, url: location.href }; })();",
        "waitForCompletion": true,
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 2980,
      "position_y": 220,
      "config": {
        "selector": "#uscraper-review-normalized .uscraper-review-row",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 3340,
      "position_y": 220,
      "config": {
        "rowSelector": "#uscraper-review-normalized .uscraper-review-row",
        "fileName": "amazon-reviews-scraper-for-germany.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "Produkt_url",
            "selector": ".Produkt_url",
            "attribute": "text"
          },
          {
            "name": "Produkt_Titel",
            "selector": ".Produkt_Titel",
            "attribute": "text"
          },
          {
            "name": "ASIN",
            "selector": ".ASIN",
            "attribute": "text"
          },
          {
            "name": "Durchschnittliche_Kundenbewertung",
            "selector": ".Durchschnittliche_Kundenbewertung",
            "attribute": "text"
          },
          {
            "name": "Im_Angebot_von_Amazon_seit",
            "selector": ".Im_Angebot_von_Amazon_seit",
            "attribute": "text"
          },
          {
            "name": "Name_des_Kundes",
            "selector": ".Name_des_Kundes",
            "attribute": "text"
          },
          {
            "name": "Personale_Sternebewertung",
            "selector": ".Personale_Sternebewertung",
            "attribute": "text"
          },
          {
            "name": "Titel_der_Rezension",
            "selector": ".Titel_der_Rezension",
            "attribute": "text"
          },
          {
            "name": "Ort_und_Zeit",
            "selector": ".Ort_und_Zeit",
            "attribute": "text"
          },
          {
            "name": "Inhalt",
            "selector": ".Inhalt",
            "attribute": "text"
          },
          {
            "name": "Zustimmungsanzahl",
            "selector": ".Zustimmungsanzahl",
            "attribute": "text"
          }
        ]
      }
    },
    {
      "block_id": "element-exists-2",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 3700,
      "position_y": 220,
      "config": {
        "selector": "li.a-last:not(.a-disabled) a, .a-pagination .a-last:not(.a-disabled) a",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-1",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 4060,
      "position_y": 560,
      "config": {
        "selector": "li.a-last:not(.a-disabled) a, .a-pagination .a-last:not(.a-disabled) a",
        "timeout": 15,
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "wait-for-page-load-2",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 4420,
      "position_y": 560,
      "config": {
        "timeout": 45,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-2",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 4780,
      "position_y": 560,
      "config": {
        "duration": 4,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "structured-export-2",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 3340,
      "position_y": 560,
      "config": {
        "rowSelector": "body",
        "fileName": "amazon-reviews-scraper-for-germany.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "Produkt_url",
            "selector": "(() => { try { return JSON.parse(localStorage.getItem('uscraper_amazon_product_meta') || '{}').product_url || location.href; } catch(e) { return location.href; } })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Produkt_Titel",
            "selector": "(() => { try { return JSON.parse(localStorage.getItem('uscraper_amazon_product_meta') || '{}').product_title || document.title.replace(/: Amazon\\.de.*$/i, '').trim(); } catch(e) { return document.title; } })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "ASIN",
            "selector": "(() => { try { const saved = JSON.parse(localStorage.getItem('uscraper_amazon_product_meta') || '{}').asin; const m = location.href.match(/(?:product-reviews|dp)\\/([A-Z0-9]{10})/); return m ? m[1] : (saved || ''); } catch(e) { return ''; } })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Durchschnittliche_Kundenbewertung",
            "selector": "(() => { try { return JSON.parse(localStorage.getItem('uscraper_amazon_product_meta') || '{}').average_rating || ''; } catch(e) { return ''; } })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Im_Angebot_von_Amazon_seit",
            "selector": "(() => { try { return JSON.parse(localStorage.getItem('uscraper_amazon_product_meta') || '{}').date_first_available || ''; } catch(e) { return ''; } })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Name_des_Kundes",
            "selector": "'NO_VISIBLE_REVIEW_ROWS_FOUND'",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Personale_Sternebewertung",
            "selector": "''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Titel_der_Rezension",
            "selector": "'Amazon did not expose review cards in this browser session'",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Ort_und_Zeit",
            "selector": "''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Inhalt",
            "selector": "(() => { const txt = (document.body.innerText || '').replace(/\\s+/g, ' ').trim(); if (/captcha|robot|automated access/i.test(txt)) return 'Amazon anti-bot/CAPTCHA page detected'; if (/sign in|anmelden|enter mobile number|email/i.test(txt)) return 'Amazon sign-in page detected'; if (/no customer reviews|keine kundenrezensionen|no reviews/i.test(txt)) return 'Amazon reports no visible reviews for this URL/session'; return 'No normalized review rows found on visible product page. Page excerpt: ' + txt.slice(0, 420); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Zustimmungsanzahl",
            "selector": "''",
            "attribute": "text",
            "isJs": true
          }
        ]
      }
    },
    {
      "block_id": "end-1",
      "block_type": "output",
      "title": "End",
      "description": "Terminate execution flow",
      "position_x": 3700,
      "position_y": 560,
      "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": "wait-for-element-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-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": "inject-javascript-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-2",
      "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-3",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-3",
      "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": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-1",
      "from_connector_id": "false",
      "to_block_id": "structured-export-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "structured-export-1",
      "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": "click-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-2",
      "from_connector_id": "false",
      "to_block_id": "end-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "click-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": "inject-javascript-3",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "structured-export-2",
      "from_connector_id": "right",
      "to_block_id": "end-1",
      "to_connector_id": "left"
    }
  ],
  "canvas_elements": [
    {
      "id": "group-entry",
      "element_type": "group",
      "title": "Entry & Setup",
      "color": "#4589ff",
      "position_x": 28,
      "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": 388,
      "position_y": 116,
      "width": 4640,
      "height": 636,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "wait-for-element-1",
          "sleep-1",
          "wait-for-page-load-2",
          "sleep-2"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1468,
      "position_y": 116,
      "width": 1400,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "inject-javascript-1",
          "inject-javascript-2",
          "inject-javascript-3"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 2908,
      "position_y": 116,
      "width": 1400,
      "height": 636,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "element-exists-2",
          "click-1"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 3268,
      "position_y": 116,
      "width": 380,
      "height": 636,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1",
          "structured-export-2"
        ]
      }
    },
    {
      "id": "group-control",
      "element_type": "group",
      "title": "Control Flow",
      "color": "#8d8d8d",
      "position_x": 3628,
      "position_y": 456,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "end-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort Amazon.de review scraper equivalent to the Octoparse Amazon Review Scraper for Germany. It opens the Amazon.de product page, caches product metadata, scrolls to the customer reviews area, normalizes visible Amazon review cards into stable scraper rows, exports review data, and follows an enabled review pagination Next link if Amazon exposes one. If Amazon hides reviews, requires login, or shows anti-bot/sign-in pages, it writes a diagnostic fallback row. This avoids the sign-in-gated all-reviews navigation observed during autonomous testing while still supporting pagination when available.",
      "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 text = (sel) => { const el = document.querySelector(sel); return el ? el.textContent....` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 1740,
      "position_y": 200,
      "width": 340,
      "height": 140,
      "z_index": 22,
      "data": {
        "block_id": "inject-javascript-1"
      }
    },
    {
      "id": "note-block-inject-javascript-3",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `(() => { const clean = (v) => (v || '').replace(/\\s+/g, ' ').trim(); const qText = (root, selectors)...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 2820,
      "position_y": 200,
      "width": 340,
      "height": 140,
      "z_index": 22,
      "data": {
        "block_id": "inject-javascript-3"
      }
    },
    {
      "id": "note-block-element-exists-1",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `#uscraper-review-normalized .uscraper-review-row`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 3180,
      "position_y": 200,
      "width": 340,
      "height": 146,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-1"
      }
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Extracts rows matching `#uscraper-review-normalized .uscraper-review-row`. Confirm row count > 0 before running at scale.",
      "color": "#ee5396",
      "position_x": 3540,
      "position_y": 200,
      "width": 340,
      "height": 120,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    },
    {
      "id": "note-block-element-exists-2",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `li.a-last:not(.a-disabled) a, .a-pagination .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": 3900,
      "position_y": 200,
      "width": 340,
      "height": 153,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-2"
      }
    },
    {
      "id": "note-block-structured-export-2",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Structured export with JS columns (Produkt_url, Produkt_Titel, ASIN, Durchschnittliche_Kundenbewertung, Im_Angebot_von_Amazon_seit). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 3540,
      "position_y": 540,
      "width": 340,
      "height": 145,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-2"
      }
    }
  ]
}