Social Metadata Generator - Titles, Hashtags & SEO Tags
Pricing
from $14.40 / 1,000 metadata packs
Social Metadata Generator - Titles, Hashtags & SEO Tags
Write titles, captions, hashtags and SEO tags for a video from a topic or a script. Each pack holds title options, a caption, hashtags, 10 to 15 keyword tags and a pinned comment, written for YouTube, Shorts, TikTok, Reels or X. You bring your own OpenAI key. $15.00 per 1,000 packs.
Pricing
from $14.40 / 1,000 metadata packs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Give it a topic, a title idea or the whole script and get back the titles, caption, hashtags and tags for your video: several title options, a description, hashtags, 10 to 15 keyword tags and a pinned comment, written for the platform you picked.
Two things to know up front. You bring your own OpenAI key, so the writing is on your account and your bill. And the platform rules are asked of the model rather than trimmed afterwards, so a title can still come back longer than YouTube will show. Read them before you post.
| Input | A topic, a title idea or a full script, one at a time or as a batch |
| Output | One pack per source: title options, description, hashtags, 10 to 15 tags and a pinned comment |
| Ceiling | One platform per run, source text read up to 6,000 characters |
| Account needed | Your own OpenAI key |
| Price | $15.00 per 1,000 packs ($0.015 each) on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 330 |
π What Social Metadata Generator does
Every platform wants something different from the same video. YouTube rewards a title that reads
like a search, TikTok wants the first three words to land, Reels leans on the caption, X has almost
no room at all. Pick the platform in platform and the pack is written for that one.
A pack is five things: titles with as many options as you asked for, a description you can paste
as the caption, hashtags already normalised with the # and no spaces, tags as bare keywords for
the YouTube tag box, and a pinnedComment to drop under your own video.
Run it with sources to do a batch. One pack per item, all on the platform you chose.
π What data you get from each metadata pack
| What you get | Field |
|---|---|
| Title options, as many as you asked for | titles |
| A caption or video description | description |
Hashtags with the # already on | hashtags |
| Bare keyword tags for the YouTube tag box | tags |
| A comment to pin under your own video | pinnedComment |
| The platform it was written for | platform |
| The start of what you sent, so you can tell packs apart | source |
βΆοΈ How to write titles and hashtags from a topic or a script
- Open Social Metadata Generator and click Try for free.
- Paste your topic or script into Topic / script.
- Pick the Platform. This is the one setting that changes the output most.
- Put your key into OpenAI API key (BYO). Without it you get the sample pack instead.
- Click Start, then take the pack from the dataset or read it from the API.
π° How much does it cost to write titles and hashtags for a video?
$15.00 per 1,000 packs, which is $0.015 per pack on the Free plan. Paid plans pay a little less: $14.80 on Starter, $14.60 on Scale and $14.40 on Business. On the free plan, the $5 Apify gives you each month covers about 330 packs.
One source in, one pack out, one charge. The sample pack and any item the model could not write go to the key-value store instead of the dataset, so neither is billed here.
Your OpenAI usage is separate and goes to OpenAI on your own key. gpt-4o-mini is the default
because it is cheap for this kind of short writing job.
π₯ What you give it
{"text": "A 60-second video explaining why cats knock things off tables, with funny examples.","platform": "youtube shorts","titleCount": 5,"keywords": "cat behaviour, why cats do that","language": "English"}
| Field | Default | What it is |
|---|---|---|
text | none | One topic, title idea or script. The form opens with a sample topic in it. |
sources | none | A batch. Strings, or objects carrying title, script, scriptText, text or selftext. |
platform | youtube | youtube, youtube shorts, tiktok, instagram reels or twitter. One per run. |
titleCount | 5 | Title options to write. 1 to 15. |
keywords | none | Comma separated terms to work in. Useful when you already know what you rank for. |
language | English | Output language. Write the language name in plain words. |
openaiApiKey | none | Your own key. Held as a secret field, never written into the results. |
model | gpt-4o-mini | Any chat model your key can reach. |
baseUrl | none, which means OpenAI | Point it at any OpenAI-compatible endpoint instead. |
An object in sources is read title first. If it has a title, that is what gets used and the
script alongside it is ignored. When you want the whole script considered, pass it as a plain
string.
π€ What you get back
Real output from a run with no key on it, so this is the free sample pack the actor writes rather
than model output, which is why the text says so. A real pack has the same fields without _sample
and note:
{"ok": true,"_sample": true,"note": "SAMPLE output ... Add your OpenAI key (openaiApiKey or the OPENAI_API_KEY env var) to generate real, AI-written metadata.","source": "A 60-second video explaining why cats knock things off tables, with funny examples.","platform": "youtube","titles": ["A 60-second video explaining why cats knock things off table ... You Won't Believe #3","The Truth About A 60-second video explaining why cats knock things off table","A 60-second video explaining why cats knock things off table: A Quick Guide"],"description": "[SAMPLE] Hook line about A 60-second video explaining why cats knock things off table...","hashtags": ["#sample", "#demo", "#metadata", "#contentcreator", "#socialmedia"],"tags": ["sample", "demo", "metadata generator", "titles", "hashtags", "seo tags"],"pinnedComment": "[SAMPLE] Drop a comment below ... this is example engagement bait."}
The title list and hashtag list are cut short above so the block stays readable.
| Field | How to read it |
|---|---|
titles | Your options, in the order the model wrote them. Pick one, they are not ranked. |
description | The caption or video description, as one block of text. |
hashtags | Already carrying the # with the spaces taken out, so they paste straight in. |
tags | Bare keywords, no #. This is the YouTube tag box, not the caption. |
pinnedComment | A comment to pin under your own video. Hidden in the default table view, so open the JSON or export to see it. |
source | The first 1,000 characters of what you sent, so you can tell packs apart in a batch. |
π§Ύ Reading the output
A dataset row is a finished pack, and every dataset row is billed. Two other things the actor writes never reach the dataset at all, so they never bill:
| What | Where it goes | Billed |
|---|---|---|
| A finished pack | The dataset, ok: true | yes |
| The sample pack, when no key was supplied | Key-value store, SAMPLE_AND_NOTICES, flagged _sample | no |
| An item the model could not write | Key-value store, same key, ok: false with the reason | no |
So if you ran a batch of 20 and the dataset holds 17 rows, the other three are in Storage under
SAMPLE_AND_NOTICES with the reason attached. A run where every item failed still finishes green
with an empty dataset, which is why the row count is the thing to check rather than the run status.
Without a key, a batch gets one sample pack, for its first item. With a key on the run and nothing in
text or sources, the run fails outright rather than writing an empty dataset.
π‘ What people use it for
- Writing the title, caption and tags for a batch of shorts in one pass instead of one video at a time.
- Getting five title options to choose from, which is more useful than one confident guess.
- Rewriting the same video's metadata for a second platform by running it again with
platformchanged. - Keeping a house set of keywords in
keywordsso every upload leans the same way.
From a topic to the strongest title, in two steps:
- Run this actor on your topic with
titleCountset to10. - Put the
titlesinto Hook & Virality Scorer astexts. It sends them back best first.
π§ What it does not do
- It does not enforce the platform limits. Lengths, hashtag counts and the 10 to 15 tag range are asked for, not trimmed afterwards. Check a title before you paste it.
- No trend or search-volume data. The tags are written from your topic, not from what is currently being searched.
- One platform per run. Two platforms means two runs, and two packs to pay for.
- It reads an object's title, not its script. Pipe rows in and you may be generating from a headline. Pass the script as a string when the body is what matters.
- Long scripts are trimmed. Roughly the first 6,000 characters are what the model sees.
- No retry. If your key hits OpenAI's rate limit mid-batch, the remaining items can fail one
after another. They are not billed, and the reason is in
SAMPLE_AND_NOTICES. - No key, no writing. A run without one produces the sample pack so you can see the shape, and nothing more.
- It does not post anything.
- It is not an official tool of any platform or company named on this page. Dami's Studio is independent and is not affiliated with or endorsed by any of them.
π§ Which video tool do you need?
| If you want | Use |
|---|---|
| Titles, captions, hashtags and tags for a video | This one |
| A 0 to 100 score for each title or hook before you post | Hook & Virality Scorer |
| A thumbnail with a close-up face and a hook headline | AI Thumbnail Generator |
| A post or article rewritten into a short-form script | Story to Script Rewriter |
β Questions people ask
Why do I need my own OpenAI key?
Because the writing happens on your account, at your model choice, and nothing about your script passes through a key of ours.
Can I use a model that is not OpenAI's?
Yes, if it speaks the OpenAI chat format. Put the endpoint in baseUrl and the model name in
model.
Where is my pinned comment?
On the row. The default table view does not show that column, so open the JSON or export the dataset.
Will the titles be under the YouTube limit?
Usually, but it is not guaranteed. The length is requested from the model and not cut afterwards.
What language can it write in?
Whatever you put in language. Write the name of the language, not a code.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/social-metadata-generator. Either way
the run happens on your Apify account at the same price, and the writing on your own OpenAI key.
π If something breaks
Open the Issues tab on the actor page. Send the run ID and the topic you used. If rows are
missing, look in Storage under SAMPLE_AND_NOTICES first, because the reason is usually written
there.