Free · Read-only · No key
API and MCP server
You can use this list from code or from an AI assistant. The JSON API needs no key or sign-up, and the MCP server lets Claude, ChatGPT, or another assistant search the list for you.
What the data is
The data is the whole list: 165 places where a founder can share a startup, from directories and launch sites to communities and editorial sites. I try each place by submitting my own site, SubmitMyStartup, and write down what happened. So far I have tried 134 of them.
Each entry has the public list's row (its Free? label, notes, and Last checked date) and structured facts: whether it is free and what the catch is, what kinds of product and which regions it takes, what the free path needs (an account, a badge, an email on your own domain, upvotes), and how long the wait is. Every fact says where it came from: the public list, or my own attempt on a date. When a fact is not on record it is null, not a guess.
Directories change their rules, so check a site before you rely on a fact. The data is rebuilt whenever the list changes, and it was last updated on 2026-10-04.
JSON endpoints
- https://submitmystartup.com/api/v1/directories.json: every entry, with its facts and the status of my attempt.
https://submitmystartup.com/api/v1/directories/{id}.json: one entry by id, for example https://submitmystartup.com/api/v1/directories/crunchbase.json.- https://submitmystartup.com/api/v1/meta.json: counts, the date it was generated, the allowed values for every filterable field, and the license.
Responses are application/json, open to any origin (CORS), and cached for a few minutes. A path under /api/v1/ that doesn't exist, such as an unknown id, gets a 404 with a JSON error object. Here is one entry as directories/crunchbase.json returns it:
{
"schema": "submitmystartup-api/v1",
"generatedAt": "2026-10-04T05:51:42.082Z",
"docs": "https://submitmystartup.com/api/",
"license": "MIT, Copyright (c) 2026 mmmmingos. https://github.com/mmmmingos/where-to-submit-your-startup/blob/main/LICENSE",
"directory": {
"id": "crunchbase",
"name": "Crunchbase",
"url": "https://support.crunchbase.com/hc/en-us/articles/115011823988-How-do-I-create-a-Crunchbase-profile",
"category": "directories",
"section": "Directories & profiles",
"free": "Yes",
"notes": "Free basic company profile after account signup (social authentication). Profile can go live the same day. Logo upload was unavailable in the free create flow (observed 2026-09-26). Link opens setup instructions.",
"lastChecked": "2026-09-26",
"tried": true,
"facts": {
"format": "profile",
"state": "live",
"stateNote": null,
"accepts": {
"products": "any",
"audience": "any",
"stage": "any",
"region": {
"scope": "global"
},
"excludes": [],
"rule": null
},
"cost": {
"free": "free",
"paidOption": null,
"cheapestPaid": null
},
"requirements": {
"account": "required",
"badge": "no",
"domainEmail": "no",
"engagement": null,
"socialProfile": null,
"phone": null,
"captcha": null,
"ownDomain": null,
"invitation": null,
"revenueProof": null,
"domainRatingAbove": null,
"other": []
},
"wait": {
"minDays": 0,
"maxDays": 0,
"basis": "observed",
"text": "The profile went live the same day (2026-09-26)"
},
"review": "none",
"backlink": null,
"lastChecked": "2026-09-26",
"sources": [
{
"source": "submission-report",
"date": "2026-09-26",
"facts": [
"format",
"state",
"accepts.products",
"accepts.audience",
"accepts.stage",
"accepts.region",
"cost.free",
"requirements.account",
"requirements.badge",
"requirements.domainEmail",
"wait",
"review"
]
},
{
"source": "public-list",
"date": "2026-09-26",
"facts": [
"state",
"accepts.products",
"accepts.audience",
"accepts.stage",
"accepts.region",
"cost.free"
]
}
]
},
"myAttempt": {
"status": "published",
"statusText": "Complete: company profile live",
"date": "2026-09-26",
"publishedOn": "2026-09-26"
},
"links": {
"self": "https://submitmystartup.com/api/v1/directories/crunchbase.json",
"list": "https://github.com/mmmmingos/where-to-submit-your-startup#directories--submission-services",
"site": "https://submitmystartup.com/#site-crunchbase"
}
}
}Fields
The same reference is in meta.json under fields, and the allowed values are under filters.
id: Stable id from the list: the name lowercased, with other characters turned into hyphens.category: Section of the list: directories, paid, specialist (only for some startups), reddit, or problems (reported problems).free: The list's Free? label: Yes, Yes* (free with a material catch), No (paid only), or Unknown.notes: The list's notes for the row.lastChecked: The row's Last checked date on the list.tried: true when I have tried the place by submitting my own site to it, or null if its facts are not recorded yet.myAttempt: The status of my own attempt as the website shows it (submitted, published, rejected, or blocked), its date, or null.links: self: this entry's JSON. list: the section of the public list that holds its row. site: its row on the website.facts: Structured facts, or null if they are not recorded yet. A fact that is not on record is null, never guessed.facts.format: How a listing happens: directory, launch (a dated launch), profile (a company profile), editorial (a pitch for coverage), community (a post), app-review, review-site (G2 and similar), gallery (a design gallery), or beta-testing.facts.state: live, or for reported problems: broken (the submission path doesn't work), inactive (abandoned), closed (doesn't take listings), or dead (gone).facts.stateNote: What was seen, with the date, for problems and for live sites with a quirk worth knowing.facts.accepts.products: "any" (no product-type restriction on record), or a list of product tags: it takes products with at least one of them.facts.accepts.audience: any, b2b (business products only), or b2c (business-to-business products aren't covered).facts.accepts.stage: any, pre-release (unreleased or beta only), released (no alpha or beta software), or early-stage (young startups only; the rule is in accepts.rule).facts.accepts.region: {"scope": "global"}, or a limited region: {scope: "limited", basis, label, areas}. basis headquarters: the startup must be based there. basis market: the site covers that market or language. areas are ISO 3166 codes (AU, US-WA).facts.accepts.excludes: Product tags it turns down.facts.accepts.rule: The eligibility or posting rule in words.facts.cost.free: free, free-with-catch, or paid-only.facts.cost.paidOption: Whether a paid option for the listing (paid listing, queue skip, upgrade, or promotion) was seen.facts.cost.cheapestPaid: {amount, currency, period, name}: the lowest regular price seen for such an option. period is one-time, day, week, month, year, or null.facts.requirements.<key>: What the free path needs: required, alternative (one of the alternatives is needed), optional (helps but isn't needed), or no. Keys: account, badge (a badge or backlink on your site), domainEmail (an email on your own domain; Gmail is refused), engagement (upvotes, comments, or ratings on other products first), socialProfile, phone, captcha, ownDomain, invitation, revenueProof.facts.requirements.domainRatingAbove: Your site's domain rating must be above this.facts.requirements.other: Other requirements and quirks of the free path.facts.wait: The free path's wait until the listing is live: {minDays, maxDays, basis, text}. basis stated: the site's own figure. basis observed: a date or queue position I was given.facts.review: none (live without a review), moderated (reviewed, usually accepted), or curated (editors choose, so a listing isn't guaranteed).facts.backlink: dofollow, nofollow, or conditional (dofollow only in some cases), as the site describes its free listing's link.facts.lastChecked: The newest date behind the facts. Never older than lastChecked.facts.sources: Where each fact came from: public-list (the row, on its Last checked date) or submission-report (my attempt on that date), with the facts it supports.
Add the MCP server to Claude
The MCP server is at https://submitmystartup.com/mcp. It is read-only and needs no sign-in or key.
- In Claude, open Customize, then Connectors. On a Team or Enterprise plan, an Owner adds it under Organization settings, then Connectors.
- Choose Add custom connector.
- Name it SubmitMyStartup and paste
https://submitmystartup.com/mcpas the URL. If Claude asks how people sign in, choose No sign-in. Then add it. - In a chat, open the + menu, choose Connectors, and turn SubmitMyStartup on.
Claude’s Free plan allows one custom connector. Then ask in a chat, for example: “Find free directories that accept a non-AI B2C web app, with no budget.” or “I’m based in Australia, can’t add a badge, and don’t have a domain email. Where can I get listed within 30 days?”
In Claude Code, run:
claude mcp add --transport http submitmystartup https://submitmystartup.com/mcpAdd it to ChatGPT
ChatGPT can use the server in developer mode, on the web, on Plus, Pro, Business, Enterprise, and Education plans.
- In ChatGPT, open Settings, then Security and login, and turn on Developer mode.
- Add an app for a remote MCP server (OpenAI’s guide says to open ChatGPT Plugins and choose the plus button). Paste
https://submitmystartup.com/mcpas the URL and choose No authentication. - In a chat, open the plus menu, choose Developer mode, and turn on the app.
ChatGPT’s menus change often, so if a step doesn’t match, OpenAI’s developer mode guide has the current one. The server also has search and fetch tools in the shape OpenAI describes for deep research and company knowledge.
Other MCP clients
Any client that supports remote MCP servers over Streamable HTTP can use the same URL, with no authentication. Clients set up with a JSON file, such as Cursor, usually take something like this:
{
"mcpServers": {
"submitmystartup": {
"url": "https://submitmystartup.com/mcp"
}
}
}
VS Code’s .vscode/mcp.json takes this shape instead:
{
"servers": {
"submitmystartup": {
"type": "http",
"url": "https://submitmystartup.com/mcp"
}
}
}
Check your client’s docs for the exact keys. A description of the server for clients and directories that look for one is at https://submitmystartup.com/.well-known/mcp.json.
The MCP tools
The server has 5 read-only tools. They read the same data as the JSON API and never fetch anything else:
find_directories: a ranked shortlist for one product. It filters by product type, B2B or B2C, released or not, country, budget (0 for free only), whether you can add a badge or have a domain email, and how soon the listing must go live. Free places come first, then the cheapest, then the shortest wait. Each result says what it costs, what the free path needs, why it fits, and what is not on record.get_directory: every fact about one place, by id, name, or website, with a short summary first.list_filters: the allowed values and example arguments, so an assistant can build a query.search: a keyword search over the list (names, websites, kinds of place, product types, regions, and notes) that returns ids, titles, and links, in the shape ChatGPT's deep research and company knowledge look for.fetch: the full record of one place as readable text, with a link to its row for citing. It pairs with search.
Results link each place to its row on this website, and say which facts are not on record, so an assistant can tell you what to check rather than guess.
License and attribution
The list is open source under the MIT License, Copyright (c) 2026 mmmmingos. You can use, copy, change, and share the data, including in commercial products. Keep the copyright and license notice with any substantial copy, and please credit “Where to Submit Your Startup” with a link to the list on GitHub.
Corrections and new places are welcome on GitHub. More for assistants is in llms.txt.