PeriplusOpen app

Research preview

The web,
in tables.

Periplus crawls and captures web pages and turns every element into rows, with the exact page behind each one.

Query them with SQL or plain language, from the app, your code or your AI agent. Free while in research preview.

No data pipeline to run

Periplus does the crawling, rendering, storage and parsing. No crawler infrastructure to build or operate. Choose the fields you need in SQL.

Collect first. Decide the fields later.

Pages are kept whole, so acquisition can start before anyone agrees on a schema. Fields are picked out in a query when they are needed, not specified up front.

New questions, answered from the past

When a new question comes up, ask it of pages you already captured. Pinned captures stay queryable, so you don’t wait months to collect the data again.

Who it helps

For teams whose work depends on web data.

Data-buying software firms can bring web sources into their products. Data vendors can keep their data current from the sources they track. Research firms can compare sources and keep the evidence behind their analysis. Query the collected pages with SQL, then use the results in your existing data stack.

01Query

The web as a SQL database.

One SQL query reads the pages you need. Pick values out with CSS selectors, and three websites become rows of the same table, with the page behind each one.

SELECT
  node_text(capture_id, query_selector(capture_id, 'h1')) AS product,
  node_text(capture_id, query_selector(capture_id, '.price')) AS price,
  domain(url) AS site
FROM search('pour-over kettle') JOIN captures USING (capture_id)
How pages become rows, under the hood
Two selectors turn three websites into one tableThree shop pages from different websites. The h1 and .price selectors pick the product name and price out of each page, and the values become rows of one table: Arc Kettle, $89; Gooseneck Pro, $129; Pour Kettle 1L, $74.northpeak.exampleArc Kettle$89brewhaus.exampleGooseneck Pro$129kettleco.examplePour Kettle 1L$74h1.priceproductpricesiteArc Kettle$89northpeak.exampleGooseneck Pro$129brewhaus.examplePour Kettle 1L$74kettleco.example

[ fig. 1 — three websites, two selectors, one table ]

How it works

Under every page, a table.

Periplus keeps each page’s HTML exactly as it was downloaded and parses it once, with the same recipe for every site. Every element becomes a row. No models, no guessing.

  1. 01The page you see
  2. 02Its HTML, exactly as downloaded
  3. 03Rows in public tables
The full pipeline
rows
captures · 1documents · 1nodes · 24links · 3
42h1Gooseneck Pro
44span.price$129
46buttonAdd to cart
48aMade by Ostra Works
50p2-year warranty

capture b81e09… · 2026-06-01 09:00:05 UTC

HTML
<article class="product">
<h1>Gooseneck Pro</h1>
<span class="price">$129</span>
<button>Add to cart</button>
<a href="https://ostra.example/">…</a>
<p>2-year warranty</p>
</article>
rendered
brewhaus.example/gooseneck-pro
Gooseneck Pro
$129
Add to cart
2-year warranty
[ fig. 2 — one page, three layers ]

02Agents

Give your agent its corner of the web in one query.

Agents can already search and fetch pages, one at a time: slow, expensive, and a different answer every run. Connect Periplus over MCP and your agent sends one SQL query across every captured page, and gets back rows it can cite. The same query over the same captures while they are kept returns the same result.

Our rule: models translate, code executes. The agent, or the SQL assistant in the app, turns a question into SQL you can read; Periplus runs it deterministically. Why we work this way

Connect your agent over MCP
your agent

Compare pour-over kettle prices across shops.

agent · sql_execute
SELECT domain(url), node_text(…) AS price
FROM search('pour-over kettle')
JOIN captures USING (capture_id)

✓ 2,184 rows · 1.2 s

Across 214 shops, pour-over kettles run from $64 to $149.

[ fig. 3 — one query across every captured page ]

03Corpus

A corpus that grows where people look.

Periplus doesn’t start from a crawl of everything. It grows wherever its users point it, one capture, crawl and schedule at a time, so it keeps taking the shape of what people actually care about.

And when interests meet, everyone gains. The page you need may already be there, and someone else’s capture can connect yours to something you didn’t know to look for.

Captured pages are shared by everyone using Periplus. Other organizations cannot see who collected them or your platform activity. Your SQL, saved queries, pins and schedules stay with your organization. Access and data use

[ fig. 4 — a corpus that grows where people look ]

04Collect

Work with the data. Leave the collecting to us.

Point Periplus at the pages you care about: a list of URLs, or a starting page to crawl. It fetches, renders, stores and parses every page, and the rows land in the same tables you already query. Your time goes into the analysis.

[ fig. 5 — pages in, rows out ]

05Over time

Track how a page changes, visit by visit.

Schedule the pages you care about and Periplus visits them again on a timer. Every visit is kept as its own dated capture, so a page’s history is just rows: query what changed, and when.

Captures are kept for seven days; pin the ones your history depends on to keep them longer.

brewhaus.example

$139

  1. Jul 13$139−$10
  2. Jul 6$149
  3. Jun 29$149
  4. Jun 22$149
  5. Jun 15$149+$20
  6. Jun 8$129
  7. Jun 1$129

[ fig. 6 — one page, visited again and again ]

Use it where you work

The same SQL from your agent, your code or the app.

.mcp.json · Claude CodeMCP docs
{
  "mcpServers": {
    "periplus": {
      "type": "http",
      "url": "https://api.periplus.dev/mcp"
    }
  }
}

> Find shops selling pour-over kettles.

periplus · sql_execute
  sql: "SELECT capture_id, snippet FROM search(?)"
  parameters: ["pour-over kettle"]
capture_idsnippet
7f3a2c…Arc Kettle, pour-over kettle · northpeak.example
b81e09…Gooseneck Pro, pour-over kettle · brewhaus.example
c02d5f…Pour Kettle 1L, pour-over kettle · kettleco.example
3 rows · 0.4 s
Periplus is a research preview.

It’s free while in preview. Expect change, keep a copy of anything you can’t afford to lose, and don’t submit private information: collected data is shared.

Access and data use

Practical questions

What’s available to query?

Query page content and links from every capture that’s still kept. When you need a missing source or a newer capture, request a capture or crawl from the app or your agent, and Periplus handles collection.

Use Periplus

Bring the question.
The web is already in tables.

Query from the app, your code or your agent over MCP. Periplus handles the crawling, storage and parsing. Free while in research preview.

We’re inviting teams to free tests during November 2026. Bring a source and a question; contact Ekku to arrange a test of your workflow.