Docs
SubmitFleet has four ways in: the web app, a CLI, an MCP server for agents, and an HTTP API. They all share the same account, products and campaigns.
How a submission works
Every destination is submitted one of two ways:
- Assisted. SubmitFleet prepares every field from your approved product details, links you to the submit page and tracks the result. You paste and press submit, then mark it submitted and, once it appears, live with its URL. This works for every destination in the catalog.
- Automatic. Where a destination has an API that permits it and we have tested an adapter against it, workers submit for you after you approve the campaign, and record the receipt. Only destinations that pass every check are automatic; the destinations page shows how many that is today.
Either way, nothing is submitted until you approve the exact list, listing fees are always $0 (paid routes are excluded), and a product is never submitted twice to the same place.
CLI
curl -fsSL https://submitfleet.com/install.sh | sh
submitfleet login # opens your browser, signs the CLI in (OAuth 2.1 + PKCE)
submitfleet whoami
submitfleet products list
submitfleet catalog search ai --json
submitfleet campaign status CAMPAIGN_ID --json
submitfleet report export CAMPAIGN_ID --format markdown
submitfleet mcp --stdio # MCP over stdio, signed in as you
Without login, the CLI runs fully local against its own database (self-hosted mode). submitfleet help lists every command.
MCP
Create an agent key in Settings, then add the server to your client:
claude mcp add --transport http submitfleet https://submitfleet.com/mcp \
--header "Authorization: Bearer sf_agt_..."
Tools are prefixed submitfleet_: products, catalog search, campaign plan, preview, status, reports, the human-action queue and more. An agent can plan a campaign and request approval. There is no tool that grants approval: you approve in the app.
HTTP API
Base URL https://submitfleet.com/api/v1, bearer API key in the Authorization header. JSON in and out; errors carry an error code and a message.
GET /products POST /products
POST /products/extract {url} PUT /products/:id/logo (image body)
POST /products/:id/approve-facts (owner)
GET /catalog?q=&channel=&pricing= GET /catalog-stats
POST /campaigns {product_id, destinations?, channels?, mode?}
POST /campaigns/:id/approval-request
POST /campaigns/:id/approve {scope_hash} (owner)
POST /campaigns/:id/run GET /campaigns/:id/queue
GET /submissions/:id/kit POST /submissions/:id/mark {action, listing_url?, note?}
GET /reports/:id?format=markdown|json|csv
Self-hosting
SubmitFleet is MIT-licensed. npm i -g @profullstack/submitfleet, then submitfleet serve runs the app, API, MCP and workers in one process on SQLite (or Turso). Source and issues: github.com/profullstack/submitfleet.