---
name: locul-bot-listing
description: List a bot on the Locul bots marketplace (locul.ai/bots). Use when the user wants to sell or share a bot, agent, Claude skill or prompt pack on Locul, or says "complete my Locul listing". Gathers every field the listing needs, checks it, and submits it for review. No Locul account needed.
---

# List a bot on the Locul marketplace

You are helping the user list their bot on the Locul bots marketplace at https://locul.ai/bots. Every listing is reviewed by a person before it goes live. Your job: gather everything the listing needs, make it good enough to sell, check it against the rules below, then submit it.

Work in this order. Ask the user only for what you can't find or work out yourself. If they point you at a folder, read it first: the bot's instructions, README, examples and any images there usually answer most of the questions.

## 1. What to gather

| Field | Rule |
| --- | --- |
| `name` | 2 to 60 characters. Plain, says what it does ("Invoice Chaser", not "SuperBot 3000"). |
| `tagline` | One line, up to 120 characters. The outcome the buyer gets. |
| `description` | 20 to 4000 characters. What it does, who it is for, what you get out. Short paragraphs. No hype words. |
| `category` | Exactly one of: Growth, Social, Content, Video, Sales, Support, Research, Operations, Finance, Engineering, Personal. |
| `priceCents` | `0` for free, or 500 to 29900 (5 to 299 US dollars, one-time). A seller can list up to 3 free bots. |
| `capabilities` | 2 to 8 short lines, 3 to 120 characters each. Each one a concrete thing it does ("Drafts a reminder for each late invoice"). |
| `demo` | A sample chat of at least 2 turns: `[{"role":"user","text":"..."},{"role":"bot","text":"..."}]`. A real, specific exchange that shows the result, not a description of it. Up to 16 turns. |
| `samples` | 3 to 12 images or short videos of what the bot actually makes, each with a caption (2 to 200 characters). Images PNG/JPG/WebP/GIF/AVIF under 4 MB, videos MP4/WebM/MOV under 12 MB, 30 MB in total. `cover` is the index of the best one. |
| `thumbnail` | Optional but strongly recommended: the main graphic on the card and at the top of the page. 16:10 or 16:9, at least 1200 px wide, under 4 MB. If there is none, the cover sample is used. |
| `icon` | Optional: a small square icon (at least 256 x 256, under 1 MB) shown next to the name. |
| `videoUrl` | Optional: a demo video link on YouTube, Loom, Vimeo or Wistia. A screen recording of the bot doing one real task works best. |
| `needs` | Optional: `{"ai":"Claude or any model","connectors":["Gmail"],"setup":["Add your invoice folder"]}`. What a buyer needs to run it. |
| `publisherName` | The seller name buyers see (a person or a studio). |
| `publisherWebsite` or `publisherLinkedin` | At least one, a full https URL. |
| `sellerName`, `sellerEmail` | The person listing it. We email a confirm link to this address, then the review result. Never invent an email. |
| `files` | The bot itself: `[{"path":"instructions.md","content":"..."}]`. `instructions.md` is required: the full instructions the bot runs on. Add any other text files it needs (examples, templates, reference notes). Text only, up to 60 files, 200 KB each. Paths are relative, no `..`. |

## 2. Make it sell

Before submitting, improve the listing with the user:
- The tagline and description lead with what the buyer gets, in plain words.
- The samples are real outputs of this bot, not stock images or screenshots of a prompt.
- The demo chat is specific (real names, real numbers) and short.
- The capabilities are things it does, not adjectives.
- Remove secrets, API keys, personal data and anything private from `files` and samples.

Show the user the final text fields and ask them to confirm before you submit.

## 3. Submit

### If you can run code (Claude Code, a terminal, a code tool)

Build the JSON and POST it. Images and videos go in as base64 data URLs (`data:image/png;base64,...`). Write a small script that reads the files from disk, encodes them and sends the request, so you never paste large base64 into the chat. For example in Python:

```python
import base64, json, mimetypes, pathlib, urllib.request

def data_url(path):
    p = pathlib.Path(path)
    mime = mimetypes.guess_type(p.name)[0] or "application/octet-stream"
    return f"data:{mime};base64," + base64.b64encode(p.read_bytes()).decode()

listing = {
    "name": "...", "tagline": "...", "description": "...", "category": "Operations",
    "priceCents": 0, "publisherName": "...", "publisherWebsite": "https://...",
    "capabilities": ["...", "..."],
    "demo": [{"role": "user", "text": "..."}, {"role": "bot", "text": "..."}],
    "samples": [{"type": "image", "data": data_url("samples/1.png"), "caption": "..."}],
    "cover": 0,
    "thumbnail": data_url("thumbnail.png"),
    "videoUrl": "",
    "files": [{"path": "instructions.md", "content": pathlib.Path("instructions.md").read_text()}],
    "sellerName": "...", "sellerEmail": "...",
}
req = urllib.request.Request(
    "https://team-api.locul.ai/v1/marketplace/guest/listings",
    data=json.dumps(listing).encode(),
    headers={"Content-Type": "application/json", "User-Agent": "locul-bot-listing"},
    method="POST",
)
try:
    print(urllib.request.urlopen(req, timeout=120).read().decode())
except urllib.error.HTTPError as e:
    print(e.code, e.read().decode())
```

A `200` with `"status":"unverified"` means it worked. A `400` names the one thing to fix: fix it and send again. A `409` means the web address is taken: add `"slug":"another-name"`.

### If you can't run code

Give the user the listing as one JSON block (everything except the image and video files), then send them to https://locul.ai/bots/sell/submit/ . They paste the JSON into "Paste from Claude", which fills the form, then add the samples, thumbnail and icon and press Submit.

## 4. Tell the user what happens next

1. Check the inbox of `sellerEmail` and press **Confirm**. Nothing is reviewed until they do.
2. A person reviews it, usually within a day.
3. They get an email when it is live, with the link to its page, or a note saying what to change and a link to fix it.

Sellers keep 80% of every sale, and founding sellers keep 100% for the first 90 days after launch (until 30 January 2027). Buyers get a 48-hour refund.
