Case Study

Building an Etsy to Pinterest Pipeline: Niche-Aware SEO, Smart Scheduling, and Why Generic Pins Get Throttled

I run a print-on-demand Etsy shop alongside my consultancy. Every new listing needs to appear on Pinterest within a day or two, because Pinterest is how print-on-demand products get discovered. Not Instagram, not TikTok. Pinterest. It is the search engine that POD shops depend on.

For months I did this manually: download the image, resize it, open Pinterest, write a title, write a description with keywords, pick a board, schedule, repeat. It took 30 to 60 minutes a day. Some days I skipped it. Sales dipped when I did.

So I built a system to handle it. Not a scheduler (those exist). A full pipeline that imports listings, understands what niche each product belongs to, generates Pinterest-optimised SEO content with Claude Sonnet, and posts on a research-backed schedule. Here is how it works and what I learned building it.


The problem

The manual cross-posting workflow has three bottlenecks, and scheduling tools only solve one of them.

Bottleneck 1: image format mismatch. Etsy listing images are landscape or square. Pinterest wants 2:3 vertical. You cannot just upload an Etsy image to Pinterest and expect it to perform. It needs to be cropped, and the crop needs to preserve the subject. Do it wrong and you cut off the product.

Bottleneck 2: content generation. Every pin needs a title (under 100 characters, keyword-rich), a description (200+ characters, primary keyword in the first 80), alt text, and a board assignment. Writing this for 5 to 10 listings a week is tedious. Writing it well, with niche-appropriate vocabulary, is harder. Most people give up and write generic descriptions. Pinterest notices.

Bottleneck 3: duplicate management. A single Etsy listing can have 10 images. If you are not tracking what you have already pinned, you end up posting the same image twice from different listings, or pinning near-identical designs that clutter your boards. Pinterest throttles accounts that look spammy.

Scheduling tools (Tailwind, Later, Planoly) solve the "when to post" problem. They do not solve the "what to write" or "how to crop" or "have I already pinned this" problems. That is the gap this system fills.


Why build custom instead of using Tailwind

I used Tailwind for six months before building this. Tailwind is good at what it does: smart scheduling, interval posting, board lists. But it is a scheduler, not a content generator. You still have to write every title, every description, every alt text. You still have to crop every image. You still have to decide which board each pin belongs to.

The deeper problem is niche awareness. A watercolour clipart set and a minimalist logo template need completely different Pinterest SEO strategies. Different keywords, different description styles, different boards, different audiences. Tailwind does not know what niche a product belongs to. It treats everything the same.

The result is that most POD sellers using scheduling tools produce identical-sounding pins. "Beautiful watercolor clipart! Perfect for crafters! Click to shop!" Pinterest's algorithm detects this pattern and reduces distribution. The pins get impressions but not saves, clicks, or purchases.

I needed a system that understood the product first and then generated content based on that understanding. That is a language model problem, not a scheduling problem. So I built it with Claude Sonnet and a custom automation pipeline.


The pipeline architecture

The system is a FastAPI web application with a Jinja2 template frontend. Everything runs locally. The database is SQLite with 5 normalised tables: listings, images, pins (the generated content), schedules, and post logs.

The data flow is linear: listings come in from Etsy (API or CSV), images get processed, Claude generates SEO content for each listing, the content enters a review queue, approved pins get scheduled, and the scheduler posts them through Make.com or the Pinterest API v5.

Each stage is independent. If the Etsy API is down, I can import via CSV. If I want to bypass Make.com, the system posts directly through the Pinterest API. If I want to regenerate the SEO content for a listing, I can do it without re-importing the listing or re-processing the image.

The database tracks the state of every listing through the entire pipeline: imported, images processed, SEO generated, reviewed, scheduled, posted. The dashboard shows pipeline stats so I can see at a glance how many listings are waiting at each stage.


Image processing and deduplication

Pinterest's ideal pin ratio is 2:3 (1000x1500px). Etsy images are usually square or landscape. The system uses Pillow to smart-crop each image: it analyses the image content and crops to 2:3 while keeping the subject centred. This is not a blind centre-crop. It uses edge detection to find the region of interest and crops around it.

Deduplication uses perceptual hashing via the imagehash library. A perceptual hash is not a file hash. Two images that are slightly different (different resolution, minor colour adjustment, different crop) will have the same perceptual hash if they look visually similar. This catches near-duplicates that a file hash would miss.

Every image gets hashed on import. Before generating SEO content for a listing, the system checks whether an image with a matching or near-matching hash has already been pinned. If it has, the listing is flagged and skipped. This prevents the board-cluttering problem that gets Pinterest accounts throttled.

