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.
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 keyExample
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.