{
  "version": "1.0.0",
  "exported_at": "2026-06-01T00:00:00.000Z",
  "project": {
    "name": "Just Eat Restaurant Menu Scraper",
    "description": "Best-effort Just Eat UK restaurant menu scraper equivalent to the Octoparse template. It opens just-eat.co.uk, optionally accepts cookies, then uses an API-oriented JavaScript batch fetcher to discover restaurant identifiers for postcode M1 5QA and fetch menu data for the supplied restaurant /menu URLs. Extracts restaurant name/category/rating/address plus dish category/name/descriptions/nutrition/price. If Just Eat blocks automation, Cloudflare appears, CORS/API endpoint access is denied, or the restaurants are unavailable for the postcode/session, no fake rows are exported.",
    "color": "bg-[#ff832b]",
    "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": {
        "url": "https://www.just-eat.co.uk/",
        "color": "bg-[#4589ff]",
        "tags": [
          "just-eat",
          "api-origin",
          "restaurant-menu"
        ]
      }
    },
    {
      "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": 45,
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 792,
      "position_y": 220,
      "config": {
        "selector": "#onetrust-accept-btn-handler, button[data-testid='accept-all-cookies'], button[data-test-id='accept-all-cookies'], button[aria-label='Accept'], button[aria-label='Accept cookies']",
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "click-1",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 1128,
      "position_y": 520,
      "config": {
        "selector": "#onetrust-accept-btn-handler, button[data-testid='accept-all-cookies'], button[data-test-id='accept-all-cookies'], button[aria-label='Accept'], button[aria-label='Accept cookies']",
        "timeout": 10,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1464,
      "position_y": 520,
      "config": {
        "duration": 2,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "sleep-2",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 792,
      "position_y": 520,
      "config": {
        "duration": 1,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Execute custom JavaScript",
      "position_x": 1800,
      "position_y": 520,
      "config": {
        "jsCode": "(async function(){const MENU_URLS=['https://www.just-eat.co.uk/restaurants-players-deansgate-manchester/menu','https://www.just-eat.co.uk/restaurants-mr-peri-peri-manchester/menu','https://www.just-eat.co.uk/restaurants-tokyo-noodle-manchester/menu','https://www.just-eat.co.uk/restaurants-omg-desserts-and-pastry-manchester/menu','https://www.just-eat.co.uk/restaurants-haus-breakfast-and-brunch-manchester/menu'];const POSTCODE='M1 5QA';const API='https://uk.api.just-eat.io';function clean(v){return String(v==null?'':v).replace(/\\s+/g,' ').trim();}function slugFromUrl(u){try{return (new URL(u).pathname.split('/')[1]||'').toLowerCase();}catch(e){return '';}}function shortSlug(s){return clean(String(s||'').replace(/^restaurants-/,'').replace(/-/g,' ')).toLowerCase();}function words(s){return shortSlug(s).split(/\\s+/).filter(w=>w.length>2&&!/manchester|restaurant|restaurants|menu/.test(w));}function priceFrom(v){if(v==null)return '';if(typeof v==='number'){return v>100?'£'+(v/100).toFixed(2):'£'+v.toFixed(2);}if(typeof v==='string'){let m=v.match(/(?:from\\s*)?£\\s?\\d+(?:\\.\\d{2})?/i);if(m)return clean(m[0]);if(/^\\d+(?:\\.\\d{2})?$/.test(v))return '£'+v;}if(typeof v==='object')return priceFrom(v.displayValue||v.formatted||v.text||v.amount||v.value||v.current||v.price||v.lowestPrice||v.total);return '';}function findPrice(o){if(!o||typeof o!=='object')return '';for(const k of ['price','displayPrice','priceText','priceString','formattedPrice','cost','basePrice','unitPrice','currentPrice','fromPrice','lowestPrice','amount']){let p=priceFrom(o[k]);if(p)return p;}return '';}function findName(o){if(!o||typeof o!=='object')return '';for(const k of ['name','title','itemName','displayName','productName','menuItemName','description']){let n=clean(o[k]);if(n&&n.length<180&&!/order food and more|just eat|search|delivery fee|service charge|minimum order/i.test(n))return n;}return '';}function findDesc(o){if(!o||typeof o!=='object')return '';for(const k of ['description','desc','subtitle','details','longDescription','shortDescription']){let d=clean(o[k]);if(d&&d.length<700&&!/(?:from\\s*)?£\\s?\\d/i.test(d)&&d!==findName(o))return d;}return '';}function findNutrition(o){let out='';function walk(x,d){if(out||d>5||x==null)return;if(typeof x==='string'){let s=clean(x);if(/\\d+\\s*kJ|\\d+\\s*kcal|kcal|kJ|calorie/i.test(s))out=s;}else if(typeof x==='object'){Object.keys(x).slice(0,80).forEach(k=>walk(x[k],d+1));}}walk(o,0);return out;}async function getJson(url){try{let r=await fetch(url,{credentials:'include',headers:{'Accept':'application/json,text/plain,*/*','Accept-Tenant':'uk','Accept-Language':'en-GB','User-Agent':navigator.userAgent}});if(!r.ok)return null;let t=await r.text();try{return JSON.parse(t);}catch(e){return t;}}catch(e){return null;}}async function getText(url){try{let r=await fetch(url,{credentials:'include',headers:{'Accept':'text/html,application/xhtml+xml,application/json,text/plain,*/*','Accept-Tenant':'uk','Accept-Language':'en-GB'}});if(!r.ok)return '';return await r.text();}catch(e){return '';}}function collectObjects(root,pred,limit=2500){let out=[];let seen=new Set();function walk(x,d){if(!x||d>12||out.length>=limit)return;if(typeof x==='object'){if(seen.has(x))return;seen.add(x);try{if(pred(x))out.push(x);}catch(e){}if(Array.isArray(x)){x.forEach(v=>walk(v,d+1));}else{Object.keys(x).slice(0,180).forEach(k=>walk(x[k],d+1));}}}walk(root,0);return out;}function objText(o){let vals=[];function grab(x,d){if(d>2||vals.length>80||x==null)return;if(typeof x==='string'||typeof x==='number')vals.push(String(x));else if(typeof x==='object')Object.keys(x).slice(0,30).forEach(k=>grab(x[k],d+1));}grab(o,0);return vals.join(' ').toLowerCase();}function restaurantInfoFromObj(o,targetUrl){let txt=objText(o);let name=clean(o.name||o.displayName||o.restaurantName||o.title)||shortSlug(slugFromUrl(targetUrl));let cuisine=clean(o.cuisineTypes||o.cuisines||o.cuisine||o.tags||o.category||'');if(Array.isArray(o.cuisines))cuisine=o.cuisines.map(c=>clean(c.name||c)).filter(Boolean).join('&');if(Array.isArray(o.cuisineTypes))cuisine=o.cuisineTypes.map(c=>clean(c.name||c)).filter(Boolean).join('&');let rating=clean((o.rating&&((o.rating.starRating)||(o.rating.average)||(o.rating.score)))||o.starRating||o.ratingAverage||o.score||'');let address=clean(o.address||o.addressLine1||o.firstLine||'');if(typeof o.address==='object')address=clean([o.address.firstLine,o.address.city,o.address.postcode].filter(Boolean).join(', '));if(!address){let m=txt.match(/\\d{1,5}\\s+[a-z0-9 .,'-]+,?\\s+[a-z .'-]+,?\\s+[a-z]{1,2}\\d[a-z\\d]?\\s*\\d[a-z]{2}/i);if(m)address=clean(m[0]);}return {restaurant_name:name,restaurant_category:cuisine,rating:rating,address:address,restaurant_url:targetUrl};}function candidateIds(o,slug){let ids=new Set([slug,slug.replace(/^restaurants-/,''),shortSlug(slug).replace(/\\s+/g,'-')]);function walk(x,d,k){if(!x||d>4)return;if(typeof x==='string'||typeof x==='number'){let v=String(x);if(/id|seo|slug|url|unique/i.test(k||'')&&v.length>1&&v.length<120)ids.add(v.replace(/^restaurants-/,''));}else if(typeof x==='object'){Object.keys(x).slice(0,80).forEach(key=>walk(x[key],d+1,key));}}walk(o,0,'root');return Array.from(ids).map(clean).filter(Boolean);}function matchRestaurant(o,slug){let s=slug.toLowerCase();let ss=shortSlug(s);let t=objText(o);if(t.includes(s)||t.includes(ss))return true;let ws=words(s);return ws.length>=2&&ws.every(w=>t.includes(w));}let discoveryUrls=[API+'/discovery/uk/restaurants/enriched/bypostcode/'+encodeURIComponent(POSTCODE),API+'/discovery/uk/restaurants/bypostcode/'+encodeURIComponent(POSTCODE),API+'/restaurants/bypostcode/'+encodeURIComponent(POSTCODE),'https://www.just-eat.co.uk/discovery/uk/restaurants/enriched/bypostcode/'+encodeURIComponent(POSTCODE),'https://www.just-eat.co.uk/restaurants/bypostcode/'+encodeURIComponent(POSTCODE)];let discovery=[];for(const du of discoveryUrls){let j=await getJson(du);if(j)discovery.push(j);}let rows=[];let seenRows=new Set();function addRow(r,it){let name=clean(it.dish_name||it.name);let price=clean(it.price);if(!name||!price)return;if(!/(?:from\\s*)?£\\s?\\d+(?:\\.\\d{2})?/i.test(price))return;if(/delivery fee|service charge|minimum order|basket|subtotal/i.test(name))return;let key=(r.restaurant_url+'|'+name+'|'+price).toLowerCase();if(seenRows.has(key))return;seenRows.add(key);rows.push({restaurant_name:r.restaurant_name,restaurant_category:r.restaurant_category,rating:r.rating,address:r.address,restaurant_url:r.restaurant_url,dish_category:clean(it.category||it.dish_category),dish_name:name,description1:clean(it.description1||it.description),description2:clean(it.description2),nutrition_info:clean(it.nutrition||it.nutrition_info),price:price});}function walkMenuJson(o,ctx,r,depth,key){if(!o||depth>14)return;if(Array.isArray(o)){o.forEach(v=>walkMenuJson(v,ctx,r,depth+1,key));return;}if(typeof o!=='object')return;let nm=findName(o), pr=findPrice(o);let next={category:ctx.category};let kl=String(key||'').toLowerCase();if(nm&&!pr&&/(category|section|menu|group|subcategory|collection)/i.test(kl+' '+nm))next.category=nm;if(nm&&pr)addRow(r,{name:nm,price:pr,category:ctx.category,description:findDesc(o),nutrition:findNutrition(o)});Object.keys(o).slice(0,180).forEach(k=>walkMenuJson(o[k],next,r,depth+1,k));}function parseHtml(html,targetUrl,rFallback){if(!html||html.length<200)return;let doc=new DOMParser().parseFromString(html,'text/html');let r=Object.assign({},rFallback);let h=doc.querySelector('h1');let meta=doc.querySelector('meta[property=\"og:title\"],meta[name=\"title\"]');if(h&&clean(h.textContent))r.restaurant_name=clean(h.textContent);else if(meta&&clean(meta.content))r.restaurant_name=clean(meta.content).replace(/\\|.*$/,'');let desc=doc.querySelector('meta[name=\"description\"],meta[property=\"og:description\"]');if(!r.restaurant_category&&desc)r.restaurant_category=clean(desc.content).split('|')[0];doc.querySelectorAll('script[type=\"application/json\"],script#__NEXT_DATA__').forEach(s=>{try{walkMenuJson(JSON.parse(s.textContent),{},r,0,'root');}catch(e){}});let priceRe=/(?:from\\s*)?£\\s?\\d+(?:\\.\\d{2})?/i;let textNodes=[];let walker=doc.createTreeWalker(doc.body||doc,NodeFilter.SHOW_TEXT,{acceptNode:n=>priceRe.test(n.nodeValue||'')?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT});while(walker.nextNode())textNodes.push(walker.currentNode);function txt(e){return clean(e&&(e.textContent||''));}textNodes.forEach(n=>{let el=n.parentElement,card=el;for(let i=0;i<7&&el&&el!==doc.body;i++,el=el.parentElement){let t=txt(el);let prices=(t.match(new RegExp(priceRe.source,'gi'))||[]).length;if(t.length>30&&t.length<1400&&prices>=1&&prices<=5)card=el;}let full=txt(card), pm=full.match(priceRe);if(!pm)return;let lines=full.split(/\\n|\\|/).map(clean).filter(Boolean);let name='';let heading=card.querySelector&&card.querySelector('h3,h4,[data-testid*=\"name\"],[data-test-id*=\"name\"],[class*=\"name\" i]');if(heading)name=txt(heading);if(!name){for(const l of lines){if(!priceRe.test(l)&&!/kcal|kJ|calorie|add|choose|from/i.test(l)&&l.length>1&&l.length<140){name=l;break;}}}let descLine=lines.find(l=>l!==name&&!priceRe.test(l)&&!/kcal|kJ|calorie/i.test(l)&&l.length>3)||'';let nut=lines.find(l=>/kcal|kJ|calorie/i.test(l))||'';addRow(r,{name:name,price:clean(pm[0]),category:'',description:descLine,nutrition:nut});});}for(const targetUrl of MENU_URLS){let slug=slugFromUrl(targetUrl);let matches=[];for(const d of discovery){matches=matches.concat(collectObjects(d,o=>matchRestaurant(o,slug),80));}let restObj=matches[0]||{};let r=restaurantInfoFromObj(restObj,targetUrl);if(!r.restaurant_name)r.restaurant_name=shortSlug(slug);let ids=candidateIds(restObj,slug);let endpointSet=new Set();ids.forEach(id=>{let e=encodeURIComponent(id);endpointSet.add(API+'/restaurants/'+e+'/menu');endpointSet.add(API+'/restaurants/'+e+'/menus');endpointSet.add(API+'/restaurants/uk/'+e+'/menu');endpointSet.add(API+'/menus/uk/restaurants/'+e);endpointSet.add(API+'/restaurants/'+e+'/catalogue');endpointSet.add(API+'/restaurants/'+e+'?include=menu');});endpointSet.add(targetUrl+'?postcode='+encodeURIComponent(POSTCODE));endpointSet.add(targetUrl+'?deliveryPostcode='+encodeURIComponent(POSTCODE));endpointSet.add(targetUrl);let before=rows.length;for(const ep of Array.from(endpointSet)){if(rows.length>before+250)break;let resp=await getJson(ep);if(resp&&typeof resp==='object'){let rr=Object.keys(restObj).length?r:restaurantInfoFromObj(resp,targetUrl);walkMenuJson(resp,{},rr,0,'root');}else if(typeof resp==='string'){parseHtml(resp,targetUrl,r);}if(rows.length>before)break;}if(rows.length===before){let html=await getText(targetUrl+'?postcode='+encodeURIComponent(POSTCODE));parseHtml(html,targetUrl,r);}}let old=document.getElementById('uscraper-menu-export');if(old)old.remove();let box=document.createElement('div');box.id='uscraper-menu-export';box.setAttribute('data-item-count',String(rows.length));box.style.cssText='display:block;position:relative;background:#fff;color:#000;padding:8px;margin:8px;border:1px solid #ddd;z-index:2147483647;';function span(cls,val,row){let s=document.createElement('span');s.className=cls;s.textContent=val||'';row.appendChild(s);row.appendChild(document.createTextNode(' | '));}rows.forEach(it=>{let row=document.createElement('div');row.className='uscraper-menu-row';row.style.cssText='display:block;padding:4px;border-bottom:1px solid #eee;font-size:12px;';['restaurant_name','restaurant_category','rating','address','restaurant_url','dish_category','dish_name','description1','description2','nutrition_info','price'].forEach(k=>span(k,it[k],row));box.appendChild(row);});document.body.prepend(box);})();",
        "waitForCompletion": true,
        "timeout": 120,
        "color": "bg-[#a56eff]"
      }
    },
    {
      "block_id": "element-exists-2",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 2136,
      "position_y": 520,
      "config": {
        "selector": ".uscraper-menu-row",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "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-menu-row",
        "fileName": "just-eat-restaurant-menu-scraper.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "create",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "restaurant_name",
            "selector": ".restaurant_name",
            "attribute": "text"
          },
          {
            "name": "restaurant_category",
            "selector": ".restaurant_category",
            "attribute": "text"
          },
          {
            "name": "rating",
            "selector": ".rating",
            "attribute": "text"
          },
          {
            "name": "address",
            "selector": ".address",
            "attribute": "text"
          },
          {
            "name": "restaurant_url",
            "selector": ".restaurant_url",
            "attribute": "text"
          },
          {
            "name": "dish_category",
            "selector": ".dish_category",
            "attribute": "text"
          },
          {
            "name": "dish_name",
            "selector": ".dish_name",
            "attribute": "text"
          },
          {
            "name": "description1",
            "selector": ".description1",
            "attribute": "text"
          },
          {
            "name": "description2",
            "selector": ".description2",
            "attribute": "text"
          },
          {
            "name": "nutrition_info",
            "selector": ".nutrition_info",
            "attribute": "text"
          },
          {
            "name": "price",
            "selector": ".price",
            "attribute": "text"
          }
        ]
      }
    },
    {
      "block_id": "end-1",
      "block_type": "output",
      "title": "End",
      "description": "Terminate execution flow",
      "position_x": 2808,
      "position_y": 520,
      "config": {
        "color": "bg-[#8d8d8d]"
      }
    }
  ],
  "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": "element-exists-1",
      "from_connector_id": "false",
      "to_block_id": "sleep-2",
      "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": "sleep-2",
      "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": "element-exists-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-2",
      "from_connector_id": "true",
      "to_block_id": "structured-export-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": "structured-export-1",
      "from_connector_id": "right",
      "to_block_id": "end-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": 1664,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1",
          "sleep-2"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 720,
      "position_y": 116,
      "width": 1664,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "click-1",
          "element-exists-2"
        ]
      }
    },
    {
      "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": "group-control",
      "element_type": "group",
      "title": "Control Flow",
      "color": "#8d8d8d",
      "position_x": 2736,
      "position_y": 416,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "end-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort Just Eat UK restaurant menu scraper equivalent to the Octoparse template. It opens just-eat.co.uk, optionally accepts cookies, then uses an API-oriented JavaScript batch fetcher to discover restaurant identifiers for postcode M1 5QA and fetch menu data for the supplied restaurant /menu URLs. Extracts restaurant name/category/rating/address plus dish category/name/descriptions/nutrition/price. If Just Eat blocks automation, Cloudflare appears, CORS/API endpoint access is denied, or the restaurants are unavailable for the postcode/session, no fake rows are exported.",
      "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 `#onetrust-accept-btn-handler, button[data-testid='accept-all-cookies'], button[data-test-id='accept-all-cookies'], butto`. 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": 170,
      "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: `(async function(){const MENU_URLS=['https://www.just-eat.co.uk/restaurants-players-deansgate-manches...` 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-element-exists-2",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `.uscraper-menu-row`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 2336,
      "position_y": 500,
      "width": 340,
      "height": 136,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-2"
      }
    }
  ]
}