For listings that include video (Etsy supports listing videos), FFmpeg extracts a thumbnail frame. The video itself can be uploaded as a video pin, which Pinterest currently weights at roughly 3x the reach of a static image pin.


The Claude SEO layer

This is the core of the system. Each listing runs through Claude Sonnet with a prompt that does two things: detects the product niche, then generates Pinterest-optimised content using niche-specific rules.

Niche detection covers 10+ categories: watercolour, minimalist, vintage, boho, kids, wedding, holiday, abstract, botanical, geometric, retro, and more. The niche determines everything downstream: which keywords to prioritise, what vocabulary to use in the description, which boards to suggest, and what tone the pin should have.

A watercolour clipart set gets keywords like "hand-painted," "watercolor illustration," "craft supplies," and boards like "Watercolor Art" or "Clipart for Crafters." A minimalist logo template gets "modern branding," "clean design," "small business logo," and boards like "Logo Inspiration" or "Brand Design." Same pipeline, completely different output.

The Claude prompt encodes Pinterest SEO rules explicitly. Pin titles stay under 100 characters with the primary keyword in the first 40. Descriptions hit the 220 to 232 character sweet spot (Pinterest truncates at ~250 and favours descriptions that fill the preview without being cut off). The primary keyword appears in the first 80 characters of the description. Alt text is descriptive and keyword-rich. The keyword set avoids generic terms like "design" or "art" in favour of specific long-tail phrases.

The output is structured JSON: title, description, alt text, 8 to 12 keywords, board suggestion, and a niche classification. Everything is validated before it enters the review queue: character counts, keyword placement, and duplicate keyword detection.


Scheduling and posting

Timing matters on Pinterest. The system includes research-backed scheduling presets based on published Pinterest engagement data. Pins are spaced throughout the day to avoid posting clusters that trigger spam detection. Video pins are weighted 3x, meaning the scheduler prioritises them during peak engagement windows.

APScheduler handles the queue internally. Each approved pin gets assigned a post time based on the scheduling preset, the number of pins already queued for that day, and whether it is a video or static pin.

Posting goes through two channels. The primary channel is a Make.com webhook: the system sends the pin data (image URL, title, description, board ID) to a Make.com scenario that handles the actual Pinterest API call. This is reliable and easy to monitor. The secondary channel is direct posting via the Pinterest API v5, which I built as a fallback and for cases where Make.com introduces unnecessary latency.

Every posted pin is logged back to the database with its Pinterest URL, post timestamp, and HTTP status. The system can report on posting success rates and flag any failures for retry. If a pin fails to post, it stays in the queue and gets retried on the next scheduling cycle.


The dashboard

The entire pipeline is controlled through a web dashboard built with FastAPI and Jinja2 templates. There are 7 main screens:

  1. Pipeline overview: stats for each stage (imported, processed, generated, reviewed, scheduled, posted), with counts and progress bars
  2. Import: Etsy API sync trigger or CSV upload form, with a live feed of newly imported listings
  3. Listings: all imported listings with their images, metadata, and pipeline status
  4. SEO generation: trigger Claude to generate content for unprocessed listings, view results inline, regenerate individual pins
  5. Review queue: approve, edit, or reject generated pins. Each pin shows the image preview, generated title, description, alt text, keywords, and board suggestion side by side
  6. Schedule: calendar view of upcoming pins, with manual drag-and-drop reordering and timing adjustment
  7. Post log: history of all posted pins with Pinterest URLs, timestamps, and success/failure status

You can see the full dashboard walkthrough in the interactive demo. The demo uses sample data but shows every screen and workflow exactly as the live system operates.


What this means for your shop

This system was built for my own POD workflow, but the pattern applies to any Etsy seller, Shopify merchant, or e-commerce operator who depends on Pinterest for discovery. The core problem is the same everywhere: scheduling tools handle the "when," but the "what" (niche-aware SEO content) is where the actual value lives.

If your daily Pinterest routine involves writing the same kinds of descriptions over and over, manually cropping images, and guessing which boards to use, that is exactly the workflow this kind of pipeline replaces. The time savings (from 60 minutes to 5 minutes a day) come not from posting faster, but from eliminating the content generation step while making the content better than what you would write manually after the 15th pin of the day.

The system is currently in active development at my studio. You can see the full technical breakdown on the Etsy to Pinterest system page. If you are running a similar workflow and want to explore what a custom pipeline would look like for your shop, the AI Content Systems service covers exactly this kind of build.

Build Yours

Want a system
like this one?

Book a free 30-minute call. We map your situation, identify the highest-impact automation, and figure out if we are a fit.

Book Free 30-min Call