{
  "version": "1.0.0",
  "exported_at": "2026-06-02T13:55:00.000Z",
  "project": {
    "name": "Amazon Review Scraper for Italy",
    "description": "Best-effort Amazon.it review scraper equivalent to Octoparse Amazon Review Scraper for Italy. It accepts Amazon.it product URLs or /product-reviews/{ASIN}/ URLs in navigate.urls, scrolls to the customer reviews area, normalizes visible Amazon review cards into stable hidden rows, exports product/review fields to crawler-recensioni-prodotti-amazon.csv, optionally opens a non-sign-in “See all reviews” page, and follows only the enabled Amazon review pagination bar Next link until no more pages remain. It deliberately does not export diagnostic or sign-in placeholder rows. Limitations: Amazon may show CAPTCHA, login, verification, unavailable-product pages, regional/language variants, or anti-automation pages; manual intervention or a logged-in persistent profile may be required.",
    "color": "bg-[#ff9900]",
    "template_id": "ai-generated"
  },
  "blocks": [
    {
      "block_id": "set-window-size-1",
      "block_type": "process",
      "title": "Set Window Size",
      "description": "Set browser viewport size",
      "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.it/HelloBaby-Wireless-Notturna-Monitoraggio-Temperatura/dp/B01MYYTFVI/ref=sr_1_1?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3L3RQ8CXZNP6&keywords=baby+monitor&qid=1697099222&sprefix=%2Caps%2C381&sr=8-1#customerReviews"
        ],
        "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": 792,
      "position_y": 220,
      "config": {
        "timeout": 30,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1128,
      "position_y": 220,
      "config": {
        "jsCode": "(function(){var target=document.querySelector('#customerReviews')||document.querySelector('#reviewsMedley')||document.querySelector('[data-hook=\"reviews-medley-footer\"]')||document.querySelector('[data-hook=\"review\"]');if(target){target.scrollIntoView({behavior:'instant',block:'center'});}else{window.scrollTo(0,document.body.scrollHeight);}return 'Scrolled to reviews area';})();",
        "waitForCompletion": true,
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1464,
      "position_y": 220,
      "config": {
        "duration": 5,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "inject-javascript-2",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1800,
      "position_y": 220,
      "config": {
        "jsCode": "(function(){\n  function clean(s){return (s||'').replace(/\\s+/g,' ').trim();}\n  function q(sel,root){try{return (root||document).querySelector(sel);}catch(e){return null;}}\n  function qa(sel,root){try{return Array.from((root||document).querySelectorAll(sel));}catch(e){return [];}}\n  function text(sel,root){var el=q(sel,root);return el?clean(el.textContent):'';}\n  function removeOnce(src,val){src=clean(src);val=clean(val);return val?clean(src.replace(val,'')):src;}\n  qa('.uscraper-review-row').forEach(function(n){n.remove();});\n  if (/\\/ap\\/signin/i.test(location.pathname) || /Amazon Sign In/i.test(document.title)) { return 'On Amazon sign-in page; no review rows exported'; }\n  var asinMatch=location.href.match(/product-reviews\\/([A-Z0-9]{10})|\\/dp\\/([A-Z0-9]{10})/i);\n  var asin=asinMatch?(asinMatch[1]||asinMatch[2]).toUpperCase():'';\n  if(!asin){var asinNode=q('[data-asin][data-asin]:not([data-asin=\"\"])'); if(asinNode){asin=(asinNode.getAttribute('data-asin')||'').toUpperCase();}}\n  var productTitle=clean((q('a[data-hook=\"product-link\"]')||q('#cm_cr-product_info a.a-link-normal')||q('#productTitle')||{}).textContent||'');\n  if(!productTitle && document.title && !/Amazon Sign In/i.test(document.title)){productTitle=clean(document.title.replace(/: Amazon\\.it.*$/i,''));}\n  var productUrl='';\n  var productLink=q('a[data-hook=\"product-link\"]')||q('#cm_cr-product_info a.a-link-normal');\n  if(productLink&&productLink.getAttribute('href')){productUrl=new URL(productLink.getAttribute('href'),location.origin).href;}else if(asin){productUrl=location.origin+'/dp/'+asin;}else{productUrl=location.href;}\n  var ratingNode=q('[data-hook=\"rating-out-of-text\"]')||q('#cm_cr-product_info .a-icon-alt')||q('#acrPopover .a-icon-alt')||q('#acrPopover');\n  var aggregate=ratingNode?clean(ratingNode.getAttribute('aria-label')||ratingNode.textContent):'';\n  var totalNode=q('[data-hook=\"cr-filter-info-review-rating-count\"]')||q('[data-hook=\"total-review-count\"]')||q('#filter-info-section .a-size-base')||q('#acrCustomerReviewText');\n  var totalText=clean(totalNode?totalNode.textContent:'');\n  var totalMatch=totalText.match(/[\\d.,]+/);\n  var totalCount=totalMatch?totalMatch[0]:totalText;\n  var cards=[];\n  ['div[data-hook=\"review\"]','li[data-hook=\"review\"]','div[id^=\"customer_review-\"]','div.review','[id*=\"customer_review\"]'].forEach(function(sel){qa(sel).forEach(function(el){cards.push(el);});});\n  if(cards.length===0){qa('[data-hook=\"review-body\"], .review-text-content, .review-text').forEach(function(el){var row=el.closest('[id^=\"customer_review-\"]')||el.closest('[data-hook=\"review\"]')||el.closest('.a-section')||el.parentElement;if(row){cards.push(row);}});}\n  var seen=new Set();\n  cards=cards.filter(function(el){var key=el.id||clean(el.textContent).slice(0,250);if(!key||seen.has(key)){return false;}seen.add(key);return true;});\n  function makeRow(data){var d=document.createElement('div');d.className='uscraper-review-row';d.style.position='absolute';d.style.left='-99999px';d.style.top='0';Object.keys(data).forEach(function(k){d.setAttribute('data-'+k,data[k]||'');});document.body.appendChild(d);}\n  cards.forEach(function(card){\n    var reviewer=text('.a-profile-name',card);\n    var starEl=q('i[data-hook=\"review-star-rating\"] span.a-icon-alt, i[data-hook=\"cmps-review-star-rating\"] span.a-icon-alt, .review-rating span.a-icon-alt',card);\n    var stars=clean(starEl?starEl.textContent:'');\n    var titleEl=q('[data-hook=\"review-title\"], .review-title',card);\n    var title='';\n    if(titleEl){var clone=titleEl.cloneNode(true);qa('i,.a-icon,.a-icon-alt',clone).forEach(function(n){n.remove();});title=clean(clone.textContent);}\n    var dateText=text('[data-hook=\"review-date\"], .review-date',card);\n    var country='';var date=dateText;\n    var dm=dateText.match(/(?:Reviewed in|Recensito in|Recensione in)\\s+(.+?)\\s+(?:on|il)\\s+(.+)$/i);\n    if(dm){country=clean(dm[1]);date=clean(dm[2]);}\n    var helpful=text('[data-hook=\"helpful-vote-statement\"], .cr-vote-text',card);\n    var votes='';if(/one person|una persona/i.test(helpful)){votes='1';}else{var vm=helpful.match(/[\\d.,]+/);votes=vm?vm[0]:'';}\n    var body=text('[data-hook=\"review-body\"] span, [data-hook=\"review-body\"], .review-text-content span, .review-text-content, .review-text',card);\n    if(!body){\n      body=clean(card.textContent);\n      [reviewer,stars,title,dateText,helpful,'Verified Purchase','Acquisto verificato','Report','Translate review to English'].forEach(function(v){body=removeOnce(body,v);});\n      body=clean(body.replace(/\\b\\d+\\s+people found this helpful\\b/ig,'').replace(/\\b\\d+\\s+persone hanno trovato utile\\b/ig,''));\n    }\n    if(body || reviewer || title){\n      makeRow({titolo_prodotto:productTitle,prodotto_url:productUrl,asin:asin,valutazione:aggregate,quantita_valutazioni:totalCount,nome_utente:reviewer,stelle_recensione:stars,titolo_recensione:title,paese:country,data:date,contenuto_recensione:body,numero_di_voti_utilil_count:votes});\n    }\n  });\n  return 'UScraper normalized visible review rows: '+document.querySelectorAll('.uscraper-review-row').length;\n})();",
        "waitForCompletion": true,
        "timeout": 15,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 2136,
      "position_y": 220,
      "config": {
        "rowSelector": ".uscraper-review-row",
        "fileName": "crawler-recensioni-prodotti-amazon.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "titolo_prodotto",
            "selector": "",
            "attribute": "data-titolo_prodotto"
          },
          {
            "name": "prodotto_url",
            "selector": "",
            "attribute": "data-prodotto_url"
          },
          {
            "name": "asin",
            "selector": "",
            "attribute": "data-asin"
          },
          {
            "name": "valutazione",
            "selector": "",
            "attribute": "data-valutazione"
          },
          {
            "name": "quantita_valutazioni",
            "selector": "",
            "attribute": "data-quantita_valutazioni"
          },
          {
            "name": "nome_utente",
            "selector": "",
            "attribute": "data-nome_utente"
          },
          {
            "name": "stelle_recensione",
            "selector": "",
            "attribute": "data-stelle_recensione"
          },
          {
            "name": "titolo_recensione",
            "selector": "",
            "attribute": "data-titolo_recensione"
          },
          {
            "name": "paese",
            "selector": "",
            "attribute": "data-paese"
          },
          {
            "name": "data",
            "selector": "",
            "attribute": "data-data"
          },
          {
            "name": "contenuto_recensione",
            "selector": "",
            "attribute": "data-contenuto_recensione"
          },
          {
            "name": "numero_di_voti_utilil_count",
            "selector": "",
            "attribute": "data-numero_di_voti_utilil_count"
          }
        ]
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 2472,
      "position_y": 220,
      "config": {
        "selector": "a[data-hook=\"see-all-reviews-link-foot\"][href*=\"/product-reviews/\"]:not([href*=\"/ap/signin\"]), #reviews-medley-footer a[href*=\"/product-reviews/\"]:not([href*=\"/ap/signin\"])",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-1",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 2808,
      "position_y": 520,
      "config": {
        "selector": "a[data-hook=\"see-all-reviews-link-foot\"][href*=\"/product-reviews/\"]:not([href*=\"/ap/signin\"]), #reviews-medley-footer a[href*=\"/product-reviews/\"]:not([href*=\"/ap/signin\"])",
        "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": 3144,
      "position_y": 520,
      "config": {
        "timeout": 30,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-2",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 3480,
      "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": 2472,
      "position_y": 520,
      "config": {
        "selector": "#cm_cr-pagination_bar li.a-last:not(.a-disabled) a[href]:not([href=\"javascript:void(0);\"]):not([href*=\"/ap/signin\"]):not([aria-label*=\"Disabled\"]), .reviews-content #cm_cr-pagination_bar li.a-last:not(.a-disabled) a[href]:not([href=\"javascript:void(0);\"]):not([href*=\"/ap/signin\"]):not([aria-label*=\"Disabled\"])",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-2",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 2976,
      "position_y": 800,
      "config": {
        "selector": "#cm_cr-pagination_bar li.a-last:not(.a-disabled) a[href]:not([href=\"javascript:void(0);\"]):not([href*=\"/ap/signin\"]):not([aria-label*=\"Disabled\"]), .reviews-content #cm_cr-pagination_bar li.a-last:not(.a-disabled) a[href]:not([href=\"javascript:void(0);\"]):not([href*=\"/ap/signin\"]):not([aria-label*=\"Disabled\"])",
        "timeout": 15,
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "wait-for-page-load-3",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 3312,
      "position_y": 800,
      "config": {
        "timeout": 30,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "sleep-3",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 3648,
      "position_y": 800,
      "config": {
        "duration": 4,
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 3984,
      "position_y": 800,
      "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": "inject-javascript-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-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-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-2",
      "from_connector_id": "right",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "structured-export-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-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-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-2",
      "from_connector_id": "true",
      "to_block_id": "click-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-2",
      "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-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-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": 3512,
      "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-page-load-3",
          "sleep-3"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1056,
      "position_y": 116,
      "width": 992,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "inject-javascript-1",
          "inject-javascript-2"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 2064,
      "position_y": 116,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 2400,
      "position_y": 116,
      "width": 1832,
      "height": 876,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "click-1",
          "element-exists-2",
          "click-2",
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort Amazon.it review scraper equivalent to Octoparse Amazon Review Scraper for Italy. It accepts Amazon.it product URLs or /product-reviews/{ASIN}/ URLs in navigate.urls, scrolls to the customer reviews area, normalizes visible Amazon review cards into stable hidden rows, exports product/review fields to crawler-recensioni-prodotti-amazon.csv, optionally opens a non-sign-in “See all reviews” page, and follows only the enabled Amazon review pagination bar Next link until no more pages remain. It deliberately does not export diagnostic or sign-in placeholder rows. Limitations: Amazon may show CAPTCHA, login, verification, unavailable-product pages, regional/language variants, or anti-automation pages; manual intervention or a logged-in persistent profile may be required.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-navigate-1",
      "element_type": "note",
      "title": "Note: Navigate",
      "content": "Multi-URL loop over 1 pages. Pair with loop-continue at the end of each iteration.",
      "color": "#ee5396",
      "position_x": 656,
      "position_y": 200,
      "width": 328,
      "height": 107,
      "z_index": 22,
      "data": {
        "block_id": "navigate-1"
      }
    },
    {
      "id": "note-block-inject-javascript-2",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `(function(){\n  function clean(s){return (s||'').replace(/\\s+/g,' ').trim();}\n  function q(sel,root){...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 2000,
      "position_y": 200,
      "width": 340,
      "height": 140,
      "z_index": 22,
      "data": {
        "block_id": "inject-javascript-2"
      }
    },
    {
      "id": "note-block-element-exists-1",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `a[data-hook=\"see-all-reviews-link-foot\"][href*=\"/product-reviews/\"]:not([href*=\"/ap/signin\"]), #reviews-medley-footer a[`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 2672,
      "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 `#cm_cr-pagination_bar li.a-last:not(.a-disabled) a[href]:not([href=\"javascript:void(0);\"]):not([href*=\"/ap/signin\"]):not`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 2672,
      "position_y": 500,
      "width": 340,
      "height": 170,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-2"
      }
    },
    {
      "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": 4184,
      "position_y": 780,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}