AI Web Scraping Agent
Give it a URL and describe what you want in one sentence. It returns validated JSON, and it is hard to turn against the server it runs on.
Who has this problem
Turning a web page into structured data is the easy part. Running it as a public service means stopping it from being pointed at internal addresses, keeping instructions hidden in a page from steering the model, and making sure one user’s cached results never reach another.
My role
Web application, API, URL safety controls and tenant-aware result cache.
How to try it
- Open the demo, paste a URL and describe in one sentence what you want. The result comes back as validated JSON.
Usage conditions
- 5 scrapes per session, 10 requests per minute and 5 browsers at a time.
- 200 calls per day on the shared key. With your own key, that cap does not apply.
- A kill switch that stops paid calls without a redeploy.
Public access has usage limits to keep AI service costs under control.
Decisions I made
- Every address is checked before the request, including internationalised domains and IPv6, and checked again for every resource the page loads, so a domain that changes its DNS mid-request cannot reach an internal address.
- Page content is passed to the model as untrusted data, isolated from the instructions, so text on a page cannot give the model orders.
- Bring your own key for 6 providers (Groq, OpenAI, Anthropic, DeepSeek, Gemini and Grok). The public demo uses a shared free key with limits per visitor.
- The cache key includes a hash of the API key, so cached results are never shared between users.
- The backend sits on an internal Docker network; only the web app can reach it.
Limits that remain
- Pages behind a login are out of scope.