Introducing Highlights: the context that matters

Web scraping API. Return it your way.

Turn websites and PDFs into Markdown, HTML, structured fields, images, and screenshots. Choose the formats your product needs in one request.

context.dev

Webpages & PDFs

Scrape

Markdown

HTML

JSON

Screenshot

Images

page.markdown.data

mainContentOnly

# Web data API for AI agents

Web scraping, data, and search
infrastructure for AI products.

## Scrape anything
Markdown, HTML, images, screenshots,
and structured fields.

## Map domains
Discover URLs across a website
before you scrape.

Multiple formats, one request

Backed by Y Combinator. Teams build with Context.dev.

  • Mintlify
  • daily.dev
  • Daydream
  • Super.com
per page, across every format
1 credit
JavaScript rendering, anti-bot, proxies
Included
per page with AI JSON extraction
5 credits
free credits every month
1,000
Choose your output
Request multiple formats together. Read clean content, keep the HTML, or capture the page visually.
Extract JSON with AI
Send a JSON Schema and get typed fields back from any page, without writing selectors.
Read dynamic pages
Every request renders JavaScript. Add browser actions and wait controls when content depends on clicks or scrolling.

Start with a URL. Get usable data.

Request the outputs you need through the SDK. Use the same API key when you are ready to map domains, run batches, or create monitors.

npm install context.dev

scrape.ts

import ContextDev from 'context.dev';

const client = new ContextDev({ apiKey: 'YOUR_API_KEY' });

const page = await client.web.scrape({
  url: 'https://linear.app',
  formats: {
    markdown: true,
    html: true,
    screenshot: true,
  },
  sharedParams: { mainContentOnly: true },
});

console.log(page.markdown.data);
console.log(page.screenshot.data);

Every page, fully loaded.

Rendering, proxies, and retries run on every request. You send a URL and get the page, not a list of settings to tune.

shop.example.com/products

200 OK

  1. Rendered in a real browserJS executed
  2. Blocked by bot protection403
  3. Escalated to a stronger proxyautomatic
  4. Retried with a new strategy200

Markdown returned

2.4s · 1 credit

99.96%

Scrape success rate

no configuration, automatic proxy escalation

JavaScript rendering, always

Every request loads in a real browser. Half-rendered HTML from a single-page app is a failure that looks like a success.

Proxies that escalate

When a site blocks a request, it moves to a stronger proxy on its own. You never pick a proxy tier or pay extra for one.

Retries that adapt

Failed attempts retry with a different strategy before anything comes back to you. Retries run on our side, not in your code.

From a single page to your next feature.

Feed your knowledge pipeline or collect pages across a much larger job.

Ground RAG in fresh content

Keep your retrieval index current. Crawl a sitemap, convert every page to clean markdown, and pipe it straight into embeddings, with no brittle parsers in between.

  • acme.com/docs/api/auth

  • acme.com/blog/release-v3

  • acme.com/pricing

  • acme.com/changelog

markdown → your embeddings

Knowledge base

4 docs indexed

Run batches at scale

Scrape thousands of URLs in one job. Process large URL lists or crawl entire sites, then collect results when the batch completes.

Markdown

Running

25,000 URLs

78.7%

19,680 complete

5,320 remaining

Browse results →

Paginated dataset

A few things to know.

More details in the API documentation.

Is there a free web scraping API?

Yes. The free plan includes 1,000 credits every month with no credit card. A standard scrape costs 1 credit, so that covers 1,000 pages, with JavaScript rendering and proxies included. Paid plans start at $19 a month for 7,500 credits.

Does the API render JavaScript?

Yes. Every request loads in a real browser, so single-page apps and lazy-loaded content come back complete. Add browser actions when a page needs clicks or scrolling first.

Can I request several formats at once?

Yes. Enable the formats you need in the same scrape request. Markdown, HTML, images, screenshots, parsed fields, and the original response body have their own output controls.

Can I scrape PDFs as well as websites?

Yes. Pass the public document URL to Scrape and request Markdown or HTML. PDF parsing options let you choose pages and enable OCR for scanned content. Use Parse File when you already have the file bytes.

How do I request fresh content?

Set maxAgeMs to 0 to request a fresh capture. A higher value lets the API reuse content captured within that time window.

How do I scrape a large list of URLs?

Use Batches to submit up to 25,000 URLs or crawl a website asynchronously. Keep the job ID to track progress, collect paginated results, or receive a completion webhook.

Start with your next request.

One API key for scraping, research, brand data, batches, and monitoring.