Suggest Hashtags from Keywords
Enter keywords such as social media, Content Marketing and SEO tips and get #socialmedia, #socialMedia, #contentmarketing and the rest, each in lowercase and camel case. Repeats like social-media are dropped and your order is kept. No related tags are invented. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
The hashtag suggestion tool converts a list of keywords and short phrases into clean, ready-to-use hashtag variants. For every keyword, it creates a fully lowercase form and a readable lower-camel-case form, then removes duplicates without changing the original order. It is designed for teams that already know their target terms and need consistent formatting rather than speculative topic generation.
Start with focused keywords and phrases
Enter one or more terms that describe the subjects you actually want to tag. A value can be a single word, such as photography, or a short phrase, such as street photography or summer travel ideas. The tool treats whitespace and punctuation as word boundaries, so several common ways of writing the same phrase lead to consistent compact hashtags.
It also recognizes a transition from a lowercase letter or number to an uppercase letter as a boundary, which helps when an input already uses camel case. Each item must contain a letter or number. Blank strings and punctuation-only values are rejected because silently ignoring them could hide mistakes in an automated publishing pipeline.
Keep each phrase focused on one concept instead of supplying an entire caption. This capability formats the terms you provide; it does not analyze a post, predict trends, measure popularity, or invent related subjects. That narrow behavior is useful when your keywords have already been selected through research, an editorial brief, or an approved campaign vocabulary.
Understand the two variants and deduplication
For each keyword, the first result is fully lowercase with all word separators removed. The second is lower camel case: its first word stays lowercase and each later word begins with an uppercase letter. For example, a phrase shaped like social media produces a compact lowercase tag and a visually segmented camel-cased tag.
Both begin with the hashtag symbol. When the two forms are identical, as they normally are for a single lowercase word, only one value is returned. Deduplication also applies across the complete request, not merely within one keyword, and the first occurrence determines the output position.
This makes overlapping inputs safe to combine from several planning sources without receiving repeated tags. Unicode letters and numbers are preserved, while punctuation acts as a separator rather than becoming part of the tag. Compatibility normalization is applied before processing so equivalent character forms behave consistently.
The algorithm has no random choices, network lookup, or time-dependent rules, so saved examples and production calls remain reproducible.
Use the results in a publishing workflow
Copy the returned array into a caption builder, social publishing queue, content management system, or campaign review sheet. Because results stay in first-seen order, you can place your most important keywords first and preserve that priority through later automation. The lowercase form is compact and conventional, while the camel-cased form can be easier for people to scan when a hashtag contains several words.
Always review the final selection against the policies and conventions of the platform where it will appear. This tool does not check whether a hashtag is banned, crowded, trademarked, culturally appropriate, or currently trending. It also does not promise reach or engagement; it simply makes a chosen vocabulary consistent.
For reliable integrations, treat an invalid input response as a data-quality signal: correct empty lists, blank entries, or non-string values upstream rather than retrying the unchanged request.
What you can do with it
Prepare a campaign hashtag set
Convert approved campaign keywords into consistent lowercase and camel-cased options without introducing unreviewed topics.
Normalize a content calendar
Apply the same hashtag formatting rules to terms collected from multiple writers, briefs, or planning documents.
Automate publishing templates
Generate stable, deduplicated hashtag arrays for a CMS, scheduler, or caption assembly pipeline.
FAQ
Does this tool invent related hashtags?
No. It only formats the keywords you supply into lowercase and camel-cased variants.
How are duplicates handled?
Exact generated hashtags are returned once, in the position where they first appeared.
Are punctuation and spaces included?
No. They separate words and are removed from the completed hashtag; Unicode letters and numbers are retained.
Why do I get two versions of each hashtag?
One is fully lowercase and compact, the other is camel case so each word stands out, as in #socialmedia and #socialMedia. A single lowercase word such as photography gives the same result both ways, so it appears only once.
Does it handle accented letters and other alphabets?
Yes. Unicode letters and numbers are kept as they are, while punctuation only separates words. Equivalent character forms are normalized first, so the same word typed in slightly different ways leads to the same hashtag.
Related tools
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/seo/hashtag-suggest-from-keywords \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"keywords":["social media","Content Marketing","SEO tips"]}'const res = await fetch("https://api.kit.forhosting.com/seo/hashtag-suggest-from-keywords", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"keywords": [
"social media",
"Content Marketing",
"SEO tips"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/hashtag-suggest-from-keywords",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"keywords": [
"social media",
"Content Marketing",
"SEO tips"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/hashtag-suggest-from-keywords", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"keywords":["social media","Content Marketing","SEO tips"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"keywords":["social media","Content Marketing","SEO tips"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/hashtag-suggest-from-keywords", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"keywords": [
"social media",
"Content Marketing",
"SEO tips"
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.hashtag_suggest_from_keywords",
"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.
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. |
Technical notes
The same deterministic input always produces the same result, making it useful in publishing workflows, content calendars, campaign templates, and API-driven automation.
Technical questions
What happens when the keyword list is empty?
The request returns an invalid_input error because at least one keyword is required.
How much does an API request cost?
Each API request costs $0.002. The browser version runs the same deterministic transformation logic.