{"record":{"id":"33b0f6df1b69387c","repo":"jackwener/OpenCLI","slug":"linkedin-company-page-rendered-but-no-company-name","errorCode":null,"errorMessage":"LinkedIn company page rendered but no company name was found (layout drift or company not found)","messagePattern":"LinkedIn company page rendered but no company name was found \\(layout drift or company not found\\)","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"error","filePath":"clis/linkedin/company.js","lineNumber":106,"sourceCode":"    const match = parsed.pathname.match(COMPANY_URL_RE);\n    if (!match?.[1]) {\n        throw new CommandExecutionError('LinkedIn company extraction ended outside a company page');\n    }\n    let slug;\n    try {\n        slug = decodeURIComponent(match[1]);\n    } catch {\n        throw new CommandExecutionError('LinkedIn company extraction returned a malformed company slug');\n    }\n    return `https://${LINKEDIN_DOMAIN}/company/${encodeURIComponent(slug)}/about/`;\n}\n\nfunction normalizeCompanyInfo(info, targetUrl) {\n    if (!info || typeof info !== 'object' || Array.isArray(info)) {\n        throw new CommandExecutionError('LinkedIn company extraction returned a malformed payload');\n    }\n    if (!info.name) {\n        throw new CommandExecutionError('LinkedIn company page rendered but no company name was found (layout drift or company not found)');\n    }\n    let followers = 0;\n    if (info.followers) {\n        followers = Number(info.followers);\n        if (!Number.isFinite(followers)) {\n            throw new CommandExecutionError('LinkedIn company extraction returned a malformed followers count');\n        }\n    }\n    return {\n        name: String(info.name),\n        industry: String(info.industry || ''),\n        size: String(info.size || ''),\n        headquarters: String(info.headquarters || ''),\n        founded: String(info.founded || ''),\n        website: String(info.website || ''),\n        specialties: String(info.specialties || ''),\n        followers,\n        about: String(info.about || ''),","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/linkedin/company.js#L88-L124","documentation":"The payload was a valid object but had no truthy name field, meaning the page rendered enough structure for the extractor to return an object yet no company name was found. The library flags this explicitly as either layout drift (selectors no longer match the name element) or a company page that does not exist.","triggerScenarios":"Extraction succeeded structurally but LinkedIn rendered a 'page not found' or restricted-view variant of the company page so the name element was absent; CSS selector for the name changed in a LinkedIn markup update.","commonSituations":"Company page deleted, renamed, or region-blocked; logged-out session seeing a truncated page without the name header; library out of date with LinkedIn's current DOM structure.","solutions":["Update the library so its name selectors match the current LinkedIn layout","Verify the company page exists and is publicly viewable in a browser while logged in","Re-authenticate the scraping session — restricted/logged-out views often omit the name","Retry later if LinkedIn was serving an A/B layout variant"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"function hasName(v) { return v !== null && typeof v === 'object' && !Array.isArray(v) && typeof v.name === 'string' && v.name.length > 0; }","tryCatchPattern":"try {\n  const info = await company({ url: target });\n} catch (err) {\n  if (String(err.message).includes('no company name was found')) {\n    // verify the company exists / update library for layout drift, then retry\n    return withRetry(() => company({ url: target }), 1);\n  }\n  throw err;\n}","preventionTips":["Verify the company page renders with a visible name in a logged-in browser","Keep the library current with LinkedIn DOM changes","Re-authenticate sessions; logged-out views often omit the name element"],"tags":["scraping","linkedin","layout-drift"],"backgroundTag":"scrape-extraction-failed","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}