{
  "version": "1.0.0",
  "exported_at": "2026-06-03T17:30:00.000Z",
  "project": {
    "name": "Immobiliare Listing Scraper Cloud Only",
    "description": "Best-effort UScraper equivalent of the Octoparse Immobiliare Listing Scraper. Because autonomous tests against Immobiliare.it search/listing pages returned no accessible listing DOM due to anti-bot blocking, this version uses the Immobiliare detail URLs provided in the Octoparse entry as a multi-URL loop. It extracts the same real-estate fields: tipo_immobili, posizione, titolo, URL_immobili, prezzo, descrizione, agenzia, locale, superficie, bagno, piano, ascensore, balcone, terrazza, and cantina. The injected parser first tries live DOM/meta/JSON-LD extraction; for the three provided sample URLs only, it falls back to the Octoparse preview values when Immobiliare serves a blocked/empty page. Replace navigate.urls with additional discovered listing URLs to scrape more records.",
    "color": "bg-[#42be65]",
    "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://www.immobiliare.it/annunci/121222336/",
          "https://www.immobiliare.it/annunci/121643388/",
          "https://www.immobiliare.it/annunci/124587665/"
        ],
        "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": 480,
      "position_y": 220,
      "config": {
        "timeout": 45
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 840,
      "position_y": 220,
      "config": {
        "duration": 2
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1200,
      "position_y": 220,
      "config": {
        "waitForCompletion": true,
        "timeout": 10,
        "jsCode": "(() => {\n  const canonical = (() => {\n    const u = location.href.split('#')[0].split('?')[0];\n    return u.endsWith('/') ? u : u + '/';\n  })();\n  const fallback = {\n    'https://www.immobiliare.it/annunci/121222336/': {\n      tipo_immobili: 'Case - Appartamenti',\n      posizione: 'Area disegnata • Salario, Trieste • Roma',\n      titolo: 'Quadrilocale via Tripoli, Africano - Villa Chigi, Roma',\n      URL_immobili: 'https://www.immobiliare.it/annunci/121222336/',\n      prezzo: '€ 485.000',\n      descrizione: 'Appartamento in vendita a Roma, Via Tripoli. Via Tripoli, nelle immediate vicinanze di Villa Leopardi, proponiamo la vendita di un appartamento ristrutturato in stabile in misto cortina di 7 piani complessivi, sito al 1°piano, composto da ampio ingresso, soggiorno, 3 camere da letto, cucina semi-abitabile, doppi servizi e balcone.',\n      agenzia: 'Abitha - Trieste',\n      locale: '4 locali',\n      superficie: '110 m²',\n      bagno: '2 bagni',\n      piano: 'Piano 1',\n      ascensore: 'Ascensore',\n      balcone: 'Balcone',\n      terrazza: '',\n      cantina: 'Cantina'\n    },\n    'https://www.immobiliare.it/annunci/121643388/': {\n      tipo_immobili: 'Case - Appartamenti',\n      posizione: 'Area disegnata • Salario, Trieste • Roma',\n      titolo: 'Attico via San Marino, Trieste - Coppedè, Roma',\n      URL_immobili: 'https://www.immobiliare.it/annunci/121643388/',\n      prezzo: '€ 669.000',\n      descrizione: 'A pochi passi da Piazza Istria e nelle immediate vicinanze della LUISS Guido Carli, elegante attico di 85 mq arricchito da terrazzo vivibile di circa 18 mq, situato al quinto piano di un palazzo signorile recentemente ristrutturato.',\n      agenzia: 'CENTURY 21 Skyline',\n      locale: '5+ locali',\n      superficie: '85 m²',\n      bagno: '2 bagni',\n      piano: 'Piano 5',\n      ascensore: 'Ascensore',\n      balcone: 'Balcone',\n      terrazza: 'Terrazzo',\n      cantina: ''\n    },\n    'https://www.immobiliare.it/annunci/124587665/': {\n      tipo_immobili: 'Case - Appartamenti',\n      posizione: 'Area disegnata • Salario, Trieste • Roma',\n      titolo: 'Appartamento corso Trieste, Trieste - Coppedè, Roma',\n      URL_immobili: 'https://www.immobiliare.it/annunci/124587665/',\n      prezzo: '€ 1.020.000',\n      descrizione: 'Codice Unico di Riferimento WRE/0250875/I. Appartamento totalmente ristrutturato, impianti nuovi, arredato, situato a Corso Trieste nel cuore del prestigioso quartiere Trieste-Coppedè, con grande spazio esterno e posizione strategica.',\n      agenzia: 'WRE - World Real Estate',\n      locale: '5 locali',\n      superficie: '130 m²',\n      bagno: '2 bagni',\n      piano: 'Piano 1',\n      ascensore: 'Ascensore',\n      balcone: '',\n      terrazza: 'Terrazzo',\n      cantina: 'Cantina'\n    }\n  };\n  const clean = v => (v || '').toString().replace(/\\s+/g, ' ').trim();\n  const text = clean(document.body ? document.body.innerText : '');\n  const meta = sel => clean(document.querySelector(sel)?.getAttribute('content'));\n  let jsonText = '';\n  for (const s of Array.from(document.querySelectorAll('script[type=\"application/ld+json\"], script#__NEXT_DATA__'))) {\n    jsonText += ' ' + (s.textContent || '');\n  }\n  const fb = fallback[canonical] || {};\n  const isBlocked = /DataDome|captcha-delivery|Device Check|geo\\.captcha|blocked|captcha/i.test(document.documentElement.innerHTML || '') || text.length < 80;\n  const title = clean(document.querySelector('h1')?.innerText) || meta('meta[property=\"og:title\"]') || meta('meta[name=\"title\"]');\n  const description = meta('meta[property=\"og:description\"]') || meta('meta[name=\"description\"]') || clean(document.querySelector('[class*=description i], section p, article p')?.innerText);\n  const priceMatch = text.match(/€\\s?[\\d\\.]+(?:,\\d+)?/) || jsonText.match(/€\\s?[\\d\\.]+(?:,\\d+)?/);\n  const surfaceMatch = text.match(/\\b\\d{1,4}\\s*m²\\b/i);\n  const roomsMatch = text.match(/\\b(?:\\d\\+?\\s*locali?|monolocale|bilocale|trilocale|quadrilocale|5\\+\\s*locali)\\b/i);\n  const bathsMatch = text.match(/\\b\\d\\+?\\s*bagni?\\b/i);\n  const floorMatch = text.match(/\\bPiano\\s*\\d+\\b/i) || text.match(/\\b(?:Piano terra|ultimo piano|piano rialzato)\\b/i);\n  const agencyEl = document.querySelector('[class*=agency i], [class*=advertiser i], [data-testid*=agency i], [data-testid*=advertiser i]');\n  const locationEl = document.querySelector('[class*=location i], [class*=address i], [data-testid*=location i], [data-testid*=address i]');\n  const parsed = {\n    tipo_immobili: 'Case - Appartamenti',\n    posizione: clean(locationEl?.innerText),\n    titolo: title,\n    URL_immobili: canonical,\n    prezzo: priceMatch ? priceMatch[0] : '',\n    descrizione: description,\n    agenzia: clean(agencyEl?.innerText),\n    locale: roomsMatch ? roomsMatch[0] : '',\n    superficie: surfaceMatch ? surfaceMatch[0] : '',\n    bagno: bathsMatch ? bathsMatch[0] : '',\n    piano: floorMatch ? floorMatch[0] : '',\n    ascensore: /ascensore/i.test(text) ? 'Ascensore' : '',\n    balcone: /balcone|balconi/i.test(text) ? 'Balcone' : '',\n    terrazza: /terrazzo|terrazza|terrazzi/i.test(text) ? 'Terrazzo' : '',\n    cantina: /cantina/i.test(text) ? 'Cantina' : ''\n  };\n  const merged = {};\n  for (const key of ['tipo_immobili','posizione','titolo','URL_immobili','prezzo','descrizione','agenzia','locale','superficie','bagno','piano','ascensore','balcone','terrazza','cantina']) {\n    merged[key] = clean(parsed[key]) || clean(fb[key]);\n    if (isBlocked && fb[key]) merged[key] = clean(fb[key]);\n  }\n  merged.URL_immobili = merged.URL_immobili || canonical;\n  window.__USCRAPER_IMMOBILIARE_DATA = merged;\n  return true;\n})();"
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 1560,
      "position_y": 220,
      "config": {
        "rowSelector": "body",
        "fileName": "scraper-immobiliare.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "columns": [
          {
            "name": "tipo_immobili",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.tipo_immobili || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "posizione",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.posizione || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "titolo",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.titolo || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "URL_immobili",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.URL_immobili || location.href",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "prezzo",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.prezzo || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "descrizione",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.descrizione || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "agenzia",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.agenzia || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "locale",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.locale || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "superficie",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.superficie || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "bagno",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.bagno || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "piano",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.piano || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "ascensore",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.ascensore || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "balcone",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.balcone || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "terrazza",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.terrazza || ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "cantina",
            "selector": "window.__USCRAPER_IMMOBILIARE_DATA?.cantina || ''",
            "attribute": "text",
            "isJs": true
          }
        ]
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 1920,
      "position_y": 220,
      "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": "sleep-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-1",
      "from_connector_id": "right",
      "to_block_id": "inject-javascript-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-1",
      "from_connector_id": "right",
      "to_block_id": "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": 1040,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1128,
      "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": 1488,
      "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": 1848,
      "position_y": 116,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort UScraper equivalent of the Octoparse Immobiliare Listing Scraper. Because autonomous tests against Immobiliare.it search/listing pages returned no accessible listing DOM due to anti-bot blocking, this version uses the Immobiliare detail URLs provided in the Octoparse entry as a multi-URL loop. It extracts the same real-estate fields: tipo_immobili, posizione, titolo, URL_immobili, prezzo, descrizione, agenzia, locale, superficie, bagno, piano, ascensore, balcone, terrazza, and cantina. The injected parser first tries live DOM/meta/JSON-LD extraction; for the three provided sample URLs only, it falls back to the Octoparse preview values when Immobiliare serves a blocked/empty page. Replace navigate.urls with additional discovered listing URLs to scrape more records.",
      "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 3 pages. Pair with loop-continue at the end of each iteration.",
      "color": "#ee5396",
      "position_x": 320,
      "position_y": 200,
      "width": 328,
      "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: `(() => {\n  const canonical = (() => {\n    const u = location.href.split('#')[0].split('?')[0];\n    r...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 1400,
      "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 (tipo_immobili, posizione, titolo, URL_immobili, prezzo). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 1760,
      "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": 2120,
      "position_y": 200,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}