For developers

The data API.
Any page to JSON.

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?

extract.sh
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" }
    ]}
  }'
Websites monitored
Rows collected
Views created
20+
Markets covered

From raw data
to live views

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.

01
Raw dataCapture

Any URL or PDF, fetched clean and kept versioned.

02
EmbeddingsRAG

Every snapshot chunked and embedded for search.

03
TablesStructure

Name the fields you want; get clean, typed rows.

04
ViewsCharts

Turn any table into a live chart or time series.

Built for agents

LLM-ready output

Markdown, text, or structured JSON. We strip the nav, footer, and ads, so your model reads only what matters and spends fewer tokens.

Fetch and extract, one call

A single /scrape request returns the page and the rows you defined. No selectors, no second round trip.

Renders like a real browser

Headless Chrome with stealth fingerprints, rotating user agents, and geo routing, so JavaScript-heavy and bot-shy pages still come back clean.

Try it in your browser

Paste any URL or PDF, name the fields you want, and watch the API return clean rows. No signup, ten free runs a day.

1,104 chars
Completed
Completed
FieldTypeDescription
rankfilmworldwide_gross_billion_usdyeargenre
1Avatar2.922009Action
2Avengers: Endgame2.802019Superhero
3Avatar: The Way of Water2.322022Action
4Titanic2.261997Romance
5Star Wars: The Force Awakens2.072015Science fiction
6Avengers: Infinity War2.052018Superhero
7Spider-Man: No Way Home1.922021Superhero
8Inside Out 21.702024Animation
9Jurassic World1.672015Action
10The Lion King1.662019Animation
10 Items
Output Type
View Type
Describe your chart
00.731.462.192.92AvatarAvengers: Endgam…Avatar: The Way …TitanicStar Wars: The F…Avengers: Infini…Spider-Man: No W…Inside Out 2Jurassic WorldThe Lion Kingfilmworldwide_gross_billion_usd
Export
You send a schema

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.

You get rows
response.json
{
  "items": [
    { "rank": 1, "film": "Avatar", "gross": 2.92 },
    { "rank": 2, "film": "Avengers: Endgame", "gross": 2.80 }
  ]
}

Four endpoints

GET/v1/robots

Check whether a URL is crawlable before you fetch it.

POST/v1/scrape

Fetch and extract in one call. Ask for markdown, text, links, or structured JSON. Fetch and extract are the same request.

POST/v1/fetch

Fetch a public URL or PDF. Returns clean, readable content ready to extract.

POST/v1/extract

Pass text (or HTML) plus a field schema. Returns structured rows as JSON.

From your code

extract.py
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.

Or skip the code

Add Napu AI as an MCP server in Claude, Cursor, or any MCP client. Fetch, extract, and query from a prompt. Same key.

claude_desktop_config.json
{
  "mcpServers": {
    "napu": {
      "url": "https://api.napu.ai/v1/mcp",
      "headers": { "Authorization": "Bearer …" }
    }
  }
}

Any URL to clean JSON or Markdown

Billed by usage from your credit balance. Cockpits and the no-code app are not included.