{"id":29256,"date":"2026-06-20T14:51:59","date_gmt":"2026-06-20T11:51:59","guid":{"rendered":"https:\/\/www.linkedhelper.com\/blog\/?p=29256"},"modified":"2026-06-24T13:09:56","modified_gmt":"2026-06-24T10:09:56","slug":"linkedin-automation-security-study","status":"publish","type":"post","link":"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/","title":{"rendered":"How LinkedIn Catches Automation: Code Findings From 16 Extensions, Cloud Tests, and LinkedIn\u2019s Detection Engine"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">We analyzed 16 LinkedIn automation extensions to see what they do with sessions, cookies, browser calls, and vendor servers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We also signed up for 7 cloud services with two accounts each, then checked the exit Internet Protocol (IP) addresses they assigned against an independent fraud-reputation database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The third part of the research looked at LinkedIn\u2019s own page code. That code includes an extension scanner with 6,167 targets, a Document Object Model (DOM) \u201cspectroscope,\u201d and a 48-point device fingerprint that can travel with session requests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide shows which signals can raise account risk, which automation architectures expose more of those signals, and how you can audit any extension yourself in about five minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"TLDR-9-Things-to-Know-Before-You-Install-Anything\"><\/span>TL;DR: 9 Things to Know Before You Install Anything<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>LinkedIn can scan Chromium-based browsers for known extensions.<\/strong> This is called <strong>Active Extension Detection <\/strong>(<strong>AED<\/strong>). As of mid-June 2026, LinkedIn\u2019s code probed 4,934 Chrome extension IDs, with the list growing by roughly 12 per day.<\/li>\n\n\n\n<li><strong>Cookie-bridge tools create one of the highest-risk setups.<\/strong> These extensions read your LinkedIn <code>li_at<\/code> session cookie and upload it to the vendor\u2019s cloud, which can then run your account from a data center IP. We found this pattern in code across 9 widely used tools.<\/li>\n\n\n\n<li><strong>Reading cookies is not the same as exporting your session.<\/strong> Some tools read cookies but keep the session local. The real question is where the cookie value goes, so we traced that path for every tool in this guide.<\/li>\n\n\n\n<li><strong>Blocking LinkedIn telemetry can expose the tool instead of hiding it.<\/strong> Some extensions block LinkedIn tracking endpoints. If one endpoint still reports back, LinkedIn may see that other telemetry paths are being blocked.<\/li>\n\n\n\n<li><strong>Your device fingerprint can travel with session requests.<\/strong> LinkedIn collects 48 device signals, including graphics, audio, fonts, local IP through Web Real-Time Communication (WebRTC), and automation flags. That fingerprint is encrypted and attached to Application Programming Interface (API) requests during the session.<\/li>\n\n\n\n<li><strong>Detection is better understood as a scoring model.<\/strong> Extension presence, code traces, network anomalies, and account behavior can all add risk signals. Conservative daily limits help, but they do not fix a risky architecture.<\/li>\n\n\n\n<li><strong>Manual outreach is not restriction-proof.<\/strong> High volume, bulk profile opening, and too many \u201cI don\u2019t know this person\u201d reports can affect manual users too.<\/li>\n\n\n\n<li><strong>Cloud tools can leave a visible IP trail.<\/strong> In our 7-tool cloud test, five of the six server-side tools placed accounts behind data center or proxy IPs rated high-risk by an independent fraud database. One vendor gave both test accounts the same IP, and three unrelated tools routed through the same upstream provider.<\/li>\n\n\n\n<li><strong>Account safety is not a niche concern.<\/strong> Across nine English-speaking markets, roughly 12,050 monthly searches relate to LinkedIn restrictions, account limitations, identity verification, or bans.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why-You-Can-Trust-This-Report\"><\/span>Why You Can Trust This Report<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This guide is based on three sources of evidence: <strong>product history, extension code, and live cloud testing<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The first source is<\/strong> <strong>Alexander Erin, founder of Linked Helper<\/strong>, who has been in that role since October 2016.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">He wrote the first version of Linked Helper, which was a Chrome extension. At its peak, it ranked first for the \u201cLinkedIn\u201d search query in the Chrome Web Store and had an audience of about 80,000 users. He also saw LinkedIn\u2019s early detection systems affect competing extensions. In August 2019, he had three days to patch Linked Helper against a second detection wave.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"457\" src=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4-1024x457.png\" alt=\"\" class=\"wp-image-29327\" srcset=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4-1024x457.png 1024w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4-300x134.png 300w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4-768x342.png 768w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4-1536x685.png 1536w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4-1320x588.png 1320w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-4.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After that, the team decided to leave the Chrome Web Store and rebuild Linked Helper as a standalone desktop application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The second source is code.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this report, we downloaded the real published extensions of 16 competing tools, de-minified them, and traced what they do with your LinkedIn session. We checked the code file by file and kept line references where the behavior could be verified.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We also used the <a href=\"https:\/\/browsergate.eu\/the-evidence-pack\/\">BrowserGate investigation<\/a>, which analyzed LinkedIn\u2019s production JavaScript from December 2025 to March 2026. That work documented detection systems that our expert had already described from the defender\u2019s side since 2019.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The third source is a live test.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Code can show what an extension can do, but it cannot show which IP address a cloud service assigns after your session reaches its servers. To check that part, we signed up for 7 cloud tools using two accounts per tool from the same country, France.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For each account, we recorded the exit IP, the IP\u2019s reputation in <a href=\"https:\/\/www.ipqualityscore.com\/\">IPQualityScore<\/a> (IPQS), the device type, the operating system (OS) shown by the cloud, and whether the companion extension appeared on LinkedIn\u2019s scan list. IPQS is an independent fraud-intelligence database, and IPQS lists LinkedIn among its customers on its website.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By the end of this guide, you will have three practical outputs:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A risk map of the main automation architectures<\/li>\n\n\n\n<li>A code-level checklist for auditing any extension<\/li>\n\n\n\n<li>Safer operating benchmarks for cases where benchmarks still apply<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why-Account-Safety-Is-the-Main-Issue\"><\/span>Why Account Safety Is the Main Issue<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn account restrictions remain a major concern for sales teams, recruiters, founders, agencies, and growth teams. Every month, people search for answers about restrictions, identity checks, invitation limits, and sudden account enforcement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most advice stops at daily activity limits and message volume. Those are important, but they are only part of the risk picture. LinkedIn can also observe technical signals, including browser extensions, device fingerprints, cloud-session environments, and IP reputation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This report focuses on that technical layer. Instead of guessing what LinkedIn may detect, we look at how automation tools are built, what signals they expose, and how each architecture can affect account risk.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"s-1\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1-The-Architectures-Behind-LinkedIn-Automation-Risk\"><\/span>1. The Architectures Behind LinkedIn Automation Risk<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Marketing labels such as \u201ccloud,\u201d \u201cAI,\u201d \u201cChrome extension,\u201d and \u201csafe\u201d do not explain account risk on their own.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The real questions are:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>How does the tool access your account?<\/li>\n\n\n\n<li>Where does the work run?<\/li>\n\n\n\n<li>Where does your data go?<\/li>\n\n\n\n<li>What traces does the setup leave behind?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Most LinkedIn automation tools can be mapped to the building blocks below. Some tools use one model, while others combine several models inside the same product.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" src=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5-1024x401.png\" alt=\"\" class=\"wp-image-29329\" srcset=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5-1024x401.png 1024w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5-300x117.png 300w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5-768x301.png 768w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5-1536x601.png 1536w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5-1320x517.png 1320w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-5.png 1834w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dux-Soup Chrome Extension Data Flow. Red nodes show your LinkedIn session or data leaving for a vendor\u2019s cloud. Grey nodes show data that stays in your browser.<\/em><\/p>\n\n\n\n<h3 id=\"s-1-1\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"11-Browser-Extensions-That-Run-Inside-Your-Browser\"><\/span>1.1 Browser Extensions That Run Inside Your Browser<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A browser extension can combine several automation patterns. The difference between those patterns matters because some keep your session local, while others move session data into a vendor cloud.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"a-Local-Scraping-Through-Your-Own-Session\"><\/span>a) Local Scraping Through Your Own Session<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In this model, your LinkedIn session stays on your machine. The extension calls LinkedIn\u2019s internal API, known as Voyager, directly from your browser while using your existing LinkedIn login.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Technically, this can look like <code>fetch(..., {credentials: \"same-origin\"})<\/code> with a <code>CSRF token<\/code> header derived from your <code>JSESSIONID<\/code> cookie. Cross-Site Request Forgery (CSRF) tokens help prove that a request belongs to the current logged-in browser session.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Only the scraped results, such as profiles or emails, are uploaded to the vendor. Your session token itself is not exported.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verified examples from our audit include Octopus CRM, GetProspect, Findymail, Apollo, and Dux-Soup on its Turbo, Pro, and Free plans. Octopus CRM had the cleanest implementation in this group because it did not request the Chrome <code>cookies<\/code> permission and used local Voyager calls such as <code>fetch(voyager, {credentials:\"same-origin\", \"CSRF-token\": U()})<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The upside is that your IP, browser session, and device fingerprint stay consistent. Your session token does not leave your browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>risk comes from the requests<\/strong> themselves.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A bare Voyager request without the surrounding page traffic can create an unnatural request pattern, which we cover in <a href=\"#s-2-7\">\u00a72.7<\/a>.<\/li>\n\n\n\n<li>The extension can also remain visible to LinkedIn\u2019s extension scanners, which we cover in <a href=\"#s-2-1\">\u00a72.1<\/a> and <a href=\"#s-2-2\">\u00a72.2<\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There is also a <strong>maintenance risk<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Many extensions rely on hard-coded assumptions about LinkedIn\u2019s internal API structure, request formats, headers, and parameters. If LinkedIn changes those expectations, an outdated extension can start sending <strong>malformed or unusual requests<\/strong> until the vendor detects the change, ships a fix, and users install the update.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"b-Cookie-Bridge-or-Session-Upload-Extensions\"><\/span>b) Cookie-Bridge or Session-Upload Extensions<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In this model, your LinkedIn session leaves your machine. The extension reads the LinkedIn cookie jar through calls such as <code>chrome.cookies.getAll(...)<\/code>, picks out values such as <code>li_at<\/code>, <code>JSESSIONID<\/code>, or <code>li_a<\/code>, and sends those values to the vendor\u2019s server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After that, the vendor\u2019s cloud can act as your account from its own IP address. As our expert said about one such tool, \u201c<em>the extension serves as a bridge to pump the cookie out, and has no other purpose<\/em>.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The table below shows what we found in the code. It also separates tools that export session data from tools that keep the LinkedIn session local and send only results.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>What the Code Does<\/th><th>Vendor Destination<\/th><\/tr><\/thead><tbody><tr><td>Waalaxy<\/td><td>Reads all LinkedIn cookies through <code>chrome.cookies.getAll({url:\"https:\/\/www.linkedin.com\"})<\/code>, packages them into <code>authDataFromExtension.cookie<\/code>, and uploads the session bundle to the cloud (<code>background.js:91370-91432<\/code>).<\/td><td><code>stargate.prod.aws.waalaxy.com<\/code><\/td><\/tr><tr><td>Kaspr<\/td><td>Extracts <code>li_a<\/code>, <code>li_at<\/code>, <code>sessionId<\/code>, and LinkedIn identifiers, then sends them to the vendor\u2019s <code>\/linkedin\/sync<\/code> endpoint (<code>background.api.js:157-169<\/code>; cookie collection starts in <code>background.events.js:87-89<\/code>).<\/td><td><code>api.kaspr.io<\/code><\/td><\/tr><tr><td>Wiza<\/td><td>Reads <code>li_at<\/code>, <code>li_a<\/code>, and the LinkedIn cookie jar through Chrome\u2019s cookies API, then hands the data to the Wiza controller for cloud processing (<code>background.ts-D9M8FI6v.js<\/code>).<\/td><td><code>wiza.co<\/code> \/ <code>wiza.com<\/code><\/td><\/tr><tr><td>Lemlist<\/td><td>Reads LinkedIn cookies, converts them into a full <code>name=value<\/code> cookie string, uploads it to <code>\/linkedin\/updateCookie<\/code>, and re-syncs whenever <code>li_at<\/code> changes (<code>background-D7SnJp7X.js<\/code>).<\/td><td><code>app.lemlist.com<\/code><\/td><\/tr><tr><td>Prospeo<\/td><td><code>GET_LINKEDIN_COOKIES<\/code> extracts <code>li_at<\/code> and <code>li_a<\/code> from LinkedIn cookies and forwards requests through the vendor proxy layer (<code>background.js-bab59bf8.js<\/code>).<\/td><td><code>prod.prospeo.io<\/code><\/td><\/tr><tr><td>Surfe<\/td><td>Collects <code>JSESSIONID<\/code>, <code>li_at<\/code>, and <code>li_a<\/code> from LinkedIn cookies and sends them to Surfe\u2019s backend (<code>background.js<\/code>).<\/td><td><code>api.surfe.com<\/code><\/td><\/tr><tr><td>HeyReach<\/td><td>Reads <code>li_at<\/code>, maps the LinkedIn cookie jar, and uploads it through <code>\/CreateLinkedInAccountFromCookies<\/code>, marketed as a special login connector (<code>popup.js<\/code>, <code>linkedIn_request_utility.js<\/code>, <code>heyReach_request_utility.js<\/code>).<\/td><td><code>api.heyreach.io<\/code><\/td><\/tr><tr><td>Dux-Soup Cloud plan<\/td><td>Reads LinkedIn session cookies, including the full LinkedIn cookie jar through <code>cookies.getAll({domain:\"linkedin.com\"})<\/code>, then bundles session state with <code>localStorage<\/code>, browser data, and browser fingerprinting data. The package is sent through the cloud-control channel when a Cloud plan is connected, and the transfer happens automatically as part of the cloud-session setup flow (<code>sw.js<\/code>).<\/td><td><code>app.dux-soup.com<\/code><\/td><\/tr><tr><td>Expandi connector (<code>expandi.io<\/code>)<\/td><td>Stores <code>li_at<\/code>, intercepts Voyager traffic through injected code, collects profile data, and forwards the session bundle to Expandi\u2019s cloud environment (<code>background.js<\/code>, <code>linkedin\/injected.js<\/code>, <code>content.js<\/code>).<\/td><td><code>app.expandi.io<\/code><\/td><\/tr><tr><td>Apollo<\/td><td>Does not request cookies permission. It uses LinkedIn through the logged-in browser context with <code>credentials:\"include\"<\/code> or same-origin authentication, without exporting session cookies.<\/td><td><code>app.apollo.io<\/code> (results only)<\/td><\/tr><tr><td>PhantomBuster<\/td><td>Does not silently upload sessions, but auto-fills LinkedIn cookies into setup fields on PhantomBuster pages for one-click transfer (<code>contentscript.js<\/code>).<\/td><td><code>phantombuster.com<\/code><\/td><\/tr><tr><td>Expandi AI, non-official (<code>expandi.ai<\/code>)<\/td><td>Uses a page bridge that exposes all available cookies to <code>app.expandi.ai<\/code>. The background code calls unfiltered <code>chrome.cookies.getAll({})<\/code>, returning the full browser cookie jar (<code>KonnectorContent.js<\/code>, <code>background.js<\/code>).<\/td><td><code>app.expandi.ai<\/code><\/td><\/tr><tr><td>Octopus CRM<\/td><td>Does not request cookies permission. It uses local Voyager requests with browser-managed authentication and sends only results to the vendor API (<code>content.js<\/code>, <code>main-es2018...js<\/code>).<\/td><td><code>api.octopuscrm.io<\/code> (results only)<\/td><\/tr><tr><td>GetProspect<\/td><td>Does not request cookies permission. It performs local Voyager requests through browser session state and does not export <code>li_at<\/code> (<code>foreground.bundle.js<\/code>, manifest audit).<\/td><td><code>api.getprospect.com<\/code> (results only)<\/td><\/tr><tr><td>Findymail<\/td><td>Derives CSRF tokens from local <code>JSESSIONID<\/code> access through <code>document.cookie<\/code>. It does not request cookies permission and does not export the LinkedIn session (<code>salesnav_profile.js<\/code>, <code>manifest.json<\/code>).<\/td><td><code>app.findymail.com<\/code> (results only)<\/td><\/tr><tr><td>Lusha<\/td><td>Has no LinkedIn cookie access. It uses authenticated requests against Lusha-owned services only (<code>background.js<\/code>, <code>manifest.json<\/code>).<\/td><td><code>plugin-services.lusha.com<\/code><\/td><\/tr><tr><td>ZoomInfo<\/td><td>Does not request cookies permission and showed no LinkedIn session access in the manifest or audit traces.<\/td><td><code>zoominfo.com<\/code> (results only)<\/td><\/tr><tr><td>Dux-Soup Turbo, Pro, and Free<\/td><td>Uses local-browser automation mode. Voyager interception happens in the user\u2019s browser, with no cloud session upload found in this mode.<\/td><td>Not applicable<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Expandi-The-Most-Interesting-Case-in-the-Dataset\"><\/span>Expandi: The Most Interesting Case in the Dataset<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expandi<\/strong> (via <strong>Expandi connector extension<\/strong>) deserves a closer look because it shows several techniques used in the LinkedIn automation market. Those techniques may reduce some risks, but they can also leave signals that detection systems can observe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Understanding how those techniques work and where they still leave signals behind provides a useful framework for evaluating every other automation tool.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"295\" src=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6-1024x295.png\" alt=\"\" class=\"wp-image-29331\" srcset=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6-1024x295.png 1024w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6-300x87.png 300w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6-768x221.png 768w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6-1536x443.png 1536w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6-1320x381.png 1320w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-6.png 1706w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Expandi Connector Chrome Extension Data Flow, reconstructed by code audit. Red nodes show your LinkedIn session or data leaving for a vendor\u2019s cloud. Grey nodes show data that stays in your browser.<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Technique-1-Inject-a-Script-Into-LinkedIns-Page-Context\"><\/span>Technique 1: Inject a Script Into LinkedIn\u2019s Page Context<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">A content script normally lives in an isolated world and cannot touch the page\u2019s <code>XMLHttpRequest<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To work around that limit, Expandi injects a real <code>&lt;script src=\"chrome-extension:\/\/ohcplcf\u2026\/linkedin\/injected.js\"&gt;<\/code> node into the live DOM (<code>linkedin\/content.js:2-7<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That node carries a literal <code>chrome-extension:\/\/<\/code> URL inside the page. LinkedIn\u2019s Spectroscopy scanner (<a href=\"#s-2-2\">\u00a72.2<\/a>) can passively walk the DOM, look for that substring, extract the 32-character extension ID, and report it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No target list is needed for this detection path. A claim such as \u201cwe\u2019re not on the AED list\u201d does not settle the issue if the extension injects a visible <code>chrome-extension:\/\/<\/code> resource. In that case, the delivery method becomes the footprint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Confidence:<\/strong> Found in code. The injection is explicit, and the Spectroscopy mechanism is documented in the BrowserGate production-code analysis.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Technique-2-Monkey-Patch-XMLHttpRequestprototypesend\"><\/span>Technique 2: Monkey-Patch <code>XMLHttpRequest.prototype.send<\/code><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Expandi\u2019s <code>injected.js:3-27<\/code> overrides the page\u2019s native <code>send<\/code> method, so every Voyager API response your browser fetches can be copied out to the extension. The patch runs in the same global context as LinkedIn\u2019s own JavaScript, which is the point of injecting the script into the page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A patched <code>send<\/code> method is no longer native, and any script on the page can test it. For example, <code>Function.prototype.toString.call(XMLHttpRequest.prototype.send)<\/code> returns the wrapper\u2019s source instead of <code>\"function send() { [native code] }\"<\/code>, and Expandi makes no attempt to mask <code>toString<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A clean reference from a fresh same-origin <code>&lt;iframe&gt;<\/code> also would not match the page\u2019s modified <code>send<\/code>. That creates a detectable difference between the original browser API and the page\u2019s current state.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn already ships probes in this class. The internal APFC\/DNA fingerprinting engine group discussed in <a href=\"#s-2-6\">\u00a72.6<\/a> includes direct anti-bot checks and a <code>signals<\/code> feature for detecting inconsistent browser claims. LinkedIn also loads the external HUMAN\/PerimeterX script from <code>li.protechts.net<\/code> (<a href=\"#s-2-8a\">\u00a72.8a<\/a>), which is designed to detect tampering such as modified prototypes and <code>toString<\/code> behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Confidence:<\/strong> The patch is found in code. The detection path follows from how the patch works.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We did not find telemetry blocking in this path, so any verdict from those probes can still be reported back. We are not claiming we watched LinkedIn flag a specific Expandi user. The narrower claim is that the detection capability exists, and the patch is visible enough to fall within that range.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Technique-3-Send-a-Separate-Voyager-GraphQL-Email-Call\"><\/span>Technique 3: Send a Separate Voyager GraphQL Email Call<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Expandi\u2019s <code>injected.js:34-44<\/code> issues a programmatic <code>GET \/voyager\/api\/graphql<\/code> request with <code>withCredentials:true<\/code>. It builds a <code>CSRF-token<\/code> from your <code>JSESSIONID<\/code> (<code>injected.js:30-31<\/code>) to pull contact-info or email data that a normal profile view does not fetch by default.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn can see this as a request-map anomaly (<a href=\"#s-2-7\">\u00a72.7<\/a>). It is an API call with no matching user action, fired after load on profiles where the user did not open \u201cContact info.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At scale, \u201cevery viewed profile also pulls its email\u201d becomes a recognizable enrichment-scraper pattern. It is visible in server-side logs without any help from the browser. The call rides your real session and carries the encrypted fingerprint header, but the <em>behavioral shape<\/em> is the giveaway.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Confidence:<\/strong> Found in code. The call is explicit, and the anomaly is server-observable by design.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The-Most-Serious-Finding-Some-Extensions-Collect-More-Than-LinkedIn-Data\"><\/span>The Most Serious Finding: Some Extensions Collect More Than LinkedIn Data<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The most serious variant is a full cookie-jar collection across every site where you are logged in, not just LinkedIn. The <code>expandi.ai<\/code> extension by Konnector, a different vendor from Expandi.io, returns <code>chrome.cookies.getAll({})<\/code> to its web app across all domains.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even the routine-looking <code>isInstalled<\/code> handshake can expose the full cookie jar (<code>KonnectorContent.js:10-28<\/code>, <code>background.js:19<\/code>). That moves the issue beyond LinkedIn automation risk and into broader account-security risk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"PhantomBuster-Example\"><\/span>PhantomBuster Example<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PhantomBuster sits in a separate category. It auto-fills your <code>li_at<\/code> cookie into its cloud setup page with one click (<code>contentscript.js:5265-5266<\/code>). That is not a silent POST, but it places the session one button away from transfer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PhantomBuster is also capable of harvesting session cookies for 15 platforms (<code>background.js:5140-5230<\/code>). This is why <a href=\"#s-1-2\">\u00a71.2a<\/a> treats cookie replay as the worst class.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"c-DOM-Automation-Inside-the-LinkedIn-Page\"><\/span>c) DOM Automation Inside the LinkedIn Page<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Some extensions automate LinkedIn by clicking buttons for you and injecting their own panels, buttons, or controls into the LinkedIn page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates two detection surfaces. Every injected element can have a unique selector that a scanner can look for (<a href=\"#s-2-2\">\u00a72.2<\/a>), and every programmatic click carries <code>isTrusted:false<\/code>. From the normal extension API, as our expert put it, \u201cyou cannot fake it &#8211; it\u2019s always false\u201d (<a href=\"#s-2-5\">\u00a72.5<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, few tools inject heavily into the page. But tools that do create signals LinkedIn can inspect without needing a target list, because the scanner can look directly at what changed inside the page (<a href=\"#s-2-2\">\u00a72.2<\/a>).<\/p>\n\n\n\n<h3 id=\"s-1-2\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"12-Cloud-Services-That-Run-on-Vendor-Servers\"><\/span>1.2 Cloud Services That Run on Vendor Servers<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A cloud service needs a way into your LinkedIn account before it can automate anything. In practice, there are two main entry points.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"a-Cookie-Replay-Through-a-Synced-Session\"><\/span>a) Cookie Replay Through a Synced Session<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This is the server-side half of the cookie-bridge model from <a href=\"#s-1-1\">\u00a71.1b<\/a>. It is one of the highest-risk setups because your session can be reused outside your own browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The risk comes from several signals happening at once:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>One session can appear on two IPs in parallel.<\/strong> Yours while you keep browsing LinkedIn, and the vendor\u2019s data center IP while the cloud runs automation. Our expert called this \u201c<em>a guaranteed tell.<\/em>\u201d<\/li>\n\n\n\n<li><strong>Cookie replay is not the same as a normal login.<\/strong> It does not create a visible entry in LinkedIn\u2019s \u201cactive sessions\u201d page, so you cannot see it from your account settings.<\/li>\n\n\n\n<li>Dux-Soup\u2019s Cloud plan takes the cookies silently when the Cloud plan is connected.<\/li>\n\n\n\n<li>If the cloud replays the cookie inside its own browser, the <strong>device fingerprint may not match<\/strong> the one your session has always used (<a href=\"#s-2-6\">\u00a72.6<\/a>).<\/li>\n\n\n\n<li>If the cloud skips the browser and calls the Application Programming Interface (API) directly, it can create an <strong>unnatural request map<\/strong> (<a href=\"#s-2-7\">\u00a72.7<\/a>).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Once the session has moved to a vendor cloud, you are no longer watching the environment that acts as your LinkedIn account.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"b-Fresh-Login-on-the-Vendor-Side\"><\/span>b) Fresh Login on the Vendor Side<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The second path is a fresh login from the vendor\u2019s environment. The service spins up a Virtual Private Server (VPS) or browser emulator and logs in with your username, password, email code, and two-factor authentication (2FA) code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some vendors describe this approach privately. One social-posting tool told us it logs in through a VPS with a Multilogin-style browser, then does everything else through the API. Another well-known prospecting suite described \u201ca real browser for the rare actions, the rest over the API.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(We&#8217;re not naming them, but&#8230; PhantomBuster, to its credit, documents its cloud-browser architecture publicly.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our expert rates this path as <em>less risky<\/em> than cookie replay. A fresh login from a new machine and location can at least resemble something a real person might do. It still leaves the cloud\u2019s IP, geography, timezone, and fingerprint attached to your account, which we cover in <a href=\"#s-2-9\">\u00a72.9<\/a> and <a href=\"#s-2-10\">\u00a72.10<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What-the-Cloud-Does-Next-API-Only-vs-Emulated-Browser\"><\/span>What the Cloud Does Next: API-Only vs. Emulated Browser<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">After logging in, the cloud still has to perform the work. It can either use an emulated browser, call LinkedIn\u2019s APIs directly, or combine both.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our expert marks cloud-side execution as an estimate, not a directly proven fact. His assessment is direct: \u201c<em>I think they all hammer the API directly. All of them. With 95% probability.<\/em>\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">He gives three reasons for that estimate:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>API calls are much simpler<\/strong> than parsing LinkedIn pages that constantly change.<\/li>\n\n\n\n<li>LinkedIn has not yet hardened the API enough to stop services that have publicly admitted API use.<\/li>\n\n\n\n<li><strong>Real-time inbox<\/strong> features in these tools\u2019 dashboards usually require direct API access. Pulling one fresh conversation for one specific person on demand is not something a background scraping browser can reliably do on that schedule.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The system-level risk is that API-only clouds depend on <strong>hardcoded requests<\/strong>. LinkedIn only has to change the API with a special header, per-user endpoint names, or a similar mutation, and every hardcoded client can break or start looking unusual.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BrowserGate\u2019s analysis found that part of this infrastructure already exists. An encrypted fingerprint blob is injected into the Hypertext Transfer Protocol (HTTP) headers of every API request made by a real browser session (<a href=\"#s-2-6\">\u00a72.6<\/a> and <a href=\"#s-2-7\">\u00a72.7<\/a>). The infrastructure to separate real browser traffic from bare API clients appears to be deployed. Moving from collection to enforcement is LinkedIn\u2019s decision.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This caveat matters throughout the report:<\/strong> From the outside, you cannot <em>prove<\/em> which method a cloud uses \u2014 an API client can imitate a login, too. We report what we see in the code and mark cloud-side behavior as &#8220;highly likely.&#8221;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What-We-Measured-When-We-Signed-Up-7-Tools-2-Accounts-Each\"><\/span>What We Measured When We Signed Up (7 Tools, 2 Accounts Each)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Code analysis stops at the extension boundary. The cloud itself is a black box for the user, although LinkedIn may see more.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One thing the black box cannot fully hide is the exit IP it puts behind your account and the device fingerprint it shows. To test that, we signed up for seven cloud tools with two accounts per tool, all from the same country, <strong>France<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We then checked each assigned IP in IPQualityScore (IPQS). Testing two accounts per tool matters because it shows whether a vendor reuses infrastructure across customers.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What-Is-IPQualityScore-IPQS\"><\/span>What Is IPQualityScore (IPQS)?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">IPQS is an independent fraud-prevention service with more than 10 years on the market. It rates IP addresses using signals from its own network of honeypots, traps, crawlers, and abuse feeds.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"580\" src=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7-1024x580.png\" alt=\"\" class=\"wp-image-29332\" srcset=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7-1024x580.png 1024w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7-300x170.png 300w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7-768x435.png 768w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7-1536x870.png 1536w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7-1320x747.png 1320w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-7.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For each IP, IPQS returns several useful fields:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>fraud_score<\/code>, from 0 to 100.<\/li>\n\n\n\n<li>Proxy, Virtual Private Network (VPN), and Tor indicators.<\/li>\n\n\n\n<li>Connection type, such as data center, residential, or mobile.<\/li>\n\n\n\n<li>Geolocation data.<\/li>\n\n\n\n<li>Recent abuse history.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There is no official cutoff that turns an IP into a safety verdict. Still, IPQS\u2019s own examples treat scores above 75 as high risk, and the company claims about 99.95% accuracy for proxy and VPN detection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We use IPQS as an independent reference point for what a modern anti-fraud system may see. A heavily abused IP, a known proxy endpoint, or a data center address shared by many unrelated accounts can all become signals that risk systems commonly evaluate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Data center IPs are not automatically malicious. They are often less trusted than residential or mobile connections because they come from hosting providers rather than consumer networks. In LinkedIn\u2019s context, they can become more revealing when many accounts appear from the same cloud infrastructure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IPQS was also useful because its geolocation data often matched what LinkedIn displayed in account security sessions during our tests. Some proxy providers advertised locations that did not match the country identified by IPQS or LinkedIn, which creates another risk factor: <strong>geographic mismatch between the claimed and observed connection location<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IPQS is not LinkedIn\u2019s private risk engine. Its score is not an account-safety verdict or a legal determination. It is an independent benchmark for comparing the quality and reputation of the IP automation tools placed behind user accounts.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Cloud-Sign-Up-Test-Results\"><\/span>Cloud Sign-Up Test Results<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>Door In<\/th><th>IP Fraud Score in IPQS (2 IPs)<\/th><th>All Data Center?<\/th><th>Shared or Reused Infrastructure<\/th><th>Location Control and Own Proxy<\/th><\/tr><\/thead><tbody><tr><td>Skylead<\/td><td>Login\/password<\/td><td>100 \/ 100<br>100 \/ 100<\/td><td>Yes<\/td><td>Same exact IP for both accounts: <code>58.97.254.1<\/code>; HostRoyale; shared with 2 others<\/td><td>91 countries \u00b7 own proxy supported<\/td><\/tr><tr><td>HeyReach<\/td><td>Cookie + login<\/td><td>100 \/ 100<br><br>100 \/ 100<\/td><td>Yes<\/td><td>Same <code>\/24<\/code>; Internet Service Provider (ISP) Altinea SAS; extension also blocks logout<\/td><td>154 countries \u00b7 own proxy supported<\/td><\/tr><tr><td>Dripify<\/td><td>Login\/password<\/td><td>94 \/ 100<br>100 \/ 100<\/td><td>Yes<\/td><td>Same <code>\/24<\/code>; HostRoyale, Autonomous System Number (ASN) 203020<\/td><td>No location control listed \u00b7 own proxy not supported<\/td><\/tr><tr><td>We Connect<\/td><td>Login\/password<\/td><td>94 \/ 100<br>87 \/ 100<\/td><td>Yes<\/td><td>HostRoyale for account 1; M247 for account 2<\/td><td>69 countries \u00b7 own proxy supported<\/td><\/tr><tr><td>Expandi<\/td><td>Login + connector extension<\/td><td>100 \/ 0<br>0 \/ 100<\/td><td>No, one was residential<\/td><td>One IP flagged, one clean<\/td><td>96 countries \u00b7 own proxy not supported<\/td><\/tr><tr><td>Meet Alfred<\/td><td>Login\/password<\/td><td>0 \/ 100<br>0 \/ 100<\/td><td>Mixed<\/td><td>Clean IPs; spoofs a mobile User-Agent (UA), OS, and UA differ by account<\/td><td>247 countries \u00b7 own proxy supported<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What-the-Table-Shows\"><\/span>What the Table Shows<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Skylead is the clearest cautionary example<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both test accounts came out behind the exact same data center IP, <code>58.97.254.1<\/code>, with an IPQS fraud score of 100. Two profiles on one data center IP match the kind of account-clustering pattern LinkedIn\u2019s parallel-access logic can evaluate (<a href=\"#s-2-9\">\u00a72.9<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. The flagged infrastructure was shared, and not just within one brand.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dripify, Skylead, and We Connect are all routed through the same upstream provider, HostRoyale Technologies (ASN 203020). If one provider block becomes less trusted at LinkedIn\u2019s end, several tools can be affected at once.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. HeyReach added a separate control issue.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its IPs had fraud scores of 100, and its extension blocked logout in two ways: a <code>webNavigation<\/code> intercept (<code>background.js:1-17<\/code>) and a <code>declarativeNetRequest<\/code> rule (<code>rules.json:1-14<\/code>). That can stop the user from invalidating the session after handing over the full cookie array through <code>api.heyreach.io\/...\/CreateLinkedInAccountFromCookies<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Meet Alfred was the clean contrast in this test.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It was the only tool that gave both accounts clean IPs with fraud scores of 0, and it spoofed a mobile User-Agent. But a clean IP addresses only one signal. The tool still places credentials in its cloud and acts as the user from a different machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. Nobody checks the IP they give you.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">None of the 7 tools shipped a proxy-quality checker. A tool can assign a flagged address, or a user can add a weak proxy, without getting a clear warning. \u201cLocation control\u201d also usually means country-level control, not state or city-level control (<a href=\"#s-2-9\">\u00a72.9<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We cannot see what these servers <em>do<\/em> internally, and we mark the execution mode as &#8220;highly likely&#8221;. But the IP, the shared infrastructure, the fingerprint, and the scan-list status are not inferences: <strong>we measured them<\/strong> (see the IPQS sidebar above).<\/p>\n\n\n\n<h3 id=\"s-1-3\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"13-Browser-Based-Tools-That-Control-a-Full-Browser\"><\/span>1.3 Browser-Based Tools That Control a Full Browser<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Browser-based automation uses a full browser environment rather than only a lightweight extension or bare API client. This category splits into two very different models.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Cloud-Browser-Based-Tools\"><\/span>Cloud Browser-Based Tools<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">A cloud browser-based tool runs a browser such as headless Chrome or Puppeteer on the vendor\u2019s server. PhantomBuster is the only vendor in this group that publicly admits this architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This model still has weaknesses.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puppeteer is detectable, and an entire anti-bot industry exists around detecting browser automation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Multi-account hosting also creates correlation risk when many \u201cusers\u201d share one server\u2019s graphics processing unit (GPU), audio stack, and other fingerprint traits.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Desktop-Standalone-Tools\"><\/span>Desktop Standalone Tools<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">A desktop standalone tool runs a separate Chromium-based browser on the user\u2019s machine. Linked Helper uses this model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a smaller detection surface than a Chrome extension or cloud account farm. There is no Chrome Web Store ID for <a href=\"https:\/\/www.linkedin.com\/posts\/quinnomori_the-attack-how-it-works-activity-7445578875889254400-ytB9\">LinkedIn\u2019s Active Extension Detection scanner<\/a> to probe (<a href=\"#s-2-1\">\u00a72.1<\/a>), no extension code injected into the LinkedIn page (<a href=\"#s-2-2\">\u00a72.2<\/a> and <a href=\"#s-2-3\">\u00a72.3<\/a>), and the account keeps the user\u2019s local IP and machine fingerprint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also a structural advantage. LinkedIn can analyze any public Chrome Web Store extension at leisure and build a detector before deploying anything. Against a standalone desktop application, detection tests have to be shipped into production, where they can be observed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Browser-based does not automatically mean safe. It only reduces some technical exposure. The developer\u2019s choices around fingerprinting, navigation, timing, and click simulation still affect risk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The local model gives the user more visibility. With a desktop application such as <a href=\"https:\/\/www.linkedhelper.com\/\">Linked Helper<\/a>, users can watch pages open, see which interface elements are targeted, follow navigation paths, and observe text being entered. Cloud tools ask users to trust what happens on servers they cannot see.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Worked-Example-Dux-Soup-Uses-Several-Patterns-in-One-Package\"><\/span>Worked Example: Dux-Soup Uses Several Patterns in One Package<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Most tools fit into one row of the architecture map. Dux-Soup is different because <code>config.getEdition()<\/code> ships a different architecture depending on the plan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That makes Dux-Soup a useful example for this guide. One product shows local scraping, session upload, AED exposure, telemetry blocking, and high-volume limits in different parts of its setup.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" src=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8-1024x401.png\" alt=\"\" class=\"wp-image-29333\" srcset=\"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8-1024x401.png 1024w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8-300x117.png 300w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8-768x301.png 768w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8-1536x601.png 1536w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8-1320x517.png 1320w, https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/image-8.png 1834w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dux-Soup Chrome Extension Data Flow. Red nodes show your LinkedIn session or data leaving for a vendor\u2019s cloud. Grey nodes show data that stays in your browser.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Free, Pro, and Turbo use local scraping (<a href=\"#s-1-1\">\u00a71.1a<\/a>).<\/strong> Voyager is called in the user\u2019s browser with a <code>CSRF-token<\/code> derived from <code>JSESSIONID<\/code>, so the session stays local. Risk level: <strong>medium<\/strong>.<\/li>\n\n\n\n<li><strong>Cloud uses session upload (<a href=\"#s-1-1\">\u00a71.1b<\/a> and <a href=\"#s-1-2\">\u00a71.2a<\/a>).<\/strong> The service worker runs <code>chrome.cookies.getAll({domain:\"linkedin\"})<\/code>, then <strong>sends the full cookie jar<\/strong>, <code>localStorage<\/code>, and <code>navigator<\/code> data to <code>app.dux-soup.com<\/code> through <code>PUT \/api\/{user}\/sessions\/{domain}<\/code>. It then drives the account through a Socket.io channel (<code>sw.js:1<\/code>, <code>libs\/socket-io\/socket.io.js:1562<\/code>). This was the broadest session payload we found in any tool.<\/li>\n\n\n\n<li><strong>The extension is confirmed on LinkedIn\u2019s AED list (<a href=\"#s-2-1\">\u00a72.1<\/a>).<\/strong> The extension ID <code>ppdakpfeaodfophjplfdedpcodkdkbal<\/code> and probe file <code>fetchforwarder.js<\/code> appear in <code>detection_db.json<\/code>. On every visit, LinkedIn can fetch <code>chrome-extension:\/\/\u2026\/fetchforwarder.js<\/code>, and a successful hit can flag that the extension is installed before the user clicks anything.<\/li>\n\n\n\n<li><strong>The anti-detect setup creates its own signal (<a href=\"#s-2-8\">\u00a72.8<\/a>).<\/strong> <code>declarativeNetRequest<\/code> rules block <code>li\/track<\/code>, <code>sensorcollect<\/code>, <code>protechts<\/code>, and <code>merchantpool<\/code> (<code>rules.json<\/code>; UI toggle <code>killtracking<\/code>). Those rules sit in static JSON that anyone can read, and the resulting telemetry silence can become an anomaly.<\/li>\n\n\n\n<li><strong>The limits mix conservative and aggressive settings (<a href=\"#s-6\">\u00a76<\/a>).<\/strong> <code>maxinvites<\/code> defaults to a reasonable <strong>20\/day<\/strong>. The same UI raises <code>maxvisits<\/code> to <strong>500\/day<\/strong> and offers a \u201cTurbo\u201d scan of about <strong>10 pages\/minute<\/strong>, which is far beyond normal human browsing behavior.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"s-2\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2-The-Detection-Surface-What-LinkedIn-Can-See-Collect-and-Compare\"><\/span>2. The Detection Surface: What LinkedIn Can See, Collect, and Compare<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the technical core of the guide. For years, much of LinkedIn\u2019s detection logic could only be described from a defender&#8217;s experience. In 2026, the <a href=\"https:\/\/browsergate.eu\/how-it-works\/\">BrowserGate investigation<\/a> changed that by taking apart LinkedIn\u2019s production JavaScript, including one module of about 2.7 MB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That analysis found three systems working together inside LinkedIn\u2019s pages:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Active Extension Detection (AED)<\/strong> actively probes your browser for installed extensions (<a href=\"#s-2-1\">\u00a72.1<\/a>).<\/li>\n\n\n\n<li><strong>Spectroscopy<\/strong> passively scans the DOM for traces left by extensions (<a href=\"#s-2-2\">\u00a72.2<\/a>).<\/li>\n\n\n\n<li><strong>APFC\/DNA<\/strong> collects a 48-characteristic device fingerprint (<a href=\"#s-2-6\">\u00a72.6<\/a>).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Those signals feed into LinkedIn\u2019s telemetry pipeline, including the <code>li\/track<\/code> endpoint (<a href=\"#s-2-4\">\u00a72.4<\/a>). The extension scan runs in Chromium-based browsers, including Chrome, Edge, Brave, Opera, and Arc. BrowserGate found a literal <code>userAgent.indexOf(\"Chrome\")<\/code> (check) in the code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The target list also keeps growing. It went from <strong>38 extensions in 2017<\/strong> to about <strong>461 in 2024<\/strong>, then to <strong>4,934 in June 2026<\/strong>. That is a growth of roughly 12 new entries per day, which shows the list is maintained, not abandoned.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4,934 refers to unique Chrome extension IDs, while 6,167 refers to the broader list of ID-and-file probe targets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What follows is each detection vector: mechanism \u2192 what reaches LinkedIn&#8217;s servers \u2192 who it catches \u2192 how to check it yourself.<\/p>\n\n\n\n<h3 id=\"s-2-1\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"21-The-Extension-Scanner-AED-Installed-Can-Mean-Visible\"><\/span>2.1 The Extension Scanner (AED): Installed Can Mean Visible<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn\u2019s page code includes a hardcoded array of <code>{extension id, file}<\/code> pairs. These can include files such as logos, <code>popup.html<\/code>, <code>manifest.json<\/code>, or any resource the extension exposes through <code>web_accessible_resources<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The page silently runs <code>fetch()<\/code> calls against paths such as <code>chrome-extension:\/\/&lt;id&gt;\/&lt;file&gt;<\/code>. If the request succeeds, LinkedIn can tell that the extension is installed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The production details matter because the scan is designed to stay quiet:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It can run as a parallel volley of about 6,200 fetches through <code>Promise.allSettled<\/code>.<\/li>\n\n\n\n<li>It can also scan one by one with a configurable <code>staggerDetectionMs<\/code> delay, which makes it less obvious in the Network tab.<\/li>\n\n\n\n<li>It can wait for browser idle time through <code>requestIdleCallback<\/code>, so you do not feel lag.<\/li>\n\n\n\n<li>Errors are swallowed by empty <code>catch<\/code> blocks, so the console stays clean.<\/li>\n\n\n\n<li>Results leave as an <code>AedEvent {browserExtensionIds: [...]}<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If the extension is on LinkedIn\u2019s list, the fact that it is installed can be recorded on every visit before the user clicks anything.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can check this in about <strong>three minutes<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open <code>linkedin.com<\/code>, go to DevTools, then open Sources and search all loaded files for your extension\u2019s ID. You can find the ID in <code>chrome:\/\/extensions<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then open Network, filter by <code>li\/track<\/code>, and reload LinkedIn. You can watch the batched telemetry POSTs leave the page. A deeper check is to search LinkedIn\u2019s JavaScript bundles for <code>AedEvent<\/code> or <code>chrome-extension:\/\/<\/code>.<\/p>\n\n\n\n<h3 id=\"s-2-2\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"22-The-DOM-Spectroscope-The-Scanner-That-Does-Not-Need-a-List\"><\/span>2.2 The DOM Spectroscope: The Scanner That Does Not Need a List<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A second system scans the live page itself. It recursively walks <strong>the entire DOM<\/strong>, including text nodes and attribute values, looking for the substring <code>chrome-extension:\/\/<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When it finds that string, it extracts the 32-character extension ID and reports a <code>SpectroscopyEvent<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is different from AED because <strong>it doesn\u2019t need a target list<\/strong>. A new extension can still be detected if it injects an element, style, iframe, or script that points back to its own <code>chrome-extension:\/\/<\/code> resources.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Together, AED and Spectroscopy cover two common extension states.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>AED can detect<\/strong> an installed but silent extension.<\/li>\n\n\n\n<li><strong>Spectroscopy can detect<\/strong> an extension that actively modifies the LinkedIn page.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is the scanner that applies to the DOM automation model from <a href=\"#s-1-1\">\u00a71.1c<\/a>.<\/p>\n\n\n\n<h3 id=\"s-2-3\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"23-Page-Snapshots-From-a-Web-Worker\"><\/span>2.3 Page Snapshots From a Web Worker<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">At random moments, a background worker can collect a structural snapshot of the page. The snapshot includes tags without their text content, plus <code>script<\/code>\/<code>style<\/code> elements with content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The snapshot is encrypted and sent for <strong>server-side<\/strong> trace hunting. You cannot see what LinkedIn searches for because that search does not happen in your browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We know this mechanism from direct history. It is the algorithm that detected Linked Helper\u2019s first Chrome extension version in August 2019. The short-term fix was to make every user\u2019s extension copy structurally unique, which bought time. That experience is one reason Linked Helper left the Chrome Web Store and rebuilt as a standalone desktop application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We tell it as a fact of history. LinkedIn had this class of page-structure detection <strong>seven years<\/strong> before the current BrowserGate findings.<\/p>\n\n\n\n<h3 id=\"s-2-4\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"24-The-Telemetry-Pipeline-litrack\"><\/span>2.4 The Telemetry Pipeline: <code>li\/track<\/code><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The systems above converge on <code>https:\/\/www.linkedin.com\/li\/track<\/code>. The method name in the code is <code>fireTrackingPayload<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This endpoint receives behavioral events, such as mouse movement, clicks, and typing, along with scanner verdicts such as <code>AedEvent<\/code> and <code>SpectroscopyEvent<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The transport is engineered for reliability:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Events batch up to 29 per request.<\/li>\n\n\n\n<li>Failed requests retry up to 4 times.<\/li>\n\n\n\n<li>Payloads compress with Lempel-Ziv (LZ) compression through <code>compressToBase64<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sibling endpoints handle fingerprint data, including <code>\/platform-telemetry\/li\/apfcDf<\/code> and <code>\/apfc\/collect<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Remember these names because they return in <a href=\"#s-2-8\">\u00a72.8<\/a>. Extensions that try to block LinkedIn telemetry need to block the full set. Missing one endpoint can expose the blocking itself.<\/p>\n\n\n\n<h3 id=\"s-2-5\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"25-isTrusted-The-Click-Flag-a-Content-Script-Cannot-Normally-Flip\"><\/span>2.5 <code>isTrusted<\/code>: The Click Flag a Content Script Cannot Normally Flip<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Every DOM event carries a read-only <code>isTrusted<\/code> flag. A real human click returns <code>true<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An event created by an extension content script returns <code>false<\/code>. That includes <code>dispatchEvent<\/code>, <code>new MouseEvent<\/code>, and programmatic <code>.click()<\/code> calls. Through the normal extension API, our expert\u2019s point is direct: \u201c<em>you can\u2019t fake it. It\u2019s always false.<\/em>\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One precise caveat (so the claim survives scrutiny). Events generated through the <code>chrome.debugger<\/code> API can return <code>isTrusted:true<\/code>. But Chrome then shows a permanent yellow &#8220;this browser is being debugged by an extension&#8221; banner. The loophole exists, but it does not hide.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As of our expert\u2019s last direct knowledge, LinkedIn was not yet mass-enforcing on this flag. His comment was \u201c<em>a matter of time<\/em>.\u201d <strong>It costs LinkedIn one <code>if<\/code> statement.<\/strong><\/p>\n\n\n\n<h3 id=\"s-2-6\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"26-The-48-Point-Fingerprint-APFC-Your-Machines-Technical-Passport\"><\/span>2.6 The 48-Point Fingerprint (APFC): Your Machine\u2019s Technical Passport<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What-is-a-browser-fingerprint\"><\/span>What is a browser fingerprint?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">A browser fingerprint is a technical snapshot of your machine. It can include which GPU renders a test image, how your audio stack processes a signal, which fonts you have, your screen, CPU cores, random access memory (RAM), timezone, and other traits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each signal can look harmless on its own. Together, they can become close to unique. They are also hard to fake well because convincing spoofing requires reproducing another machine\u2019s quirks, not only changing a browser string.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn\u2019s production fingerprinting engine, internally named <code>APFC\/DNA<\/code>, collects 48 characteristics. The main groups are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hardware and operating system (OS):<\/strong> CPU cores, RAM, 6 screen metrics, touch, battery, and platform.<\/li>\n\n\n\n<li><strong>Graphics, audio, and fonts:<\/strong> canvas hash, WebGL vendor and renderer, 65 additional WebGL parameters, AudioContext oscillator and compressor response, and installed fonts.<\/li>\n\n\n\n<li><strong>Network:<\/strong> local IP through WebRTC, connection type, downlink, and round-trip time (RTT).<\/li>\n\n\n\n<li><strong>Environment:<\/strong> timezone measured in two ways, language, plugins, Multipurpose Internet Mail Extensions (MIME) types, cameras, microphones, speakers through <code>enumerateDevices<\/code>, and storage quirks.<\/li>\n\n\n\n<li><strong>Direct anti-bot signals:<\/strong> <code>webdriver<\/code>, automation framework detection, incognito mode, and a feature named <code>signals<\/code> that can flag spoofed OS, browser, resolution, or language combinations.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">One detail is worth calling out. Do Not Track is collected but excluded from the hash. In other words, LinkedIn records the preference, but it does not stop the broader fingerprinting flow described here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The snapshot is encrypted with RSA public-key encryption through <code>apfcDfPK<\/code>, stored in <code>globalThis.apfcDf<\/code>, and then attached as an HTTP header to later API requests in the session. BrowserGate references <code>SyncCollectionHandler<\/code> and the feature flag <code>sync.apfc.headers<\/code> for this behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That means the fingerprint is not sent once and forgotten. It can travel with the actions your session makes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates two major problems for cloud automation:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A cloud service that never collected your real fingerprint <strong>cannot reproduce it<\/strong>. As our expert put it, \u201c<em>to spoof it, you\u2019d first have to collect it<\/em>.\u201d<\/li>\n\n\n\n<li>Collecting some fingerprint data is not enough. You&#8217;d have to collect it <strong>the exact way LinkedIn does<\/strong> (&#8220;if they draw a different triangle, it&#8217;s a different hash&#8221;). And the <code>signals<\/code> lie-detector exists precisely because crude spoofing is already common enough to detect.<\/li>\n<\/ol>\n\n\n\n<h3 id=\"s-2-7\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"27-The-Request-Map-One-Action-Creates-Many-Requests\"><\/span>2.7 The Request Map: One Action Creates Many Requests<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open any LinkedIn profile with DevTools running, and you will see a group of requests fire together. A normal page visit can include markup, Voyager calls, telemetry, prefetches, and other supporting requests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An API-only tool can create a different shape. The profile data is accessed, but the surrounding profile page visit does not happen. As our expert described it, \u201c<em>the profile is accessed, but the profile page is never visited, the accompanying requests never fly<\/em>.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is a request-map anomaly. It can be visible from server-side logs alone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn also has several active options available: per-user endpoint renaming, special headers, and decoy requests served to fresh trial accounts. As noted in <a href=\"#s-2-6\">\u00a72.6<\/a>, the special fingerprint header already exists in production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An API-only cloud has two hard choices. It can try to <strong>forge that header<\/strong> without honestly collecting the fingerprint behind it, or it can <strong>send requests<\/strong> without the same browser-backed context. Both choices can leave a pattern.<\/p>\n\n\n\n<h3 id=\"s-2-8\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"28-Blocking-Telemetry-The-Anti-Detect-Setup-That-Can-Expose-Itself\"><\/span>2.8 Blocking Telemetry: The Anti-Detect Setup That Can Expose Itself<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Some extensions try to hide by blocking LinkedIn\u2019s detection and telemetry endpoints through the <code>webRequest<\/code> API. The weakness is that the blocklist has to be complete.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the extension misses one endpoint, that surviving endpoint can report that other telemetry paths are being blocked. Our expert called this \u201c<em>an outright ban signal.<\/em>\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The current list a blocker would need to cover, based on production code, includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>li\/track<\/code><\/li>\n\n\n\n<li><code>\/platform-telemetry\/li\/apfcDf<\/code><\/li>\n\n\n\n<li><code>\/apfc\/collect<\/code><\/li>\n\n\n\n<li><code>\/sensorCollect<\/code><\/li>\n\n\n\n<li>the <code>li.protechts.net<\/code> iframe<\/li>\n\n\n\n<li>the <code>merchantpool1.linkedin.com<\/code> script<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The longer that list becomes, the easier it is for LinkedIn to add one new endpoint before the extension\u2019s next release.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Manifest V3 adds an important detail. Blocking <code>webRequest<\/code> listeners are gone for public extensions, but declarative blocking through <code>declarativeNetRequest<\/code> still works.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For auditors, that makes inspection easier because the blocklist now sits in a static JSON file inside the extension package.<\/p>\n\n\n\n<h3 id=\"s-2-8a\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"28a-LinkedIns-External-Anti-Bot-Stack\"><\/span>2.8a LinkedIn\u2019s External Anti-Bot Stack<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LinkedIn does not rely only on its own JavaScript. It also loads external anti-bot and scoring systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The BrowserGate analysis identified three important pieces:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HUMAN Security, formerly PerimeterX:<\/strong> a hidden <code>0\u00d70<\/code> iframe from <code>li.protechts.net<\/code>, positioned at <code>left: -9999px<\/code> with <code>aria-hidden<\/code>, loaded with <code>uc=scraping<\/code> in the URL. Related cookies include <code>_px3<\/code> and <code>_pxvid<\/code>.<\/li>\n\n\n\n<li><strong>Merchant Pool:<\/strong> a second fingerprinting script from <code>merchantpool1.linkedin.com<\/code>, tied to the user\u2019s session cookie.<\/li>\n\n\n\n<li><strong>Google reCAPTCHA v3 Enterprise:<\/strong> invisible scoring on page load.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These systems switch on through internal feature flags such as <code>pemberly.tracking.*<\/code>. That means LinkedIn can test detection on user segments and increase coverage without changing the product flow users see.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the code-level confirmation of the expert&#8217;s old warning: &#8220;<em>nothing prevents them from implementing it at any moment.<\/em>&#8220;<\/p>\n\n\n\n<h3 id=\"s-2-9\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"29-IP-Geolocation-and-Parallel-Sessions\"><\/span>2.9 IP, Geolocation, and Parallel Sessions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One cookie active on two IPs at the same time (<a href=\"#s-1-2\">\u00a71.2a<\/a>) is one of the clearest network-level signals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IP geolocation is reliable enough to create risk signals. It is about <strong>80% accurate<\/strong> at the state level and gets the city right about two-thirds of the time. A user who appears in two states at once can therefore create a low-noise anomaly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloud proxy controls usually do not fully solve this. Many tools let users choose a country, not a state or city. Working in parallel, such as the user browsing locally while the cloud runs the same account from another region, adds the same kind of signal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our sign-up report in <a href=\"#s-1-2\">\u00a71.2<\/a> showed the practical problem. The IP assigned by the cloud was usually a data center address that an independent fraud database had already rated as high risk. IPQS fraud scores were 94 or higher in five of the six server-side tools.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The infrastructure was also shared. Dripify, Skylead, and We Connect are all routed through HostRoyale Technologies, ASN 203020, and Skylead handed <em>both<\/em> our test accounts the <em>same<\/em> IP on the <em>same<\/em> <code>\/24<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So \u201ca dedicated IP in your country\u201d may sound safer than it is. In our test, we often measured a flagged data center IP on shared infrastructure, and none of the tested tools checked the reputation of the IP before assigning it.<\/p>\n\n\n\n<h3 id=\"s-2-10\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"210-Timezone-and-Locale\"><\/span>2.10 Timezone and Locale<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Timezone and locale are smaller signals, but they still add context. As our expert put it, \u201c<em>a wrong timezone is one more point.<\/em>\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The fingerprint collects the timezone twice, using two methods. A partial spoof can therefore expose itself if the values do not match. It also collects system languages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A \u201cUS-based\u201d session running from a machine set to <em>UTC+5<\/em> with a mismatched locale is the kind of inconsistency the <code>signals<\/code> feature is built to flag.<\/p>\n\n\n\n<h3 id=\"s-2-11\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"211-The-Behavioral-Layer-Manual-Users-Can-Trigger-It-Too\"><\/span>2.11 The Behavioral Layer: Manual Users Can Trigger It Too<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The earlier sections focus on tool detection. This layer focuses on behavior, which is why manual LinkedIn users can also face restrictions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The main behavioral risks are easy to understand:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Volume:<\/strong> Historical observations from our expert\u2019s support load showed that about 500 invites per day could lead to restriction within about two weeks. Sending one connection request every 5 seconds could trigger a logout. Today\u2019s ceiling is lower because LinkedIn uses a rolling limit of about <strong>100 invites per week<\/strong> for most accounts, with up to about <strong>200 for aged, high-Social Selling Index (SSI)<\/strong> profiles and about <strong>250 with Sales Navigator<\/strong>.<\/li>\n\n\n\n<li><strong>How profiles are opened:<\/strong> Bulk pasting profile URLs can look like a scraper pattern. Arriving through name search looks more like a normal user flow. Mass URL opening is a documented restriction trigger, even when a person does it manually.<\/li>\n\n\n\n<li><strong>Recipient reactions:<\/strong> Acceptance rate matters, and so do \u201cI don\u2019t know this person\u201d reports. Even at an 80% acceptance rate, 400 invites per day leave 80 people per day deciding if they should ignore, reject, or report the request.<\/li>\n\n\n\n<li><strong>Parallel access from different countries:<\/strong> This connects back to <a href=\"#s-2-9\">\u00a72.9<\/a>. Using the account locally while a cloud service acts from another country can add network-level risk signals.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Architecture and behavior are separate layers. A cleaner setup can still create risk if the account behaves unrealistically, and manual work can still trigger restrictions when volume or patterns look automated.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"s-3\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3-It-Is-a-Scoring-Model-How-LinkedIn-Sanctions-Escalate\"><\/span>3. It Is a Scoring Model: How LinkedIn Sanctions Escalate<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">None of the detection signals in <a href=\"#s-2\">\u00a72<\/a> should be treated as a single on\/off switch. The expert framing fits what we found across the code, cloud tests, and behavior patterns: \u201cIt all works like a scoring model, every item adds points toward a ban.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That means LinkedIn does not need one perfect signal. It can compare many smaller signals across your browser, extension behavior, IP address, session history, and outreach patterns.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The sanctions ladder is well known among users who have hit enforcement:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Warning:<\/strong> LinkedIn may show a message that says \u201cyou may be using automation tools.\u201d<\/li>\n\n\n\n<li><strong>Temporary restriction:<\/strong> The account may be limited until you complete identity verification, such as SMS verification or ID upload.<\/li>\n\n\n\n<li><strong>Permanent ban:<\/strong> When LinkedIn shows \u201cLinkedIn Member\u201d instead of a name, that usually means the account no longer exists.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Risk builds across layers.<\/strong> An installed extension can add one signal (<a href=\"#s-2-1\">\u00a72.1<\/a>), code traces can add more (<a href=\"#s-2-2\">\u00a72.2<\/a>&#8211;<a href=\"#s-2-8\">\u00a72.8<\/a>), network anomalies can add another group (<a href=\"#s-2-9\">\u00a72.9<\/a>&#8211;<a href=\"#s-2-10\">\u00a72.10<\/a>), and account behavior can push the score further (<a href=\"#s-2-11\">\u00a72.11<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A lower-risk architecture does not protect reckless behavior.<\/strong> If you send too many invites, open profiles in bulk through URLs, or trigger too many \u201cI don\u2019t know this person\u201d reports, behavior alone can create restriction risk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The opposite case is even more important for tool choice.<\/strong> Careful behavior does not fix a risky architecture. Sending 15 invites per day will not remove the technical signals created when your session cookie is replayed from a data center in another country.<\/p>\n\n\n\n<h2 id=\"s-4\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4-The-5-Minute-Code-Audit-Checklist\"><\/span>4. The 5-Minute Code Audit Checklist<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You do not need to be a security researcher to do a first-pass audit of a Chrome extension. You can unpack the extension with a Chrome Extension package (CRX) viewer, or install it and inspect the local extension files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On macOS, installed Chrome extensions are commonly stored under <code>~\/Library\/Application Support\/Google\/Chrome\/Default\/Extensions\/<\/code>. Once you have the files, search for the patterns below.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the same audit logic behind the code claims in this report. Do not judge a permission alone. Trace what the value does and where it goes.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>#<\/th><th>What to Look For<\/th><th>What It Means<\/th><th>Risk<\/th><th>Real Example From Our Audits<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td><code>manifest.json<\/code> \u2192 permissions<\/td><td>Broad access can be suspicious, especially cookies for all sites. <em>(Manifest version itself is not a signal)<\/em><\/td><td>Depends<\/td><td>PhantomBuster: session cookies of 15 platforms (<code>background.js:5140-5230<\/code>)<\/td><\/tr><tr><td>2<\/td><td><code>host_permissions<\/code><\/td><td>Every domain your data could flow to, including third-party analytics domains.<\/td><td>Depends<\/td><td>&#8211;<\/td><\/tr><tr><td>3<\/td><td><code>content_scripts<\/code><\/td><td>The tool injects code into pages, which is required for the DOM automation model in <a href=\"#s-1-1\">\u00a71.1c<\/a>.<\/td><td>Medium<\/td><td>&#8211;<\/td><\/tr><tr><td>4<\/td><td><code>chrome.cookies.getAll\/get<\/code> + <code>li_at<\/code> \/ <code>JSESSIONID<\/code> \u2192 trace where the value is sent<\/td><td>If the value lands in a POST body to the vendor, you are looking at session upload, one of the highest-risk classes. Reading alone proves nothing, so judge by destination.<\/td><td>High<\/td><td>Waalaxy: <code>cookies.getAll<\/code> \u2192 <code>akatsuki\/cloudData<\/code>; Kaspr: <code>POST {li_a, li_at}<\/code> \u2192 <code>api.kaspr.io\/linkedin\/sync<\/code><\/td><\/tr><tr><td>5<\/td><td><code>credentials:\"same-origin\"<\/code> + <code>CSRF-token<\/code> + Voyager URLs<\/td><td>This usually means local scraping through the logged-in browser session. The session stays local, but the request pattern can still matter.<\/td><td>Medium<\/td><td>Octopus CRM: <code>fetch(voyager, {credentials:\"same-origin\", \"CSRF-token\":U()})<\/code><\/td><\/tr><tr><td>6<\/td><td>Direct calls to LinkedIn API endpoints, not only Voyager<\/td><td>The tool may create an unnatural request map because API activity appears without the normal page visit around it (<a href=\"#s-2-7\">\u00a72.7<\/a>).<\/td><td>Medium<\/td><td>&#8211;<\/td><\/tr><tr><td>7<\/td><td><code>webRequest<\/code> \/ <code>declarativeNetRequest<\/code> rules naming <code>li\/track<\/code>, <code>platform-telemetry<\/code>, <code>apfc<\/code>, <code>sensorCollect<\/code>, <code>protechts<\/code>, or <code>merchantpool<\/code><\/td><td>The tool may be blocking telemetry, which can create its own detection signal if any endpoint still reports back (<a href=\"#s-2-8\">\u00a72.8<\/a>).<\/td><td>High<\/td><td>Documented in the Waalaxy teardown<\/td><\/tr><tr><td>8<\/td><td><code>createElement<\/code> + <code>appendChild<\/code> inside LinkedIn pages<\/td><td>The tool injects UI or code into <code>linkedin.com<\/code>, which can create unique selectors visible to Spectroscopy (<a href=\"#s-2-2\">\u00a72.2<\/a>).<\/td><td>Medium<\/td><td>&#8211;<\/td><\/tr><tr><td>9<\/td><td><code>dispatchEvent<\/code>, <code>new MouseEvent<\/code>, <code>new KeyboardEvent<\/code>, or programmatic <code>.click()<\/code><\/td><td>These actions can create <code>isTrusted:false<\/code> events (<a href=\"#s-2-5\">\u00a72.5<\/a>).<\/td><td>Medium<\/td><td>&#8211;<\/td><\/tr><tr><td>10<\/td><td>Hardcoded LinkedIn request bodies or headers<\/td><td>The tool can break or start looking unusual if LinkedIn changes the API. The <code>apfc<\/code> header already rides real browser requests (<a href=\"#s-2-6\">\u00a72.6<\/a>).<\/td><td>Medium<\/td><td>Waalaxy: hardcoded invite request<\/td><\/tr><tr><td>11<\/td><td><code>manifest.json<\/code> \u2192 <code>web_accessible_resources<\/code><\/td><td>Each declared resource can become an AED target (<a href=\"#s-2-1\">\u00a72.1<\/a>). If the ID and file pair is on LinkedIn\u2019s 6,167-entry list, installation can be visible on every visit.<\/td><td>High<\/td><td>&#8211;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">When you write an audit verdict, keep the claim tied to the evidence. If the code shows a cookie being sent to a vendor domain, say that directly. If server-side behavior cannot be observed from outside, mark it as \u201chighly likely\u201d and explain the risk path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A useful template for writing up verdicts, borrowed from the expert: <em>&#8220;The extension serves as a bridge to pump out cookies and has no other purpose&#8221;<\/em> or, for clouds: <em>&#8220;the service highly likely operates via direct API calls; the risks are A, B, C.&#8221;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Accusation \\= code point. Everything else \\= &#8220;highly likely.&#8221;<\/p>\n\n\n\n<h2 id=\"s-5\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5-The-Master-Risk-Table\"><\/span>5. The Master Risk Table<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This table turns the findings into plain language. It shows the problem, what it threatens, and where we found or measured it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For server-side behavior, we mark the claim as \u201chighly likely\u201d because you cannot fully prove a cloud server\u2019s internal execution from the outside. We only state as fact what we found in code or measured directly during sign-up.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>#<\/th><th>Problem<\/th><th>In Plain Words<\/th><th>What It Threatens<\/th><th>Where Found<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Cookie-bridge or session upload<\/td><td>Your login session is copied to someone else\u2019s cloud.<\/td><td>The account can be driven from a foreign IP, and you may not see it in \u201cactive sessions.\u201d<\/td><td>In code: Waalaxy, Kaspr, Prospeo, Wiza, Surfe, Lemlist, HeyReach, Dux-Soup Cloud plan, Expandi connector<\/td><\/tr><tr><td>2<\/td><td>Full cookie-jar harvest across all sites<\/td><td>Sessions from other logged-in sites can leak, not only LinkedIn.<\/td><td>This creates account-compromise risk beyond LinkedIn.<\/td><td>In code: \u201cexpandi\u201d by Konnector (<code>expandi.ai<\/code>); PhantomBuster, 15 platforms, one-click<\/td><\/tr><tr><td>3<\/td><td>Direct LinkedIn API calls<\/td><td>The tool talks to LinkedIn internals without the page traffic around it.<\/td><td>It can create an unnatural request map (<a href=\"#s-2-7\">\u00a72.7<\/a>).<\/td><td>In code, local class: Octopus CRM, GetProspect, Findymail, Apollo, Dux-Soup Turbo\/Pro. Highly likely, cloud class: the cookie-bridge tools above, server-side<\/td><\/tr><tr><td>4<\/td><td>Blocking LinkedIn telemetry<\/td><td>The tool blocks LinkedIn trackers to hide activity.<\/td><td>One missed endpoint can report that other telemetry paths are being blocked (<a href=\"#s-2-8\">\u00a72.8<\/a>).<\/td><td>Documented in the Waalaxy teardown<\/td><\/tr><tr><td>5<\/td><td>Injecting UI or code into the page<\/td><td>Tool buttons or scripts live inside <code>linkedin.com<\/code>.<\/td><td>Spectroscopy and snapshot scanners can inspect those traces (<a href=\"#s-2-2\">\u00a72.2<\/a>&#8211;<a href=\"#s-2-3\">\u00a72.3<\/a>).<\/td><td>Expandi connector, <code>injected.js<\/code>, XMLHttpRequest (XHR) monkey-patch<\/td><\/tr><tr><td>6<\/td><td>Parallel IPs on one session<\/td><td>You and the cloud use the same cookie at the same time.<\/td><td>It creates a serious parallel-access signal (<a href=\"#s-2-9\">\u00a72.9<\/a>).<\/td><td>Consequence of row 1 by design<\/td><\/tr><tr><td>7<\/td><td>Login from vendor servers<\/td><td>A fresh session starts from the vendor\u2019s VPS.<\/td><td>The account inherits a foreign fingerprint, geography, and data center IP (<a href=\"#s-2-6\">\u00a72.6<\/a>, <a href=\"#s-2-9\">\u00a72.9<\/a>).<\/td><td>Highly likely: several cloud suites based on private vendor admissions; PhantomBuster documents this publicly<\/td><\/tr><tr><td>8<\/td><td>Programmatic clicks<\/td><td>The tool clicks inside your browser through code.<\/td><td>It can create <code>isTrusted:false<\/code> events (<a href=\"#s-2-5\">\u00a72.5<\/a>).<\/td><td>Every DOM automation tool by definition<\/td><\/tr><tr><td>9<\/td><td>Extension on LinkedIn\u2019s AED list<\/td><td>LinkedIn can know the extension is installed before you act.<\/td><td>It can become a standing entry in the account\u2019s risk profile (<a href=\"#s-2-1\">\u00a72.1<\/a>).<\/td><td>List of 6,167 targets. Check your tool\u2019s ID in <a href=\"#s-2-1\">\u00a72.1<\/a>. Confirmed example: Dux-Soup, <code>ppdakpfeaodfophjplfdedpcodkdkbal<\/code> + probe <code>fetchforwarder.js<\/code> in <code>detection_db.json<\/code><\/td><\/tr><tr><td>10<\/td><td>Flagged or shared cloud exit IP<\/td><td>The cloud places your account behind a flagged data center IP, sometimes shared across accounts or vendors.<\/td><td>Data center reputation and shared <code>\/24<\/code> patterns can add network risk (<a href=\"#s-2-9\">\u00a72.9<\/a>).<\/td><td>Measured in sign-up audit (<a href=\"#s-1-2\">\u00a71.2<\/a>): Skylead, same IP for both accounts; Dripify, HeyReach, We Connect, and Expandi flagged by IPQualityScore (IPQS); HostRoyale shared by 3 tools<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"s-6\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"6-How-to-Automate-More-Safely\"><\/span>6. How to Automate More Safely<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These benchmarks only make sense when the architecture is already clean. If your tool uses session upload, shared cloud infrastructure, or uncontrolled proxy setups, daily limits alone will not remove the technical risk described above.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use these checks before you run any LinkedIn automation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Keep invites around 15-20 per day.<\/strong> This matches what LinkedIn\u2019s rolling limit of about 100 invites per week allows. The older \u201c50-70 per day\u201d advice predates the weekly cap.<\/li>\n\n\n\n<li><strong>Withdraw pending invites every 3 weeks or so.<\/strong> A large pile of ignored invites can become its own negative signal.<\/li>\n\n\n\n<li><strong>Watch your acceptance rate.<\/strong> If acceptance drops, the problem is usually targeting or message fit, not only the daily limit.<\/li>\n\n\n\n<li><strong>Warm up profiles before automation.<\/strong> Use about a month of normal manual activity, a real photo, and a real employer before automating a newer or quiet account.<\/li>\n\n\n\n<li><strong>Open profiles through name search, not bulk URL pasting.<\/strong> As noted in <a href=\"#s-2-11\">\u00a72.11<\/a>, mass URL opening can restrict manual users too.<\/li>\n\n\n\n<li><strong>Use one IP per account with matching geography.<\/strong> Keep the same city or state where possible, and align timezone and locale with the account\u2019s normal location (<a href=\"#s-2-9\">\u00a72.9<\/a>&#8211;<a href=\"#s-2-10\">\u00a72.10<\/a>).<\/li>\n\n\n\n<li><strong>Do not run parallel sessions.<\/strong> Avoid using the account locally while a tool runs it from the cloud. Also, avoid two devices, two regions, or local plus cloud activity at the same time.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A lower-risk approach combines a cleaner architecture, stable session origin, realistic pacing, and behavior that looks like a normal LinkedIn member using the account.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"s-7\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"7-Why-Linked-Helper-Uses-a-Desktop-Architecture\"><\/span>7. Why Linked Helper Uses a Desktop Architecture<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Full-Disclosure\"><\/span>Full Disclosure<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This report is published by Linked Helper, so we should be direct about our own position. Our architecture comes from lessons we learned when the first version of Linked Helper was still a Chrome extension.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That experience showed us something important: every extension carries detection surfaces that standalone desktop software does not need to carry. We decided not to keep tuning an extension around those signals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.linkedhelper.com\/\">Linked Helper<\/a> was rebuilt as a standalone desktop application for Windows, macOS, and Ubuntu, with its own built-in browser engine. The point was to remove whole groups of signals from the architecture, not optimize around them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is how that choice maps to the risks covered in this report.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"No-Extension-Footprint\"><\/span>No Extension Footprint<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper is not a browser extension. There is no Chrome Web Store ID, no extension package installed into Chrome, and no extension resource for LinkedIn\u2019s AED scanner to probe (<a href=\"#s-2-1\">\u00a72.1<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also no code injected into LinkedIn pages. Extension interfaces, content scripts, buttons, and injected panels can become visible to Spectroscopy and page-snapshot analysis (<a href=\"#s-2-2\">\u00a72.2<\/a>&#8211;<a href=\"#s-2-3\">\u00a72.3<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper keeps campaign controls, queues, and dashboards inside the desktop app. The LinkedIn page is not modified with Linked Helper panels or extension scripts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"No-Cloud-Session-Handoff\"><\/span>No Cloud Session Handoff<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your LinkedIn session stays on your machine. Linked Helper does not upload <code>li_at<\/code>, <code>li_a<\/code>, cookie jars, browser storage, or session bundles to a vendor cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That removes several risk patterns discussed earlier in the report:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No remote browser acts on your behalf<\/li>\n\n\n\n<li>No cloud account farm runs your session<\/li>\n\n\n\n<li>No shared vendor exit infrastructure is assigned to your account<\/li>\n\n\n\n<li>No hidden cloud replay of your LinkedIn session is needed<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper also does not run LinkedIn automation through a separate API replay layer. Many cloud products depend on reproducing LinkedIn API traffic, which can create a request pattern that differs from a normal browser session.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper works through its own local browser engine instead. The actions happen in a browser environment on your machine, using your authenticated LinkedIn session and your IP address, or the proxy you assign.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Separate-Identity-for-Each-Account\"><\/span>Separate Identity for Each Account<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper separates browser identity by account. Running several LinkedIn accounts through one browser profile can create correlation signals, so each Linked Helper instance uses separate cookies, storage, and caches.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each instance can also generate its own browser fingerprint characteristics. That reduces the chance that several accounts appear to come from the exact same device setup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also wrong-account protection. If you try to log in to a different LinkedIn account into an existing instance, Linked Helper logs the current account out instead of silently mixing sessions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For teams or users managing several accounts, proxy control matters too. Linked Helper lets you assign one proxy per instance, so you control the network identity connected to each account.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is different from many cloud tools, where the vendor chooses the exit IP for you. Linked Helper also includes an integrated IP reputation checker based on IPQualityScore (IPQS) data, so you can evaluate proxy quality before running campaigns.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Behavior-Controls-Still-Matter\"><\/span>Behavior Controls Still Matter<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Architecture only reduces some technical risk signals. LinkedIn can also evaluate how the account behaves, so account behavior still matters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper includes controls that help you avoid obvious machine-like patterns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>In-page navigation:<\/strong> Linked Helper can search and click through LinkedIn\u2019s own interface instead of jumping straight through profile URLs.<\/li>\n\n\n\n<li><strong>Daily action limits:<\/strong> Conservative defaults help reduce unrealistic activity spikes.<\/li>\n\n\n\n<li><strong>Rolling 24-hour limits:<\/strong> Limits are measured across rolling windows, not only calendar days.<\/li>\n\n\n\n<li><strong>Randomized delays:<\/strong> Time between actions varies instead of repeating the same interval.<\/li>\n\n\n\n<li><strong>Randomized daily volumes and schedules:<\/strong> Campaign activity can change from day to day instead of repeating identical numbers.<\/li>\n\n\n\n<li><strong>Message variations:<\/strong> You can rotate several message versions so outreach does not look like one repeated template.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These controls do not make automation risk-free, they help you keep the account closer to normal LinkedIn behavior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The-Honest-Caveat\"><\/span>The Honest Caveat<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No vendor can promise complete safety, including Linked Helper. The behavioral layer described in this report evaluates humans and automation alike.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poor outreach, excessive volume, low acceptance rates, unusual account activity, and weak targeting can create risk no matter which software you use. A cleaner architecture reduces some technical signals, but it does not make reckless account behavior safe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The useful question is not \u201csafe or unsafe.\u201d The useful question is how many detectable signals the architecture exposes before your behavior is even counted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Helper is built to keep the session local, avoid extension and cloud-session handoff signals, isolate account identities, give you control over IP setup, and support more realistic pacing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to automate LinkedIn with more control over session origin, account identity, and daily behavior, <a href=\"https:\/\/linkedhelper.com\/member\/\">try Linked Helper free for 14 days<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"FAQs\"><\/span>FAQs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These answers summarize the main safety questions readers usually have after reviewing the report.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Can-LinkedIn-really-see-which-extensions-I-have-installed\"><\/span>Can LinkedIn really see which extensions I have installed?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, if your extension is on LinkedIn\u2019s AED target list and you use a Chromium-based browser. The list had 6,167 entries in this report\u2019s dataset, and the check can run silently on every page visit. See <a href=\"#s-2-1\">\u00a72.1<\/a> for the DevTools check.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The-tool-only-asked-me-to-%E2%80%9Csync-my-account%E2%80%9D-Is-that-cookie-upload\"><\/span>The tool only asked me to \u201csync my account.\u201d Is that cookie upload?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Very often, yes. Phrases like \u201cconnect via our extension,\u201d \u201cspecial login extension,\u201d or \u201csync\u201d can hide a session-transfer flow. In the 9 tools listed in <a href=\"#s-1-1\">\u00a71.1b<\/a>, the code behind those flows reads <code>li_at<\/code> and sends it to the vendor. Check your tool against <a href=\"#s-4\">\u00a74<\/a>, row 4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Will-I-get-banned-just-for-having-a-cookie-bridge-extension-installed\"><\/span>Will I get banned just for having a cookie-bridge extension installed?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nobody can promise that either way because LinkedIn enforcement appears to work as a scoring model. Cookie-bridge tools combine several high-risk signals at once: known extension ID (<a href=\"#s-2-1\">\u00a72.1<\/a>), one session on two IPs (<a href=\"#s-2-9\">\u00a72.9<\/a>), foreign fingerprint (<a href=\"#s-2-6\">\u00a72.6<\/a>), and an unnatural request map (<a href=\"#s-2-7\">\u00a72.7<\/a>). In our architecture map, that creates the widest risk surface.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Is-there-a-truly-safe-daily-invite-limit\"><\/span>Is there a truly safe daily invite limit?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No number is safe in isolation. A realistic benchmark is 15-20 invites per day within LinkedIn\u2019s rolling limit of about 100 invites per week, with pending invites withdrawn regularly. Limits live in the behavioral layer, while architecture signals score separately (<a href=\"#s-3\">\u00a73<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"I-do-everything-manually-Am-I-safe\"><\/span>I do everything manually. Am I safe?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Manual work is safer than automation in some cases, but it is not restriction-proof. Mass URL opening, high outreach volume, and too many \u201cI don\u2019t know this person\u201d reports can restrict manual accounts too (<a href=\"#s-2-11\">\u00a72.11<\/a>). Manual work does not remove restriction risk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A-cloud-tool-gave-me-a-%E2%80%9Cdedicated-IP-in-my-country%E2%80%9D-Does-that-solve-the-risk\"><\/span>A cloud tool gave me a \u201cdedicated IP in my country.\u201d Does that solve the risk?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It addresses one signal, not the full architecture. Country-level IP control is weaker than state or city consistency, and geolocation can be reliable enough to expose mismatches (<a href=\"#s-2-9\">\u00a72.9<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In our cloud sign-up audit (<a href=\"#s-1-2\">\u00a71.2<\/a>), most assigned IPs were data center or proxy addresses already rated high-risk by an independent fraud database. One tool gave two accounts the same IP, and none of the tested tools let users check that IP\u2019s reputation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fingerprint, request map, and login origin risks still remain. We also mark server-side execution as \u201chighly likely\u201d where we cannot observe it directly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Does-using-Firefox-or-incognito-help\"><\/span>Does using Firefox or incognito help?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It can reduce exposure to the Chromium-specific AED and Spectroscopy scan code described in <a href=\"#s-2\">\u00a72<\/a>. But it does not remove behavior signals, IP and geolocation checks, server-side request analysis, or your account history.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How-do-I-audit-a-tool-I-already-use\"><\/span>How do I audit a tool I already use?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use the 5-minute checklist in <a href=\"#s-4\">\u00a74<\/a>. If you find <code>li_at<\/code> traveling to a vendor domain, that is not just an integration. It means your session is leaving your browser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Methodology-Note\"><\/span>Methodology Note<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Static analysis was performed on publicly distributed extension packages in May-June 2026. The cloud sign-up audit tested 7 tools with 2 accounts each in June 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Versions change, and vendors ship updates. The classifications in this report reflect the code we read and the IPs we were assigned during testing. File references, line references, exit IPs, IP reputation, and companion-extension scan-list status are available where measured.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A server\u2019s internal behavior is marked \u201chighly likely\u201d throughout the report because we cannot prove every server-side execution method from the outside. We only state as fact what we can show in code or measure directly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide is the map. Each per-brand teardown provides deeper evidence, and the Dux-Soup example in <a href=\"#s-1\">\u00a71<\/a> shows how one product can combine several architectural patterns across different plans. Linked Helper is not affiliated with, endorsed by, or an official partner of LinkedIn.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_77 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #fba02f;color:#fba02f\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #fba02f;color:#fba02f\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#TLDR-9-Things-to-Know-Before-You-Install-Anything\" >TL;DR 9 Things to Know Before You Install Anything<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Why-You-Can-Trust-This-Report\" >Why You Can Trust This Report<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Why-Account-Safety-Is-the-Main-Issue\" >Why Account Safety Is the Main Issue<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#1-The-Architectures-Behind-LinkedIn-Automation-Risk\" >1. The Architectures Behind LinkedIn Automation Risk<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#11-Browser-Extensions-That-Run-Inside-Your-Browser\" >1.1 Browser Extensions That Run Inside Your Browser<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#a-Local-Scraping-Through-Your-Own-Session\" >a) Local Scraping Through Your Own Session<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#b-Cookie-Bridge-or-Session-Upload-Extensions\" >b) Cookie-Bridge or Session-Upload Extensions<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Expandi-The-Most-Interesting-Case-in-the-Dataset\" >Expandi The Most Interesting Case in the Dataset<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Technique-1-Inject-a-Script-Into-LinkedIns-Page-Context\" >Technique 1 Inject a Script Into LinkedIn\u2019s Page Context<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Technique-2-Monkey-Patch-XMLHttpRequestprototypesend\" >Technique 2 Monkey-Patch XMLHttpRequest.prototype.send<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Technique-3-Send-a-Separate-Voyager-GraphQL-Email-Call\" >Technique 3 Send a Separate Voyager GraphQL Email Call<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#The-Most-Serious-Finding-Some-Extensions-Collect-More-Than-LinkedIn-Data\" >The Most Serious Finding Some Extensions Collect More Than LinkedIn Data<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#PhantomBuster-Example\" >PhantomBuster Example<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#c-DOM-Automation-Inside-the-LinkedIn-Page\" >c) DOM Automation Inside the LinkedIn Page<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#12-Cloud-Services-That-Run-on-Vendor-Servers\" >1.2 Cloud Services That Run on Vendor Servers<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#a-Cookie-Replay-Through-a-Synced-Session\" >a) Cookie Replay Through a Synced Session<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#b-Fresh-Login-on-the-Vendor-Side\" >b) Fresh Login on the Vendor Side<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#What-the-Cloud-Does-Next-API-Only-vs-Emulated-Browser\" >What the Cloud Does Next API-Only vs. Emulated Browser<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#What-We-Measured-When-We-Signed-Up-7-Tools-2-Accounts-Each\" >What We Measured When We Signed Up (7 Tools, 2 Accounts Each)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#What-Is-IPQualityScore-IPQS\" >What Is IPQualityScore (IPQS)?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Cloud-Sign-Up-Test-Results\" >Cloud Sign-Up Test Results<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#What-the-Table-Shows\" >What the Table Shows<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#13-Browser-Based-Tools-That-Control-a-Full-Browser\" >1.3 Browser-Based Tools That Control a Full Browser<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Cloud-Browser-Based-Tools\" >Cloud Browser-Based Tools<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Desktop-Standalone-Tools\" >Desktop Standalone Tools<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Worked-Example-Dux-Soup-Uses-Several-Patterns-in-One-Package\" >Worked Example Dux-Soup Uses Several Patterns in One Package<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#2-The-Detection-Surface-What-LinkedIn-Can-See-Collect-and-Compare\" >2. The Detection Surface What LinkedIn Can See, Collect, and Compare<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#21-The-Extension-Scanner-AED-Installed-Can-Mean-Visible\" >2.1 The Extension Scanner (AED) Installed Can Mean Visible<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#22-The-DOM-Spectroscope-The-Scanner-That-Does-Not-Need-a-List\" >2.2 The DOM Spectroscope The Scanner That Does Not Need a List<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#23-Page-Snapshots-From-a-Web-Worker\" >2.3 Page Snapshots From a Web Worker<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#24-The-Telemetry-Pipeline-litrack\" >2.4 The Telemetry Pipeline li\/track<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#25-isTrusted-The-Click-Flag-a-Content-Script-Cannot-Normally-Flip\" >2.5 isTrusted The Click Flag a Content Script Cannot Normally Flip<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#26-The-48-Point-Fingerprint-APFC-Your-Machines-Technical-Passport\" >2.6 The 48-Point Fingerprint (APFC) Your Machine\u2019s Technical Passport<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#What-is-a-browser-fingerprint\" >What is a browser fingerprint?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#27-The-Request-Map-One-Action-Creates-Many-Requests\" >2.7 The Request Map One Action Creates Many Requests<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#28-Blocking-Telemetry-The-Anti-Detect-Setup-That-Can-Expose-Itself\" >2.8 Blocking Telemetry The Anti-Detect Setup That Can Expose Itself<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#28a-LinkedIns-External-Anti-Bot-Stack\" >2.8a LinkedIn\u2019s External Anti-Bot Stack<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#29-IP-Geolocation-and-Parallel-Sessions\" >2.9 IP, Geolocation, and Parallel Sessions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#210-Timezone-and-Locale\" >2.10 Timezone and Locale<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#211-The-Behavioral-Layer-Manual-Users-Can-Trigger-It-Too\" >2.11 The Behavioral Layer Manual Users Can Trigger It Too<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#3-It-Is-a-Scoring-Model-How-LinkedIn-Sanctions-Escalate\" >3. It Is a Scoring Model How LinkedIn Sanctions Escalate<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#4-The-5-Minute-Code-Audit-Checklist\" >4. The 5-Minute Code Audit Checklist<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#5-The-Master-Risk-Table\" >5. The Master Risk Table<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#6-How-to-Automate-More-Safely\" >6. How to Automate More Safely<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#7-Why-Linked-Helper-Uses-a-Desktop-Architecture\" >7. Why Linked Helper Uses a Desktop Architecture<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Full-Disclosure\" >Full Disclosure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#No-Extension-Footprint\" >No Extension Footprint<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#No-Cloud-Session-Handoff\" >No Cloud Session Handoff<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Separate-Identity-for-Each-Account\" >Separate Identity for Each Account<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Behavior-Controls-Still-Matter\" >Behavior Controls Still Matter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#The-Honest-Caveat\" >The Honest Caveat<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#FAQs\" >FAQs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Can-LinkedIn-really-see-which-extensions-I-have-installed\" >Can LinkedIn really see which extensions I have installed?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#The-tool-only-asked-me-to-%E2%80%9Csync-my-account%E2%80%9D-Is-that-cookie-upload\" >The tool only asked me to \u201csync my account.\u201d Is that cookie upload?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Will-I-get-banned-just-for-having-a-cookie-bridge-extension-installed\" >Will I get banned just for having a cookie-bridge extension installed?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Is-there-a-truly-safe-daily-invite-limit\" >Is there a truly safe daily invite limit?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#I-do-everything-manually-Am-I-safe\" >I do everything manually. Am I safe?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#A-cloud-tool-gave-me-a-%E2%80%9Cdedicated-IP-in-my-country%E2%80%9D-Does-that-solve-the-risk\" >A cloud tool gave me a \u201cdedicated IP in my country.\u201d Does that solve the risk?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Does-using-Firefox-or-incognito-help\" >Does using Firefox or incognito help?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#How-do-I-audit-a-tool-I-already-use\" >How do I audit a tool I already use?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-61\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/#Methodology-Note\" >Methodology Note<\/a><\/li><\/ul><\/nav><\/div>\n","protected":false},"excerpt":{"rendered":"<p>We analyzed 16 LinkedIn automation extensions to see what they do with sessions, cookies, browser calls, and vendor servers. We also signed up for 7 cloud services with two accounts each, then checked the exit Internet Protocol (IP) addresses they assigned against an independent fraud-reputation database. The third part of the research looked at LinkedIn\u2019s &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.linkedhelper.com\/blog\/linkedin-automation-security-study\/\"> <span class=\"screen-reader-text\">How LinkedIn Catches Automation: Code Findings From 16 Extensions, Cloud Tests, and LinkedIn\u2019s Detection Engine<\/span> Read More \u00bb<\/a><\/p>\n","protected":false},"author":33,"featured_media":29295,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[111],"tags":[],"ppma_author":[3777],"class_list":["post-29256","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linkedin-guides"],"aioseo_notices":[],"lang":"en","translations":{"en":29256},"authors":[{"term_id":3777,"user_id":33,"is_guest":0,"slug":"ryan-frawley","display_name":"Ryan Frawley","avatar_url":{"url":"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/Ryan.webp","url2x":"https:\/\/www.linkedhelper.com\/blog\/wp-content\/uploads\/2026\/06\/Ryan.webp"},"author_category":"1","first_name":"Ryan","last_name":"Frawley","user_url":"https:\/\/www.linkedin.com\/in\/ryanfrawley\/","job_title":"B2B Content Strategist","description":"<span style=\"font-weight: 400\">At Linked Helper, he contributes articles on LinkedIn automation, outreach strategy, lead generation, and B2B sales tools, helping turn technical product topics into clear, practical content for sales and marketing teams. <\/span>"}],"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/posts\/29256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/comments?post=29256"}],"version-history":[{"count":14,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/posts\/29256\/revisions"}],"predecessor-version":[{"id":29335,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/posts\/29256\/revisions\/29335"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/media\/29295"}],"wp:attachment":[{"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/media?parent=29256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/categories?post=29256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/tags?post=29256"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.linkedhelper.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=29256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}