← All posts June 05, 2026

Kansas amazon_waf — why your scraper sees a CAPTCHA wall

When you try to pull a Kansas business record by hand, you hit it just fine. When a script tries the same lookup, it bounces back a wall of JavaScript and a challenge page. That gap is not a bug. It is intentional friction, and it changes how you have to think about entity verification in Kansas.

The wall isn’t new, but it’s real

Kansas Secretary of State’s business registry sits behind anti-bot protection. This is not unique to Kansas. Many states use it. But Kansas uses it consistently, and it affects anyone who tries to automate a lookup. The protection intercepts requests that look machine-generated, asks them to solve a challenge, and only lets them through if they pass. A human with a browser clicks through in seconds. A script sees a 403, a JavaScript blob, or a redirect loop.

This matters to underwriters because it means a “quick lookup” is only quick if you do it manually. And if you have ten entities to verify in a pipeline, manual becomes slow.

Why it blocks scripts (and why that’s actually reasonable)

The state’s goal is not to make life hard for legitimate underwriters. It is to stop scrapers from hammering the registry and burning bandwidth. A script can make hundreds of requests per minute. A human makes maybe five per hour. The state protects its infrastructure by assuming any high-volume, automated traffic is hostile.

From an underwriting perspective, this is not a bad trade-off. It means the data is less likely to be publicly mirrored, sold, or bundled into a sketchy third-party database. It also means you cannot simply write a loop and pull every Kansas LLC in existence. The friction exists partly to keep the data accurate and partly to force verification to stay manual and intentional.

The downside is clear: if you need to verify five entities before lunch, you are sitting at a browser clicking one record at a time.

What a blocked request looks like

A direct script request (via curl, Python requests, or similar) often returns a status 403 or a redirect to a JavaScript challenge. The challenge page itself is not the data you want. It is a puzzle designed to confirm you are human. Solving it requires a browser to execute JavaScript, store a cookie, and then re-request the page. A headless browser can do it. A simple HTTP library cannot.

Some underwriting teams have tried to work around this by using headless automation tools. That approach can work, but it is labor-intensive. You still have to script around state-specific URLs, handle session state, parse tables that may change layout, and maintain the scripts over time as the state updates its site. One state change breaks the whole stack.

Manual lookups are reliable but don’t scale

Pulling up the Kansas SOS website and searching by entity name is reliable. You get the official record instantly. You can read the filing date, the registered agent, the member or manager names, and the status directly. If the entity is dissolved or revoked, you see that right away.

The problem surfaces when you have volume. Five entities take maybe ten minutes. Fifty entities take two hours. By the time you are verifying 20+ entities in a credit pipeline, manual checking becomes a bottleneck. You either hire someone to sit at a browser all day or you let some entities slip through with incomplete verification.

This is especially painful because Kansas is not the only state with anti-bot protection. Other states have similar walls. When you are pulling data from multiple states in the same application, the friction multiplies.

The real tradeoff: speed vs. manual verification

You have two bad options if you try to verify Kansas entities on your own. One, you do it by hand, which is reliable but slow. Two, you try to automate it, which is fast but requires ongoing technical maintenance and may still get blocked as the state updates its defenses.

There is no honest way to bulk-verify Kansas entities through a public SOS lookup at scale without either hiring labor or investing significant engineering time. That is exactly what the anti-bot protection is designed to enforce.

Bottom line

Kansas blocks automated lookups intentionally. That is not a bug to work around; it is a policy you have to accept. If you verify entities manually, you get accurate, current data. If you need to verify multiple entities across states, you need a different approach. The friction exists for a reason, and trying to scrape around it costs more time and money than just accepting it.

Report a bug — straight to our team

See something broken or weird? Tell us. Your report submits directly to our team — no email client needed. Each report gets a unique ticket ID so we can track and respond.

v0.8-beta · dac2912