Experiment Preferences jobs-apply

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

linkedinratchetsubmission-ratecareer
Hypothesis

Systematic fix of individual failure points will drive LinkedIn Easy Apply submission rate above 80%

Result: confirmed
Key Findings

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

DateSummary
2026-04-06Audited: added Changelog, domain tag career, stamped last_audited
2026-03-15Initial 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:

RunDateSubmissionsSuccess RateKey Changes
7Mar 29683% (5/6)Easy Apply click rewrite, modal detection loop, safety rail
6Mar 25~2029%Shadow DOM + [[[definitions/chrome-devtools-protocol
5Mar 246051.66%13-fix deployment (F14-F26), higher volume exposed new failures
4Mar 223278.1%Broad fix deployment (12 fixes), resume upload fix
3Mar 19~3025%Multi-channel architecture introduced: regression
2Mar 17~2540%Minor selector fixes, still baseline-level
1Mar 15~2040%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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.