- Use cases
- Data extraction
Structured data from any page.
Send a URL and the fields you want. Browsa loads the page in a real browser, including content that only appears with JavaScript, and returns clean JSON that matches your schema.
100 free credits. No card, no subscription.
How it works.
Describe the fields
Write a JSON schema, or a plain-language
promptsuch as "return the H1 text".Call extract
One request. A fresh browser loads the page, reads it and closes.
Use the JSON
With your Anthropic key, the response carries
datashaped by your schema. Without one, you get the clean page text for your own model.
from browsa import Client client = Client(api_key="agt_live_…") schema = { "type": "object", "properties": { "name": {"type": "string"}, "price": {"type": "number"}, "in_stock": {"type": "boolean"}, }, } res = client.extract( "https://shop.example.com/p/earbuds-x2", schema=schema, llm_api_key="sk-ant-…", # your Anthropic key ) print(res["data"]) # {"name": …, "price": …, …} print(res["cost_credits"]) # 1
from browsa import Client client = Client(api_key="agt_live_…") # No model involved: the rendered page as text and links page = client.scrape( "https://news.ycombinator.com", formats=["text", "links"], ) print(page["http_status"], page["text"][:300]) print(len(page["links"]), "links")
import { Client } from "browsa"; const client = new Client({ apiKey: "agt_live_…" }); const url = "https://shop.example.com/p/earbuds-x2"; const res = await client.extract(url, { schema: { type: "object", properties: { name: { type: "string" }, price: { type: "number" }, in_stock: { type: "boolean" }, }, }, llmApiKey: "sk-ant-…", }); console.log(res.data);
What you get.
Pages that need JavaScript
The page renders in real Chromium before it is read, so single-page apps and late-loading content come through.
Schema in, JSON out
Describe the shape once and get back data you can store, not HTML to parse.
Many pages at once
Send a list of URLs as one batch job, or crawl from a start page and collect the pages underneath.
Safe retries
Pass an idempotency_key and a retry within 24 hours returns the first response without a second charge.
Pricing.
One page is one short-lived browser. Credits never expire.
Extraction runs on your own Anthropic key, billed by Anthropic. Browsa charges only for the browser.
Free
Starter
Growth
Pro
Questions.
Do I need a model key?
For the data field, yes: pass an Anthropic key as llm_api_key. Extraction uses a fast Claude Haiku model unless you choose another with llm. Without a key you still get the rendered text and your schema back, ready for your own model. To skip keys entirely, run an agent task with llm="browsa".
Should I send a schema or a prompt?
One or the other. A schema gives you fixed field names and types, which suits pipelines. A prompt is quicker for one-off questions; the answer comes back in a single output field.
What about pages that need clicks or a login?
Extract reads one page as it loads. For pagination, filters or logins, use an agent task, or drive the page yourself with Playwright and a saved identity.
Can I scrape without any AI?
Yes. scrape() returns the rendered HTML, visible text, links or a screenshot for 1 credit, with no model involved.
Turn pages into JSON.
100 free credits. No card, no subscription.