weavn

API

One endpoint.
Any URL.
Conversion intelligence.

POST a URL, get structured JSON back — percentile benchmarks and ranked fixes.

307 checks~90s mediancache hits free
TERMINAL · CURL
curl -X POST \
  https://api.weavn.app/v1/scan \
  -H "Authorization: Bearer weavn_live_••••" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-site.com"}'

↓ 200 OK · 87s

RESPONSE.JSON200 OK
{
  "scan_id": "sc_a8d3f2c1",
  "score": 61,
  "verdict": "Fair",
  "findings_summary": 23
}

POST any web page and get conversion intelligence back as JSON — a 0–100 score, ranked findings with on-page evidence, fixes with rewritten copy, and percentile benchmarks for the vertical. Drop it into an e-commerce app, a CRM feature, a site builder, or an AI agent — the same shape on every call, so you build against it once.

WHAT YOU GET

What comes back — and why it means something.

01

What it checks

307 checks across 27 conversion categories — hero, trust, CTA, social proof, and more — run against the exact page you submit.

02

What a finding is

Each issue comes back as a structured finding: what's wrong, the on-page evidence behind it, a ranked priority, and a rewritten fix you can paste in.

03

Why percentile, not a raw score

Not an average. A percentile.

Your score is positioned against a live corpus of real scans in the same vertical — so '63rd percentile' says something a generic audit number can't.

QUICKSTART

From API key to first call.

Start with a key and a no-code test, then make one call and build from there.

01

Get an API key

25 free scans, no subscription.

Get a key →
02

Test a scan in the playground

Run a real scan in the browser — no code required.

Open the playground →
03

Make your first call

POST a URL with your key. The curl, Node, and Python above are complete and copy-pasteable.

Read the reference →
04

Build your integration

Wire the structured response into your app, agent, or dashboard.

See the docs →

You don't have to hand-write any of this. The scan API is a standard REST endpoint — any HTTP client that sends a Bearer token and a JSON body works, and AI coding tools like Cursor and Claude can build against it directly.

One POST request. 307 checks fire in sequence across 27 categories. Structured JSON returns.

01
INPUT
02
PROCESSING
03
OUTPUT
terminal · curl
curl -X POST \
  https://api.weavn.app/v1/scan \
  -H "Authorization: Bearer weavn_live_••••" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-site.com"}'
307 checks27 categories~90s median
SCANNINGai · 307 checks
hero_section
value_proposition
trust_credibility
cta_conversion
social_proof
benchmark_positioning
copy_effectiveness
mobile_experience
trust_signals
running 307 checks · 27 categories ···
response.json200 OK
{
"scan_id": "sc_a8d3f2c1",
"score": 61,
"verdict": "Fair",
"findings_summary": 23,
"findings": [ … ],
"industry": "B2B SaaS",
"scan_meta": { "cost_usd": 0.15 }
}

Build against this schema once. Every URL returns identical structure.

REQUEST PARAMETERS · POST /api/v1/scan

POST /api/v1/scan · 7 params1 required · application/json
urlstringrequiredURL to scan. Scheme added if absent.
asyncbooleanoptionalfalseReturn immediately; result POSTed to webhook_url.
webhook_urlstringoptionalDelivery endpoint. Required when async: true.
pagesnumber | string[]optional1Page count (1–5) or explicit path array.
fieldsstring[]optionalallsummary · findings · copy_rewrites · growth_blueprint · benchmark
finding_limitnumberoptional10Max findings returned. Range: 1–20.
finding_depth"brief" | "full"optional"full"Minimal vs. complete per-finding field set.

RESPONSE SCHEMA

The response never changes shape.

response · application/json · 200 OK
{
  "scan_id": "sc_a8d3f2c1",
  "url": "https://your-site.com",
  "score": 61,
  "verdict": "Fair",
  "findings_summary": 23,
  "findings": [ … ],
  "strengths": [ … ],
  "summary": "",
  "copy_rewrites": { … },
  "growth_blueprint": [ … ],
  "benchmark": {
    "industry_average": 58,
    "industry_percentile": 63,
    "top_10_percent_score": 82,
    "sample_size": 4812
  },
  "scan_meta": { "cost_usd": 0.15, "duration_ms": 87432 }
}

scan_meta.cost_usd is the amount billed to your account for this scan — not Weavn's internal compute cost.

· Build against this schema once — it never changes· Every finding cites visible page evidence· Same structure regardless of site type· v1 is stable — breaking changes ship as v2
findings[0] · full object shape
{
"id": "finding_001",
"title": "Hero headline is feature-led, not outcome-led",
"severity": "critical",
"dimension": "Conversion Architecture",
"impact": "high",
"impact_estimate": "+12-18% conversion lift",
"explanation": "Headline names the feature set, not the customer outcome",
"fix_steps": [ … ],
"rewritten_copy": "See revenue impact in one dashboard.",
"confidence": "high",
"fix_effort": "hours",
"priority": 1
}

Every finding in every scan returns this exact shape.

CHECK CATEGORIES · 27 GROUPS · 307 CHECKS

