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 [ 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.
- 01The page you see
- 02Its HTML, exactly as downloaded
- 03Rows in public tables
capture b81e09… · 2026-06-01 09:00:05 UTC
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 MCPCompare pour-over kettle prices across shops.
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
- Jul 13$139−$10
- Jul 6$149
- Jun 29$149
- Jun 22$149
- Jun 15$149+$20
- Jun 8$129
- 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.
{
"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_id | snippet |
|---|---|
| 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 | |
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 usePractical 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.
No. Every page is parsed with the same fixed HTML parser, and each element becomes a row. Values come out through your SQL, not a model. The optional SQL assistant only writes SQL, which you can read and edit before it runs.
No. Query sources already available in Periplus, or request missing ones from the app or your agent by providing URLs or a starting page and a page limit. Periplus runs the crawler and makes the collected pages available to query.
Not to get started: the SQL assistant in the app writes the query from a plain-language question. You can see every query it writes or runs, and open it in the editor to change it. Your conversation, the SQL and small samples of results are sent to a third-party model provider (OpenRouter) to do this.
Yes. Use SQL JOINs to combine information across pages and websites. You choose the relationship: a link, a matching identifier, or another condition in your query. Periplus exposes the page content and every link, so a query can follow a shop’s link to the maker’s own website.
Yes. Connect your agent to the hosted MCP server and sign in, or have its code use the Python SDK to send SQL and receive structured rows. A single query can filter, join or aggregate information across collected pages, so the agent can work with the result. Available sources and query execution limits determine what each request can cover.
No. Periplus stores each page as a capture and runs your SQL over the captures. Pull the result when you need it; the source pages stay in Periplus while their captures are kept. Captures without a pin are scheduled for deletion seven days after collection. Pin the captures you need to keep longer.
SQL extraction, JOINs, filters and analytics run on Periplus infrastructure. The SDK returns rows and column names. Any further Python processing or merge with your own data runs in your environment.
Yes, when the information was present in a page Periplus captured and that capture is still kept. You can query values you never extracted before, even after they’ve changed or disappeared from the live website. Periplus cannot reconstruct a page it never collected.
SQL queries pages already available in Periplus. If a source is missing or you need a newer capture, request a capture or crawl from the app or your agent. Periplus handles collection; your query does not trigger it automatically.
Select capture_id, with url and observed_at, and each row points to the exact captured page. A row joined from several pages can carry the capture_id of each. Captures are kept seven days by default, so you can inspect what each page said at that time; pin the captures you need to keep longer.
No. Every capture is kept for seven days after collection. After that, it is scheduled for deletion unless a pin keeps it. Pin captures for as many days as you need them. Schedules capture the same pages again later.
Periplus is free during the research preview. Usage is measured but not charged. Usage-based billing is planned after a stable production release, and pricing and terms will be published before any charge.
The web-capture corpus is shared: collected pages and their source URLs can be queried by everyone. Other organizations cannot see who collected a page or your platform activity. Your SQL, parameters, query history and saved queries are organization-scoped, along with pins, schedules and keys. Keep secrets out of submitted URLs and SQL.
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.