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%
HypothesisA 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.
Changelog
| Date | Summary |
|---|---|
| 2026-04-06 | Audited: added Changelog, domain tag career, stamped last_audited |
| 2026-03-29 | Initial 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:
- Click strategy N (direct button click, text-based locator, CDP click, etc.)
- Wait 2.5 seconds for LinkedIn animation to complete
- Dismiss any blocking dialogs (Save Application, Job Search Safety Reminder, etc.)
- Check modal state via CDP
DOM.getDocument({ pierce: true })to detect if the Easy Apply modal is now open - 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

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