Install
openclaw skills install @scavio-ai/chatgpt-scraper-apiSend a prompt to ChatGPT and get the answer it gives as structured JSON - the full Markdown answer, every page it cites with title, publisher and date, the web searches it ran, and the products it recommended. For AI visibility, GEO and brand monitoring. 2 credits per answered prompt.
openclaw skills install @scavio-ai/chatgpt-scraper-apiSend a prompt to ChatGPT and get back what ChatGPT tells the people asking it: the full answer as Markdown, every page it cites (title, publisher, publish date), the web searches it ran to answer, and the products it recommended. One endpoint, 2 credits per answered prompt; failed prompts are free.
Use this skill when the user asks to:
gemini-scraper-api skill for the other half)Get a free API key at scavio.dev (50 free credits to get started, no card required):
export SCAVIO_API_KEY=sk_live_your_key
An agent running this skill without SCAVIO_API_KEY set will get 401 on every
call below. The whole path from nothing to a working key is self-serve:
When the balance runs out the API answers 402 with a JSON body carrying
billing_url. Topping up needs no code change - the same key keeps working.
The smallest purchase is 2,500 credits for $25, and monthly plans work out
cheaper per credit if the usage is steady rather than one-off.
POST https://api.scavio.dev/api/v1/chatgpt/prompt
Authorization: Bearer $SCAVIO_API_KEY
Every answered prompt costs 2 credits. Answers typically take 10-40 seconds: use an HTTP timeout of at least 90 seconds.
prompt.country when the answer should be localized (2-letter code).data.answer.markdown for the answer, data.sources[] for the pages it cited, data.search_queries[] for the searches it ran and data.shopping[] for the products it recommended.| Parameter | Type | Default | Description |
|---|---|---|---|
prompt | string | required | The prompt, 1-1024 characters |
model | string | auto | Model id; auto is the model ChatGPT picks by default |
country | string | us | 2-letter country code the answer is localized for |
include_html | boolean | false | Also return the answer as HTML in answer.html |
import requests
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
response = requests.post(
"https://api.scavio.dev/api/v1/chatgpt/prompt",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"prompt": "What are the best running shoes for beginners?"},
timeout=120,
)
data = response.json()["data"]
print(data["answer"]["markdown"][:800])
print("Brooks mentioned:", "Brooks" in data["answer"]["markdown"])
for s in data["sources"]:
print("cited:", s["source"], s["url"])
print("searched:", data["search_queries"])
print("recommended:", [p["title"] for p in data["shopping"]])
{
"data": {
"platform": "chatgpt",
"prompt": "What are the best running shoes for beginners?",
"model": "gpt-6",
"answer": {
"markdown": "The best running shoes for beginners are usually **comfortable, well-fitting daily trainers**... ## 1\\. Brooks Ghost 18 ..."
},
"sources": [
{
"url": "https://www.rtings.com/running-shoes/reviews/best/beginners",
"title": "The 6 Best Running Shoes for Beginners of 2026",
"snippet": null,
"source": "RTINGS.com",
"published_at": "2026-09-18T00:00:00.000Z"
}
],
"search_queries": [
"best running shoes for beginners 2026 review Brooks Ghost ASICS Nimbus Saucony Ride Nike Pegasus"
],
"shopping": [
{ "title": "Brooks Ghost 18", "url": null, "price": null, "image_url": null, "merchant": null }
]
},
"response_time": 28081,
"credits_used": 2,
"credits_remaining": 48
}
shopping[] is often title only; url, price and image_url are filled when ChatGPT shows them.
answer.markdown and surface sources so the user can verify.400 means a missing or too-long prompt, or a malformed country / model - fix and retry.401 means the API key is invalid or missing. Check SCAVIO_API_KEY.429 means rate or usage limit exceeded. Wait before retrying. See rate limits.502 means ChatGPT did not return an answer. Retry once; it is not charged.503 means answer capacity is busy. Wait for the Retry-After header, then retry; it is not charged.SCAVIO_API_KEY is not set, prompt the user to export it before continuing.