A multi-iteration anti-detection suite (gaussian timing, reading simulation, mouse movement, session pacing) will prevent LinkedIn account restriction
HypothesisA multi-iteration anti-detection suite (gaussian timing, reading simulation, mouse movement, session pacing) will prevent LinkedIn account restriction
Account unrestricted since 2026-03-26. Run 7 (2026-03-29) achieved 83% with all anti-detection measures active. P0-P1 (iterations 1-6) complete. Safety rail working correctly.
Changelog
| Date | Summary |
|---|---|
| 2026-04-06 | Audited: added Changelog, domain tag career, stamped last_audited |
| 2026-03-25 | Initial creation |
Hypothesis

A multi-iteration anti-detection suite covering gaussian timing, reading simulation, mouse movement, and session pacing will prevent LinkedIn account restriction. The account restriction in Run 6 (experiment 001) demonstrated that LinkedIn’s detection system operates on behavioral signals rather than technical fingerprinting: the CDP-based shadow DOM access was undetectable, but the submission pattern (rapid-fire, no reading, no mouse movement) was flagged.
Method

A 10-iteration remediation plan was designed with three priority tiers. Iterations 1-6 (P0-P1) were deployed between March 25-29, 2026. Iterations 7-10 (P2) are deferred.
Iteration 1: Gaussian timing distributions
Replaced all fixed waitForTimeout(ms) calls with gaussian-distributed random delays. Parameters: mean = target delay, stddev = 0.3x mean, min clamp = 0.4x mean, max clamp = 2.0x mean. Applied to: page navigation waits, click delays, form field entry pauses, scroll intervals. Total: 47 timing points converted.
Iteration 2: Job description reading simulation Added a 20-40s dwell time on each job description page before clicking Easy Apply. The dwell includes: initial scroll to job details (1-2s), progressive scroll through description (variable speed, 50-150px/scroll, 200-800ms intervals), pause at key sections (requirements, qualifications, salary), and occasional scroll-back behavior (15% probability per scroll). This simulates a candidate actually reading the posting.
Iteration 3: Bezier mouse movement and hover patterns
Replaced instant page.click() calls with Bezier curve mouse movements. Each click now involves: move from current position to target via a randomized cubic Bezier curve (2-4 control points), with velocity that starts slow, accelerates, and decelerates near the target. Hover events fire at intermediate positions. Occasional overshoot-and-correct behavior (10% probability). Movement duration: 200-600ms per click target.
Iteration 4: Session pacing and submission limits Implemented hard session constraints: 8min +/- 3min (gaussian) inter-submission delay, maximum 10 submissions per session, session duration cap of 90 minutes. Between submissions, the agent browses non-job pages (feed, messages, notifications) for 30-60s to simulate normal LinkedIn usage. The safety rail auto-pauses after 3 submissions in any 30-minute window as a hard stop.
Iteration 5: Dead code removal Removed 230 lines of dead code from the LinkedIn channel implementation. This included: abandoned selector strategies from Runs 1-3, unused Playwright-era helper functions, commented-out debug logging, and stale type definitions. No behavioral change, but reduced maintenance surface and eliminated potential confusion for future modifications.
Iteration 6: Bug fixes Fixed 4 bugs discovered during iterations 1-4 deployment: (1) gaussian distribution occasionally producing negative delays due to insufficient clamping, (2) Bezier mouse movement not accounting for iframe offsets in shadow DOM elements, (3) session pacing timer not resetting between sessions, (4) reading simulation scroll speed not adapting to job description length (short descriptions got unnaturally long dwell times).
Iterations 7-10 (P2, deferred):
- I7: Smart form filling (natural typing cadence for screening questions)
- I8: Extraction optimization (reduce DOM queries per page)
- I9: SessionPersonality (vary behavior patterns across sessions)
- I10: Monitoring dashboard (real-time detection risk scoring)
Results

Confirmed. The account was unrestricted on 2026-03-26, one day after the restriction. Iterations 1-4 were deployed before Run 7 on 2026-03-29, which achieved 83% session success (5/6) with zero detection signals. The safety rail correctly limited submissions to 3 within the 30-minute window, preventing the high-volume pattern that triggered the original restriction.
Key metrics from Run 7 with anti-detection active:
- Session success rate: 83% (5/6)
- Average dwell time per job: 28.4s (target: 20-40s)
- Average inter-submission gap: 9.2min (target: 8 +/- 3min)
- Mouse movement naturalness: no detection signals
- Account health: no warnings, no restrictions
Findings

-
Behavioral detection dominates technical detection. LinkedIn did not detect CDP usage, shadow DOM piercing, or automation frameworks. The restriction was triggered purely by behavioral signals: submission velocity, absence of reading behavior, and lack of mouse movement. This means the anti-detection investment should focus on behavioral mimicry rather than fingerprint evasion.
-
Gaussian timing is the highest-ROI fix. Iteration 1 alone would likely have prevented the restriction. Fixed delays create detectable patterns (exactly 2000ms between every action); gaussian distributions are indistinguishable from human timing variance.
-
Reading simulation serves dual purpose. The 20-40s dwell time not only avoids detection but also gives the scoring system time to evaluate the job before committing to submission. This was an unintended benefit that improved application quality.
-
The safety rail is load-bearing. The 3-submissions-per-30-minutes hard stop is the most important single control. Even if all other anti-detection measures fail, the safety rail prevents the high-frequency pattern that LinkedIn’s system is clearly tuned to detect.
-
Dead code removal (I5) prevented a bug. One of the removed dead code paths had a stale selector that would have been accidentally invoked by a new feature branch. Cleanup is not just hygiene: it is preventive maintenance.
Next Steps

P0-P1 complete and stable. P2 iterations (7-10) are deferred until the current system shows signs of detection pressure. The immediate priority shifted to scoring quality (experiments/jobs-apply/2026-03-26-jscore-v2-scoring) since the submission pipeline is now reliable. SessionPersonality (I9) is the most impactful remaining P2 item: varying behavior across sessions would make long-term pattern detection significantly harder.