How I Automated Etsy SEO Keyword Research with ChatGPT and SQLite
Etsy has 450 million monthly active visitors. If your products sit on page 12 of search results, it's not because the algorithm is broken — it's because you're guessing keywords instead of researching them systematically.
I was that seller for months. I'd throw 13 tags together from vibes, write a title in two minutes, and wonder why my digital products had zero views.
Then I built a system: ChatGPT generates keyword clusters from seed data, and a local SQLite database stores and scores everything. One product used to take me an hour of spreadsheet-hopping. Now it takes 10 minutes.
Here's the exact system — prompts included.
The Architecture
Etsy Autocomplete → Seed Keywords → ChatGPT Prompt Stack → SQLite DB → Optimized Listing
The pipeline is straightforward:
- Harvest seeds from Etsy's search bar and competitor listings
- Expand with 4 specialized ChatGPT prompts
- Store in SQLite for querying across all products
- Apply — build your title, tags, and description from structured data
Let me walk through each step with real code and prompts.
Step 1: Seed Keyword Harvesting
Don't start with ChatGPT. Start with what real Etsy buyers type.
Go to Etsy.com and type your product into the search bar. Don't hit enter — read the autocomplete suggestions. Those are Etsy's highest-volume search terms. I scrape them into a starter list:
initial seed: "digital planner", "printable planner", "daily planner pdf"
autocomplete: "digital planner goodnotes", "printable planner 2026", "daily planner template"
competitor tags: "undated weekly planner", "digital journal kit"
This gives me 10–15 raw seeds per product. Low effort, high signal.
Step 2: The ChatGPT Prompt Stack
This is the core of the system. I use 4 specialized prompts, each targeting a different part of Etsy's search algorithm.
Prompt 1: Long-Tail Keyword Expansion
You are an Etsy SEO specialist who has optimized 500+ listings on Etsy's Blackbird algorithm.
I sell: {product_name}
Seed keywords: {seed_list}
Generate:
1. 30 long-tail keyword phrases (3-5 words, high purchase intent)
2. 10 question-based keywords (e.g., "what is the best {product} for...")
3. Competition level estimate for each phrase (Low / Medium / High)
Rules:
- Focus on buyer intent, not browsing intent
- Include seasonal variations
- Cover different use cases/applications
- Prioritize phrases under 60 characters
Output as a CSV with columns: keyword, type, competition, use_case
Why this works: Etsy's Blackbird algorithm weights long-tail exact matches heavily. A 4-word search matching your 13 tags is worth more than 13 single-word tags. This prompt generates those 4-word combinations.
Prompt 2: Tag Cluster Generator
Group these keywords into 13 Etsy tag clusters. Each cluster must be under 20 characters.
Keywords: {keywords_from_prompt_1}
Rules:
- Each tag is exactly 1-20 characters (Etsy limit)
- No tag can be a single word — compound phrases rank higher
- Clusters must not overlap in meaning
- Order clusters by estimated search volume
Output as: cluster_name | tags | estimated_volume
Etsy's 20-character tag limit is brutal. Most sellers waste it on single words like "printable" or "planner". This prompt forces compound phrases: "DigitalPlanner" instead of "Digital", then "Planner" in another slot.
Prompt 3: Title Formula Builder
Etsy gives you 140 characters for your title. The first 40 characters are what buyers see before clicking "more."
Write 3 optimized title options for: {product_name}
For each title:
- Front-load with your highest-volume keyword
- Include use case + benefit
- Use natural language (not keyword stuffing)
- Stay under 140 characters
Also score each title on:
- Click-through potential (1-10)
- SEO compatibility with keywords (1-10)
- Readability (1-10)
The first 40 characters of your Etsy title are prime real estate. The algorithm reads them first, and mobile buyers rarely expand to read the rest. This prompt ensures the high-value keywords go first.
Prompt 4: Description SEO Wrapper
Write an SEO-optimized product description for {product_name}.
Target keywords (use each at least once): {top_10_keywords}
Structure:
- First sentence: H1 keyword + benefit (under 30 words)
- Problem-agitation-solution paragraph (keyword-rich)
- Bullet points of features (natural language, no stuffing)
- FAQ section (question-based keywords as headers)
- Call to action
Keep total under 500 words. Write for humans first, Etsy second.
Etsy reading time is a ranking signal. Longer descriptions with natural keyword usage signal "quality content" to the algorithm. But don't stuff — Etsy's spam detection flags repetitive keywords.
Step 3: SQLite Storage
Why a database instead of a spreadsheet? Three reasons:
- ChatGPT sessions expire — rewrite prompts are inconsistent
- Spreadsheets multiply — I had 6 versions of the same keyword file
- Cross-product querying — I need to find which keywords work across my catalog
Here's the schema I use:
CREATE TABLE keyword_research (
id INTEGER PRIMARY KEY,
product_id TEXT NOT NULL,
keyword TEXT NOT NULL,
keyword_type TEXT, -- 'long_tail', 'question', 'seed'
competition TEXT, -- 'Low', 'Medium', 'High'
tag_cluster TEXT, -- which of the 13 tags this belongs to
use_case TEXT,
created_at DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE product_listings (
id INTEGER PRIMARY KEY,
product_name TEXT,
etsy_title TEXT,
tags TEXT, -- JSON array of 13 tags
optimized_at TIMESTAMP
);
And the queries I run most often:
-- Find low-competition keywords across all my products
SELECT keyword, product_id, tag_cluster
FROM keyword_research
WHERE competition = 'Low'
ORDER BY created_at DESC;
-- Get all keywords for a specific product
SELECT keyword, keyword_type, tag_cluster
FROM keyword_research
WHERE product_id = 'digital-planner'
ORDER BY keyword_type;
-- Check which products have been optimized recently
SELECT product_name, optimized_at
FROM product_listings
WHERE optimized_at > datetime('now', '-30 days');
I import from ChatGPT output using a simple Python script:
import sqlite3, csv, sys
DB = '~/income/kai_thorne.db'
conn = sqlite3.connect(DB)
reader = csv.DictReader(sys.stdin)
for row in reader:
conn.execute(
"""INSERT INTO keyword_research
(product_id, keyword, keyword_type, competition, use_case)
VALUES (?, ?, ?, ?, ?)""",
(row['product_id'], row['keyword'],
row['type'], row['competition'], row['use_case'])
)
conn.commit()
print(f"Imported {reader.line_num - 1} keywords")
Usage: python3 import_keywords.py < chatgpt_output.csv
Step 4: The Full Workflow (10 Minutes)
Here's exactly what 10 minutes looks like:
| Step | What | Time |
|---|---|---|
| 1 | Etsy autocomplete + competitor tag scan | 1 min |
| 2 | Run 4 ChatGPT prompts (one call does all) | 2 min |
| 3 | Review and prune ChatGPT output | 2 min |
| 4 | Import to SQLite | 30 sec |
| 5 | Build title from Prompt 3 output | 1 min |
| 6 | Assign 13 tags from Prompt 2 clusters | 2 min |
| 7 | Paste optimized description from Prompt 4 | 1 min |
| 8 | Update product_listings.optimized_at | 10 sec |
Total: ~10 minutes per product.
Compare to the manual approach: research competitors (15 min), build a spreadsheet (10 min), draft title + tags (10 min), write description (15 min), cross-reference across products (10 min) = 60 minutes per product.
That's a 6x efficiency gain. Across 50 products, that's 40 hours saved.
The Results So Far
I've keyword-optimized 12 of my digital products using this system. Here's what I'm tracking:
-- Check products optimized with this system
SELECT p.product_name, p.optimized_at,
COUNT(k.id) as keywords_researched
FROM product_listings p
JOIN keyword_research k ON p.id = k.product_id
GROUP BY p.product_name
ORDER BY p.optimized_at DESC;
Early data: products with optimized listings get 3-5x more Etsy impressions than non-optimized ones. No direct sales yet (I'm still building), but the traffic direction is promising.
Why This Beats a Spreadsheet
I used to keep keyword research in Google Sheets. The problems:
- Duplicate keywords across products (wasted tag slots)
- Manual scoring (never updated competition estimates)
- No history (couldn't see which keywords I'd tried before)
- Format rot (different columns in every sheet)
SQLite enforces a single schema, supports cross-product queries, and integrates directly with my cron-based automation pipeline. I can SELECT keywords across my entire catalog and find gaps in seconds.
Plus, it's the same database that tracks my revenue, experiments, and content — everything in one .db file.
Copy This System
The 4 prompts above are ready to paste into ChatGPT right now. Plug in your product name and seeds, and you'll get output you can start using immediately.
Next level: If you want a ready-to-use tool instead of building the SQLite setup yourself, I've packaged the keyword research workflow into a spreadsheet — the Etsy SEO Keyword Research & Tag Optimizer — with auto-calculating competition scores and tag group templates.
I also have a complete 75 AI Prompts for E-commerce Sellers pack that includes eight more Etsy-specific prompts (for pricing optimization, photo descriptions, shop policies, and customer messaging) beyond the four SEO prompts in this post.
Or, if you prefer the deep strategy version, the Etsy SEO Playbook covers the Blackbird algorithm mechanics, the Keyword Matrix Method, and includes 10 printable worksheets.
The difference between guessing keywords and researching them is the difference between zero views and your first sale. Etsy's algorithm rewards relevance — but relevance starts with knowing what buyers actually type. A structured system removes the guesswork.
Build the prompts. Set up the database. Then let the data tell you what to sell.
Building this in public at dev.to/kaithorne. I post weekly about automated side hustles, Python tools, and the occasional $0 milestone.
Top comments (0)