{
  "version": "1.0.0",
  "exported_at": "2026-06-03T00:00:00.000Z",
  "project": {
    "name": "LinkedIn Job Scraper Login Required",
    "description": "Best-effort LinkedIn Jobs scraper equivalent to the Octoparse LinkedIn Job Scraper. The original LinkedIn search URL redirects to authwall in unauthenticated sessions, so this template starts from the public LinkedIn Jobs SERP discovered in page analysis and paginates with known start offsets. It exports job title, job URL, logo/image, company, company URL, location, salary/benefits snippets, updated date, and best-effort detail/company fields when LinkedIn renders them. If LinkedIn shows authwall, CAPTCHA, MFA, or empty pages, those pages are skipped via the pagination loop. Use a logged-in persistent browser profile for richer fields and comply with LinkedIn terms.",
    "color": "bg-[#0a66c2]",
    "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": 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.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&position=1&pageNum=0",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=25",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=50",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=75",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=100",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=125",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=150",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=175",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=200",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=225",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=250",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=275",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=300",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=325",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=350",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=375",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=400",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=425",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=450",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=475",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=500",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=525",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=550",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=575",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=600",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=625",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=650",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=675",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=700",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=725",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=750",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=775",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=800",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=825",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=850",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=875",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=900",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=925",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=950",
          "https://www.linkedin.com/jobs/senior-design-verification-engineer-jobs?trk=expired_jd_redirect&start=975"
        ],
        "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": 792,
      "position_y": 220,
      "config": {
        "timeout": 45
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1128,
      "position_y": 220,
      "config": {
        "duration": 8
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 1464,
      "position_y": 220,
      "config": {
        "selector": "div.base-card.job-search-card, div.job-search-card, a.base-card__full-link[href*=\"/jobs/view/\"]"
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 1800,
      "position_y": 520,
      "config": {
        "selector": "div.base-card.job-search-card, div.job-search-card, a.base-card__full-link[href*=\"/jobs/view/\"]",
        "timeout": 45,
        "visible": true
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 2136,
      "position_y": 520,
      "config": {
        "rowSelector": "div.base-card.job-search-card, div.job-search-card",
        "fileName": "linkedin-job-scraper-login-required.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "columns": [
          {
            "name": "Result_count",
            "selector": "(() => { const t = document.querySelector('.results-context-header__job-count, .jobs-search-results-list__subtitle, .jobs-search-results-list__text, h1')?.textContent || document.body.innerText; const m = t.match(/[\\d,]+\\+?\\s+results|[\\d,]+\\+?/i); return m ? m[0].trim() : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Current_Page",
            "selector": "(() => { const u = new URL(location.href); const start = parseInt(u.searchParams.get('start') || '0', 10); const pageNum = u.searchParams.get('pageNum'); if (pageNum !== null) return String(parseInt(pageNum, 10) + 1); return String(Math.floor(start / 25) + 1); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Page_URL",
            "selector": "location.href",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Title",
            "selector": "(() => { return (ROW.querySelector('.base-search-card__title, .job-card-list__title, .job-card-container__link, a[href*=\"/jobs/view/\"]')?.textContent || '').replace(/\\s+/g, ' ').trim(); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Title_URL",
            "selector": "(() => { return ROW.querySelector('a.base-card__full-link, a.job-card-container__link, a[href*=\"/jobs/view/\"]')?.href || ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Image",
            "selector": "(() => { return ROW.querySelector('img.artdeco-entity-image, img')?.src || ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Company",
            "selector": "(() => { return (ROW.querySelector('.base-search-card__subtitle, .job-card-container__primary-description, .artdeco-entity-lockup__subtitle, a.hidden-nested-link')?.textContent || '').replace(/\\s+/g, ' ').trim(); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Location",
            "selector": "(() => { return (ROW.querySelector('.job-search-card__location, .job-card-container__metadata-item, .artdeco-entity-lockup__caption')?.textContent || '').replace(/\\s+/g, ' ').trim(); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Salary",
            "selector": "(() => { const t = ROW.innerText.replace(/\\s+/g, ' '); const m = t.match(/\\$[\\d,.]+\\s*[Kk]?\\/?(?:yr|year|hr|hour)?\\s*(?:-|–|to)\\s*\\$[\\d,.]+\\s*[Kk]?\\/?(?:yr|year|hr|hour)?|\\$[\\d,.]+\\s*[Kk]?\\/?(?:yr|year|hr|hour)?/); return m ? m[0].trim() : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Updated",
            "selector": "(() => { return (ROW.querySelector('time.job-search-card__listdate, time, .job-card-container__listed-time, .job-card-list__footer-wrapper time')?.textContent || '').replace(/\\s+/g, ' ').trim(); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Count_of_people_clicked_apply",
            "selector": "(() => { const top = document.querySelector('.jobs-details-top-card, .job-view-layout, .jobs-unified-top-card')?.innerText || ''; const t = (ROW.innerText + ' ' + top).replace(/\\s+/g, ' '); const m = t.match(/\\d+[\\d,]*\\s+people\\s+clicked\\s+apply/i); return m ? m[0] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Job_preference_1",
            "selector": "(() => { const t = ROW.innerText.replace(/\\s+/g, ' '); const m = t.match(/Remote|Hybrid|On-site/i); return m ? m[0] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Job_preference_2",
            "selector": "(() => { return (ROW.querySelector('.job-posting-benefits__text, .job-card-container__metadata-wrapper li:nth-child(2), .job-card-container__metadata-item:nth-of-type(2)')?.textContent || '').replace(/\\s+/g, ' ').trim(); })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Job_preference_3",
            "selector": "(() => { const t = ROW.innerText.replace(/\\s+/g, ' '); const m = t.match(/Full-time|Part-time|Contract|Temporary|Internship/i); return m ? m[0] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Job_preference_4",
            "selector": "(() => { const t = ROW.innerText.replace(/\\s+/g, ' '); const m = t.match(/Easy Apply|Actively Hiring|Be an early applicant|Under \\d+ applicants|Medical insurance[^\\n]*/i); return m ? m[0].trim() : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "About_the_job",
            "selector": "(() => { const el = document.querySelector('.jobs-description__content, .jobs-box__html-content, .show-more-less-html__markup, .description__text, .jobs-description-content__text'); return el ? el.textContent.replace(/\\s+/g, ' ').trim() : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Company_URL",
            "selector": "(() => { return ROW.querySelector('a.hidden-nested-link[href*=\"/company/\"], a[href*=\"/company/\"]')?.href || document.querySelector('.jobs-company__box a[href*=\"/company/\"], .jobs-unified-top-card__company-name a[href*=\"/company/\"]')?.href || ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Company_follower",
            "selector": "(() => { const t = document.querySelector('.jobs-company__box, .jobs-company, .jobs-details__main-content')?.innerText || ''; const m = t.match(/[\\d,]+\\s+followers/i); return m ? m[0] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Company_size",
            "selector": "(() => { const t = document.querySelector('.jobs-company__box, .jobs-company, .jobs-details__main-content')?.innerText || ''; const m = t.match(/[\\d,]+\\s*-\\s*[\\d,]+\\s+employees|[\\d,]+\\+?\\s+employees/i); return m ? m[0] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Count_of_employee_onLinkedIn",
            "selector": "(() => { const t = document.querySelector('.jobs-company__box, .jobs-company, .jobs-details__main-content')?.innerText || ''; const m = t.match(/[\\d,]+\\s+on\\s+LinkedIn/i); return m ? m[0] : ''; })()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Company_Intro",
            "selector": "(() => { const el = document.querySelector('.jobs-company__company-description, .jobs-company__box .jobs-description-content__text, .jobs-company__box, .jobs-company'); return el ? el.textContent.replace(/\\s+/g, ' ').trim().slice(0, 5000) : ''; })()",
            "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": 520,
      "config": {}
    }
  ],
  "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": "sleep-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-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": "wait-for-element-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-1",
      "from_connector_id": "false",
      "to_block_id": "loop-continue-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": 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": 1392,
      "position_y": 116,
      "width": 1328,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 2064,
      "position_y": 416,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort LinkedIn Jobs scraper equivalent to the Octoparse LinkedIn Job Scraper. The original LinkedIn search URL redirects to authwall in unauthenticated sessions, so this template starts from the public LinkedIn Jobs SERP discovered in page analysis and paginates with known start offsets. It exports job title, job URL, logo/image, company, company URL, location, salary/benefits snippets, updated date, and best-effort detail/company fields when LinkedIn renders them. If LinkedIn shows authwall, CAPTCHA, MFA, or empty pages, those pages are skipped via the pagination loop. Use a logged-in persistent browser profile for richer fields and comply with LinkedIn terms.",
      "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 40 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-element-exists-1",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `div.base-card.job-search-card, div.job-search-card, a.base-card__full-link[href*=\"/jobs/view/\"]`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 1664,
      "position_y": 200,
      "width": 340,
      "height": 162,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-1"
      }
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Structured export with JS columns (Result_count, Current_Page, Page_URL, Title, Title_URL). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 2336,
      "position_y": 500,
      "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": 500,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}