polyscrape API · Scrape

Scrape

Turn any web page or document URL into clean, LLM-ready Markdown.

Fetches a URL through a real Chrome fingerprint over a residential proxy and returns clean Markdown plus the raw HTML. Document URLs (PDF, Word, PowerPoint, Excel, Outlook, EPUB, CSV, and XML; RSS/Atom feeds convert best) are converted to Markdown too. Results are cached up to 30 days: by default a cached copy up to 7 days old is served, and `max_age_days=0` forces a fresh scrape. Priced by output: $0.001 per started 1,000 words of returned Markdown, a minimum of $0.001 and a maximum of $0.10 — pages beyond 100,000 words are truncated and the response `truncated` flag is set to true. A completed scrape is charged even when the page is thin, but a fetch that yields no Markdown (target down, unreachable, blocked, or timed out after 30 seconds) returns 502 and is never charged. Ideal for feeding pages into LLM and RAG pipelines, extracting document text, or monitoring content.

POST /api/v1/scrape $0.001 per 1,000 words

Use your polyscrape API key instantly, or inspect the sample response first.

curl
curl -X POST https://polyscrape.com/api/v1/scrape \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $POLYSCRAPE_API_KEY" \
  -d '{"url": "https://example.com"}'

Sample response

{
  "html": "\u003c!doctype html\u003e\u003chtml\u003e\u003chead\u003e\u003ctitle\u003eExample Domain\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003ch1\u003eExample Domain\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e",
  "markdown": "---\ntitle: Example Domain\ncanonical: https://example.com\n---\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents.",
  "metadata": {
    "canonical": "https://example.com",
    "description": "Illustrative example domain.",
    "og:title": "Example Domain",
    "title": "Example Domain"
  },
  "title": "Example Domain",
  "truncated": false,
  "url": "https://example.com",
  "word_count": 14
}

API Playground

Run a real /api/v1/scrape request. No key? We show the real sample result so you can still inspect the shape.

Endpoint

POST /api/v1/scrape

sample mode
Auth header X-API-Key
Cost $0.001 per 1,000 words

Leave empty to inspect the response shape without spending API balance.

Sample mode: explore the real response shape for free. Add a key to run a live request.

Response

POST /api/v1/scrape

sample
{
  "html": "\u003c!doctype html\u003e\u003chtml\u003e\u003chead\u003e\u003ctitle\u003eExample Domain\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003ch1\u003eExample Domain\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e",
  "markdown": "---\ntitle: Example Domain\ncanonical: https://example.com\n---\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents.",
  "metadata": {
    "canonical": "https://example.com",
    "description": "Illustrative example domain.",
    "og:title": "Example Domain",
    "title": "Example Domain"
  },
  "title": "Example Domain",
  "truncated": false,
  "url": "https://example.com",
  "word_count": 14
}

Request and response

The full contract for /api/v1/scrape: what to send and what comes back.

Request body

url string required

The web page or document URL to fetch.

max_age_days integer optional

Max age (0–30) of a cached copy to accept. 0 forces a fresh scrape. Default 7.

Response fields

Field Type Description
url string The requested URL, echoed back.
title string | null Page title when available.
markdown string Clean Markdown with a metadata frontmatter block.
html string Raw HTML of the page. Empty string for documents.
metadata object Extracted frontmatter (title, canonical, og:*, description).
word_count integer Word count of the returned Markdown — the basis for the charge (1 credit per started 1,000 words).
truncated boolean True when the page exceeded 100,000 words and the returned Markdown was cut to that cap.

Code examples

Copy, paste, swap in your API key.

curl -X POST https://polyscrape.com/api/v1/scrape \
  -H "Content-Type: application/json" \
  -H "X-API-Key: " \
  -d '{"url": "https://example.com"}'

What developers build with it

Common ways Scrape ends up in production.

Ingesting a web page into an LLM or RAG pipeline.

Extracting a document's text as Markdown.

Monitoring a page's content over time.

Status codes

The same predictable contract on every endpoint.

200 Success. The lookup completed and was charged, even if the response is empty (a no-match search, or a thin page).
400 The request was rejected before any fetch (for search: an unsupported country code). Never charged.
401 Missing or unknown API key. Never charged.
402 Not enough balance on the account. Never charged. The detail is a JSON object with error, message, credits_required, and api_credits.
422 Invalid request body (wrong shape or types). The detail is a list of per-field errors. Never charged.
429 Rate limit exceeded: max 10 requests per second per API key (5/second for parse, which is CPU-heavier). Never charged.
502 Upstream fetch failed — the target page or search could not be fetched (site down, unreachable, timed out, or blocked). Never charged.
Body Every error response is JSON shaped as {"detail": ...}. detail is a message string, except 402 (a JSON object) and 422 (a list of field errors).

Other endpoints

Explore the rest of the polyscrape API.

View all endpoints

Pay once. Spend when needed.

New accounts start with a free API balance. Paid balance never expires, so it can sit until your workflows need it.

Free

$0.50 to start

$0.50 free balance to start. Get an API key in seconds with no credit card.

  • Scrape, Search, and Parse
  • No credit card required
  • Perfect for a first integration
Starter

$10 one-time

Adds $10 to your API balance for steady production traffic and early automated jobs.

  • Balance never expires
  • From $0.001 per call
  • Useful for small pipelines
Pro Most popular

$100 one-time

$130 spendable balance, including a $30 bonus. The sweet spot for production workloads.

  • $100 + $30 free balance
  • Best value per workload
  • Built for automated pipelines
FAQ

Questions before you connect?

Pricing & Balance

Usage-based, charged against your prepaid balance. Scrape and parse cost $0.001 per 1,000 words of Markdown returned (minimum $0.001, capped at $0.10). Search costs $0.001 for the search plus $0.002 per result returned. Same prices across REST and MCP — no quota math, no tiers.
The whole scraping stack, handled for you: a residential proxy, a real Chrome browser fingerprint, HTML-to-Markdown conversion, built-in document parsing (PDF, Word, PowerPoint, Excel, Outlook, EPUB, CSV, XML), and caching. You send a URL, a search, or a document and get back clean, LLM-ready Markdown.
No. Your API balance never expires, so you can use it whenever your workflows need it. In the unlikely event polyscrape is ever discontinued, unused paid balance is refunded.
Paid API requests stop with a 402 until you add more balance. This keeps spend predictable and prevents unexpected charges.

API & Integration

Create and manage API keys from your account, then send your key in the X-API-Key header from your app, scripts, or internal tools.
Yes. Your dashboard shows every request, its cost, and your remaining balance, so you can track spend while building and running automated workflows.
Yes, a completed request is billable even when the answer is empty (for example a page with no readable content). Errors like 402 or 429 are never charged.
We enforce a rate limit of 10 requests per second per API key. If you exceed it, the API returns HTTP 429. Build exponential backoff (briefly pausing before retrying) into your application code.
Our support team responds to email inquiries within 1 business day. We can help with account, billing, and API integration questions.

Give your product and agents clean Markdown.

Start with a free key and $0.50 free balance, on REST, MCP, or both.