Social Media Uploader Pro - Post From Claude, ChatGPT or n8n
Pricing
from $0.000013 / actor start
Social Media Uploader Pro - Post From Claude, ChatGPT or n8n
Post videos from Claude, ChatGPT or n8n. This is an MCP server. Point your client at the Standby URL and nine tools show up. You pass your own logins on every call; the server stores none. Each upload is a billable run on your own account, even when it fails. On YouTube use the OAuth tool.
Pricing
from $0.000013 / actor start
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Share
Social Media Uploader Pro: post videos to your own accounts from Claude, ChatGPT or n8n
This is an MCP server. Point your AI client at its Standby URL and nine tools appear, six of which publish a video to your own TikTok, Instagram, Facebook or YouTube account from a public URL. Then you say "post this to TikTok and YouTube" and it happens.
Two things to know first. Your Apify token goes into the URL twice, because Apify's Standby
gateway removes the copy it authenticated you with, and a single copy answers NO_APIFY_TOKEN on
every tool. And every upload starts a separate, billable Actor run on your own Apify account:
one that fails to publish still costs that Actor's run-start fee, and where an Actor bills per
megabyte, that charge covers the bytes it moved either way.
| Input | Tool calls from your MCP client, carrying your own platform logins |
| Output | A started upload run on your account, and its result when you ask for it |
| Ceiling | Nine tools, six platforms, one platform per call |
| Account needed | Your own Apify token, plus your own login for each platform |
| Price | $0.0000125 per start of this server. Each upload is a separate billable run on your account |
🔌 What Social Media Uploader Pro does
It is a thin wrapper. Your client calls a tool, the tool starts the matching uploader Actor on your account with the input you gave it, and hands back the run id. No upload happens inside this server.
You pass your own credentials on every call. They land in that run's input record, encrypted in the fields the Actor marks secret. The server keeps none, logs none, and takes them out of any error text.
The nine tools, read off the running server:
| What you want to do | Tool |
|---|---|
| See which platforms your token can reach, and read their live prices | list_platforms |
| Post to TikTok | upload_tiktok |
| Post a Reel to Instagram | upload_instagram_reel |
| Post a Reel to a Facebook Page or profile | upload_facebook_reel |
| Post a vertical video to YouTube as a Short | upload_youtube_short |
| Post a long video to YouTube through the browser route | upload_youtube_video |
| Post to YouTube over Google's official API with your own OAuth app | upload_youtube_video_oauth |
| Check what a run did, and whether anything was actually published | get_upload_status |
| Stop a run that is stuck | abort_upload |
Call list_platforms first. It starts no upload, and says which of the six your token can reach and
what each charges right now.
📥 What you give it
Connect your client to the Standby URL with your Apify token in it twice:
https://dami-studio--social-media-uploader-pro.apify.actor/mcp?token=YOUR_TOKEN&apifyToken=YOUR_TOKEN
In Claude Desktop, n8n or any MCP client, that URL is the whole setup. A call looks like this:
{"videoUrl": "https://example.com/clip.mp4","caption": "New drop, link in bio","privacy": "public","cookies": "<your own TikTok cookie export>","maxTotalChargeUsd": 1,"demoMode": false}
Four supporting arguments are on every upload tool, whatever the platform:
maxTotalChargeUsdcaps what the run may spend on your account. Set it.demoModestarts the Actor, checks the input and returns a labelled sample. It neither verifies your login nor uploads, and it still costs that Actor's run-start fee.proxyConfigurationgoes to the uploader exactly as you send it, if you use it at all.waitSecondsreturns a run id at once, or waits for a result.
📤 What you get back
A tool call answers with the run it started. get_upload_status is what you ask afterwards: run
status, the charges settled on your account, and the Actor's own result row.
| Field | What it is |
|---|---|
runId | The child run on your account. Everything else is looked up from this. |
published | Worked out from the result row, never from the run status. This is the field that matters. |
duplicateSuppressed | true when you sent the same upload twice inside ten minutes and the first run was still going, so the same runId comes back instead of a second upload. |
privacyStatus, privacyOverridden | On the YouTube OAuth route, what YouTube actually stored against what you asked for. |
A normal, non-Standby run uploads nothing. It writes one notice row and stops, which is what you get if you press Start on the Actor page:
{"ok": true,"kind": "mcp-server-info","message": "This Actor is an MCP server. Enable Standby for it, then point your AI agent / MCP client at its Standby URL. A normal run only prints this notice, it uploads nothing...","tools": ["list_platforms", "upload_tiktok", "upload_instagram_reel", "upload_facebook_reel", "upload_youtube_short", "upload_youtube_video", "upload_youtube_video_oauth", "get_upload_status", "abort_upload"],"toolCount": 9,"platforms": ["tiktok", "instagram_reel", "facebook_reel", "youtube_short", "youtube_video", "youtube_video_oauth"]}
🧾 Reading the output
A finished run is not a published video. These uploaders write a diagnostic row and exit
normally rather than crashing, so a run can read SUCCEEDED and have published nothing. Read
published, nothing else.
Three answers mean a setup problem rather than an upload problem:
| Code | What it means |
|---|---|
NO_APIFY_TOKEN | Your token reached the gateway but not the server. Put it in the URL twice, as above. |
ACTOR_NOT_ACCESSIBLE | The token is fine but cannot reach that uploader. Run list_platforms to see which ones it can. |
NOT_AN_UPLOAD_RUN | The run id you passed is not a run of one of the six uploaders. |
get_upload_status and abort_upload work on any run of those six Actors on your account, not only
the ones this server started. Neither starts an upload or bills an upload event.
▶️ How to run it
- Open Social Media Uploader Pro and copy the Standby URL from the API tab.
- Add your Apify token twice:
?token=...&apifyToken=.... - Paste that URL into your MCP client as a remote server and restart the client.
- Ask it to run
list_platforms. Six platforms with prices should come back. - Ask it to post something, with
demoModeon first.
💰 How much does it cost?
The server itself is $0.0000125 per start. list_platforms, get_upload_status and
abort_upload cost nothing beyond that.
Every upload is a separate billable run on your own Apify account, at the published price of the
Actor behind that platform. list_platforms reads those prices live, so they never go stale in your
client. Three things to plan for:
- A run that fails to publish still costs that Actor's run-start fee.
- Where an Actor bills per megabyte, that covers the bytes it moved, published or not.
demoModestarts a real run, so it is not free either.
That is what maxTotalChargeUsd is for. Set it on every call, especially with an agent driving.
💡 What people use it for
- Posting one clip to three platforms by asking once, instead of opening three apps.
- The last step of an n8n pipeline: render, then publish, no browser in the loop.
- Letting an assistant queue a week of uploads from a folder of clips and captions.
- Publishing from a machine with no display on it.
🚧 What it does not do
- It does not store your logins. Every call carries its own, so there is no way to check whether a login is alive without starting a run.
- One platform per call. Three platforms is three calls and three runs.
- No scheduling of its own. YouTube's scheduled publish is there through the OAuth tool. Anything else, schedule on your side.
- An unverified Google Cloud project makes every OAuth upload private. YouTube stores it that
way whatever you asked for, and lifting it needs Google's own audit. Check
privacyOverriddenbefore treating an upload as public. - A Google consent screen in "Testing" issues refresh tokens that die after seven days. Move it to "In production" or the integration stops a week after you build it.
- An abort does not refund. Whatever charged before you stopped it stays charged.
- It does not make the video. Bring a public URL to a finished file.
🧭 Which uploader do you need?
| If you want | Use |
|---|---|
| To post by asking Claude, ChatGPT or n8n | This one |
| To post one TikTok yourself from the Apify console | TikTok Video Uploader Pro |
| To post one YouTube video yourself | YouTube Video Uploader Pro |
| Research tools for your agent instead of uploads | Research MCP Server |
| The title, caption and hashtags written first | Social Metadata Generator |
❓ Questions people ask
Why does the token go in twice? The gateway consumes the copy it authenticates with, so the
server never sees it. The apifyToken copy is the one it reads.
Which YouTube tool should I use? upload_youtube_video_oauth. Google's own API, your OAuth app,
no browser. That is the route to build anything unattended on.
Where do my cookies and tokens end up? In the input of the run you started, on your account, encrypted in the fields that Actor marks secret. Not in a log, not in a dataset, not held here.
My agent called the tool twice. Did I pay twice? Not if the second call was identical, inside
ten minutes, while the first was still running. The same run id comes back with
duplicateSuppressed set.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run id and the tool you called. Never paste a cookie, a token or a client secret into an issue.


