Connect Claude & GPT directly to the web.Try it now
SDKs

TypeScript SDK

Fully typed, ESM-native, works in Node 20+, Bun, Deno, and edge runtimes (Vercel, Cloudflare Workers).

Install

npm install ilmenite
# or
pnpm add ilmenite
# or
bun add ilmenite

Quickstart

import { Ilmenite } from "ilmenite";

const client = new Ilmenite({ apiKey: process.env.ILMENITE_API_KEY! });

const result = await client.scrape({
  url: "https://news.ycombinator.com",
  formats: ["markdown", "links"],
});

console.log(result.markdown);
console.log(`${result.links.length} links in ${result.latencyMs}ms`);

Extract with Zod

import { z } from "zod";

const ProductSchema = z.object({
  name: z.string(),
  priceUsd: z.number(),
  inStock: z.boolean(),
});

const client = new Ilmenite();
const result = await client.extract({
  url: "https://example.com/product/42",
  schema: ProductSchema, // auto-converted to JSON Schema
});

// result.data is fully typed: { name: string; priceUsd: number; inStock: boolean }
console.log(result.data.priceUsd);

Streaming crawls

const crawl = await client.crawl.start({
  url: "https://docs.stripe.com",
  maxPages: 200,
});

for await (const page of client.crawl.stream(crawl.jobId)) {
  console.log(page.url, page.title);
}

Edge runtime

// app/api/scrape/route.ts
import { Ilmenite } from "ilmenite";

export const runtime = "edge";

export async function POST(req: Request) {
  const { url } = await req.json();
  const client = new Ilmenite({ apiKey: process.env.ILMENITE_API_KEY! });
  const result = await client.scrape({ url });
  return Response.json(result);
}