Test the scrapegraph-py v2 SDK end-to-end
Hard rules
- DO NOT push directly to
main. main is the protected release branch. If changes are needed, create a feature branch and open a PR. Never git push origin main, never force-push to main, never self-merge.
- Never hardcode or commit the API key. Accept it from the user at runtime. Pass it via the
SGAI_API_KEY env var or the ScrapeGraphAI(api_key=...) constructor. Do not write it to any file, log, or commit.
- Do not modify production config (
env.py, release workflows, pyproject.toml version) as part of testing.
Required input
Ask the user for their ScrapeGraph API key before doing anything else:
I need a ScrapeGraph API key to run the live SDK tests. Please paste it (I will use it in-process only and will not write it to disk or commit it).
Export it for the session only:
export SGAI_API_KEY="<user-provided-key>"
Scope — the v2 SDK surface
The SDK exposes two top-level classes in scrapegraph_py:
ScrapeGraphAI (sync) — from scrapegraph_py.client
AsyncScrapeGraphAI (async) — from scrapegraph_py.async_client
Note: there is no smartscraper, markdownify, or agentic_scraper method. Those names are stale. Use the endpoints below — they mirror the Playground (Scrape, Extract, Search, Crawl, Monitor).
Endpoints to exercise
| Endpoint |
Sync method |
Async method |
| Scrape |
client.scrape(...) |
await aclient.scrape(...) |
| Extract |
client.extract(...) |
await aclient.extract(...) |
| Search |
client.search(...) |
await aclient.search(...) |
| Crawl |
client.crawl.start(...) |
await aclient.crawl.start(...) |
| Monitor |
client.monitor.create(...) |
await aclient.monitor.create(...) |
| Credits |
client.credits() |
await aclient.credits() |
Namespace sub-methods (cover the full lifecycle)
client.crawl — start, get, stop, resume, delete
client.monitor — create, list, get, update, pause, resume, activity, delete
client.history — list, get (supporting, not shown in Playground)
The async client exposes the same namespaces under the same attribute names, with async methods. health() and close() also exist as utility methods — call health() as a sanity check at the start of the run.
Scope — test the WHOLE SDK
Every public method above must be exercised against the live API on both ScrapeGraphAI and AsyncScrapeGraphAI. Do not mock.
For each call:
- Use a minimal valid payload (e.g.
https://example.com + trivial prompt).
- Record the response type, that it matches the returned Pydantic model /
ApiResult, and any surfaced error.
- For
crawl / monitor: after start/create, also exercise get, then stop/pause+resume, then delete so the full lifecycle is covered and no test artifacts are left behind.
- Call
credits() before and after the full run so the user can see credit consumption.
Procedure
- Confirm the working directory is clean (
git status). If not, stop and ask the user.
- Confirm you're not on
main. If making commits, branch first: git checkout -b test/sdk-smoke-YYYYMMDD. Running tests without committing does not require a branch.
- Install deps:
uv sync.
- Run the existing unit tests first:
uv run pytest tests/ -v. Fix any failures before live testing.
- Write a throwaway script (e.g.
scripts/smoke_sdk.py) that:
- Imports
ScrapeGraphAI and AsyncScrapeGraphAI from scrapegraph_py.
- Calls every top-level method and every namespace method listed above, on both clients.
- Prints a compact table: method | sync ok | async ok | notes.
- Run it:
uv run python scripts/smoke_sdk.py.
- Delete the throwaway script. Do not commit it.
- Report a summary: which methods passed, which failed, credits consumed, and any suspicious response shapes.
If you find a bug
Reminders to surface to the user
- Live tests consume API credits. Confirm before running.
- If any method returns a 4xx/5xx, report it verbatim — do not retry silently more than once.
- If the user's key is invalid or rate-limited, stop and tell them; do not swap in any other key.
Source: ScrapeGraphAI/scrapegraph-py — distributed by TomeVault.
1---2name: test-sdk3description: End-to-end test the scrapegraph-py v2 SDK against the live API using a user-provided API key. Exercises every public method on both ScrapeGraphAI (sync) and AsyncScrapeGraphAI (async), including the crawl/monitor/history namespaces. Use when the user asks to "test the SDK", "run full SDK tests", or validate a release candidate. NEVER push directly to main — all changes go via a feature branch + PR. Use when this capability is needed.4---56# Test the scrapegraph-py v2 SDK end-to-end78## Hard rules9101. **DO NOT push directly to `main`.** `main` is the protected release branch. If changes are needed, create a feature branch and open a PR. Never `git push origin main`, never force-push to main, never self-merge.112. **Never hardcode or commit the API key.** Accept it from the user at runtime. Pass it via the `SGAI_API_KEY` env var or the `ScrapeGraphAI(api_key=...)` constructor. Do not write it to any file, log, or commit.123. **Do not modify production config** (`env.py`, release workflows, `pyproject.toml` version) as part of testing.1314## Required input1516Ask the user for their ScrapeGraph API key before doing anything else:1718> I need a ScrapeGraph API key to run the live SDK tests. Please paste it (I will use it in-process only and will not write it to disk or commit it).1920Export it for the session only:2122```bash23export SGAI_API_KEY="<user-provided-key>"24```2526## Scope — the v2 SDK surface2728The SDK exposes two top-level classes in `scrapegraph_py`:2930- `ScrapeGraphAI` (sync) — from `scrapegraph_py.client`31- `AsyncScrapeGraphAI` (async) — from `scrapegraph_py.async_client`3233> Note: there is **no** `smartscraper`, `markdownify`, or `agentic_scraper` method. Those names are stale. Use the endpoints below — they mirror the Playground (Scrape, Extract, Search, Crawl, Monitor).3435### Endpoints to exercise3637| Endpoint | Sync method | Async method |38|----------|-------------|--------------|39| Scrape | `client.scrape(...)` | `await aclient.scrape(...)` |40| Extract | `client.extract(...)` | `await aclient.extract(...)` |41| Search | `client.search(...)` | `await aclient.search(...)` |42| Crawl | `client.crawl.start(...)` | `await aclient.crawl.start(...)` |43| Monitor | `client.monitor.create(...)` | `await aclient.monitor.create(...)` |44| Credits | `client.credits()` | `await aclient.credits()` |4546### Namespace sub-methods (cover the full lifecycle)4748- `client.crawl` — `start`, `get`, `stop`, `resume`, `delete`49- `client.monitor` — `create`, `list`, `get`, `update`, `pause`, `resume`, `activity`, `delete`50- `client.history` — `list`, `get` *(supporting, not shown in Playground)*5152The async client exposes the same namespaces under the same attribute names, with `async` methods. `health()` and `close()` also exist as utility methods — call `health()` as a sanity check at the start of the run.5354## Scope — test the WHOLE SDK5556Every public method above must be exercised against the live API on both `ScrapeGraphAI` and `AsyncScrapeGraphAI`. Do not mock.5758For each call:59- Use a minimal valid payload (e.g. `https://example.com` + trivial prompt).60- Record the response type, that it matches the returned Pydantic model / `ApiResult`, and any surfaced error.61- For `crawl` / `monitor`: after `start`/`create`, also exercise `get`, then `stop`/`pause`+`resume`, then `delete` so the full lifecycle is covered and no test artifacts are left behind.62- Call `credits()` before and after the full run so the user can see credit consumption.6364## Procedure65661. Confirm the working directory is clean (`git status`). If not, stop and ask the user.672. Confirm you're not on `main`. If making commits, branch first: `git checkout -b test/sdk-smoke-YYYYMMDD`. Running tests without committing does not require a branch.683. Install deps: `uv sync`.694. Run the existing unit tests first: `uv run pytest tests/ -v`. Fix any failures before live testing.705. Write a throwaway script (e.g. `scripts/smoke_sdk.py`) that:71 - Imports `ScrapeGraphAI` and `AsyncScrapeGraphAI` from `scrapegraph_py`.72 - Calls every top-level method and every namespace method listed above, on both clients.73 - Prints a compact table: method | sync ok | async ok | notes.746. Run it: `uv run python scripts/smoke_sdk.py`.757. Delete the throwaway script. Do not commit it.768. Report a summary: which methods passed, which failed, credits consumed, and any suspicious response shapes.7778## If you find a bug7980- Branch: `git checkout -b fix/<short-description>`.81- Fix it. Then run the full pre-commit suite from `CLAUDE.md`:82 ```bash83 uv run ruff format src tests84 uv run ruff check src tests --fix85 uv build86 uv run pytest tests/ -v87 ```88- Commit with a `fix:` prefix (keeps the semantic-release bump at patch).89- Push the branch and open a PR. **Do not merge to main yourself.**9091## Reminders to surface to the user9293- Live tests consume API credits. Confirm before running.94- If any method returns a 4xx/5xx, report it verbatim — do not retry silently more than once.95- If the user's key is invalid or rate-limited, stop and tell them; do not swap in any other key.9697---98> Source: [ScrapeGraphAI/scrapegraph-py](https://github.com/ScrapeGraphAI/scrapegraph-py) — distributed by [TomeVault](https://tomevault.io).99<!-- tomevault:4.0:skill_md:2026-06-21 -->