| scrapeA | Fetch a single URL via the crawlbrulee scraping API and return the requested content (markdown, cleaned HTML, raw HTML, links, images, screenshot, page metadata in metadata). Use this for one-shot page extraction. For full-site discovery use the map tool first. Check page_status_code before you trust the content: it is the HTTP status the site answered with for the final page. A page the site served is a successful result whatever its status, so a 404 or 503 page comes back with its content, not as an error. A 404 means the markdown is the site's "not found" page, not the page you asked for. 2xx and 4xx pages are billed, except 403, 407, 408, 429 and 451; 5xx pages are never billed. If the site cannot be reached at all the tool returns a target_unreachable error (HTTP 502, not billed): retry later or check the URL. Screenshot URLs in the response are signed download links — the agent can fetch them when needed. The response also carries response_meta.usage: total_credit_cost = engine_credit_cost × proxy_multiplier + screenshot_slicing_credit_cost, plus engine and proxy (the resolved tier — never auto). engine is the billed engine (http, browser, screenshot, cache); a cache hit is represented by engine: "cache". credits and screenshot_slices are the old, deprecated names of total_credit_cost and screenshot_slicing_credit_cost. Extraction is capped per page: 30,000 links, 10,000 inline images and 10,000,000 characters of HTML. A page past a cap is truncated rather than refused, and the response warnings array names which one (links_truncated, inline_images_truncated, raw_html_truncated) — so treat that output as incomplete. Use cleanup to control what is removed before any output is built: ads_and_popups (on by default) drops ads, cookie banners and chat widgets, and exclude_selectors removes anything else. It shapes markdown, cleaned_html, links, images and the screenshot, and NEVER raw_html — so request raw_html when you need the page exactly as it arrived. warnings also reports a section whose extraction failed outright (links_unavailable, inline_images_unavailable, metadata_unavailable): that field comes back omitted or empty while the rest of the scrape succeeded, so do NOT conclude the page had no links/images/metadata — re-run the scrape instead. An empty field with no such warning does mean the page had none. |
| scrape_asyncA | Submit a scrape job to run ASYNCHRONOUSLY and return a job_id immediately, instead of holding the connection open. Use this for long-running scrapes (heavy JS rendering, full-page screenshots of long pages) — for a quick one-shot fetch prefer the synchronous scrape tool, which blocks and returns the page directly. Poll the job with scrape_status and fetch the page with scrape_result once done. Optionally attach a per-job completion webhook: we deliver a single signed scrape.complete POST to your endpoint when the job finishes (HTTPS required in production), and echoes your opaque webhook.metadata back in the delivery (under data.metadata, alongside data.page_status_code (on success) and data.response_meta.usage). |
| scrape_statusA | Look up the current lifecycle status of an async scrape job submitted via scrape_async. Returns the job state (pending, running, done, failed), with an error message when it failed and a response_meta.usage block (total_credit_cost and its parts, billed engine, resolved proxy tier) once it is done. A job whose page the site served ends done even when that page is a 404 or 503 — read page_status_code in the result. A job that could not reach the site at all ends failed (the error text is a general message, not the reason) and is not billed; retry later or check the url. Poll this until the status is done, then call scrape_result to fetch the page. If you registered a completion webhook on submit you can skip polling and react to the delivery instead. |
| scrape_resultA | Fetch the extracted content of a completed async scrape job (the same result shape as the synchronous scrape tool: markdown, cleaned HTML, raw HTML, links, images, screenshot, page metadata in metadata, and response_meta.usage). Errors if the job is still pending/running — check scrape_status first (status done) before calling this. Check page_status_code before you trust the content: it is the HTTP status the site answered with for the final page. A page the site served is a successful result whatever its status, so a 404 or 503 page comes back with its content, not as an error. A 404 means the markdown is the site's "not found" page, not the page you asked for. 2xx and 4xx pages are billed, except 403, 407, 408, 429 and 451; 5xx pages are never billed. Screenshot URLs are signed download links. |
| mapA | Build (or fetch a cached) link-map for a website by combining sitemap discovery with homepage link extraction. Returns paginated lists of discovered URLs, each item just { url }. Filterable by link type (internal / external / subdomain). Use this to enumerate a site before scraping selected pages. max_urls (default 5000, max 100000) is a discovery budget, not a trim at the end: discovery stops as soon as that many URLs are found, so a smaller value is a faster, cheaper crawl. A map stopped that way returns exactly max_urls links with response_capped false — the signal that the site has more is response_meta.truncation.discovery_cap_reason. When that is "max_urls", ask again with a higher max_urls to get more; "unread_files" means a sitemap file could not be read this time and is often temporary, so asking again later can return more; "time", "file_budget", "depth" and "file_size" mean the site itself is big, slow or deep and a retry will not help. discovery_capped says discovery stopped early, sitemaps_skipped how many sitemap files were skipped or only partly read. limit (default 5000, max 10000) only pages the answer. Returned URLs are normalized the same way scrape normalizes its returned url, so map-then-scrape stays on one host. Results are ordered with the most useful links first. The response carries response_meta.usage: total_credit_cost = engine_credit_cost × proxy_multiplier, plus engine and proxy (the resolved tier, never auto); credits is the old, deprecated name of total_credit_cost. Map has no screenshot slicing and no page_status_code: it reads many files, not one page. A map that found nothing because the site answered only with statuses we don't bill (a 5xx, for example), or not at all, is empty and free. If the site cannot be reached, the tool can return a target_unreachable error (HTTP 502, not billed): retry later or check the URL. |
| usageA | Return the current billing-cycle usage for the authenticated organization: total / used / available credits, used quota percent, max concurrency, and cycle reset time. Call this before launching large scrape jobs to confirm available credit. |
| whoamiA | Return the organization name, token name, and truncated token preview for the API key currently configured on the MCP server. Useful for confirming which account is in use before performing credit-consuming operations. |