HERO_*Hero Section
TRUST_*Trust & Credibility
CTA_*CTA & Conversion
MSG_*Messaging & Clarity
SOCIAL_* · SPQ_*Social Proof
SEO_*SEO & Metadata
OFFER_*Offer & Pricing
OFC_*Offer Clarity
OBJ_*Objection Handling
PSY_*Psychology & Persuasion
SPEC_*Specificity & Claim Quality
DIFF_*Competitive Differentiation
NAV_*Navigation & UX
MOBILE_*Mobile Experience
SPEED_*Page Speed & Technical
NARR_*Narrative Flow
PAGE_*Page & Content Gaps
CONV_*Conversion Path Expansion
RET_*Return Visitor & Retention
EMAIL_*Email & Retention
CHECK_*Checkout & Purchase Friction
PROD_*Product Page
ECOM_*E-commerce Specific
SAAS_*SaaS-Specific
SERV_*Agency & Service
ACCESS_*Accessibility & Inclusion
UNIV_*Universal & Cross-Vertical

Each strengths[] entry is { check_id, label, observation } — the check_id category prefix maps to a group above (e.g. HERO_001, TRUST_013, CTA_016).

ERROR CONTRACT

All errors return the same envelope so your handler never needs to branch on response shape — only on error.code.

When something goes wrong, the response tells you exactly what failed and whether to retry. Most issues are one of three things: a bad or unreachable URL, a missing or invalid API key, or a site that blocks automated scanning.

status codes · error.code reference
400INVALID_URL / INVALID_REQUESTurl missing, malformed, or no valid domain
401AUTH_INVALIDBearer token absent, malformed, or revoked
402INSUFFICIENT_CREDITSmulti-page scan requested with no remaining credits
402TRIAL_EXHAUSTEDfree 25-scan trial exhausted — upgrade plan to continue
422BOT_BLOCKEDsite uses Cloudflare Enterprise or equivalent bot protection
422EXTRACTION_FAILEDscanner could not extract content after two attempts
429RATE_LIMITEDrequest rate limit exceeded — back off and retry
500SCAN_FAILED / INTERNAL_ERRORanalysis or infrastructure error — safe to retry
error response · all non-2xx422 BOT_BLOCKED example
{
"error": {
"code": "BOT_BLOCKED",
"message": "This URL uses bot protection that prevents automated access.",
"status": 422
},
"blocked": true
}

Retry 429 and 5xx with backoff. Do not retry 400/401/402/422 — the error is structural, not transient.

WEBHOOK PAYLOAD

Every async and batch scan delivers a POST to your registered endpoint when complete. Three delivery attempts: immediate, +5 min, +30 min. Verify with the X-Weavn-Signature header (HMAC-SHA256 of body, keyed with your webhook secret).

scan.completed
{
"event": "scan.completed",
"scan_id": "sc_a8d3f2c1",
"url": "https://your-site.com",
"score": 61,
"data": {
"domain": "your-site.com",
"verdict": "Fair"
}
}
scan.failed
{
"event": "scan.failed",
"scan_id": "sc_a8d3f2c1",
"url": "https://your-site.com",
"score": null,
"data": {
"domain": "your-site.com",
"blocked": true,
"code": "BOT_BLOCKED"
}
}
X-Weavn-Eventscan.completed | scan.failed
X-Weavn-SignatureHMAC-SHA256 hex of body
X-Weavn-Attempt1 | 2 | 3

BUILT FOR AGENTS AND AUTOMATION

Deterministic output. Every call.

An agent can only act on output it can parse identically every time. The same URL always returns the same schema — scores, findings, severity, and copy rewrites — whether it runs at 3am in a batch or inline in a user flow.

AGENT LOOP PATTERN

01BATCH SUBMIT

POST /api/v1/scan/batch

Up to 10 URLs in a single request. All scan in parallel. Returns immediately with a batch_id.

02ASYNC PROCESSING

status: pending

The engine runs 307 checks per URL. Parallel execution — a 10-URL batch completes in roughly the same wall time as one.

03WEBHOOK DELIVERY

event: scan.completed

Single structured payload delivered to your endpoint. Three delivery attempts with exponential backoff.

POST/api/v1/scan/batch· up to 10 URLs, parallel
GET/api/v1/scans· list past scans (history) · paginated (limit + cursor)
GET/api/v1/scans/:id· retrieve one scan — poll async without a webhook
GET/api/v1/webhooks· list registered endpoints
POST/api/v1/webhooks· register endpoint, secret returned once
DELETE/api/v1/webhooks· remove endpoint by id

WHAT YOU CAN BUILD

Six integrations. One endpoint.

Diagnose any e-commerce store

A merchant enters their store URL; your app scans it and shows the conversion score with the highest-impact fixes — embedded in your app or onboarding flow.

POST /api/v1/scan · store URL

Show a live conversion score in your site builder

Embed a live conversion score for any page in Webflow, Framer, or a custom CMS. Re-scan on publish; surface the delta.

POST /api/v1/scan · on publish / deploy hook

Audit every new lead's website automatically

When a lead record is created, auto-scan their website. Attach the score and top findings to the deal before the first call.

triggered from your CRM webhook

