{
  "version": "1.0.0",
  "exported_at": "2026-06-03T05:30:00.000Z",
  "project": {
    "name": "Falabella Retail Listing Scraperby URL",
    "description": "Extracts Falabella retail listing products from the Refrigeracion category: input URL, marca, titulo, precio_actual, precio_original, descuento, URL, and rating/review fallback. Pagination strategy: known URL list for pages 1-84 based on the visible Falabella listing pagination/result count; structured export appends all pages into one CSV. If Falabella shows CAPTCHA or anti-bot checks, pause and solve manually in the browser. Product title, clean URL, and rating columns use row-scoped JavaScript because Falabella product cards use dynamic/generated markup.",
    "color": "bg-[#42be65]",
    "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.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=2",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=3",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=4",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=5",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=6",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=7",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=8",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=9",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=10",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=11",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=12",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=13",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=14",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=15",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=16",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=17",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=18",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=19",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=20",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=21",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=22",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=23",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=24",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=25",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=26",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=27",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=28",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=29",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=30",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=31",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=32",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=33",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=34",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=35",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=36",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=37",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=38",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=39",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=40",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=41",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=42",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=43",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=44",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=45",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=46",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=47",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=48",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=49",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=50",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=51",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=52",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=53",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=54",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=55",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=56",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=57",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=58",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=59",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=60",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=61",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=62",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=63",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=64",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=65",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=66",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=67",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=68",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=69",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=70",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=71",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=72",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=73",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=74",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=75",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=76",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=77",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=78",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=79",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=80",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=81",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=82",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=83",
          "https://www.falabella.com.pe/falabella-pe/category/CATG19032/Refrigeracion?page=84"
        ],
        "color": "bg-[#ff832b]"
      }
    },
    {
      "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": "Run JavaScript on the page",
      "position_x": 1128,
      "position_y": 220,
      "config": {
        "jsCode": "document.querySelector(\"button[id*='accept' i], button[data-testid*='accept' i], #onetrust-accept-btn-handler, [id*='cookie' i] button\")?.click();",
        "waitForCompletion": true,
        "timeout": 5,
        "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": 2,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 1800,
      "position_y": 220,
      "config": {
        "selector": "a.pod-link[href*='/product/']",
        "timeout": 30,
        "visible": true,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "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": "a.pod-link[href*='/product/']",
        "fileName": "falabella-retail-listados-scraper-url.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "input_url",
            "selector": "window.location.href",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "marca",
            "selector": "(() => { const clean=s=>(s||'').replace(/\\s+/g,' ').trim(); const el = ROW.querySelector('[data-testid*=\"pod-displaySubTitle\"], [id*=\"pod-displaySubTitle\"], [class*=\"brand\"]'); if (el && clean(el.textContent)) return clean(el.textContent).replace(/^Patrocinado\\s*/i,''); const txt=clean(ROW.textContent).replace(/^Patrocinado\\s*/i,''); const por=txt.search(/\\s+Por\\s+/i); const beforePor=por>0?txt.slice(0,por):txt; const m=beforePor.match(/^([A-ZÁÉÍÓÚÜÑ0-9 .&-]{2,40})(?=[A-ZÁÉÍÓÚÜÑ][a-záéíóúüñ]|[A-ZÁÉÍÓÚÜÑ]{2,}|\\s)/); return clean(m ? m[1] : beforePor.split(/\\s{2,}|S\\//)[0]); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "titulo",
            "selector": "(() => { const clean=s=>(s||'').replace(/\\s+/g,' ').trim(); const slugTitle=()=>{try{const href=ROW.href||ROW.querySelector('a[href*=\"/product/\"]')?.href||''; const u=new URL(href); const parts=u.pathname.split('/').map(p=>decodeURIComponent(p)); const i=parts.indexOf('product'); const seg=(parts.slice(i+1).find(p=>p && !/^\\d+$/.test(p))||''); return clean(seg.replace(/[-_]+/g,' '));}catch(e){return '';}}; const brandEl=ROW.querySelector('[data-testid*=\"pod-displaySubTitle\"], [id*=\"pod-displaySubTitle\"], [class*=\"brand\"]'); let brand=clean(brandEl?.textContent).replace(/^Patrocinado\\s*/i,''); if(!brand){const t=clean(ROW.textContent).replace(/^Patrocinado\\s*/i,''); const m=t.match(/^([A-ZÁÉÍÓÚÜÑ0-9 .&-]{2,40})(?=[A-ZÁÉÍÓÚÜÑ][a-záéíóúüñ]|[A-ZÁÉÍÓÚÜÑ]{2,}|\\s)/); brand=clean(m?m[1]:'');} let txt=clean(ROW.textContent).replace(/^Patrocinado\\s*/i,''); if(brand){const esc=brand.replace(/[.*+?^${}()|[\\]\\\\]/g,'\\\\$&'); txt=txt.replace(new RegExp('^'+esc+'\\\\s*','i'),'');} txt=txt.replace(/^Patrocinado\\s*/i,''); let cut=txt.search(/\\s+Por\\s+/i); if(cut>0) txt=txt.slice(0,cut); cut=txt.search(/\\s+S\\/\\s*[\\d.,]+/i); if(cut>0) txt=txt.slice(0,cut); txt=clean(txt); if(!txt || (brand && txt.toLowerCase()===brand.toLowerCase())) txt=slugTitle(); return txt; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "precio_actual",
            "selector": "(() => { const clean=s=>(s||'').replace(/\\s+/g,' ').trim(); const els = Array.from(ROW.querySelectorAll('[data-testid*=\"prices\"], [id*=\"prices\"], [class*=\"price\"]')).map(e => clean(e.textContent)).filter(t => /S\\/\\s*[\\d.,]+/.test(t)); if (els.length) { const m = els[0].match(/S\\/\\s*[\\d.,]+/); return m ? clean(m[0]) : els[0]; } const m = clean(ROW.textContent).match(/S\\/\\s*[\\d.,]+/); return m ? clean(m[0]) : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "precio_original",
            "selector": "(() => { const clean=s=>(s||'').replace(/\\s+/g,' ').trim(); const prices = Array.from(clean(ROW.textContent).matchAll(/S\\/\\s*[\\d.,]+/g)).map(m => clean(m[0])); return prices.length > 1 ? prices[prices.length - 1] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "descuento",
            "selector": "(() => { const m = ROW.textContent.match(/-\\s*\\d+%/); return m ? m[0].replace(/\\s+/g, '') : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "url",
            "selector": "(() => { const href = ROW.href || ROW.querySelector('a[href*=\"/product/\"]')?.href || ''; try { const u = new URL(href); return u.origin + u.pathname; } catch(e) { return href.split('?')[0]; } })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "rating",
            "selector": "(() => { const clean=s=>(s||'').replace(/\\s+/g,' ').trim(); const card=ROW.closest('[class*=\"pod\"], [data-testid*=\"pod\"]')||ROW; const nodes=[card,...card.querySelectorAll('*')]; for(const n of nodes){ for(const a of ['aria-label','title','data-rating','data-rating-value','data-score','data-average']){ const v=clean(n.getAttribute(a)); const m=v.match(/([0-5](?:[.,]\\d+)?)/); if(m && parseFloat(m[1].replace(',','.'))<=5) return m[1].replace(',','.'); } const t=clean(n.textContent); const m=t.match(/([0-5][.,]\\d+)\\s*(?:de|\\/)?\\s*5?/i); if(m) return m[1].replace(',','.'); } for(const n of nodes){ const st=n.getAttribute('style')||''; const m=st.match(/width:\\s*(\\d+(?:\\.\\d+)?)%/i); if(m && /rating|star/i.test((n.className||'')+' '+(n.parentElement?.className||''))){ return (parseFloat(m[1])/20).toFixed(2).replace(/\\.00$/,''); } } const full=card.querySelectorAll('.csicon-star_full_filled, [class*=\"star_full_filled\"], [class*=\"star-full-filled\"]').length; const half=card.querySelectorAll('[class*=\"star_half\"], [class*=\"star-half\"]').length; if(full||half) return String(full + half*0.5); const rev=clean(card.textContent).match(/\\((\\d+)\\)/); return rev ? rev[1] : ''; })()",
            "attribute": "text",
            "isJs": true
          }
        ]
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 2472,
      "position_y": 220,
      "config": {
        "color": "bg-[#ff832b]"
      }
    }
  ],
  "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": "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-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": 1664,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1",
          "wait-for-element-1"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1056,
      "position_y": 116,
      "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": 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": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Extracts Falabella retail listing products from the Refrigeracion category: input URL, marca, titulo, precio_actual, precio_original, descuento, URL, and rating/review fallback. Pagination strategy: known URL list for pages 1-84 based on the visible Falabella listing pagination/result count; structured export appends all pages into one CSV. If Falabella shows CAPTCHA or anti-bot checks, pause and solve manually in the browser. Product title, clean URL, and rating columns use row-scoped JavaScript because Falabella product cards use dynamic/generated markup.",
      "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 84 pages. Pair with loop-continue at the end of each iteration.",
      "color": "#ee5396",
      "position_x": 656,
      "position_y": 200,
      "width": 332,
      "height": 107,
      "z_index": 22,
      "data": {
        "block_id": "navigate-1"
      }
    },
    {
      "id": "note-block-inject-javascript-1",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `document.querySelector(\"button[id*='accept' i], button[data-testid*='accept' i], #onetrust-accept-bt...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 1328,
      "position_y": 200,
      "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": "Structured export with JS columns (input_url, marca, titulo, precio_actual, precio_original). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 2336,
      "position_y": 200,
      "width": 340,
      "height": 132,
      "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": 2672,
      "position_y": 200,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}