DEV Community

Kai Thorne
Kai Thorne

Posted on

How I Automated Etsy SEO Keyword Research with ChatGPT and SQLite

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
Enter fullscreen mode Exit fullscreen mode

The pipeline is straightforward:

  1. Harvest seeds from Etsy's search bar and competitor listings
  2. Expand with 4 specialized ChatGPT prompts
  3. Store in SQLite for querying across all products
  4. 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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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:

  1. ChatGPT sessions expire — rewrite prompts are inconsistent
  2. Spreadsheets multiply — I had 6 versions of the same keyword file
  3. 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
);
Enter fullscreen mode Exit fullscreen mode

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');
Enter fullscreen mode Exit fullscreen mode

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")
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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)