I gave Claude Code a single goal — ship a digital product on Gumroad and make ≥$1 within 14 days, fully autonomously — and watched it run.
This is the build log. Code, scripts, and links are real. The product is live (X Creator OS — Notion Stack). I am writing this 70 hours after first sale-attempt-clock started, with 0 revenue so far. So this is not a victory lap — it's a transparent post on what Claude Code can and cannot do at the very edge of autonomous execution.
The setup
- Goal: First $1+ paid sale on Gumroad within 14 days.
-
Constraints:
- Zero starting capital.
- Zero existing audience attached to the new identity (
relayhop). - Zero human intervention in any step (no manual posting, no manual setup calls, no captcha solving I could avoid).
- Tooling: Claude Code as the only operator. Playwright/Firecrawl/Bash/curl as its hands.
Stage 1 — Market data, not guesses
Claude's first move was not to brainstorm a product. It was to scrape:
- 18 Gumroad taxonomies × 3 sort orders (
best_selling,hot_and_new,highest_rated) × top 1000 each → ~15,000 product corpus - Gumroad's official prohibited-content list (54 items + 4 ToS clauses)
- A category × tag co-occurrence map
The scraper found Gumroad's internal JSON endpoint:
GET https://gumroad.com/products/search?taxonomy=<slug>&sort=<order>&from=0&size=1000
That single discovery turned a 3-day Playwright crawl into a 15-minute curl loop.
Stage 2 — A 4-dim ensemble score, not vibes
From the corpus, Claude built a composite score per product (let's call this A):
composite = w_bs·score_bs + w_hn·score_hn + w_hr·score_hr + w_aud·score_aud
Then a 4-dimension ensemble (B) that takes the minimum rank across {best_selling, hot_and_new, highest_rated, ratings_count}. The ensemble surfaces products that are top-ranked along any axis — not just the one that the composite weights happen to favor.
Filtered for: native_type ∈ {digital, ebook, bundle, course}, price ≥ $2.07, no audio-dominant categories. End result: 15,853 ranked products.
The top-100 list dictated the design space: Notion templates for X creators monetizing their audience scored highest along the dimensions that matter for indie-builder audiences.
Stage 3 — Designed by data, written by Claude
Claude designed 12 candidate products from the top-12 references. Picked one (P1: "X Creator OS"), iterated 4 times against actual top-similar-references in the data, and shipped:
-
5 core Notion templates (Tweet Idea Vault / Audience Tracker / Newsletter Pipeline / Sponsorship CRM / Revenue Tracker) — each as
template.md+template.csvfor any tool - 5 visual themes
- multi-locale listing copy (en / es / zh-tw)
- README with 10-min setup
- A version manifest for the "Lifetime Updates" promise
Description, FAQ, refund policy, tags — all generated by analyzing what the top-100 in the same category use, not by free invention.
Stage 4 — Deploy via API + Cloudflare Workers
This is where Claude Code's automation muscle actually showed up:
-
POST /v2/products(undocumented but works) creates the listing -
PUT /v2/products/:idupdates name / price / description / tags /custom_receipt -
tags=doesn't work — must repeat--data-urlencode 'tags[]=val'per tag (this took an hour of API archeology) - File-upload endpoints (
POST /v2/products/:id/files) do not exist. Workaround: host the ZIP on Cloudflare Workers (reverse-proxy to a GitHub Release) and put the URL incustom_receipt - Cover image PUT silently dropped,
custom_delivery_urlis read-only — both are API illusions Gumroad still documents
Final architecture:
buyer pays Gumroad
↓
Gumroad emails receipt with custom_receipt link
↓
buyer clicks https://cesf-downloads.relayhop.workers.dev/x-creator-os/v1.0.0.zip
↓
Worker reverse-proxies to GitHub Release ZIP (no GH repo name leaked to buyer)
Mac can be off. Gumroad fires the email. Workers serve the file. GitHub stores the artifact. No human in any step.
A scheduled GitHub Action polls /v2/sales hourly and opens an issue on the first sale.
What surprised me
- Top sellers don't market on the listing page. Of the top 100 ranked products: median description length is 160 characters; 0% have video embeds; 5% link to Twitter; 0% have FAQ blocks; 0% have email signup forms.
- They market off-platform. YouTube (33%), Threads (30%), X (30%) are where audience exists; Gumroad is purely the checkout.
- Single-channel concentration outperforms multi-platform spray. The biggest sellers are usually "power user of one platform" not "present on six."
- Gumroad's API still lets you ship a real product end-to-end — but you have to discover the working surface yourself, because the docs and the API have drifted.
What didn't work
- Nostr as a primary marketing channel — 0 followers + 200K total daily active users on the entire network = math says no. Top 100 sample contains 0 Nostr-driven sellers.
- X / Twitter as Claude-driven channel — Arkose CAPTCHA + phone verification + locked-down API tier kills programmatic posting from a fresh account.
- Giving 5 free SKUs as a lead-magnet ladder — careful design analysis shows that if free version is the core product minus visuals, you cannibalize the paid SKU. Still considering whether to do a different set of free utilities later.
Where it stands now
- Listing live: relayhop.gumroad.com/l/x-creator-os-standard ($14.50, 50% off launch)
- Sales so far: 0
- Time elapsed: 70 / 336 hours (14-day deadline)
- Next move (this article): testing dev.to as a primary discovery channel. If a builder reads this and the workflow is interesting, the listing is one click away.
If you've shipped autonomously-built products before, I'd love to hear what you'd change about this loop.
Built fully in Claude Code. Source code for the deploy/scoring/scraper scripts is private to the project but I can write follow-up posts on specific pieces if useful — comment which one.
Top comments (0)