Business name combinations generator
The business name combinations generator turns two curated lists into a repeatable set of candidate names.
Run — free
Put descriptive words, invented stems, locations, or values in the first list, then add industry terms, endings, or product words in the second. Choose how many results you need and provide a seed. The same lists, count, and seed always return the same ordered names, making the tool useful in shared naming workflows, automated research, and reproducible creative briefs without relying on random output or a language model.
Build focused fragment lists before generating names
The quality of a combination set begins with the two source lists. Use the first list for the ideas that should lead each name: a benefit, mood, location, audience, material, or short invented stem. Use the second list for a category signal, company ending, product family, or another stem that completes the name. Focused lists usually create more useful candidates than long collections of unrelated words. For example, a sustainable home service might use first fragments connected to light, renewal, and place, while its second fragments describe homes, energy, or craft. Every first fragment can pair with every second fragment, so three entries in one list and four in the other define twelve pair positions. Fragments are trimmed before use, but spelling, capitalization, punctuation, and internal spaces remain under your control. Review them as real name components rather than isolated keywords. The generator deliberately does not rewrite, synonymize, or improve a fragment, which keeps the output traceable to the vocabulary your team approved. Empty lists and blank individual entries are rejected because they cannot produce a meaningful name component.
Use the seed to make exploration reproducible
A seed controls where the generator begins in the pair space and the order in which it visits the remaining pairs. It is not appended to a name and does not need to sound attractive; it is simply a stable coordination value. You might use a campaign code, workshop label, client brief version, or any memorable string. Reusing the same seed with identical fragment lists and count returns exactly the same ordered result, which lets two people reproduce a shortlist without copying an intermediate file. Changing the seed explores the same underlying pair space in a different deterministic order. During each traversal, the algorithm uses a step that is mathematically coprime with the number of pair positions. That detail ensures it reaches every position once before starting another cycle. If the requested count is larger than the available pair positions, results repeat in the same stable cycle so the response still contains exactly the requested number of items. For the broadest distinct set, keep the count at or below the product of the two list lengths.
Treat generated names as a structured first pass
Combination is a useful divergence tool, not a legal or branding decision. After generating candidates, read them aloud, remove awkward joins, and check whether abbreviations or unintended meanings appear. Then assess the survivors against your positioning, customer vocabulary, pronunciation needs, and visual identity. A candidate that reads well in a list may be difficult to spell over the phone or confusing when written in lowercase. Before adopting any result, conduct appropriate company-name, trademark, domain, marketplace, and social-handle research in the jurisdictions and channels relevant to the business. This capability does not perform those checks and does not claim that a returned name is unique or available. Its deterministic behavior is especially helpful when documenting the earlier creative stage: save the inputs and seed alongside a brief, then regenerate the exact candidate batch during review. API requests cost $0.002 each, while the bounded algorithm performs no network calls and sends no query to an external naming service. That makes it suitable for repeatable internal pipelines where controlled vocabulary matters more than open-ended prose generation.
What you can do with it
Run a naming workshop
Combine team-approved themes and industry endings, then share a seed so every participant reviews the same ordered batch.
Create campaign-specific shortlists
Use a campaign code as the seed to produce repeatable candidate groups from a maintained brand vocabulary.
Automate early-stage name exploration
Generate a fixed number of traceable names inside a product or agency workflow without nondeterministic model output.
FAQ
Will the same input always produce the same names?
Yes. Identical prefix and suffix lists, count, and seed produce the same names in the same order.
What happens if one of the lists is empty?
The request fails with an invalid input error. Both lists must contain at least one non-empty string fragment.
Can the requested count exceed the number of combinations?
Yes. After every pair position has been used once, the deterministic sequence repeats until it reaches the requested count.
Does the tool check trademarks or domain availability?
No. It only combines supplied fragments. Research legal conflicts, company registries, domains, and handles before selecting a name.
Does the seed appear in the generated names?
No. The seed only selects the deterministic starting point and traversal order.
How much does an API request cost?
Each API request costs $0.002.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/biz/business-name-combine \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"prefixes":["Bright","North","True"],"suffixes":["Works","Labs","Market"],"count":6,"seed":"spring-campaign"}'const res = await fetch("https://api.kit.forhosting.com/biz/business-name-combine", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"prefixes": [
"Bright",
"North",
"True"
],
"suffixes": [
"Works",
"Labs",
"Market"
],
"count": 6,
"seed": "spring-campaign"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/business-name-combine",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"prefixes": [
"Bright",
"North",
"True"
],
"suffixes": [
"Works",
"Labs",
"Market"
],
"count": 6,
"seed": "spring-campaign"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/business-name-combine", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"prefixes":["Bright","North","True"],"suffixes":["Works","Labs","Market"],"count":6,"seed":"spring-campaign"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"prefixes":["Bright","North","True"],"suffixes":["Works","Labs","Market"],"count":6,"seed":"spring-campaign"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/business-name-combine", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"prefixes": [
"Bright",
"North",
"True"
],
"suffixes": [
"Works",
"Labs",
"Market"
],
"count": 6,
"seed": "spring-campaign"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.business_name_combine",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_fragments_per_list | 100 |
max_count | 100 |
max_fragment_length | 80 |
max_seed_length | 200 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |