Install
openclaw skills install @scavio-ai/gemini-scraper-apiSend a prompt to Google Gemini and get the answer it gives as structured JSON - the full Markdown answer, the URLs it cites and the products it recommended. Same shape as the ChatGPT skill, for AI visibility, GEO and brand monitoring across assistants. 5 credits per answered prompt.
openclaw skills install @scavio-ai/gemini-scraper-apiSend a prompt to Google Gemini and get back the answer it gives: the full answer as Markdown, the URLs it cites, and the products it recommended. The response has the same shape as the ChatGPT endpoint, so one parser tracks both assistants. 5 credits per answered prompt; failed prompts are free.
Use this skill when the user asks to:
chatgpt-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/gemini/prompt
Authorization: Bearer $SCAVIO_API_KEY
Every answered prompt costs 5 credits. Answers typically take 10-40 seconds: use an HTTP timeout of at least 90 seconds.
prompt.data.answer.markdown for the answer, data.sources[] for the URLs it cited and data.shopping[] for the products it recommended.| Parameter | Type | Default | Description |
|---|---|---|---|
prompt | string | required | The prompt, 1-4000 characters |
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/gemini/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("cited:", [s["url"] for s in data["sources"]])
print("recommended:", [p["title"] for p in data["shopping"]])
{
"data": {
"platform": "gemini",
"prompt": "What are the best running shoes for beginners?",
"model": null,
"answer": {
"markdown": "Choosing your first running shoe is an important step. The best beginner running shoes focus on **balanced cushioning**... The Brooks Ghost 18 is a **fan-favorite daily trainer**..."
},
"sources": [
{ "url": "https://www.runnersworld.com/gear/a19663621/best-running-shoes/", "title": null, "snippet": null, "source": null, "published_at": null }
],
"search_queries": [],
"shopping": [
{ "title": "Brooks Men's Ghost 18", "url": null, "price": null, "image_url": null, "merchant": null }
]
},
"response_time": 36631,
"credits_used": 5,
"credits_remaining": 45
}
Gemini returns cited URLs only, so title, snippet, source and published_at are null, and search_queries is always empty. A comparison grid in the answer comes back as a Markdown table inside answer.markdown.
answer.markdown and surface sources so the user can verify.400 means a missing or too-long prompt - 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 Gemini 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.