Scraping Used to Take a Programmer. Now It Takes a Sentence.

Wait 5 sec.

I have spent most of my career on the defending side of this problem, and for years I could rely on one comfortable assumption: the number of people capable of scraping my clients' data at scale was small. Not because the defenses were good. Because the work was annoying.That assumption stopped being true, and I want to be precise about why — because "AI can scrape now" is a headline, not an analysis. The useful version is narrower: each specific technical barrier that used to stop an amateur happens to map onto a task large language models are unusually good at. Knowing which barrier fell where is the entire difference between a defense plan that still works and one that is quietly decorative.So let's open the hood.What a Scraper Is Really DoingStrip away the word "scraping" and you have a small program repeating four steps: request a page, receive it, pull out the parts you care about, move to the next one. A browser does the first two every time you open a website. A scraper just does them without a human, thousands of times in a row.The response that comes back is HTML — a tree of nested tags describing the page's structure. The information you want (a price, a name, an email) sits at some address inside that tree. To grab it you write a selector, a short pattern that says "find the elements shaped like this." Something like .product-card .price means "inside every product card, the element tagged as the price."That is the entire trick. And for years it was also the wall:# THE OLD WAY - BRITTLE BY DESIGN# Target a fixed path inside the page's structure.cards = page.select(".product-card")for card in cards: name = card.select_one(".title").text price = card.select_one(".price").text save(name, price)# One redesign later, ".price" is now ".amount".# Nothing errors loudly. The data just stops. You debug.Three complications made this harder than it looks, and each demanded a little more programming fluency than the last.Pages that build themselves after they load. Many modern sites don't ship the data inside that first chunk of HTML. They send a nearly empty shell, then run JavaScript that fetches the real content from an internal API and paints it in afterward. Request the page the simple way and you get the shell. To get the data you either drive a headless browser — a real browser with no window, running the JavaScript for you — or you find the internal API the page is calling and read from that directly. Both require knowing the machinery exists.Getting from page to page. Real targets are not one page. They are ten thousand, behind "next" buttons, infinite scroll, and links that fan out into more links. Walking that structure without getting lost, or hammering the site into noticing you, is its own small discipline.The maintenance tax. This was the quiet killer. Selectors are fragile. The day a site renames a class or reshuffles its layout, your scraper breaks — usually without saying so — and you are back in the code. Scraping at scale was never a one-time build. It was a thing you maintained, and maintenance is where casual attempts died.The floor, stated plainly: all three problems shared one requirement. You had to read and write code, read HTML, and keep doing both. That requirement — not any single clever defense — is what kept high-volume collection in the hands of a relatively small group.What AI Actually Removed From the PipelineThe tempting summary is that AI "made scraping easier." True, but blunt. The sharper description is that AI is excellent at each of the specific frictions above, and it dissolved them one at a time.1. Plain Language Becomes Working CodeLanguage models were trained on a staggering amount of code and a staggering amount of HTML. Show one a slice of a page, describe what you want in ordinary words, and it writes the selector-and-parsing code that fetches it. The person driving never reads the DOM, never learns what a selector is, never opens the code at all. The first barrier — writing the extraction logic — becomes a conversation.2. Extraction by Meaning Instead of by StructureThis one matters more, and gets less attention. Instead of writing a fragile selector that points at where a value sits, you hand the page's rendered text to a model and ask for the fields by meaning:# THE NEW WAY - SURVIVES REDESIGNS# No selectors. Describe the shape you want.ask_model( "Return every product on this page as JSON.", "Fields: name, price. Nothing else.")# Back comes clean, structured data:# [ {"name": "...", "price": "..."},# {"name": "...", "price": "..."} ]The model reads the page the way a person would — by understanding what a price is, rather than which tag it lives in. Rename the class, move the block, restyle the whole layout: the meaning is still there, so the extraction still works.That quietly defuses the maintenance tax, which was the thing that historically turned scraping from a stunt into a sustained skill. The scraper that used to break every few weeks now mostly shrugs and keeps going.The old scraper pointed at a location. The new one understands a page. Locations move. Meaning doesn't.3. Agents That Navigate on Their OwnWrap a model in a loop and give it a browser, and it stops being a code generator and starts being an operator. It looks at a page, decides what to do, acts, looks at the result, repeats. Perceive, reason, act, observe.Because it is driving a genuine browser, the JavaScript-heavy pages that used to require special handling just run. Because it can reason about what it sees, the surprises that used to break a rigid script — an unexpected pop-up, a slightly different layout on page nine — become things it works around rather than dies on. The second and third barriers erode together.4. The Cost of Trying Falls to Almost NothingAll of this now lives behind a chat box or a cheap API call. The skill cost to start is near zero; the money cost per record collected is fractions of a cent. When both the skill floor and the price floor drop at once, the population of people who can plausibly do the thing doesn't grow a little. It grows by orders of magnitude.The Same Task, Before and AfterThe stepUsed to requireNowRead a page's structureComfort reading HTML and the DOMThe model reads it for youWrite extraction logicWriting selectors and parsing codeA sentence describing the fieldsHandle JavaScript-built pagesHeadless browsers or reverse-engineering an APIAn agent drives a real browserSurvive site changesOngoing debugging, foreverMeaning-based extraction mostly holdsSkill floorWorking programmerCan type a requestTime to first resultHours to daysMinutesWhat This Looks Like From a Standing StartPicture someone who has never written a line of code. They want every business of a certain type in their region, with contact details, out of a public directory. A few years ago the idea dies immediately, because they have no way to act on it.Today they describe the goal to a chat tool and get walked through it — or they hand the whole thing to an agent that simply does it. The directory turns out to load its listings with JavaScript, so a naive fetch would have returned an empty shell, but the agent is running a real browser and never notices the difference. Halfway through, the layout on the detail pages shifts; the meaning-based extraction keeps producing clean records anyway.What arrives at the end is not a messy pile of copied text. It is structured output — rows of fields, ready to drop into a spreadsheet or feed into the next automated step.That last detail is the one to sit with. The output is clean and structured by default. A pile of copied text is a nuisance. Ten thousand tidy, labeled records are a dataset, and a dataset is something you can point other automation at.Why the Volume Is the Whole StoryMost scraping is dull and perfectly legal. Price comparison, search indexing, academic research — the open web runs on it. In the US, the Ninth Circuit reaffirmed in hiQ Labs v. LinkedIn that collecting publicly accessible data doesn't violate the Computer Fraud and Abuse Act. (hiQ still lost the war — the case settled in December 2022 with a $500,000 judgment and a permanent injunction, on contract and tort grounds rather than hacking ones. Worth remembering when someone tells you scraping is "legal.")The concern is narrower than legality. It is what happens when this specific barrier drops for the uses that were never benign.The same ease sweeps up personal information scattered across public profiles and assembles it into a single tidy database that never existed in that shape before. This is the part people underrate. Any one fact about you sitting in public is usually harmless. The harm is in the join: a name, plus a workplace, plus an email pattern, plus a location, plus a photo, pulled from five unrelated places and stitched into one row. None of the pieces were secret. The combination is what's dangerous — and combining used to be the expensive part.Where the sharp edge is: a single exposed email address is a small thing. That same address inside a hundred thousand others — sorted, structured, searchable — is a product, and the effort to build it has fallen close to zero. Clean, structured lists of real people and real details are most of the raw material for phishing and social engineering. The tedious assembly step that used to slow attackers down is exactly the step that got automated away.What Still Works, and WhyHere is the encouraging part, and it falls straight out of the analysis above.AI erased the skill signal. It did not erase the behavior signal. Defenses that lean on how much and how a client acts — rather than on how clever whoever built it is — are largely intact. Defenses that depended on attackers being few and sophisticated are the ones now under strain.Rate Limiting and ThrottlingCollecting ten thousand records still means making something like ten thousand requests. AI does not change that arithmetic. A token-bucket limiter — a steady trickle of requests per client, bursts refused — still forces a scraper to either slow to a crawl or reveal itself by hammering. This targets volume, and volume is loud no matter who is behind it.Holds up well. The one signal AI cannot argue its way out of is needing to ask a lot.Address and Network ReputationRequests arrive from IP addresses, and addresses carry history. Traffic from known data-center ranges looks different from home broadband, and a flood from one place is a flag. Serious operators spread requests across many rotating addresses to blend in, so defenders increasingly watch the pattern across a network rather than any single address: the same methodical sweep, just distributed.Partly eroded. Cheap distribution blunts per-address blocking, which pushes weight onto behavioral signals.Client Fingerprinting and Bot DetectionA real browser leaves a consistent signature in how it negotiates the TLS connection and orders its requests. Automated clients historically stood out by getting those small details subtly wrong, or by carrying obvious tells no ordinary browser has. This has long been a workhorse of bot detection — it is OAT-011 Scraping in OWASP's automated threat taxonomy, and most commercial bot managers lean on it heavily.Under pressure. Agent tools that drive genuine browsers erase many of these tells by simply being real browsers. All the more reason not to rely on fingerprinting alone.Behavioral AnalysisPeople wander. They land somewhere, backtrack, pause, read, follow a whim. A collector is systematic: even coverage, even timing, breadth where a human would go narrow, none of the small chaos of a real session. Modeling the shape of a session and flagging the ones that are too tidy is one of the strongest tools left — precisely because it keys on the goal (gathering everything) which a scraper cannot hide without defeating its own purpose.Holds up well. Comprehensiveness is the tell, and comprehensiveness is the point.Honeypots and TarpitsPlant links a person would never see or click — hidden off-screen, or invisible — and anything that follows them announces itself as an automated crawler. Pair that with endpoints that deliberately answer bad clients very, very slowly, and you catch and drain the naive and the semi-naive at almost no cost to yourself.Still cheap and useful. Won't stop a careful operator; will thin the newly enormous crowd of casual ones.Design So "Public" Isn't "Bulk-Accessible"This is the structural fix, and the most durable. Seeing one record and downloading all of them should be different in kind, not just degree. Put bulk-revealing views behind a login. Cap how much any one account can pull. Don't hand out sequential, guessable identifiers that let someone enumerate your whole database by counting. Show a contact detail only when a signed-in human asks for that one.The principle: make individual access easy and wholesale access expensive.The one to invest in. It changes the economics for everyone, skilled or not.The Infrastructure Layer Is Moving TooWorth noting where the industry is heading, because it points the same direction.In July 2025, Cloudflare became the first major infrastructure provider to block AI crawlers by default, flipping AI access from opt-out to opt-in for new domains. A year later it went further: from September 15, 2026, "mixed-use" crawlers — bots that blend search indexing, agent retrieval, and model training in one pass — get blocked by default on any page carrying ads, with the new defaults landing on new customers, new sites, and all free-tier accounts. Cloudflare's stated rationale is that non-human traffic now makes up the majority of internet traffic.Notice what that is, structurally. It isn't a better fingerprint. It's the last item on my list — access design — implemented at the CDN layer, plus a payment rail bolted on. The defense that scales is the one that changes the economics, not the one that tries to guess how clever the client is.The polite version of this, the Robots Exclusion Protocol, finally became a real RFC in 2022 after twenty-eight years as a convention. It is still a request, not a control. Treat it as a signal of intent that makes your later enforcement defensible — not as a defense.The synthesis: no single control is a wall, and layering has always been the point. What's new is which layers to trust. Since AI dissolved the sophistication signal, lean on the signals it can't dissolve: sheer volume, the shape of behavior, and access design that makes bulk collection costly by construction. The legal layer — terms of service, data-protection obligations for aggregated personal data — is a real deterrent for anyone with a reputation to lose, but treat it as a fence, not a lock. It shapes incentives; it doesn't stop requests.If You're Not Defending a SiteThe takeaway for an individual is smaller but real. Treat anything you post publicly as permanently and cheaply collectable. That was always technically true; what changed is the size of the crowd able to act on it. The old comfort — "sure it's public, but who would bother" — has quietly stopped being true, because bothering no longer costs anything.The practical move is boring and effective: share less than you'd mind seeing joined up, and assume the join will happen.The Pattern UnderneathHold onto one thing, because it reaches well past scraping.None of the ingredients here are new. Scraping is old. Models writing code is not sorcery. What's new is that the pieces got packaged into tools anyone can pick up, and that packaging removed the single requirement that kept the barrier high: needing to know how.Whenever a task is hard mostly because of the skill it demands, and a tool erases that skill, the task doesn't just get easier. It becomes available to a completely different, and far larger, group of people than before. The defenses that assumed a small, skilled adversary quietly stop matching reality, and the ones that watch behavior and volume become the whole game.Scraping is an early, unusually clean example of a shift you are going to keep meeting. Worth learning to read it here, where the mechanics are still easy to see.