2026-06-21 · Morgan Ellis · 837 words
Captchas are a stop sign
Distinct from the captcha-solver commercial page. Here a captcha stops collection. It is not a feature request and not a solver bake-off. Authorized work only.

A captcha stops collection. That is the whole page. It is not a feature request and not a solver bake-off. The commercial query "which solver" lives on captcha solvers are not research. This URL is the collection rule: when the puzzle appears, the run ends.
I keep the two pages apart on purpose. One skips a product category. This one tells a researcher what the sign means.
What the sign is doing
The page asked for a person, or it asked you to slow down, or it asked you to prove you were invited. Sometimes the challenge is clumsy. Sometimes it punishes honest users. Those are real complaints. They are not a license to continue the harvest.
What web scraping is already said research that is allowed rarely sees a captcha. Official APIs do not put a picture grid in the JSON. Official APIs versus headed collection. Public documentation, read slowly, rarely does. Public pages, slowly. If you are hitting challenges in a loop, the job has already left the research category.
Rate limits are not a puzzle. A captcha after a 429 is two stops, not a hint to change exits.
What I do at the sign
Stop the client. Close the disposable browser if you opened one. Do not attach a work profile so a person can "just click through" and let the script resume. That turns the login into a fixture and the person into a solver.
Write the stop in the leftover. Storing research files. "Captcha at URL, time, signed-out" is provenance. "Bypass working" is not a note we will keep.
Switch to the official door if one exists. Public Ads Library research is look with a person or an official tool, not a headed loop that tripped a challenge. Facebook Ads Library research locally.
If the page was behind a login, you were already in the wrong job. Scraping behind a login is not research.
| Who hit the captcha | What I do |
|---|---|
| Research client | Exit. Write the stop. |
| Person in Ads Manager they own | Solve once, with eyes. Close the profile. |
| Hybrid: script waits while a person clicks | Skip. That is a solver farm of one. |
A person in a work profile is a different event
You open Ads Manager. A challenge appears. You solve it as the person who owns that login. You continue the operator work. That is not collection. The script is not waiting on the other side of the click. The leftover is not a dump. The profile is a folder you will reopen tomorrow.
The refused pattern is the hybrid: a collector hits a grid, then a person in a work profile clicks through, then the collector resumes. That uses the operator as a solver farm of one. It also pours a harvest through a live cookie. I will not document it.
If you are a person who hit a challenge on a dashboard you already have a right to open, solve it as a person in that profile. Then close the profile. Do not leave a Node process parked on the challenge.
What I will not do
I will not recommend a token API. I will not document how to pause until a third party returns a solution. I will not treat a headed profile as a captcha disguise. User-agent honesty in research: a Chrome string does not make you the invited person.
I will not publish anti-bot walkthroughs. A managed wall is the same class of sign: stop, then the official door.
MaskWright 0.1 has no solver hook. We will not add a token field. Batch start will not retry a challenge across profiles. Internal CDP will not click a grid.
Why collection pages keep growing solver sidebars
Because the same buyer wants a hidden collector. The stack is a driver, an exit, a timing pack, and a captcha API. We skip each layer as a research feature.
Write the challenge into the leftover and leave the run closed. Tomorrow's operator should see that the job ended at a sign, not that someone "got past it." If the official API would have avoided the grid, that is the note to add, not a solver name.
The Scraping hub will keep this URL on the sign. Anything after the sign is a different, refused job.
If you are writing a client and you add a branch named on_captcha, that branch should exit. A branch that calls a vendor, pauses for a person, or opens a work profile is the product we will not document. Delete the branch. Keep the stop.
FAQ
What if I am a real person researching a public page and a captcha appears?
Stop the program if one is running. Look later as a person, or use an official tool. Do not wire a solver so a script can continue.
Is this the same as the solver commercial page?
No. That page skips a product category. This page tells a collector what the sign means: the run ends.
Related notes
- What web scraping isScraping
- User-agent honesty in researchScraping
- Rate limits are not a puzzleScraping
- Storing research filesScraping
- Public pages, slowlyScraping
- Facebook Ads Library research locallyScraping
- Official APIs versus headed collectionScraping
- Scraping behind a login is not researchScraping