Generate white-label reports for agency clients

Batch-scan client sites on a schedule. Feed findings into your own branded report template. Deliver to clients without exposing the underlying engine.

POST /api/v1/scan/batch

Feed conversion data straight into an AI agent

Feed scores and structured findings directly into an LLM agent. The JSON schema is stable — the agent parses it the same way every run.

structured JSON → agent context

Bulk-audit a prospect list and rank by score

Upload a CSV of target domains. Batch-scan in parallel. Filter by score threshold to prioritize outreach on sites with the highest lift potential.

POST /api/v1/scan/batch → filter by score

API PLANS · RATE DECREASES WITH VOLUME

PLAYGROUND

25 free

then $0.30/scan

Developers evaluating the API before building. No commitment required.

GET API KEY →
trial scans25
overage rate$0.30/scan
scans / month
async mode
batch endpoint
webhooks
rate limits5/min
JSON response
cache hits free
supportdocs only
dedicated limits
SLA guarantee
invoice billing

DEV

$59

/mo · 250 scans

Solo developers integrating conversion intelligence into their first product.

START DEV →
trial scans
overage rate$0.30/scan
scans / month250
async mode
batch endpoint
webhooks
rate limits60/min
JSON response
cache hits free
supportemail
dedicated limits
SLA guarantee
invoice billing

BUILDER

$179

/mo · 1,000 scans

Teams building audit pipelines or integrating Weavn into client workflows.

START BUILDER →
trial scans
overage rate$0.25/scan
scans / month1,000
async mode
batch endpoint
webhooks
rate limits200/min
JSON response
cache hits free
supportemail
dedicated limits
SLA guarantee
invoice billing

SCALE

$449

/mo · 3,000 scans · best value

High-volume integrations and teams that need dedicated infrastructure and rate limits.

START SCALE →
trial scans
overage rate$0.20/scan
scans / month3,000
async mode
batch endpoint
webhooks
rate limits500/min
JSON response
cache hits free
supportpriority email
dedicated limits
SLA guarantee
invoice billing

ENTERPRISE

Custom

from $0.18/scan · SLA

Organizations requiring custom volume, SLA guarantees, and dedicated support.

TALK TO US →
trial scans
overage ratefrom $0.18
scans / monthcustom
async mode
batch endpoint
webhooks
rate limitsdedicated
JSON response
cache hits free
supportdedicated
dedicated limits
SLA guarantee
invoice billing

PLATFORM CAPABILITIES

CACHE POLICY

Cache policy

Identical URL rescanned within 24h returns cached result at zero cost.

Scan the same URL multiple times in your pipeline for free.

cache_hit: true · cost_usd: 0.00

ASYNC MODE

Async mode

POST with async: true. Result delivered to your endpoint when ready.

Don't block your process waiting 90 seconds — fire and forget.

async: true · webhook_url: your-endpoint

BATCH ENDPOINT

Batch endpoint

POST /api/v1/scan/batch — parallel execution, single webhook response.

Audit a full site's key pages in one request.

POST /api/v1/scan/batch · up to 10 URLs

RESPONSE TIME

Response time

p50: 87s · p95: 142s · measured across 30-day rolling window.

p95 is 142s — plan timeouts accordingly.

p50: 87s · p95: 142s

TECHNICAL QUESTIONS

How does authentication work?

Every request requires a Bearer token in the Authorization header. Keys start with weavn_live_ and are scoped to your account and plan. Get your key from the developer portal. Do not expose keys in client-side code — requests must originate server-side.

Authorization: Bearer weavn_live_••••

Sync or async — which should I use?

Sync holds the connection and returns the full response when the scan completes (~90s). Use it for single scans where you can wait. Async returns immediately with a scan_id and POSTs the result to your webhook_url when ready — use it for batch processing or to avoid timeouts.

async: false (sync) · async: true + webhook_url

How does caching work?

Identical URLs rescanned within 24 hours return the cached result at zero cost. Cache is invalidated automatically when page content changes significantly — detected via fingerprint comparison.

cache_hit: true · cost_usd: 0.00

What's in the batch endpoint?

POST up to 10 URLs in one request to /api/v1/scan/batch. All URLs scan in parallel. Results are delivered to your webhook_url as a single structured payload when all scans complete. Each URL in the batch consumes one scan credit.

POST /api/v1/scan/batch · max 10 URLs

What if a site blocks the scanner?

Weavn uses Browserless Pro with stealth mode and a real Chrome user agent. Most sites scan cleanly. Cloudflare Enterprise with aggressive bot detection occasionally blocks — the API returns a structured error with error.code: "BOT_BLOCKED" and blocked: true.

error.code: BOT_BLOCKED · blocked: true

Is there an uptime SLA?

Enterprise plans include a formal SLA. All other plans target 99.5% uptime. Status and incident history available at status.weavn.app. Planned maintenance is announced 48 hours in advance via dashboard notification.

target_uptime: 99.5% · SLA: enterprise_only

Want to understand what fires under the hood? See the engine →

Ready to build?

25 free scans. No subscription. Start in minutes.

Same engine on every plan. Build against the schema once.

Need results without code? Go to the dashboard →