Use case · Extraction primitive

Extract any table → CSV

Point Dornick at any HTML table — your CRM, an admin grid, a wiki, a third-party SaaS — and have it return clean CSV. Universal table extractor via the dornick.extract() primitive.

  • dornick.extract()
  • PageMount
  • schema validation

Try it live → Run the table-extract demo — point Dornick at a mock invoice table.

The shape

Your CRM exports tables as PDF. Your admin tool has a “download CSV” button that crashes on 10K rows. Your team copy-pastes from Excel grids. Dornick’s extract primitive solves this in 10 lines.

Code

import { Dornick } from "@dornick/core";

const dornick = new Dornick({
  transport: { mode: "browser", provider: "anthropic", apiKey: "..." },
});

const rows = await dornick.extract({
  selector: "table.invoices",
  schema: {
    invoice_id: "string",
    customer: "string",
    amount_usd: "number",
    due_date: "date",
    status: "enum: paid|pending|overdue",
  },
});

// rows is a typed array. Pipe to CSV, save, ship.

Why this works

dornick.extract() is a thin wrapper over the agent loop with a constrained output schema. The model reads the DOM, sees the table, and returns rows that match your schema. Dornick validates against the schema — if a row doesn’t fit, it’s flagged for review.

When it shines

  • Legacy admin tools that don’t export.
  • SaaS tables in tabs you don’t own (paired with @dornick/extension).
  • Sales-ops batches — extract from 50 pages, dedupe, hand to ops.
  • Audit trails — extract the page state at a moment, persist as CSV.

Dornick.act() and dornick.observe()

The same primitive family includes:

  • dornick.act(prompt) — let the agent take actions on the page (click, fill).
  • dornick.observe(question) — ask a question about the current page.
  • dornick.extract(schema) — pull structured data out.

These are the Playwright primitives, but user-side: the user owns the browser and consents. They’re useful when you don’t need a full chat — just one shot of agent work.

FAQ

Does this work on tables in iframes?

Only same-origin iframes. Cross-origin iframes can't be read from the parent due to browser security.

What about virtualized grids (e.g., AG-Grid)?

Yes — Dornick scrolls the grid to materialize all rows. Configurable via the scrollDepth option.

Ship an agent-driven flow this afternoon.

Install Dornick, paste a config, and your form turns into an agent that fills its own inputs.