Inspiration
Amazon sellers waste hours manually studying competitor listings, identifying relevant products, and rewriting their own copy. Existing tools are either static text generators that ignore the competitive landscape, or manual research workflows that are slow and error-prone. A seller optimizing a "decorative front door mat" might end up benchmarking against industrial utility mats or anti-fatigue mats, producing a worse listing.
We wanted to build an autonomous agent that does the full research-to-rewrite pipeline on real web data, without manual babysitting. The key insight: listing optimization requires expertise (understanding Amazon SEO, keyword strategy, competitor positioning), money (professional copywriters charge $50-200+ per listing), and time (2-4 hours of manual research per product). ListingAI collapses all three into a 1-2 minute automated workflow.
What We Learned
Web data is messy: Amazon pages vary wildly in structure. TinyFish Agent's intelligent extraction was critical for reliably pulling structured data from diverse listing formats. Relevance filtering is the hard part: The naive approach of "search competitors and optimize against them" fails badly. Our agent's autonomous mismatch detection and search refinement loop was the most impactful feature. Streaming UX matters: Showing the agent's reasoning step-by-step (extracting, profiling, searching, filtering, generating) made the product feel alive and trustworthy. Users could see why competitors were rejected before seeing the final result. Amazon compliance rules are complex: We built in Amazon's product title rules, bullet point guidelines, and claims restrictions to ensure generated listings are actually publishable.
How We Built It
Architecture: Monorepo with a Next.js 16 frontend and FastAPI backend connected via SSE (Server-Sent Events) for real-time progress streaming.
Agent Pipeline (6 autonomous phases):
- Extract: TinyFish Agent intelligently scrapes the seller's Amazon listing page, extracting title, bullets, brand, price, and description.
- Profile: AWS Bedrock (Claude) normalizes the extracted data into a structured product profile with type, use case, audience, material, and exclusion categories.
- Search: TinyFish Search finds top competitor candidates on Amazon.
- Filter: Claude scores each competitor's relevance (same product family, use case, audience, context). Mismatches are auto-rejected with explanations. If too few pass, the agent autonomously refines its search query and retries once.
- Generate: Claude produces an improved title, 5 bullets, and description grounded in the seller's actual product facts and accepted competitor insights. Amazon compliance rules are enforced.
- Report: Claude generates a change-by-change rationale explaining what changed, why, and what evidence supported each decision. The full report is saved to
cited.md.
State Management: Redis MCP tracks run state, visited URLs, accepted/rejected competitors, events, and final results. Each run is a self-contained state machine with TTL-based cleanup.
Frontend: Side-by-side original vs. optimized comparison, step-based progress tracking, competitor audit with relevance score bars, and an exportable markdown report.
Challenges
Extraction reliability: Amazon pages are heavily JavaScript-rendered and vary by product category. We used TinyFish Agent as the primary extractor with TinyFish Fetch as fallback, then Claude for structured parsing. Competitor relevance: Initial searches often returned accessories, industrial variants, or unrelated products. Building the autonomous mismatch filter with profile-based scoring solved this. LLM output consistency: Getting Claude to return clean JSON consistently required careful prompt engineering with strict format instructions and regex-based cleanup. SSE streaming across CORS: Wiring up real-time event streaming from FastAPI to Next.js through CORS required careful middleware configuration.
Built With
- amazon-web-services
- css
- pydantic
- react
- redis
- tailwind
- tinyfish
- typescript
- wundergraph
Log in or sign up for Devpost to join the conversation.