synoppy (Python)
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 synoppy
Quickstart
import 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"])
Credits
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"])
Methods
| Method | Endpoint | Notes |
|---|---|---|
read(url, formats=, only_main_content=, timeout_ms=, render=, wait_ms=) / scrape(...) |
POST /api/scrape |
render is True/False/"auto" |
screenshot(url, full_page=, wait_ms=, timeout_ms=) |
POST /api/screenshot |
returns a PNG data URL; can 503 RENDER_UNAVAILABLE |
crawl(url, limit=) |
POST /api/crawl |
limit 1–25 · requires a key |
map(url) / sitemap(url) |
POST /api/map |
|
search(query, max_results=, markdown=, include_domains=, exclude_domains=, fanout=) |
POST /api/search |
ranked live-web results · requires a key |
extract(url, prompt=, instruction=, schema=) |
POST /api/extract |
instruction aliases prompt; schema (a JSON Schema dict) constrains output to that exact shape · AI · requires a key |
classify(url, labels=) |
POST /api/classify |
NAICS/SIC by default, or your own labels · AI · requires a key |
enrich(url=, domain=, email=) / brand(...) |
POST /api/brand |
pass one of url / domain / work email |
images(url) |
POST /api/images |
Every response also carries creditsUsed and creditsRemaining.
act() is coming soon — /api/act is not live yet, and calling this
method raises NotImplementedError.
Errors
from synoppy import SynoppyError
try:
client.crawl("https://example.com")
except SynoppyError as err:
print(err.code, err.status, err)
MIT licensed.
Metadata
Release files for synoppy 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| synoppy-1.1.1.tar.gz | 5.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| synoppy-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.6 kB
Release files / synoppy-1.1.1.tar.gz
| Download URL | synoppy-1.1.1.tar.gz |
|---|---|
| Size | 5.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8238511d22707ecb8d1b42c284554a7f89722c4c275d23f71e12434faaf5f968
|
|
BLAKE2b-256 checksum How to use checksums |
82e1161930806cdc3e5a2f616aa628d0efbff029c71ee0dcd240a5fa69c02fdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.8
|
Release files / synoppy-1.1.1-py3-none-any.whl
| Download URL | synoppy-1.1.1-py3-none-any.whl |
|---|---|
| Size | 6.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
77e65b12ad0a06a29f82065bf67ec5999242c06a7bca5f2e0acd3a1e4492598f
|
|
BLAKE2b-256 checksum How to use checksums |
4231665a1e5ed825444b1dc0b00dda60455ab83bfd61da44d3c5e85ec7c74236
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.8
|