Systematic fix of individual failure points will drive LinkedIn Easy Apply submission rate above 80%
7 runs, 40% to 83% final. 26 individual failure fixes (F1-F39). Account restriction in Run 6 was the critical learning. Run 7 modal detection loop (3s
HypothesisSystematic fix of individual failure points will drive LinkedIn Easy Apply submission rate above 80%
7 runs, 40% to 83% final. 26 individual failure fixes (F1-F39). Account restriction in Run 6 was the critical learning. Run 7 modal detection loop (3s initial + 4s DOM check, two-attempt strategy) achieved Strategy-1: 100% success rate.

Changelog
| Date | Summary |
|---|---|
| 2026-04-06 | Audited: added Changelog, domain tag career, stamped last_audited |
| 2026-03-15 | Initial creation |
Hypothesis
-v4.png](/definitions/karpathy-ratchet)
Systematic fix of individual failure points will drive LinkedIn Easy Apply submission rate above 80%. The LinkedIn Easy Apply flow involves multiple DOM interactions (clicking Apply, navigating multi-step modals, uploading resumes, answering screening questions, and submitting): each of which can fail independently. By identifying and fixing failures one at a time in a ratchet pattern, the compound success rate should climb monotonically.
Method

Seven runs were executed over March 15-29, 2026. Each run consisted of a batch of Easy Apply submissions with all failures logged and categorized. Between runs, targeted fixes were deployed for the highest-frequency failure modes.
Run-by-run progression:
| Run | Date | Submissions | Success Rate | Key Changes |
|---|---|---|---|---|
| 7 | Mar 29 | 6 | 83% (5/6) | Easy Apply click rewrite, modal detection loop, safety rail |
| 6 | Mar 25 | ~20 | 29% | Shadow DOM + [[[definitions/chrome-devtools-protocol |
| 5 | Mar 24 | 60 | 51.66% | 13-fix deployment (F14-F26), higher volume exposed new failures |
| 4 | Mar 22 | 32 | 78.1% | Broad fix deployment (12 fixes), resume upload fix |
| 3 | Mar 19 | ~30 | 25% | Multi-channel architecture introduced: regression |
| 2 | Mar 17 | ~25 | 40% | Minor selector fixes, still baseline-level |
| 1 | Mar 15 | ~20 | 40% | Baseline: first automated Easy Apply attempt |
Fix categories (F1-F39): Selector drift (F1-F5), modal state detection (F6-F11), resume upload race conditions (F12-F13), screening question parsing (F14-F20), multi-step navigation (F21-F26), shadow DOM traversal (F27-F30), timing and wait conditions (F31-F35), error recovery (F36-F39).
Run 3’s regression was caused by the multi-channel refactor introducing shared browser state between LinkedIn and Direct channels. This was isolated in Run 4 by giving each channel its own Chrome process and cloned user profile via CDP.
Run 5 increased volume from ~30 to 60 submissions, which exposed new failure modes at scale that had not appeared in smaller batches: particularly around screening question diversity and multi-page form navigation.
Run 6 deployed shadow DOM piercing via DOM.getDocument({ pierce: true }) for undetectable DOM access within LinkedIn’s closed shadow roots. The code was correct, but the behavioral pattern (rapid submissions without human-like pauses) triggered LinkedIn’s detection system and the account was restricted.
Run 7 deployed after the anti-detection suite (experiment 002) with a completely rewritten Easy Apply click path: modal detection loop with 3s initial wait + 4s DOM mutation check, and a two-attempt strategy where Strategy-1 (direct click) runs first with Strategy-2 (fallback navigation) as backup. A safety rail auto-pauses after 3 submissions within any 30-minute window.
Results

Confirmed. Final submission rate of 83% (5/6) in Run 7 exceeds the 80% target. The trajectory was non-monotonic due to the multi-channel regression (Run 3) and account restriction (Run 6), but the overall trend from 40% to 83% validates the ratchet approach.
Strategy-1 (direct modal click) achieved 100% success rate in Run 7: Strategy-2 was never needed. The safety rail correctly limited throughput, which was the key lesson from Run 6: behavioral plausibility matters more than code correctness.
All-time LinkedIn submission record: 105 submissions across 384 attempts (27.3%). The low all-time rate reflects the learning curve of Runs 1-6; Run 7 represents the operational baseline going forward.
Findings

-
Non-monotonic progress is normal. The Run 3 regression (40% to 25%) and Run 6 collapse (to 29%) were both caused by architectural changes that introduced new failure modes. Ratchets work on individual metrics, but system-level changes can reset the baseline.
-
Volume exposes hidden failures. Run 4’s 78.1% at 32 submissions dropped to 51.66% at 60 submissions in Run 5. Small sample sizes mask long-tail failure modes. Always test at production volume.
-
Account restriction was the most valuable failure. Run 6’s restriction forced the creation of the entire anti-detection suite (experiment 002) and fundamentally changed the architecture from “submit as fast as possible” to “submit like a human.” This constraint improved both safety and reliability.
-
Modal detection is the critical path. The Easy Apply modal’s appearance timing is variable (1-5s depending on page load, network conditions, and LinkedIn A/B tests). The 3s initial + 4s DOM mutation check pattern solved the timing problem without using fragile fixed waits.
-
26 fixes across 39 failure IDs. Many failure IDs were duplicates or variants of the same [[definitions/root-cause-analysis|root cause]]. The actual fix count (26) is lower than the failure ID count (39) because some fixes resolved multiple failure modes simultaneously.
Next Steps

With submission rate at 83%, the bottleneck shifted from “can we submit?” to “can we submit without getting detected?” This led directly to experiments/jobs-apply/2026-03-25-linkedin-anti-detection-suite. The remaining P2 items (smart form filling for screening questions, extraction optimization) are deferred until the anti-detection foundation is stable.