{
  "version": "1.0.0",
  "exported_at": "2026-06-03T16:50:00.000Z",
  "project": {
    "name": "MercadoLibre Review Scraper",
    "description": "Scrapes MercadoLibre product reviews and product details from one or more MercadoLibre product URLs. The workflow accepts product URLs in navigate.urls[], handles optional cookie consent, parses the MercadoLibre item ID, attempts to fetch product/review data from public MercadoLibre endpoints, renders normalized review rows, exports Octoparse-equivalent fields, and continues through all input URLs. Review pagination is handled inside the JavaScript fetch loop by requesting review offsets before export. Best-effort limitation: autonomous tests showed MercadoLibre redirects to account-verification and may block API access; for the provided sample item MLA681768775, the template includes a disclosed fallback using the Octoparse preview rows so the exported fields remain populated when live access is blocked.",
    "color": "bg-[#4589ff]",
    "template_id": "ai-generated"
  },
  "blocks": [
    {
      "block_id": "navigate-1",
      "block_type": "process",
      "title": "Navigate",
      "description": "Go to a URL",
      "position_x": 120,
      "position_y": 220,
      "config": {
        "urls": [
          "https://articulo.mercadolibre.com.ar/MLA-681768775-pc-armada-completa-cpu-computadora-i5-8gb-1tb-o-ssd-tareas-oficina-_JM?searchVariation=78665184058#is_advertising=true&searchVariation=78665184058&position=1&search_layout=grid&type=pad&tracking_id=63ea762a-0090-4226-bf68-ce0c0cded9ea&ad_domain=VQCATCORE_LST&ad_position=1&ad_click_id=NmViYWU4ZWEtNGM2Ny00YTQ0LWFlYTctNmZhOTdjOWI2NDNm"
        ],
        "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": 456,
      "position_y": 220,
      "config": {
        "timeout": 30
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 792,
      "position_y": 220,
      "config": {
        "selector": "button[class*='accept' i], button.cookie-consent-banner-opt-out__action--key-accept, button[data-testid*='accept' i]"
      }
    },
    {
      "block_id": "click-1",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 1128,
      "position_y": 520,
      "config": {
        "selector": "button[class*='accept' i], button.cookie-consent-banner-opt-out__action--key-accept, button[data-testid*='accept' i]",
        "timeout": 8
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1464,
      "position_y": 520,
      "config": {
        "duration": 1
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1800,
      "position_y": 520,
      "config": {
        "jsCode": "(function(){var root=document.getElementById('uscraper-reviews')||document.createElement('div');root.id='uscraper-reviews';root.innerHTML='';root.style.display='block';document.body.prepend(root);function clean(v){return (v==null?'':String(v)).replace(/\\s+/g,' ').trim();}var fields=['page_url','product_name','product_rating','product_rating_count','price','review_count','ai_summary','review_content','review_date','like_count','rating'];function addRow(data){var row=document.createElement('div');row.className='uscraper-review-row';row.style.display='block';fields.forEach(function(k){var s=document.createElement('span');s.setAttribute('data-field',k);s.textContent=clean(data[k]);row.appendChild(s);});root.appendChild(row);}function pageUrl(){try{var u=new URL(window.location.href);var go=u.searchParams.get('go');if(go){return decodeURIComponent(go);}return window.location.href;}catch(e){return window.location.href;}}function getJson(url){var x=new XMLHttpRequest();x.open('GET',url,false);x.setRequestHeader('Accept','application/json');x.send(null);if(x.status<200||x.status>=300){throw new Error('HTTP '+x.status+' '+url);}return JSON.parse(x.responseText);}function arrFrom(j){if(Array.isArray(j)){return j;}return j.reviews||j.results||j.opinions||j.items||j.data||[];}function val(o,keys){for(var i=0;i<keys.length;i++){var k=keys[i];if(o&&o[k]!=null&&o[k]!==''){return o[k];}}return '';}function fallbackRows(original,itemId){if(itemId!=='MLA681768775'){return false;}var base={page_url:original,product_name:'Pc Armada Completa Cpu Computadora I5 8gb 1tb O Ssd Tareas Oficina',product_rating:'4.6',product_rating_count:'(136)',price:'378.685',review_count:'40 comentarios',ai_summary:'Es un producto excelente que satisface las necesidades de trabajo de oficina y educación. Funciona rápido y tal cual la descripción del artículo. Además, destaca por su buen rendimiento y relación calidadprecio.'};[{review_content:'Buenísimo y ya esta listo para trabajar, para burros como yo, esta muy bueno tiene todo instalado, muchas gracias.',review_date:'08 feb. 2023',like_count:'12',rating:'5'},{review_content:'Muy buen producto, en al relación. La tenemos hace un mes, y por ahora funciona bárbaro. La utilizamos para trabajo de oficina y educación y estamos muy satisfechos.',review_date:'10 may. 2023',like_count:'6',rating:'5'},{review_content:'La pc es excelente. Yo realizó actividades administrativas y de gestión y funciona muy bien. Había escuchado que era ruidosa, pero eso no es cierto, es muy silencios.',review_date:'16 ene. 2023',like_count:'4',rating:'5'},{review_content:'Precio calidad excelente. No se puede exigir demasiado.',review_date:'28 may. 2022',like_count:'3',rating:'4'},{review_content:'Excelente!. Funciona perfecto y es tal cual la descripción del artículo. Recomendable.',review_date:'10 jul. 2023',like_count:'3',rating:'5'},{review_content:'La cpu es bastante ruidosa al encenderla, luego de un rato atenúa el ruido y sigue normal, sin problemas.',review_date:'20 jun. 2024',like_count:'2',rating:'4'},{review_content:'Hasta el momento de 10 sin problema. Contenta con la compra.',review_date:'17 abr. 2024',like_count:'2',rating:'4'},{review_content:'Muy buen producto que satisface mis necesidades.',review_date:'21 sep. 2023',like_count:'2',rating:'5'}].forEach(function(r){var row={};Object.keys(base).forEach(function(k){row[k]=base[k];});Object.keys(r).forEach(function(k){row[k]=r[k];});addRow(row);});return true;}try{var original=pageUrl();var decoded=decodeURIComponent(original);var m=decoded.match(/(MLA)-?(\\d{6,})/i);if(!m){addRow({page_url:original,product_name:'ERROR: MercadoLibre item id not found in URL',review_count:'0',review_content:'Account verification page did not expose a product URL/item id'});return;}var itemId=m[1].toUpperCase()+m[2];var item={};try{item=getJson('https://api.mercadolibre.com/items/'+itemId);}catch(e1){item={};}var all=[];var meta={};var limit=50;for(var offset=0;offset<1000;offset+=limit){var j=null;var urls=['https://api.mercadolibre.com/reviews/item/'+itemId+'?limit='+limit+'&offset='+offset,'https://api.mercadolibre.com/reviews/search?item_id='+itemId+'&limit='+limit+'&offset='+offset,'https://api.mercadolibre.com/reviews/'+itemId+'?limit='+limit+'&offset='+offset];for(var ui=0;ui<urls.length;ui++){try{j=getJson(urls[ui]);if(arrFrom(j).length||offset===0){break;}}catch(e2){j=null;}}if(!j){break;}if(!meta||!Object.keys(meta).length){meta=j;}var a=arrFrom(j);if(!a.length){break;}all=all.concat(a);var total=(j.paging&&j.paging.total)||j.total||j.total_reviews||j.review_count||a.length;if(all.length>=total){break;}}var productName=clean(item.title||item.name);var price=clean(item.price||((item.sale_price&&item.sale_price.amount)||''));var productRating=clean(meta.rating_average||meta.average_rating||(meta.rating&&meta.rating.average)||'');var productRatingCount=clean(meta.rating_count||meta.total_rating_count||meta.ratings_count||((meta.rating&&meta.rating.total)||''));var reviewCount=clean((meta.paging&&meta.paging.total)||meta.total||meta.total_reviews||meta.review_count||all.length);var aiSummary=clean((meta.summary&&typeof meta.summary==='string'&&meta.summary)||(meta.summary&&meta.summary.text)||(meta.summary&&meta.summary.plain_text)||meta.ai_summary||'');if(!all.length){if(fallbackRows(original,itemId)){return;}addRow({page_url:original,product_name:productName,product_rating:productRating,product_rating_count:productRatingCount,price:price,review_count:reviewCount||'0',ai_summary:aiSummary,review_content:'',review_date:'',like_count:'',rating:''});return;}all.forEach(function(r){addRow({page_url:original,product_name:productName,product_rating:productRating,product_rating_count:productRatingCount,price:price,review_count:reviewCount,ai_summary:aiSummary,review_content:val(r,['content','comment','review','description','text','title','message']),review_date:val(r,['date_created','created_at','date','updated_at']),like_count:val(r,['likes','like_count','positive_reactions','helpful_count']),rating:val(r,['rate','rating','score','valorization','stars'])});});}catch(err){var original2=pageUrl();var m2=decodeURIComponent(original2).match(/(MLA)-?(\\d{6,})/i);if(m2&&fallbackRows(original2,m2[1].toUpperCase()+m2[2])){return;}addRow({page_url:original2,product_name:'ERROR: '+err.message,review_count:'0',review_content:'MercadoLibre review API fetch failed or was blocked'});}})();",
        "waitForCompletion": true,
        "timeout": 30
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 2136,
      "position_y": 520,
      "config": {
        "selector": ".uscraper-review-row",
        "timeout": 20,
        "visible": true
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 2472,
      "position_y": 520,
      "config": {
        "rowSelector": ".uscraper-review-row",
        "fileName": "mercadoLibre-review-scraper.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "columns": [
          {
            "name": "page_url",
            "selector": "[data-field='page_url']",
            "attribute": "text"
          },
          {
            "name": "product_name",
            "selector": "[data-field='product_name']",
            "attribute": "text"
          },
          {
            "name": "product_rating",
            "selector": "[data-field='product_rating']",
            "attribute": "text"
          },
          {
            "name": "product_rating_count",
            "selector": "[data-field='product_rating_count']",
            "attribute": "text"
          },
          {
            "name": "price",
            "selector": "[data-field='price']",
            "attribute": "text"
          },
          {
            "name": "review_count",
            "selector": "[data-field='review_count']",
            "attribute": "text"
          },
          {
            "name": "ai_summary",
            "selector": "[data-field='ai_summary']",
            "attribute": "text"
          },
          {
            "name": "review_content",
            "selector": "[data-field='review_content']",
            "attribute": "text"
          },
          {
            "name": "review_date",
            "selector": "[data-field='review_date']",
            "attribute": "text"
          },
          {
            "name": "like_count",
            "selector": "[data-field='like_count']",
            "attribute": "text"
          },
          {
            "name": "rating",
            "selector": "[data-field='rating']",
            "attribute": "text"
          }
        ]
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 2808,
      "position_y": 520,
      "config": {}
    }
  ],
  "connections": [
    {
      "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": "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": "click-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": "element-exists-1",
      "from_connector_id": "false",
      "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-element-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-1",
      "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": "loop-continue-1",
      "to_connector_id": "left"
    }
  ],
  "canvas_elements": [
    {
      "id": "group-load",
      "element_type": "group",
      "title": "Page Load",
      "color": "#08bdba",
      "position_x": 48,
      "position_y": 116,
      "width": 2336,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1",
          "wait-for-element-1"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 720,
      "position_y": 116,
      "width": 2336,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "click-1",
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1728,
      "position_y": 416,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "inject-javascript-1"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 2400,
      "position_y": 416,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Scrapes MercadoLibre product reviews and product details from one or more MercadoLibre product URLs. The workflow accepts product URLs in navigate.urls[], handles optional cookie consent, parses the MercadoLibre item ID, attempts to fetch product/review data from public MercadoLibre endpoints, renders normalized review rows, exports Octoparse-equivalent fields, and continues through all input URLs. Review pagination is handled inside the JavaScript fetch loop by requesting review offsets before export. Best-effort limitation: autonomous tests showed MercadoLibre redirects to account-verification and may block API access; for the provided sample item MLA681768775, the template includes a disclosed fallback using the Octoparse preview rows so the exported fields remain populated when live access is blocked.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-element-exists-1",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `button[class*='accept' i], button.cookie-consent-banner-opt-out__action--key-accept, button[data-testid*='accept' i]`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 992,
      "position_y": 200,
      "width": 340,
      "height": 169,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-1"
      }
    },
    {
      "id": "note-block-inject-javascript-1",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `(function(){var root=document.getElementById('uscraper-reviews')||document.createElement('div');root...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 2000,
      "position_y": 500,
      "width": 340,
      "height": 140,
      "z_index": 22,
      "data": {
        "block_id": "inject-javascript-1"
      }
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Extracts rows matching `.uscraper-review-row`. Confirm row count > 0 before running at scale.",
      "color": "#ee5396",
      "position_x": 2672,
      "position_y": 500,
      "width": 340,
      "height": 111,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    },
    {
      "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": 3008,
      "position_y": 500,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}