Introducing Highlights: the context that matters

Scrape thousands of URLs. Run one batch.

Bulk web scraping in the background. Submit up to 25,000 URLs or crawl a large website, track the job, collect the results, and move on to building your product.

urls.json

25,000 URLs

Scrape

Crawl

format: markdown

Markdown

Processing

25,000 URLs

78.7%

19,680 complete

5,320 remaining

Results

Paginated dataset

  • acme.com/docs/api/auth

  • acme.com/blog/release-v3

  • acme.com/pricing

  • acme.com/changelog

Completion webhook

Configured

example.com/webhooks/context

Large URL lists · Full-site crawls

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

  • Mintlify
  • daily.dev
  • Daydream
  • Super.com
URLs per batch
25,000
per successful URL
1 credit
to download result files
180 days
when the batch completes
Webhook
Massive URL lists
Submit up to 25,000 URLs in one batch, with identifiers and metadata for your own records.
Full-site collection
Start from a URL or sitemap and set the scope of the crawl.
Collect the dataset
Track progress, page through results, and receive a completion webhook when the job finishes.

Submit the job. Let the batch run.

Pass your URL list to the batch API. Keep the returned job ID to inspect progress and retrieve results without holding open one long request.

npm install context.dev

batches.ts

import { readFile } from 'node:fs/promises';
import ContextDev from 'context.dev';

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

const urls: string[] = JSON.parse(
  await readFile('urls.json', 'utf8'),
);

const batch = await client.batch.submit({
  input: {
    mode: 'scrape',
    data: {
      format: 'markdown',
      urls: urls.map((url) => ({ url })),
    },
  },
});

console.log(batch.id, batch.status);

Scrape, crawl, or run a batch?

Choose by how many pages you need and whether your application can wait for a background job.

CompareScrapePOST /v1/web/scrapeCrawl WebsitePOST /v1/web/crawlBatchesPOST /v1/batch/submit
Best forOne page you already knowA site or section, read in one callLarge URL lists and full-site jobs
How many pages1 URL per requestUp to 500 pages per callUp to 25,000 URLs per batch
How it runsSynchronousSynchronous, following links from a start URLIn the background, from a URL list, start page, or sitemap
ResultsMarkdown, HTML, JSON, screenshots, imagesMarkdown for each pageMarkdown or HTML, by polling, webhook, or download files kept 180 days
Credits1 per page, 5 with JSON extraction1 per successful page1 per successful URL, unused credits refunded

Go from pages to production datasets.

Collect content at the scale your knowledge base and application need.

Scrape anything

Read websites and PDFs. Get clean Markdown, HTML, structured JSON, images, and screenshots in the formats your product needs.

context.dev

Webpages & PDFs

Markdown

HTML

JSON

Screenshot

# Web data API for AI agents

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

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

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

A few things to know.

More details in the API documentation.

How do I scrape a list of URLs?

Submit the list to Batches in one request, up to 25,000 URLs per batch. Keep the batch ID, then poll for progress, receive the batch.completed webhook, or download the result files when the job finishes.

How much does bulk scraping cost?

Batches cost 1 credit per successful URL, plus 1 per PDF page recovered by OCR. Credits are reserved when you submit, only successful pages are charged, and unused reserved credits are refunded when the batch settles.

How many URLs can I submit in a batch?

A scrape batch accepts up to 25,000 URLs. Use separate jobs when your dataset is larger, and apply the concurrency and credit limits for your account.

Can a batch discover pages for me?

Yes. Crawl mode starts from a URL or sitemap with controls for the scope of the job.

How do I collect a large result set?

Use the batch results API and follow its pagination cursor. Keep your item identifiers or metadata to connect the results back to your records.

Can I receive a webhook when it finishes?

Yes. Configure batch webhooks for completion and other supported final states, with optional retry settings.

Start with your next request.

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