How to Summarise Webflow with Claude Code

Use EnConvert Distill to extract structured data from Webflow documentation and support pages into a Claude Code pipeline from up to 50 URLs in one call

Get API key

A developer building a Claude Code pipeline that reads Webflow documentation or support pages needs structured page data before passing it into a prompt or agent context. Webflow documentation pages mix article content with navigation, sidebars, and related links, and scraping them by hand requires CSS selectors that break when Webflow updates its theme. EnConvert Distill accepts up to 50 Webflow page URLs and a schema, then returns a results array normalised to exactly that schema in one synchronous call. The extracted content is ready to pass into a Claude Code context window or prompt with no HTML parsing.

Example

python
import os

import anthropic
import requests

BASE_URL = "https://api.enconvert.com/v2"
headers = {"X-API-Key": os.environ["ENCONVERT_API_KEY"], "Content-Type": "application/json"}

documentation_urls = [url.strip() for url in os.environ["WEBFLOW_DOC_URLS"].split(",")]  # public Webflow documentation or support page URLs

response = requests.post(
    f"{BASE_URL}/distill",
    headers=headers,
    json={
        "urls": documentation_urls,
        "schema": {
            "title": "The documentation page title",
            "body": "The main documentation content, excluding navigation and related links",
            "product_area": "The Webflow product or feature area covered",
            "topic": "The main technical topic addressed by the page",
            "last_updated": "The last updated date shown on the page, if available",
        },
    },
    timeout=120,
)

if response.status_code == 402:
    raise RuntimeError("Distill requires a paid plan")
response.raise_for_status()

articles = []
for result in response.json()["results"]:
    if result["status"] != "completed":
        print(f"Skipped {result['url']}: {result['status']}")
        continue
    rq = result.get("render_quality", 1.0)
    if rq < 0.5:
        print(f"Low render quality for {result['url']}: {rq}")
        continue
    data = result.get("data") or {}
    articles.append(
        f"Source: {result['url']}\n"
        f"Title: {data.get('title')}\n"
        f"Product area: {data.get('product_area')}\n"
        f"Topic: {data.get('topic')}\n"
        f"Last updated: {data.get('last_updated')}\n\n"
        f"{data.get('body')}"
    )

if not articles:
    raise RuntimeError("No Webflow pages passed the extraction checks")

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=4096,
    system=(
        "You answer questions about Webflow. Use only the articles provided, "
        "and cite the source URL for every statement you make."
    ),
    messages=[{"role": "user", "content": (
        "Articles:\n\n" + "\n\n---\n\n".join(articles) +
        "\n\nQuestion: Summarise what each page covers, which Webflow product area it belongs to, and when it was last updated."
    )}],
)

for block in message.content:
    if block.type == "text":
        print(block.text)

What you get back

Distill returns a results array with one entry per URL, each holding a data object normalised to the schema’s keys, regardless of the surrounding navigation or Webflow theme. Scraping Webflow pages by hand requires CSS selectors that break when Webflow updates its theme, and passing raw page HTML into a Claude Code prompt fills the context window with navigation and boilerplate that reduces answer quality.


Distill runs on paid plans only, and the free tier returns a 402 for this endpoint, so the free key covers EnConvert’s other endpoints.

Get free API key — 500 ops per month, no card required.