The Problem
At 100 SKUs you can keep listings accurate by hand. At 800 you can't. Specs drift, category descriptions go stale, and the keywords you wrote a year ago no longer match how people search. Every new product needs a title, bullet points, a spec table, and a category blurb that actually ranks, and copy-pasting from manufacturer PDFs into a spreadsheet eats whole afternoons. Worse, you don't know which categories need fresh content because you're guessing at search intent instead of reading it. One seller on r/ecommerce put it plainly: scaling the catalog turned listing maintenance into a second full-time job nobody had time for.
The Scavio Solution
Treat enrichment as two data pulls plus a writing step. First, pull category keyword and intent signals from Google. POST to /api/v1/google with light_request set to false and read related_searches and people_also_ask. related_searches gives you the real long-tail phrases shoppers type, and people_also_ask shows the questions a category description should answer. That's your keyword brief, generated from live SERP data instead of a guess. Second, pull reference specs for a SKU. POST a known ASIN to the Amazon product endpoint to get back the title, bullet points, price, and structured specs of a comparable listing; use the Walmart product endpoint with a product_id the same way. Now you have keyword signals and a spec table for one product. Feed both into your draft, let a human or an LLM write the listing, and store the result in your PIM. Then schedule the same pull weekly or monthly so descriptions refresh as search behavior shifts. Be honest about the boundary: the API gives you raw specs and keyword signals, not finished copy. You still need a writer or model to turn that into a listing, and Scavio doesn't replace your PIM or ERP. It feeds them.
Before
A team manually copies specs from manufacturer PDFs and guesses at category keywords, so half the 800 listings are stale or thin.
After
A nightly script pulls live related_searches and reference specs per SKU, drafts are generated against real intent, and category content refreshes on a schedule.
Who It Is For
Ecommerce operators and catalog engineers scaling past a few hundred SKUs who need structured keyword and spec data to keep listings accurate without hiring a content team.
Key Benefits
- Real category keywords from Google related_searches and people_also_ask instead of guessed terms
- Structured reference specs pulled by ASIN or product_id, no PDF copy-paste
- One predictable JSON shape feeds straight into your listing drafts
- Scheduled re-pulls keep descriptions fresh as search intent shifts
- Credit pricing at $0.005 per call stays cheap across hundreds of SKUs
Python Example
import requests
API_KEY = "your_scavio_api_key"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "content-type": "application/json"}
BASE = "https://api.scavio.dev"
def category_keywords(category: str):
r = requests.post(
f"{BASE}/api/v1/google",
headers=HEADERS,
json={"query": category, "light_request": False},
timeout=20,
)
r.raise_for_status()
data = r.json()
return {
"related": [x["query"] for x in data.get("related_searches", [])],
"questions": [x["question"] for x in data.get("people_also_ask", [])],
}
def reference_specs(asin: str):
r = requests.post(
f"{BASE}/api/v1/amazon/product",
headers=HEADERS,
json={"query": asin},
timeout=20,
)
r.raise_for_status()
return r.json()
brief = category_keywords("4k portable monitor")
specs = reference_specs("B0B5L8QY8K")
print(brief["related"][:10])
print(brief["questions"][:5])
print(specs.get("title"), specs.get("price"))JavaScript Example
const API_KEY = "your_scavio_api_key";
const HEADERS = { Authorization: `Bearer ${API_KEY}`, "content-type": "application/json" };
const BASE = "https://api.scavio.dev";
async function categoryKeywords(category) {
const res = await fetch(`${BASE}/api/v1/google`, {
method: "POST",
headers: HEADERS,
body: JSON.stringify({ query: category, light_request: false }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
return {
related: (data.related_searches ?? []).map((x) => x.query),
questions: (data.people_also_ask ?? []).map((x) => x.question),
};
}
async function referenceSpecs(asin) {
const res = await fetch(`${BASE}/api/v1/amazon/product`, {
method: "POST",
headers: HEADERS,
body: JSON.stringify({ query: asin }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
return res.json();
}
const brief = await categoryKeywords("4k portable monitor");
const specs = await referenceSpecs("B0B5L8QY8K");
console.log(brief.related.slice(0, 10));
console.log(brief.questions.slice(0, 5));
console.log(specs.title, specs.price);