Click through the three stages of the deterministic extraction pipeline.
MorphAPI navigates to target URLs using isolated Playwright workers. It renders dynamic JavaScript, client-side hydration, and dynamic DOM trees before testing candidate selectors.
Every web scraper eventually fails because websites are living, unstable documents. When frontend teams redesign or randomize CSS hash names, hardcoded selectors die—taking production pipelines with them. MorphAPI turns fragile scrapers into self-healing, type-safe API infrastructure.
$ curl https://api.legacy-scraper.internal/v1/pricing$ curl https://gateway.morphapi.local/v1/extract/pricingEngineered as a hybrid runtime: the speed and determinism of raw headless browser evaluation paired with the spatial reasoning of high-parameter generative AI when layouts break.
Standard production traffic does not invoke an LLM. Playwright evaluates active CSS/XPath selector maps directly on rendered headless Chromium DOM. 100% deterministic, zero hallucination risk, and zero inference cost.
When DOM mutation causes 0 matches, the sanitized DOM tree is passed to NVIDIA NIM. The model infers visual-spatial coordinates and candidate CSS selectors based on semantic content and structural container patterns.
A cyclic graph manages the self-healing workflow: detect failure → isolate DOM → propose candidates → verify in Playwright → compute AST diff → hold at human review gate or auto-promote per endpoint policy.
Browser workers operate within a locked network jail. DNS resolution enforces private subnet blocking (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, AWS 169.254.169.254) with strict wildcard scope matching.
Consume live web data via standard REST JSON or native Model Context Protocol (MCP) tools for Claude & Cursor.
# Fetch extracted data deterministically
curl -X GET "http://localhost:8001/v2/api/default/fastapi-releases" \
-H "Accept: application/json" \
-H "X-Bypass-Cache: false"
# Response payload: 200 OK (38ms)
{
"data": [
{ "version": "0.115.6", "releaseDate": "2026-10-18T10:00:00Z" }
],
"meta": { "config_version": 2, "cached": false }
}