{
  "version": "1.0.0",
  "exported_at": "2026-06-02T00:00:00.000Z",
  "project": {
    "name": "App Store Listings Scraper Japan",
    "description": "Scrapes Japanese Apple App Store listing/detail data equivalent to the Octoparse App Store Listings Scraper (Japan). This version navigates to a normal Apple App Store Japan HTML page, then uses an injected JavaScript batch fetch to Apple Lookup for a seed list of Japanese app IDs and renders the results into a table for structured export. This avoids Chrome treating direct JSON endpoint navigation as a download. Extend the appIds array in the Inject JavaScript block with app IDs from the desired App Store category to scrape full category coverage. Exports app name, seller, star rating, rating count, app ID, age rating, subtitle where available, list ranking, price, description, compatibility, size, languages, and category to apple-store-app-listings-scraper.csv.",
    "color": "bg-[#4589ff]",
    "template_id": "ai-generated"
  },
  "blocks": [
    {
      "block_id": "set-window-size-1",
      "block_type": "process",
      "title": "Set Window Size",
      "description": "Set browser viewport dimensions",
      "position_x": 120,
      "position_y": 220,
      "config": {
        "width": 1440,
        "height": 1200,
        "color": "bg-[#4589ff]"
      }
    },
    {
      "block_id": "navigate-1",
      "block_type": "process",
      "title": "Navigate",
      "description": "Go to a URL",
      "position_x": 480,
      "position_y": 220,
      "config": {
        "url": "https://apps.apple.com/jp/",
        "color": "bg-[#08bdba]"
      }
    },
    {
      "block_id": "wait-for-page-load-1",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 840,
      "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": 1200,
      "position_y": 220,
      "config": {
        "waitForCompletion": true,
        "timeout": 30,
        "color": "bg-[#a56eff]",
        "jsCode": "(async()=>{const appIds=['1584308730','982850356','1559665746','443904275','1435783608','667861049','419267350','585027354','544007664','389801252'];let container=document.querySelector('#uscraper-app-listings');if(!container){container=document.createElement('div');container.id='uscraper-app-listings';document.body.prepend(container);}container.innerHTML='<div id=\"uscraper-loading\">Loading Apple App Store data...</div>';const addCell=(row,cls,val)=>{const el=document.createElement('div');el.className=cls;el.textContent=val==null?'':String(val);row.appendChild(el);};const fmtSize=(bytes)=>{const b=Number(bytes||0);if(!b)return '';const mb=b/1024/1024;return (mb>=100?mb.toFixed(0):mb.toFixed(1))+' MB';};const fmtRating=(v)=>{if(v===undefined||v===null||v==='')return '';const n=Number(v);return Number.isFinite(n)?n.toFixed(1):String(v);};const fmtCount=(v)=>{if(v===undefined||v===null||v==='')return '';return String(v)+'件の評価';};const fmtLangs=(codes)=>{if(!Array.isArray(codes))return '';let dn=null;try{dn=new Intl.DisplayNames(['ja'],{type:'language'});}catch(e){}return codes.map(c=>{try{return dn?dn.of(String(c).toLowerCase()):String(c);}catch(e){return String(c);}}).filter(Boolean).join('、 ');};const compat=(r,type)=>{const devices=(r.supportedDevices||[]).join(' ');if(type==='iphone'&&/iPhone|iPod/i.test(devices))return 'iOS '+(r.minimumOsVersion||'')+'以降が必要です。';if(type==='ipad'&&/iPad/i.test(devices))return 'iPadOS '+(r.minimumOsVersion||'')+'以降が必要です。';return '';};const url='https://itunes.apple.com/lookup?id='+appIds.join(',')+'&country=jp&lang=ja_jp';const res=await fetch(url,{cache:'no-store'});const data=await res.json();const results=Array.isArray(data.results)?data.results:[];const byId=new Map(results.map(r=>[String(r.trackId),r]));container.innerHTML='';appIds.forEach((id,idx)=>{const r=byId.get(String(id));if(!r)return;const row=document.createElement('div');row.className='app-row';row.setAttribute('data-app-id',String(r.trackId||id));addCell(row,'app-name',r.trackCensoredName||r.trackName||'');addCell(row,'seller',r.sellerName||r.artistName||'');addCell(row,'stars',fmtRating(r.averageUserRating||r.averageUserRatingForCurrentVersion));addCell(row,'rating-count',fmtCount(r.userRatingCount||r.userRatingCountForCurrentVersion));addCell(row,'app-id',r.trackId||id);addCell(row,'age-rating',r.contentAdvisoryRating||r.trackContentRating||'');addCell(row,'subtitle',r.subtitle||'');addCell(row,'ranking',idx+1);addCell(row,'price',r.formattedPrice||(r.price===0?'無料':(r.price!=null?String(r.price):'')));addCell(row,'description-text',(r.description||'').replace(/\\r\\n/g,'\\n').trim());addCell(row,'iphone-compatibility',compat(r,'iphone'));addCell(row,'ipad-compatibility',compat(r,'ipad'));addCell(row,'size',fmtSize(r.fileSizeBytes));addCell(row,'languages',fmtLangs(r.languageCodesISO2A));addCell(row,'category',r.primaryGenreName||((r.genres||[])[0])||'');container.appendChild(row);});if(!container.querySelector('.app-row')){const err=document.createElement('div');err.id='uscraper-error';err.textContent='No Apple Lookup results were returned.';container.appendChild(err);}})();"
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 1560,
      "position_y": 220,
      "config": {
        "selector": "#uscraper-app-listings .app-row",
        "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": 1920,
      "position_y": 220,
      "config": {
        "rowSelector": "#uscraper-app-listings .app-row",
        "fileName": "apple-store-app-listings-scraper.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "create",
        "color": "bg-[#42be65]",
        "columns": [
          {
            "name": "アプリ名",
            "selector": ".app-name",
            "attribute": "text"
          },
          {
            "name": "販売元",
            "selector": ".seller",
            "attribute": "text"
          },
          {
            "name": "星",
            "selector": ".stars",
            "attribute": "text"
          },
          {
            "name": "評価件数",
            "selector": ".rating-count",
            "attribute": "text"
          },
          {
            "name": "アプリ_id",
            "selector": ".app-id",
            "attribute": "text"
          },
          {
            "name": "年齢別レーティング",
            "selector": ".age-rating",
            "attribute": "text"
          },
          {
            "name": "サブタイトル",
            "selector": ".subtitle",
            "attribute": "text"
          },
          {
            "name": "ランキング",
            "selector": ".ranking",
            "attribute": "text"
          },
          {
            "name": "価格",
            "selector": ".price",
            "attribute": "text"
          },
          {
            "name": "アプリの説明",
            "selector": ".description-text",
            "attribute": "text"
          },
          {
            "name": "iPhoneとの互換性",
            "selector": ".iphone-compatibility",
            "attribute": "text"
          },
          {
            "name": "iPadとの互換性",
            "selector": ".ipad-compatibility",
            "attribute": "text"
          },
          {
            "name": "サイズ",
            "selector": ".size",
            "attribute": "text"
          },
          {
            "name": "言語",
            "selector": ".languages",
            "attribute": "text"
          },
          {
            "name": "カテゴリ",
            "selector": ".category",
            "attribute": "text"
          }
        ]
      }
    }
  ],
  "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": "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"
    }
  ],
  "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": 408,
      "position_y": 116,
      "width": 1400,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "wait-for-element-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": 1848,
      "position_y": 116,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Scrapes Japanese Apple App Store listing/detail data equivalent to the Octoparse App Store Listings Scraper (Japan). This version navigates to a normal Apple App Store Japan HTML page, then uses an injected JavaScript batch fetch to Apple Lookup for a seed list of Japanese app IDs and renders the results into a table for structured export. This avoids Chrome treating direct JSON endpoint navigation as a download. Extend the appIds array in the Inject JavaScript block with app IDs from the desired App Store category to scrape full category coverage. Exports app name, seller, star rating, rating count, app ID, age rating, subtitle where available, list ranking, price, description, compatibility, size, languages, and category to apple-store-app-listings-scraper.csv.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-inject-javascript-1",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `(async()=>{const appIds=['1584308730','982850356','1559665746','443904275','1435783608','667861049',...` 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": "Extracts rows matching `#uscraper-app-listings .app-row`. Confirm row count > 0 before running at scale.",
      "color": "#ee5396",
      "position_x": 2120,
      "position_y": 200,
      "width": 340,
      "height": 114,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    }
  ]
}