On this page
krawlup MCP documentation
Every krawlup MCP tool, what credential it needs, and what it costs. New here? The /mcp page gives the tour. This page is the reference: setup for OAuth and agent keys, the full tool catalog, the REST twin, and the limits that keep the endpoint fast for everyone.
Introduction
krawlup runs a Model Context Protocol server over streamable HTTP. It is stateless: no session id is required, and responses are plain JSON. Once connected, an agent reads your products' scores, the failing audits behind them, AI fix cards, first-party analytics and keyword ideas. With extra scopes it can also start full rescans, add products from a URL, and publish them to the public directory, while every payment stays in your browser.
POST https://api.krawlup.com/mcpConnect your agent
One endpoint, every client. Where a client supports both paths, the OAuth flow needs no key at all; an agent key works everywhere and is the only credential that can carry rescan. A browser-approved connection gets read + submit and never rescan; denying returns the agent to its redirect with error=access_denied. Connections and keys are both managed on the AI agent page.
Claude Code connects over streamable HTTP with one command; the browser handles the approval.
- 1Run this in your project root.
- 2When the agent first needs krawlup it opens your browser; approve while signed in.
- 3The connection sticks. Manage or remove it on the Dashboard → AI agent page.
claude mcp add --transport http krawlup https://api.krawlup.com/mcp
Windsurf, Zed and VS Code accept the same mcpServers JSON shape as Cursor. Scopes, limits and every tool: krawlup.com/docs.
Agent skills
Instead of (or alongside) MCP, teach your agent krawlup directly. The official @krawlup/skills package installs two plain-markdown skills: krawlup-mcp (all 20 tools, scopes and rate limits) and krawlup-analytics-setup (installing the cookieless tag and wiring conversion goals). No code, just instructions your agent reads.
npx @krawlup/skills
Skills land in ./skills by default. Point --dir at your agent's skills folder (for example --dir .claude/skills) and use --force to overwrite an older copy.
Authentication and scopes
| Credential | How it authenticates | Behavior |
|---|---|---|
| Anonymous | no Authorization header | The three public catalog tools only. Invalid credentials get a 401 with an OAuth challenge, never a downgrade. |
| Agent key | Authorization: Bearer sk_ag_… | Created on the AI agent page in your dashboard. Scopes read (always) plus optional rescan and submit; optional expiry date and product restriction; shown once at creation. |
| OAuth connection | Authorization: Bearer sk_mc_… | Granted through OAuth 2.1 with PKCE after one browser approval. Scopes read + submit (never rescan). One-hour access tokens, 90-day rotating refresh tokens. |
Scopes
readEvery reading tool: products, insights, fix cards, scan history, analytics, keyword ideas. Unlimited calls; costs nothing.
submitadd_product (5 adds/hour), set_product_public and set_product_private (10 flips/hour). Publishing is paid-only; the agent never spends money.
rescantrigger_rescan only. Agent keys only: never granted to OAuth connections. Spends the same plan allowances as a dashboard rescan.
Agents see only their own products. Revoking a key or disconnecting a connection stops the agent on its very next request.
Tool reference
20 tools. Every call is throttled to 60 requests per minute per credential unless a tighter limit is shown. Limits shown in orange differ from that blanket.
Public catalog
No credential. Any agent can explore the public directory before its founder connects anything.
| Tool | Credential | Description |
|---|---|---|
search_products | public | Search the public catalog of directory products in plain language. |
get_product | public | The full public product page, by slug or key. |
check_launch_readiness30/min | public | Audit a URL before adding: bans, blocked platforms, whether the product already exists (and who owns it), plus the optional category list. Run this before add_product. |
Free site report
No credential — the /site-report tool, for any website. Two full scans per calendar month per agent (the credential, or the IP when anonymous — the same limit the website tool enforces, in a separate budget from browser visitors); reads are unlimited. Domains already listed as krawlup products are refused.
| Tool | Credential | Description |
|---|---|---|
get_site_report | public | The free public site report for any website (the /site-report tool): performance, AEO, CRO, SEO crawl, CrUX, OpenRank and the named checks. Cached read; poll after run_site_report until scanStage clears. |
run_site_report6/min | public | Start the free public scan for any website and return immediately. Same 2-full-scans-per-month limit as the website tool, counted per agent (credential, or IP when anonymous). |
Your products and insights
Any credential with the read scope (agent keys always carry read; OAuth grants it by default). Reads mirror the dashboard exactly: insights, scan history and the bottleneck analysis stay readable on any plan state (the same read-only view an expired subscription sees); fix cards additionally require the ai_fix_cards facility and keyword ideas the keyword_research facility. compare_products always lists products and scores; its visitor columns need website_analytics and its revenue columns analytics_conversion.
| Tool | Credential | Description |
|---|---|---|
list_products | any credential | Your products on krawlup with their latest scan scores — the source of product keys for every other tool. |
get_my_products_status | read | Your products with their directory visibility. |
compare_products10/min | read | All your products side by side, sorted by any column: unique visitors, views, revenue totals with refunds netted, average revenue per conversion, and scan scores — lifetime or over a window (today / 7d / 30d / 90d). Visitor columns need the website_analytics facility and revenue columns analytics_conversion (gated columns come back null with a note). |
get_my_subscription | read | The founder's current subscription: plan, status (active / trial / 3-day grace / expired), abilities, limits (0 = unlimited), this period's usage meters, and what the founder can currently do. Call this first. |
get_insights | read | Full latest report for one product: performance/AEO/authority scores, failing audits, the recommended First Edit, and unresolved AI fix cards (require the ai_fix_cards facility). |
get_fix_cards | read | Every stored AI fix card for one product — what/why/steps plus a paste-ready agent prompt per issue. Requires the ai_fix_cards plan facility. |
get_bottleneck | read | The stored AI bottleneck analysis — the one edit that matters most, why now, expected impact, steps. |
get_scan_history | read | Score-over-time series (last 100 scans): performance, AEO, OpenPageRank, with per-run source and timestamp. |
get_keyword_ideas | read | Stored keyword research: intent-clustered keyword ideas with search volume/difficulty estimates and prioritized content actions. Requires the keyword_research plan facility. |
First-party analytics
Requires an active subscription (or the 3-day renewal grace window). Conversion events additionally require the analytics_conversion facility and the stored AI insight the analytics_ai_insights facility — without them they are stripped from the response.
| Tool | Credential | Description |
|---|---|---|
get_analytics_snippet | read | The exact <script> tag that installs krawlup first-party analytics on the product's own website. Your agent can insert it into the site <head> itself. |
get_website_analytics | read | First-party analytics for the product's own website: visitors, sessions, bounce, top pages/referrers/countries — conversion events and AI insights when the plan carries those facilities. |
Directory management
submit scope. set_product_public additionally requires a paid plan; the 403 explains the trial/upgrade state. Adding always starts private.
| Tool | Credential | Description |
|---|---|---|
add_product5/hour | submit | Add a product from just its URL: scrapes the site (name, tagline, description, icons) and adds it to the dashboard. Adding never publishes — the product stays private until set_product_public. |
set_product_public10/hour | submit | Publish an added product to the public directory. Paid plans only (the 403 explains the trial/upgrade state). |
set_product_private10/hour | submit | Remove a product from the public directory (always allowed). |
Scanning
rescan scope, agent keys only: OAuth connections are never granted it. Spends the same plan allowances as the dashboard Rescan button.
| Tool | Credential | Description |
|---|---|---|
trigger_rescan10/min | rescan · keys only | Starts a fresh full analysis in the background and returns immediately; poll get_insights until scanPending is false. Spends the same plan allowances as a dashboard rescan. |
REST API
The same agent key authenticates a small REST twin under /agent/v1, for scripts that do not speak MCP. Scope, budget and gating rules match the MCP tools 1:1.
| Method | Route | Purpose |
|---|---|---|
| GET | /api/agent/v1/subscription | The founder's plan: status, abilities, limits and this period's usage meters. |
| GET | /api/agent/v1/products | Your products (public and private) with latest scores. |
| GET | /api/agent/v1/products/overview | All products side by side, sortable: visitors, views, revenue totals and averages, scores — lifetime or ?range=today|7d|30d|90d. Query params: range, sortBy, order, limit. |
| GET | /api/agent/v1/products/{key} | Full insights snapshot for one product + an agent-actionable summary (First Edit, fix cards, bottleneck). |
| GET | /api/agent/v1/products/{key}/keywords | Stored keyword research (intent clusters, volume/difficulty, content actions). |
| POST | /api/agent/v1/products/{key}/rescan | Start a full rescan (rescan scope, 10 requests/minute per key). Returns remaining allowances + poll instructions. |
| POST | /api/agent/v1/products | Add a product from a URL (submit scope). Same pipeline as the browser form; the product starts private. |
| POST | /api/agent/v1/publish | Flip a product's directory visibility (submit scope, paid-only publish, 10 requests/hour). |
curl -H "Authorization: Bearer sk_ag_YOUR_KEY" \ https://api.krawlup.com/agent/v1/products
Install the analytics tag
krawlup's first-party analytics is 3,287 bytes parsed, 1,383 bytes gzipped and 100% cookieless: pageviews on load and on SPA route changes, custom conversion goals, checkout attribution, and it honors Do Not Track. Every product gets its own token on the Dashboard → products → Website tab, or your agent can fetch it with the get_analytics_snippet MCP tool.
Zero Dependencies (HTML tag)
Deferred script — 3,287 bytes parsed, 1,383 bytes gzipped — for static sites, landing pages, or custom frameworks.
NPM Library (@krawlup/analytics-tag)
Type-safe client library for Next.js, Nuxt, React, Vue, SvelteKit, and Astro.
WordPress & WooCommerce
Coming SoonWordPress & WooCommerce plugin with automated checkout attribution — coming soon.
Shopify (Web Pixel)
NativeCopy-paste Customer Events custom pixel with native order attribution.
Zero dependencies (HTML tag)
Prefer no package? Paste this in the <head> of your website or template:
<script>window.krawlup=window.krawlup||function(){(window.krawlup.q=window.krawlup.q||[]).push(arguments)};</script>
<script defer src="https://krawlup.com/t.js" data-site="YOUR_ANALYTICS_TOKEN"></script>Data appears in your Website tab within 60 seconds of the first visit. The script loads asynchronously without blocking DOM rendering or Core Web Vitals.
As a library (NPM)
For Next.js, Nuxt, React, Vue, SvelteKit, and Astro projects, install the official @krawlup/analytics-tag package:
npm i @krawlup/analytics-tag
import { injectKrawlup, trackEvent } from '@krawlup/analytics-tag'
// once, client-side, in your app entry
injectKrawlup({ site: 'YOUR_ANALYTICS_TOKEN' })
// custom conversion goals anywhere; safe to call before the tag loads
trackEvent('purchase', { value: 49.0, currency: 'USD' })WordPress & WooCommerce
Using WordPress or WooCommerce? The WordPress & WooCommerce plugin is coming soon. Until then, connect via the HTML script tag:
Krawlup Analytics
Coming SoonWordPress & WooCommerce plugin with automated WooCommerce attribution.
Notice: WordPress plugin coming soon
The Krawlup plugin for WordPress & WooCommerce isn't released yet. In the meantime, install tracking via the HTML Script Tag above.
- Install & Activate: In your WordPress dashboard, navigate to Plugins → Add New Plugin → Upload Plugin, choose the downloaded krawlup-analytics.zip, then click Install Now and Activate.
- Paste Site Token: Go to Settings → Krawlup Analytics, paste your product's Site Token (from your Krawlup dashboard), and click Save Changes.
- Automated WooCommerce Attribution: When WooCommerce is active, completed checkout totals and currencies are automatically tracked via the
woocommerce_thankyouhook. Idempotency guarantees page refreshes by buyers never double-count revenue. - Internal Traffic Filter: Automatically excludes logged-in WordPress administrators and editors from firing tracking hits to keep your visitor metrics pristine.
Shopify (Custom Web Pixel)
Running a Shopify store? Connect via Shopify's native Customer Events custom pixel with zero app installation and zero code modifications:
Shopify Customer Events Web Pixel
Native, cookieless visitor and revenue attribution inside Shopify's Customer Events sandbox.
- Open Customer Events: In your Shopify Admin, navigate to Settings → Customer Events.
- Add Custom Pixel: Click Add custom pixel, enter pixel name Krawlup Analytics, and click Add pixel.
- Paste Pixel Code: Replace any placeholder code with the snippet below (inserting your product's Site Token from your Krawlup dashboard).
- Save & Connect: Click Save, and then click Connect in the upper right.
// Shopify Admin -> Settings -> Customer Events -> Add custom pixel
const SITE_TOKEN = "YOUR_ANALYTICS_TOKEN";
const ENDPOINT = "https://api.krawlup.com/t/hit";
function send(event, t, n, d) {
const doc = event?.context?.document || init?.context?.document;
const p = {
k: SITE_TOKEN,
t: t,
h: doc?.location?.host || "",
p: doc?.location?.pathname || "/",
r: doc?.referrer || "",
n: n,
d: d
};
fetch(ENDPOINT, {
method: "POST",
headers: { "Content-Type": "text/plain" },
body: JSON.stringify(p),
keepalive: true
}).catch(() => {});
}
analytics.subscribe("page_viewed", (event) => send(event, "pageview"));
analytics.subscribe("checkout_completed", (event) => {
const c = event.data?.checkout;
if (!c) return;
send(event, "event", "purchase", {
value: parseFloat(c.totalPrice?.amount || 0),
currency: c.totalPrice?.currencyCode || "USD",
order_id: c.order?.id || c.token || ""
});
});theme.liquid, remove it after enabling the Web Pixel to prevent duplicate visitor counts. Limits and budgets
- Free site report reads are unlimited; scans are not: get_site_report is a cached read with no cost, while run_site_report spends one of the same two full scans per calendar month the /site-report website gives you — counted per agent credential (or per IP when anonymous), in a budget separate from browser visitors.
- 60 requests/minute per credential across all tools; tighter per-tool limits are shown in the tool tables.
- Reads are free and unlimited within the rate limit — no read consumes plan allowances. Some reads are facility-gated exactly like the dashboard: fix cards need the ai_fix_cards facility and keyword ideas the keyword_research facility; conversion events and the stored AI insight arrive only when the plan carries theirs.
- Rescans spend plan allowances: one full analysis plus one page-speed check per billing period, exactly like the dashboard button.
- Publishing is paid-only: set_product_public works on an active paid subscription; trial users must upgrade first. The agent never pays for anything.
- Analytics needs a subscription: get_analytics_snippet and get_website_analytics answer only while the subscription is active or inside the 3-day renewal grace window.
