Scrape
Turn any URL into clean, agent-ready content — markdown, HTML, links or structured fields.
/api/v1/scrapeRequest body
| Field | Type | Description |
|---|---|---|
| urlrequired | string | Absolute URL to fetch (http:// or https://). |
| formats | (string | object)[] | Any combination of "markdown", "html", "rawHtml", "links", "screenshot", "summary", "branding", "changeTracking", or LLM formats { type: "question", question }, { type: "highlights", query }, { type: "json", schema | prompt }, { type: "changeTracking", modes?, schema? }. Default: ["markdown"] |
| onlyMainContent | boolean | Strip navigation, footers and boilerplate. Default: true |
| waitFor | number | Milliseconds to wait after navigation (for JS-heavy pages). Default: 0 |
| timeout | number | Hard request timeout in ms. Default: 30000 |
| maxAge | number | Upstream cache freshness in ms. If the page was scraped within this window, return the cached version instantly (no upstream credits, near-zero latency). Set 0 to force a fresh fetch. |
| storeInCache | boolean | When false, the result of this scrape is not stored in the upstream cache. Default: true |
| actions | Action[] | Interact with the page before scraping: click, type, scroll, wait, press, screenshot, executeJavascript, scrape. See below. |
| mobile | boolean | Render with a mobile viewport. Default: false |
| blockAds | boolean | Block ad and tracker requests. Default: true |
| location | object | Geo-target the request: { country: "US", languages: ["en"] }. |
| headers | object | Custom request headers. |
| proxy | string | "basic", "stealth", or "auto" — upgrade for bot-protected pages. |
Change tracking new
Add "changeTracking" to formats to detect what changed on a page since the last time you scraped it — perfect for monitoring pricing pages, docs, terms-of-service, competitor sites, or anything you want to watch over time. Free: no extra credits beyond the base scrape.
{ "url": "https://example.com/pricing", "formats": [ "markdown", { "type": "changeTracking", "modes": ["git-diff", "json"] } ]}Response includes changeTracking.changeStatus — new, same, changed, or removed — plus a diff when git-diff mode is requested.
Upstream caching with maxAge new
Pass maxAge (in milliseconds) to reuse a previously scraped version of the URL if it's still fresh. When a cache hit happens you get the response back in <100 ms and pay no upstream credits — only the standard scrape charge applies.
{ "url": "https://news.ycombinator.com", "formats": ["markdown"], "maxAge": 300000}Interact with the page (actions)
Run a sequence of browser actions before the page is captured. Useful for content behind clicks, search boxes, infinite scroll, or login walls.
{ "url": "https://example.com/search", "formats": ["markdown"], "actions": [ { "type": "wait", "milliseconds": 1000 }, { "type": "click", "selector": "#cookie-accept" }, { "type": "write", "selector": "input[name=q]", "text": "firecrawl" }, { "type": "press", "key": "Enter" }, { "type": "wait", "milliseconds": 2000 }, { "type": "scroll", "direction": "down" }, { "type": "screenshot", "fullPage": true } ]}Action types: wait, click, write, press, scroll, screenshot, scrape, executeJavascript, pdf.
Example request
curl https://neuroapi.me/api/v1/scrape \ -H "Authorization: Bearer $NEUROAPI_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com", "formats": ["markdown", "links"], "onlyMainContent": true }'Example response
{ "success": true, "data": { "markdown": "# Example Domain\n\nThis domain is for use...", "links": ["https://www.iana.org/domains/example"], "metadata": { "title": "Example Domain", "description": "", "sourceURL": "https://example.com", "statusCode": 200 } }, "creditsCharged": 1}