scrapeSend a URL. Get clean web content back.

ByteKit turns public pages into markdown, HTML, raw HTML, links, images, and metadata, with protected-site handling, country controls, retries, and caching built in.

Test a real public URL before you integrate.

REQUEST POST /v1/scrape
curl -X POST https://api.bytekit.com/v1/scrape \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product",
    "formats": ["markdown", "links", "images"]
  }'
EXAMPLE RESPONSE 200 OK
{
  "formats": {
    "markdown": "# Wireless Headphones\n\n$149.00 · In stock…",
    "links": [
      "https://example.com/cart",
      "https://example.com/reviews"
    ],
    "images": [
      "https://example.com/img/headphones.jpg"
    ]
  },
  "metadata": {
    "title": "Wireless Headphones — Example Store",
    "status": 200,
    "contentType": "text/html",
    "contentLength": 41822,
    "retrievedAt": "2026-07-01T14:22:07Z"
  }
}

Example response · not a full schema. Default format is raw_html.

the problemThe web is not a clean API.

Pages redirect, render late, show different content by country, hide useful text behind layout chrome, and break simple HTTP fetches. ByteKit handles the capture layer so your product can work with clean page content instead of scraping infrastructure.

Browser fleets

Headless browsers to provision, patch, and scale.

Blocking and routing

IP blocks, regional differences, and retries to manage.

Page chrome

Nav, banners, and footers buried in markup.

Unpredictable failures

Timeouts, redirects, and empty responses.

output formatsOne scrape endpoint. Five useful outputs.

Ask for the formats your workflow needs. Every response keeps source metadata so you can trace where the content came from.

markdown Clean text for agents, RAG, and LLM context.
html Cleaned article HTML when structure matters.
raw_html default The full page response as received.
links Discovered links for navigation, indexing, and follow-up jobs.
images Image URLs and metadata from the page.

Metadata included with every scrape — status, final URL, title, content type, content length, and retrieval time.

reliabilityHandles the messy parts of page capture.

Protected public pages

Works on protected public sites, with no proxy setup or IP management on your side.

Regional and mobile views

Use country and mobile options when pages vary by location or device.

Retries, caching, and async

Control freshness, cost, and long-running jobs without changing your integration.

Clean content for downstream systems

Strip page chrome, keep useful structure, and reduce noisy context before it reaches your app.

use casesBuilt for products that depend on fresh web content.

AI agents

Give agents current page content before they answer or act.

RAG pipelines

Build cleaner corpora from public docs, articles, and knowledge pages.

E-commerce tracking

Capture product pages, pricing pages, availability, and regional variants.

Embedded app features

Add page capture to your product without running Playwright, queues, or proxies.

pricingSame API on every plan. Pay for what you use.

Scrape usage is billed by bandwidth, with a 50% cache discount and zero cost for failed captures. Every plan supports the same API — start on PAYG with a one-time free balance, then pay for usage.

PAYG free balance 50 MB + 100 credits
PAYG bandwidth $8 / GB
Monthly plans from $29 / mo
Cache hits · failed 50% · $0

faq

What does the Scrape API return?

The formats you request — markdown, html, raw_html, links, and images — plus metadata: status, final URL, title, content type, content length, and retrieval time. The default format is raw_html; list the others you want in the formats array.

Does it work with JavaScript-heavy pages?

Yes. Pages that render client-side are captured after they load. Use delay_ms to wait for late content, and ByteKit does more work to retrieve pages that need it.

Do I need to manage proxies?

No. Protected-site handling, country controls, and retries are built in. You send a URL and get page content back — no browsers, IP management, or queues to run.

Can I request a specific country or mobile view?

Yes. Set country to route the request through a region, and mobile to capture the mobile version when a page varies by location or device.

Can I run scrapes asynchronously?

Yes. Set async and provide a webhook_url. ByteKit fetches the page and POSTs the result to your endpoint when it is ready, so you never hold a request open for slow jobs.

How does caching affect cost?

A cache TTL serves recent captures from cache at a 50% discount instead of re-fetching. Lower the TTL when you need fresher content, or bypass it for time-sensitive pages.

What happens when a page cannot be scraped?

The response returns a clear failure with a status instead of a false success, so you can tell blocked, invalid, and unsupported pages apart. Failed zero-byte captures are not billed.

What should I not use Scrape for?

Scrape is for public pages and pages you are authorized to access with provided headers or cookies. It is not for paywalled content, walled-garden social platforms, or multi-step login workflows.

Test the page your product depends on.

Paste a real public URL into the Scrape playground and see the output before you write integration code.

PAYG starts with a one-time free balance. No card required.