One POST turns any HTML or PDF into structured JSON. Define fields by name and type, get rows back. No selectors, no parsers, no headless browser to babysit.
10 calls/day free, no key. Production usage runs on a monthly plan, or pay per call with x402. Need raw model inference?
curl https://api.napu.ai/v1/extract \
-H "Authorization: Bearer $NAPU_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "<table>…</table>",
"schema": { "fields": [
{ "name": "rank", "type": "integer", "description": "Box-office rank" },
{ "name": "film", "type": "string", "description": "Film title" },
{ "name": "gross", "type": "number", "description": "Worldwide gross, USD bn" }
]}
}'One stack, four layers. Every layer is an API for your code and a no-code surface for your team. Data refines up the stack and refreshes on its own.
Any URL or PDF, fetched clean and kept versioned.
Every snapshot chunked and embedded for search.
Name the fields you want; get clean, typed rows.
Turn any table into a live chart or time series.
Markdown, text, or structured JSON. We strip the nav, footer, and ads, so your model reads only what matters and spends fewer tokens.
A single /scrape request returns the page and the rows you defined. No selectors, no second round trip.
Headless Chrome with stealth fingerprints, rotating user agents, and geo routing, so JavaScript-heavy and bot-shy pages still come back clean.
Paste any URL or PDF, name the fields you want, and watch the API return clean rows. No signup, ten free runs a day.
| rank | film | worldwide_gross_billion_usd | year | genre |
|---|---|---|---|---|
| 1 | Avatar | 2.92 | 2009 | Action |
| 2 | Avengers: Endgame | 2.80 | 2019 | Superhero |
| 3 | Avatar: The Way of Water | 2.32 | 2022 | Action |
| 4 | Titanic | 2.26 | 1997 | Romance |
| 5 | Star Wars: The Force Awakens | 2.07 | 2015 | Science fiction |
| 6 | Avengers: Infinity War | 2.05 | 2018 | Superhero |
| 7 | Spider-Man: No Way Home | 1.92 | 2021 | Superhero |
| 8 | Inside Out 2 | 1.70 | 2024 | Animation |
| 9 | Jurassic World | 1.67 | 2015 | Action |
| 10 | The Lion King | 1.66 | 2019 | Animation |
A field is just a name, a type, and a one-line description. The model reads the page and fills them. Ask for fields that are not in the source, like a category or a normalized unit, and it infers them.
{
"items": [
{ "rank": 1, "film": "Avatar", "gross": 2.92 },
{ "rank": 2, "film": "Avengers: Endgame", "gross": 2.80 }
]
}/v1/robotsCheck whether a URL is crawlable before you fetch it.
/v1/scrapeFetch and extract in one call. Ask for markdown, text, links, or structured JSON. Fetch and extract are the same request.
/v1/fetchFetch a public URL or PDF. Returns clean, readable content ready to extract.
/v1/extractPass text (or HTML) plus a field schema. Returns structured rows as JSON.
import requests
items = requests.post(
"https://api.napu.ai/v1/extract",
headers={"Authorization": f"Bearer {NAPU_KEY}"},
json={
"text": content,
"schema": {"fields": [
{"name": "title", "type": "string", "description": "Product title"},
{"name": "price", "type": "number", "description": "Price in USD"},
]},
},
).json()["items"]Plain REST with bearer auth, so it works from any language or HTTP client. No SDK required. The response is JSON you can drop straight into a database or a dataframe.
Schedule it, diff it, alert on it. The same data also powers no-code dashboards in the app when your team prefers a UI.
Add Napu AI as an MCP server in Claude, Cursor, or any MCP client. Fetch, extract, and query from a prompt. Same key.
{
"mcpServers": {
"napu": {
"url": "https://api.napu.ai/v1/mcp",
"headers": { "Authorization": "Bearer …" }
}
}
}Billed by usage from your credit balance. Cockpits and the no-code app are not included.