Install
openclaw skills install gumroad-admin-publisherManage Gumroad and batch-publish digital products with the official CLI.
openclaw skills install gumroad-admin-publisherUse this skill to administer Gumroad stores and publish digital products safely. Prefer the official gumroad CLI for product/file/content workflows because it handles local file upload, local cover images, local thumbnails, and content writes without needing temporary public hosting.
gumroad CLI available on PATH.GUMROAD_ACCESS_TOKEN set in the environment, or run gumroad auth login.GUMROAD_APP_ID and GUMROAD_APP_SECRET, but do not require them for personal store administration.Never store credentials in skill files, manifests, logs, examples, or Clawhub metadata.
Treat Gumroad as a live external commerce system.
--dry-run, --json, --no-input, and --non-interactive for planning and machine-readable checks.state/gumroad-admin/.--cover-image and --thumbnail.gumroad auth status --json
gumroad user --json
gumroad products list --json
gumroad products view PRODUCT_ID --json
For a single local digital product, prefer:
gumroad products create --json --no-input --yes \
--name "Product Name" \
--price 8.00 \
--description "<p>HTML description</p>" \
--custom-summary "Short summary" \
--file "D:\path\product.zip" \
--file-name "Product Name.zip" \
--cover-image "D:\path\cover.jpg" \
--thumbnail "D:\path\cover.jpg" \
--tag "t-shirt mockup" \
--tag "psd mockup"
Then verify:
gumroad products view PRODUCT_ID --json
A complete product should have:
published in the expected state.files contains the downloadable file.covers contains at least one cover.thumbnail_url is present.preview_url is present.rich_content contains a fileEmbed pointing to a file id. If rich_content is empty, buyer-facing Content is empty even if files exists.Publish only after verification if the product was created as a draft:
gumroad products publish PRODUCT_ID --json --no-input --yes
Use scripts/gumroad_batch_publish.py for repeatable local folder batches.
Typical flow:
python scripts\gumroad_batch_publish.py manifest --source "D:\Products" --out state\gumroad-admin\products.json --price 8.00
python scripts\gumroad_batch_publish.py plan --manifest state\gumroad-admin\products.json --limit 1
python scripts\gumroad_batch_publish.py publish --manifest state\gumroad-admin\products.json --limit 1 --yes
python scripts\gumroad_batch_publish.py verify --manifest state\gumroad-admin\products.json
python scripts\gumroad_batch_publish.py publish --manifest state\gumroad-admin\products.json --yes
The manifest command expects each product archive to have a matching cover image by stem, for example:
Product Folder/
my-product.zip
my-product.jpg
The script writes product ids and verification status back to the manifest so interrupted batches can resume. It uses the Gumroad CLI for file, cover, thumbnail, and content operations.
Gumroad distinguishes attached files from buyer-facing rich content. A product can have files but still show an empty Content section. After product creation, verify rich_content. If needed, use:
gumroad products content set PRODUCT_ID content.json --json --no-input --yes
The JSON should be an array containing a ProseMirror document with a fileEmbed whose attrs.id is the Gumroad file id returned by gumroad products view PRODUCT_ID --json.
Gumroad may enforce daily product creation limits. If a batch receives a limit error, stop, keep the manifest checkpoint, and resume after the limit resets. Do not loop aggressively or try to bypass the limit.
Use the CLI where possible:
gumroad products ... for products, covers, thumbnails, content, publish/unpublish.gumroad files ... for file upload helpers.gumroad sales ... for sales, buyers, refunds, receipt resend, shipping.gumroad payouts ... for payout reads.gumroad licenses ... for license verification and management.gumroad offer-codes ..., gumroad variants ..., gumroad custom-fields ..., gumroad subscribers ..., gumroad webhooks ... for store operations.Use direct API only when the CLI lacks a required operation. If using API directly, check both HTTP status and JSON success.
Before publishing:
TOOLS.md, not the skill.python -m py_compile scripts/gumroad_batch_publish.py.gumroad user --json, gumroad products list --json.clawhub publish .\skills\gumroad-admin --slug gumroad-admin --name "Gumroad Admin" --version 1.0.0 --changelog "Initial Gumroad admin and publishing workflow"