Give your AI agents the whole web. Synoppy is the web-data layer for AI agents — one key to read, crawl, map, extract, classify & enrich any site, plus screenshots and image scraping. Clean, structured, LLM-ready data, with no scraping stack to run.
Get a free key → · Docs · synoppy.com
pip install synoppyimport os
from synoppy import Synoppy
client = Synoppy(api_key=os.environ["SYNOPPY_API_KEY"])
# Read any URL → clean markdown (force JS rendering + settle delay)
page = client.read(
"https://stripe.com/blog",
formats=["markdown"],
render="auto",
wait_ms=500,
)
print(page["markdown"])
print(page["metadata"]["rendered"], page["metadata"]["bytesIn"])
# Screenshot a URL → PNG data URL
shot = client.screenshot("https://stripe.com", full_page=True)
print(shot["screenshot"][:40], shot["statusCode"])
# Crawl a site
site = client.crawl("https://example.com", limit=25)
print(site["count"], "of", site["discovered"], "pages")
# AI structured extraction (prompt, a.k.a. instruction)
result = client.extract("https://news.ycombinator.com", prompt="Return { title, summary, topics }")
print(result["data"], result["usage"])
# Brand intelligence — from a url, a domain, or a work email
brand = client.enrich(domain="linear.app")
print(brand["colors"], brand["fonts"], brand["socials"])Every successful response includes creditsUsed (number) and
creditsRemaining (number or None) so you can track metered usage:
page = client.read("https://stripe.com")
print("used", page["creditsUsed"], "remaining", page["creditsRemaining"])Every response also carries creditsUsed and creditsRemaining.
act() is coming soon — /api/act is not live yet, and calling this
method raises NotImplementedError.
from synoppy import SynoppyError
try:
client.crawl("https://example.com")
except SynoppyError as err:
print(err.code, err.status, err)MIT licensed.
