---
title: ScrapeSilo
description: Scrape any web page with a small action DSL — html or browser — or interpret a page with POST /analyse.
template: splash
hero:
  title: Scrape any page.
  tagline: A small typed action DSL extracts exact fields via html or real Chromium. Interpretation is a separate analyse call. Every run is recorded.
  image:
    html: |
      <svg width="280" height="280" viewBox="0 0 280 280" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="ScrapeSilo">
        <defs>
          <linearGradient id="sp-hero" x1="40" y1="40" x2="240" y2="240" gradientUnits="userSpaceOnUse">
            <stop stop-color="#7c3aed"/>
            <stop offset="1" stop-color="#db2777"/>
          </linearGradient>
        </defs>
        <rect x="40" y="40" width="200" height="200" rx="48" fill="url(#sp-hero)"/>
        <rect x="40" y="40" width="200" height="200" rx="48" fill="#ffffff" opacity="0.06"/>
        <g stroke="#ffffff" stroke-width="16" stroke-linecap="round" stroke-linejoin="round">
          <path d="M110 100l40 40-40 40"/>
          <path d="M158 100l40 40-40 40" opacity="0.55"/>
        </g>
      </svg>
  actions:
    - text: Quickstart
      link: /docs/quickstart
      icon: right-arrow
      variant: primary
    - text: Run a scrape
      link: /playground
      icon: external
      variant: minimal
---

import { Card, CardGrid } from '@astrojs/starlight/components';

<CardGrid stagger>
  <Card title="Quickstart" icon="rocket">
    Sign up, mint an API key, run an html scrape and an analyse call — in under a minute.
    <br /><br />
    [Start →](/docs/quickstart)
  </Card>
  <Card title="Pick an engine" icon="setting">
    HTML for static pages, Browser (real Chromium) for SPAs and clicks. Interpretation is `POST /analyse`, not scrape.
    <br /><br />
    [Compare engines →](/docs/engines)
  </Card>
  <Card title="Actions DSL" icon="document">
    The selector + extractor language: `h1@text`, `many`, nested `output`. CSS is the default — no `css=` prefix.
    <br /><br />
    [Reference →](/docs/actions-dsl)
  </Card>
  <Card title="REST API" icon="seti:json">
    `POST /scrape`, `POST /analyse`, `GET /executions` — full request and response shapes.
    <br /><br />
    [API reference →](/docs/api/scrape)
  </Card>
  <Card title="MCP" icon="puzzle">
    Wire scraper-farm into Claude Code, Cursor, or any MCP-aware agent. Tools: `scrape`, `analyse`, `map`, `docs`, `get_execution`, `list_executions`.
    <br /><br />
    [Set up MCP →](/docs/mcp)
  </Card>
  <Card title="Authentication" icon="seti:lock">
    Bearer tokens, key lifecycle, the `X-Use-Api-Key` override the dashboard uses.
    <br /><br />
    [How auth works →](/docs/authentication)
  </Card>
  <Card title="Pricing & quotas" icon="approve-check">
    Credit cost per engine, monthly plans, concurrency caps, and the 402 / 429 limit responses.
    <br /><br />
    [See pricing →](/docs/pricing)
  </Card>
</CardGrid>

## Smoke test

```bash
curl -sS -X POST https://api.scrapesilo.com/scrape \
  -H "Authorization: Bearer sf_…" \
  -H "Content-Type: application/json" \
  -d '{
        "url": "https://scrapesilo.com/fixtures/article",
        "engine": "html",
        "actions": { "title": "h1", "body": "p", "cta": "a.sf-cta@href" }
      }'
```

Returns an array: `[{ url, data, tookMs, executionId, antibot }]`. The execution row stays around — open `/executions/<id>` in the dashboard to inspect the request, result, and any error.
