Skip to main content

Type Definition

interface ScrapeResult {
  data: WebsiteScrapeResult[];
  batchMetadata: BatchMetadata;
}

WebsiteScrapeResult

Individual result for each URL:
interface WebsiteScrapeResult {
  markdown?: string; // Present if "markdown" in formats
  html?: string; // Present if "html" in formats
  metadata: {
    baseUrl: string;
    totalPages: number;
    scrapedAt: string; // ISO timestamp
    duration: number; // Milliseconds
    website: WebsiteMetadata;
    proxy?: ProxyMetadata;
  };
}

WebsiteMetadata

Metadata extracted from the page:
interface WebsiteMetadata {
  // Basic meta
  title: string | null;
  description: string | null;
  author: string | null;
  language: string | null;
  charset: string | null;

  // Links
  favicon: string | null;
  image: string | null;
  canonical: string | null;

  // SEO
  keywords: string[] | null;
  robots: string | null;
  themeColor: string | null;

  // Open Graph
  openGraph: {
    title: string | null;
    description: string | null;
    type: string | null;
    url: string | null;
    image: string | null;
    siteName: string | null;
    locale: string | null;
  } | null;

  // Twitter Card
  twitter: {
    card: string | null;
    site: string | null;
    creator: string | null;
    title: string | null;
    description: string | null;
    image: string | null;
  } | null;
}

BatchMetadata

Metadata about the batch operation:
interface BatchMetadata {
  totalUrls: number;
  successfulUrls: number;
  failedUrls: number;
  scrapedAt: string; // ISO timestamp
  totalDuration: number; // Milliseconds
  errors?: Array<{
    url: string;
    error: string;
  }>;
}

ProxyMetadata

Proxy information (if proxy was used):
interface ProxyMetadata {
  host: string;
  port: number;
  country?: string;
}

Examples

Access Content

const result = await reader.scrape({
  urls: ["https://example.com"],
  formats: ["markdown", "html"],
});

// Access content
console.log(result.data[0].markdown);
console.log(result.data[0].html);

Access Metadata

const result = await reader.scrape({
  urls: ["https://example.com"],
});

const metadata = result.data[0].metadata;

console.log("URL:", metadata.baseUrl);
console.log("Duration:", metadata.duration, "ms");
console.log("Title:", metadata.website.title);
console.log("Description:", metadata.website.description);

if (metadata.website.openGraph) {
  console.log("OG Image:", metadata.website.openGraph.image);
}

Check Batch Status

const result = await reader.scrape({
  urls: ["https://example.com", "https://example.org"],
});

const { batchMetadata } = result;

console.log("Total:", batchMetadata.totalUrls);
console.log("Success:", batchMetadata.successfulUrls);
console.log("Failed:", batchMetadata.failedUrls);
console.log("Duration:", batchMetadata.totalDuration, "ms");

if (batchMetadata.errors) {
  console.log("Errors:");
  batchMetadata.errors.forEach((e) => {
    console.log(`  ${e.url}: ${e.error}`);
  });
}

Iterate Results

const result = await reader.scrape({
  urls: ["https://example.com", "https://example.org", "https://example.net"],
});

result.data.forEach((page, i) => {
  console.log(`[${i + 1}] ${page.metadata.website.title}`);
  console.log(`    URL: ${page.metadata.baseUrl}`);
  console.log(`    Duration: ${page.metadata.duration}ms`);
  console.log(`    Content: ${page.markdown?.substring(0, 100)}...`);
});