Etsy sellers chase the right keyword for titles and tags. Etsy's built-in research is limited to its autocomplete. This tutorial uses Scavio to combine Google SERP for Etsy results, Etsy autocomplete via SERP, and Reddit buyer threads to score keyword demand.
Prerequisites
- Python 3.10+
- A Scavio API key
- A short list of seed keywords
Walkthrough
Step 1: Scrape Etsy results on Google
site:etsy.com query returns the currently ranking Etsy listings.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def etsy_serp(kw):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:etsy.com {kw}', 'num_results': 20})
return r.json().get('organic_results', [])Step 2: Pull autocomplete suggestions
Google autocomplete for etsy queries reveals long-tail variants.
def autocomplete(kw):
r = requests.get(f'https://suggestqueries.google.com/complete/search?client=firefox&q=etsy+{kw}')
return r.json()[1]Step 3: Check Reddit buyer intent
r/Etsy and r/EtsyCommunity threads reveal what buyers actually ask.
def reddit_intent(kw):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': kw, 'platform': 'reddit', 'subreddit': 'Etsy'})
return r.json().get('posts', [])Step 4: Score each keyword
Combine SERP density, autocomplete width, and Reddit volume into a single score.
def score(kw):
s = len(etsy_serp(kw))
a = len(autocomplete(kw))
r_ = len(reddit_intent(kw))
return s * 0.5 + a * 0.3 + r_ * 0.2Step 5: Export a ranked list
Sort and save top candidates for title and tag rotation.
seeds = ['personalized mug', 'handmade necklace', 'digital planner']
ranked = sorted(seeds, key=score, reverse=True)
print(ranked)Python Example
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def rank_etsy_keywords(seeds):
out = []
for kw in seeds:
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:etsy.com {kw}', 'num_results': 20})
out.append((kw, len(r.json().get('organic_results', []))))
return sorted(out, key=lambda x: -x[1])
print(rank_etsy_keywords(['personalized mug', 'handmade necklace']))JavaScript Example
const API_KEY = process.env.SCAVIO_API_KEY;
export async function rankEtsyKeywords(seeds) {
const out = [];
for (const kw of seeds) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:etsy.com ${kw}`, num_results: 20 })
});
const d = await r.json();
out.push([kw, (d.organic_results || []).length]);
}
return out.sort((a, b) => b[1] - a[1]);
}Expected Output
Ranked keyword list with SERP density, autocomplete width, and Reddit volume scores. Ready for Etsy title and tag rotation.