Skip to main content
Scrape API

Any page, as Markdown or the JSON you ask for

Send a URL and get the page as clean Markdown, or describe what you want and get JSON in your shape. Spidra runs the browser, proxies and CAPTCHA solving, for one page or 50 at once.

Try
Three ways to ask

Markdown, a prompt, or a schema

No selectors to write or maintain. Real runs on real pages, with what each one cost.

1 credit · no AI

Use it

When you want the page itself: for a model to read, to store, or to search later.

About 8,300 characters for the whole page, code examples kept as fenced blocks. extract_content_only left out the site's menus.

page.content, excerpt
# Queues
**Source code:** [Lib/asyncio/queues.py](https://github.com/python/cpython/tree/3.15/Lib/asyncio/queues.py)
…
## Examples
Queues can be used to distribute workload between several concurrent tasks:
```
import asyncio
import random
import time
async def worker(name, queue):
while True:
# Get a "work item" out of the queue.
sleep_for = await queue.get()
…

Click, scroll and type before it reads

Pages that load more on scroll or hide content behind a button get browser actions that run first, in order. Point at elements with CSS or XPath, or describe them in plain words. Actions are free.

clicktypecheckuncheckscrollwaitforEach

forEach finds repeating items you describe, then reads each in place, opens each link, or clicks each to expand it, following the next-page button for up to 10 more pages and 50 items.

actions.py
1from spidra import ScrapeParams, ScrapeUrl
2
3page = client.scrape(ScrapeParams(
4 urls=[ScrapeUrl(
5 url="https://news.ycombinator.com/",
6 actions=[
7 {"type": "click", "value": "The More link at the bottom of the list"},
8 {"type": "wait", "duration": 1500},
9 ],
10 )],
11 prompt="Every story title with its points",
12))
Batch scrape

One page, or fifty at once

A scrape takes up to 3 URLs and gives one answer across them. A batch takes up to 50 and gives each its own result, status and retry.

pricing_pages.py
1batch = client.batch_scrape(
2 ["https://linear.app/pricing", "https://supabase.com/pricing", "https://www.notion.com/pricing"],
3 prompt="List every pricing plan on the page",
4 schema=PLANS, # name, price, currency, unit, billing_period
5)
6
7for item in batch.items:
8 if item.status != "completed":
9 print("FAILED", item.url, item.error) # failed pages cost nothing
10 continue
11 for plan in item.result["plans"]:
12 ...
  • Failures stay separate. A page that fails costs nothing and doesn't stop the others.
  • Retry only what failed, with every original option.

Three pricing pages with three different layouts, one shape back

output
linear.app | Free | 0 USD
linear.app | Basic | 10 USD
linear.app | Business | 16 USD
linear.app | Enterprise | custom
supabase.com | Free | 0 USD
supabase.com | Pro | 25 USD
supabase.com | Team | 599 USD
supabase.com | Enterprise | custom
notion.com | Free | 0 EUR
notion.com | Plus | 9.5 EUR
…

First ten plans from a real run. Currency symbols mapped to codes in the loop; a null price means custom pricing.

Beyond the page text

Documents, screenshots and popular sites

Documents by link

A PDF, Word, Excel or PowerPoint link comes back as Markdown. The Attention Is All You Need PDF read for 1 credit.

For uploads and page ranges, Parse

Screenshots

The visible screen or the full page, as a hosted image link next to the data. No extra credits.

Popular sites as data

Links to Amazon, Google Maps, Indeed, YouTube and other popular sites come back with the site's own fields, no prompt needed.

See the sites

Fast Mode

Skips the browser for static pages and opens one only when a page needs it. Actions and screenshots are off.

Request

Everything but the URL is optional

  • urls1 to 3 per scrape, each with optional actions. Up to 50 in a batch.
  • promptWhat you want from the page, in plain words.
  • schemaA JSON Schema that fixes the shape of the answer.
  • outputmarkdown (default) or json.
  • extractContentOnlyDrop navigation, headers, footers and sidebars.
  • screenshotThe visible screen, or fullPageScreenshot for the whole page.
  • useProxyStealth Mode, with proxyCountry to pick a country.
  • cookiesYour session for pages behind your login.
  • scrapeModefast skips the browser for static pages.

The result has content (the Markdown or your answer), one entry per URL with its own Markdown, screenshots if you asked, and stats with run time, tokens and CAPTCHAs solved.

What it costs

1 credit per page

Plus AI tokens when you use a prompt or schema, usually about 1 more on an ordinary page, and 5 per CAPTCHA solved.

See plans

Costs nothing

  • Pages that error, come back blank or need a sign-in
  • Browser actions and screenshots
  • Checking a job's status

Limits

  • 1 to 3 URLs per scrape, 50 per batch
  • 60 scrapes and 20 batches a minute
  • Stealth Mode in 48 countries
FAQ

Questions, answered

Scrape

Yes. Every scrape opens the page in a real browser by default, so content drawn by JavaScript is there when it's read. For static pages, Fast Mode skips the browser and is quicker.

You build the product.
Spidra handles the data work.

Start with 300 free credits, about 300 pages. No credit card required.