Social Media Uploader Pro
Connect Claude, ChatGPT or n8n to one MCP endpoint. Then say: post this video to TikTok, Instagram and YouTube. Every upload runs on your own account.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
info(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0000125 per run
| You are charged for | When | Price |
|---|---|---|
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.0000125 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-25, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
info | This Actor is an MCP server. Connect your AI agent / MCP client (Claude, ChatGPT, Cursor, n8n) to the Actor's Standby URL with your own Apify API token in it TWICE: https://dami-studio--social-media-uploader-pro.apify.actor/mcp?token=YOUR_TOKEN&apifyToken=YOUR_TOKEN . Twice because Apify's Standby gateway strips the token it authenticated you with before the request reaches the server, so a single copy answers NO_APIFY_TOKEN on every tool; the apifyToken copy is the one the server reads. Measured live on 2026-08-25. See the README section How to connect. It exposes 9 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. The two browser-driven YouTube tools are backed by Actors that are under maintenance right now; upload_youtube_video_oauth goes through Google's official Data API with your own OAuth credentials and is the YouTube route to build on today. Each upload tool starts a separate, billable Actor run on your own Apify account, at that Actor's own published prices; a run that fails to publish still costs that Actor's run-start fee. A normal (non-Standby) run just prints these usage notes and uploads nothing. | string |
What you get
A structured dataset — each result includes fields like:
okkindmessagetoolCounttoolsplatformsExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
4 ready-to-run use cases
Auto Post to Social Media From Claude, ChatGPT or n8n
Say where the clip should go and the agent calls one tool per platform. One call posts to one platform, and each is a separate run on your account.
n8n Social Media Automation With One MCP Client Node
Point an MCP Client Tool node at one Standby URL and your agent can post video to TikTok, Instagram, Facebook and YouTube. Nine tools, one node.
Upload Video to TikTok API From Claude or ChatGPT
Connect the MCP server to your agent and ask it to post. You bring your own TikTok session, and each upload is a billable run on your Apify account.
Upload to YouTube API With Your Own OAuth Credentials
Publishes through Google's official Data API with a client ID, secret and refresh token from your own Cloud project. No cookies to keep fresh.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
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
1. Open Social Media Uploader Pro and copy the Standby URL from the API tab. 2. Add your Apify token twice: ?token=...&apifyToken=.... 3. Paste that URL into your MCP client as a remote server and restart the client. 4. Ask it to run list_platforms. Six platforms with prices should come back. 5. Ask it to post something, with demoMode on 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 privacyOverridden before 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.