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%

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