Experiment Preferences jobs-apply

A click-and-verify loop that checks modal state after each click strategy will fix the modal-never-opening problem and push LinkedIn Easy Apply success rate above 80%

5/6 = 83% success. All 6 attempts opened modal on strategy 1 (first try). 1 failure: Save Application dialog blocked advancement.

linkedineasy-applyratchetcareer
Hypothesis

A click-and-verify loop that checks modal state after each click strategy will fix the modal-never-opening problem and push LinkedIn Easy Apply success rate above 80%

Result: confirmed
Key Findings

5/6 = 83% success. All 6 attempts opened modal on strategy 1 (first try). 1 failure: Save Application dialog blocked advancement.

Changelog

DateSummary
2026-04-06Audited: added Changelog, domain tag career, stamped last_audited
2026-03-29Initial creation

Hypothesis

The modal-never-opening bug (F39) was caused by three click strategies firing sequentially with no modal check between them. If click 1 opened the modal, clicks 2 and 3 would interfere: clicking behind the modal, triggering discard dialogs, or closing it entirely. Modal detection ran only once at the end, after all the damage was done. A click-and-verify loop that checks modal state after each individual strategy would ensure each click gets a clean shot, and should push the LinkedIn Easy Apply success rate above 80%.

Method

Replaced the multi-click approach in easy-apply.ts with a sequential click-and-verify loop. The new flow for each Easy Apply attempt:

  1. Click strategy N (direct button click, text-based locator, [[definitions/chrome-devtools-protocol|CDP]] click, etc.)
  2. Wait 2.5 seconds for LinkedIn animation to complete
  3. Dismiss any blocking dialogs (Save Application, Job Search Safety Reminder, etc.)
  4. Check modal state via CDP DOM.getDocument({ pierce: true }) to detect if the Easy Apply modal is now open
  5. If modal is open, proceed to form filling; if not, try strategy N+1

This replaced the previous approach where all three strategies fired in sequence, then a single modal check ran at the end. The key insight was that LinkedIn’s animation timing means a successful click needs 2-3 seconds before the modal is visible in the DOM.

Additionally, the advance-and-retry pattern was deployed for multi-page forms: click Next, check if the page advanced, and if not, dismiss any blocking dialogs and retry.

Results

  • 5/6 LinkedIn submissions successful (83%)
  • 2/2 Greenhouse submissions successful (100%)
  • All 6 LinkedIn attempts opened the Easy Apply modal on strategy 1 (first try), confirming that the direct click works 100% of the time when given proper wait time
  • 4/5 multi-page forms navigated successfully via the advance-and-retry pattern (Next, Next, Next, Review, Submit)
  • 1 failure: “Save this application?” dialog blocked form advancement. The dialog appeared between pages and was not dismissed before the next advance attempt
  • Safety rail auto-paused after 3 submissions in 30 minutes (anti-detection working as designed)

Findings

  1. The click-and-verify pattern is fundamentally sound. Strategy 1 (direct click on the Easy Apply button) achieved 100% modal open rate once given a proper 2.5s animation wait. The previous multi-click approach was self-sabotaging: the very mechanism meant to increase reliability was the cause of the failures.

  2. Failures have shifted from click-level to form-level. With modal opening now reliable, the remaining failure was inside the form: a dialog blocking advancement, not a click failing to register. This represents a qualitative shift in the failure surface from infrastructure to interaction.

  3. The advance-and-retry pattern handles multi-page forms well. 4/5 multi-page forms (Contact, Screening, Review, Submit) navigated successfully. The pattern of click-wait-check-retry mirrors the click-and-verify loop and uses the same principle: verify outcome before proceeding.

  4. Safety rail timing is appropriate. The 3-submission-per-30-minute cap triggered as expected, proving that the anti-detection pacing from the previous experiment (iteration 2) integrates correctly with the new click flow.

Next Steps

Fix the three remaining failure patterns identified during this run:

  • F40: Silent modal failure where the Easy Apply button click does not register under certain viewport conditions (scroll-dependent)
  • F41: Verification false negative where submit is clicked but confirmation cannot be detected
  • F42: Stuck screening questions where required fields block the Next button

These are tracked in the failure catalog and targeted for the next iteration.