Facebook Reels Uploader avatar

Facebook Reels Uploader

Pricing

from $350.00 / 1,000 reel published (browser)s

Go to Apify Store
Facebook Reels Uploader

Facebook Reels Uploader

Publish a Reel to your Facebook Page or profile from a video URL. A Page token uses Meta's official Graph API. No browser is needed. For a profile you must use your own cookies. You pay the publish fee only when Facebook confirms the post. Bandwidth is billed per megabyte either way.

Pricing

from $350.00 / 1,000 reel published (browser)s

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Share

Facebook Reels Uploader: publish a Reel to your Page or profile from a video URL

Give it a public link to your MP4 and your own Facebook credentials, and it posts the Reel, waits until Facebook actually shows it, and hands back the reel id and its link.

The credentials are the part to settle first, because there is no way around them. Publishing to a Page wants a Page access token and goes through Meta's official API, which is the route to use if you can. Publishing to a personal profile is only possible with your own Facebook cookies, because Meta's API publishes Reels to Pages and nothing else, whatever token you hold. Run it with no credentials at all and you get a labelled sample row: nothing is uploaded, and no publish fee and no megabytes are charged.

InputA public direct link to your MP4, plus your own token or cookies
OutputOne row per run, with the reel id and link once Facebook confirms it
CeilingOne reel per run, video up to 500 MB
Account neededYes, your own: a Page access token, or your Facebook cookies
Price$0.15 per reel through the API, $0.35 through the browser

🔍 What Facebook Reels Uploader does

Two routes to the same job. Supplying a pageAccessToken picks the first one.

RouteWhat it needsCan publish toCan schedule or draftPer reel
Graph APIpageAccessToken and pageIdA Page you adminYes$0.15
BrowserYour c_user, xs and datr cookiesA Page, or your own profileNo, immediate only$0.35

On the API route Meta fetches your videoUrl itself, so nothing large moves through the run. When Meta cannot reach that URL the run downloads the file and pushes the bytes to Meta instead, rather than failing.

The clip is checked before anything is transferred: 3 seconds or longer (3 to 90 on the API route), 540x960 or larger, 24 to 60 fps, and inside Meta's 16:9 to 9:16 shape band. Vertical 1080x1920, H.264 with AAC sound, is what Meta documents. Anything outside that is refused with BAD_INPUT before a byte moves.

A closed composer is not a published reel, and a 200 from Meta is not one either. Both transcoding and review can reject a video minutes after the upload looked fine. So the run lists the reels on the target first, publishes, then watches up to three minutes for a reel id that was not there before. No new id means UPLOAD_UNCONFIRMED and no publish fee, and a list it cannot read at all stops it instead of publishing blind. On the browser route the caption and the Instagram toggle are read back first: a wrong caption, or a post to a platform you did not ask for, is worse than no reel.

📥 What you give it

{
"videoUrl": "https://example.com/my-reel.mp4",
"caption": "Behind the scenes from Tuesday #workshop",
"target": "page",
"pageId": "1234567890",
"pageAccessToken": "<your long-lived Page token>"
}
FieldDefaultWhat it is
videoUrlnoneA public https:// link to the file itself, not to a page that plays it. An S3 link, a CDN link or an Apify key-value store record all work.
captionemptyThe reel description, hashtags included. Up to 2,200 characters.
reelTitleemptyOptional title, up to 255 characters. Separate from the caption and not shown everywhere.
targetprofileprofile or page. A Page needs pageId.
pageAccessTokennoneA long lived Page token, not a user token, from someone with the CREATE_CONTENT task on the Page. Supplying it switches the run to the API route.
pageIdnoneThe Page's numeric id, not its @username. Required for target: page.
shareModenownow, schedule or draft. The last two are API route only, and anything but now is refused up front on the browser route rather than published immediately.
scheduledPublishTimenoneISO 8601, for schedule. Meta's window applies: more than 10 minutes out and within 29 days.
crosspostToInstagramfalseBrowser route only. The API has no equivalent and the run says so in the log.
c_user, xs, datrnoneYour Facebook cookies, for the browser route. Secret fields: never written to the dataset, the store or the log, which reports only a length.
cookiesnoneOr paste the whole facebook.com jar as a Cookie-Editor export or a raw header, instead of the three fields.
continueOnNonEnglishUifalseBrowser route. Off means a non-English interface stops the run with a clear message rather than guessing which button it is about to click.
graphApiVersionv25.0Pinned on purpose. Leave it unless Meta retires that version.
proxyConfigurationthe defaultBrowser route only. Set its country to where your cookies were exported: a country jump is the single biggest cause of a security check on your account.
proxyUrlsnoneOptional. Your own servers, used exactly as given. There is no per megabyte charge on a run that uses them, and the video ceiling becomes 304 MB instead of 500 MB.
demoModefalseForce the labelled sample row even when credentials are filled in.

📤 What you get back

One row per run. This is a real row from a real run whose cookies had expired, which is the shape you get when nothing was published. The message is cut short here:

{
"ok": false,
"platform": "facebook",
"lane": "browser",
"target": "profile",
"posted": false,
"confirmed": false,
"reelId": null,
"reelUrl": null,
"publishedAt": null,
"errorCode": "SESSION_INVALID",
"error": "SESSION_INVALID: Your Facebook session is not logged in (Facebook redirected to the login page). Cookies are revoked by logging out, by \"Log out of all sessions\", and often by a password change. Re-export c_user, xs and datr from a browser where you are signed in. ...",
"caption": "billing audit run 2",
"videoUrl": "https://download.samplelib.com/mp4/sample-5s.mp4",
"warnings": [],
"chargeStatus": "pending",
"chargeSummaryKey": "CHARGE_SUMMARY.json",
"debugScreenshot": "SESSION_INVALID.png",
"debugHtml": "SESSION_INVALID.html"
}
FieldWhat it is
ok, posted, confirmedWhether the run worked, whether it published, and whether Facebook then showed the reel. All three are true on a clean publish.
reelId, reelUrl, publishedAtThe new reel's id, its link and the time, once confirmed. null otherwise.
lane, target, pageIdWhich route ran, and where it published.
errorCode, error, warningsWhat stopped it, in a code you can branch on and a sentence you can read.
videoSizeMegabytes, videoMegabytesThe file's size, and the megabyte count the run asked to bill. On a failure row the second is the traffic already moved, not the file size.
chargeStatus, chargeSummaryKeyThe row is written before the charge settles, so treat these as a pointer, not a receipt.
debugScreenshot, debugHtmlKeys in the run's store holding a picture and the page at the moment it stopped.

🧾 Reading the output

Three places to look.

WhereWhat is in it
The datasetThe one result row above.
CHARGE_SUMMARY.jsonThe settled figures for the run, which is where to check what was actually billed.
<CODE>.png and <CODE>.htmlA screenshot and the page from the moment a browser run stopped, named after the error code.

The codes worth knowing:

CodeWhat happened
BAD_INPUTThe clip failed a check, or the input cannot work: a token with target: profile, or schedule on the browser route. Nothing moved.
SESSION_INVALIDYour cookies are no longer signed in. Re-export them.
API_TOKEN_INVALIDThe Page token was killed by a password change or a permissions change. Mint a new one.
VIDEO_UNAVAILABLE, OVERSIZED_VIDEOYour videoUrl would not serve the file, or it is over the ceiling.
API_PROCESSING_FAILEDMeta took the upload and then rejected it while processing. No publish fee, nothing per megabyte.
UPLOAD_UNCONFIRMEDNo new reel appeared. Check the account before retrying so you do not double post. No publish fee.
LAYOUT_CHANGEDThe reel list could not be read, so the run refused to publish.
COMPOSER_UNAVAILABLEFacebook did not offer that account the reel composer.
LOCALE_UNSUPPORTEDThe interface is not in English and continueOnNonEnglishUi is off.
API_RATE_LIMIT, ACTION_BLOCKEDMeta is holding you off. The message carries its own estimate of when to try again.

▶️ How to run it

  1. For a Page, mint the token once. Create an app at developers.facebook.com as the account that admins the Page, open the Graph API Explorer, add pages_show_list, pages_read_engagement and pages_manage_posts, generate a token, switch the dropdown from User Token to Page Token, then extend it in the Access Token Debugger. GET /me/accounts?fields=id,name,tasks should list your Page with CREATE_CONTENT.
  2. For a profile, copy c_user, xs and datr from DevTools on a signed-in facebook.com tab, under Application, then Cookies. Values exactly as shown, %3A included.
  3. Open Facebook Reels Uploader, paste your videoUrl and caption, fill in the fields for your route.
  4. Click Start, then read reelUrl on the result row.

💰 How much does it cost?

$0.15 per reel through the API route, $0.35 through the browser route. Flat on every Apify plan. Either way the fee applies only when Facebook confirms the reel is up: a run that fails or cannot be confirmed pays no publish fee.

The browser route also costs $0.02 for each megabyte of video moved through this actor's own connection, and those megabytes are billed whether the reel landed or not, because the traffic already happened. Point proxyUrls at your own servers and there is no megabyte charge on that run. The API route never charges per megabyte: Meta collects the file itself.

A demo run uploads nothing, so it pays no publish fee and nothing per megabyte.

💡 What people use it for

  • Posting the day's clip to a Page from a pipeline, without anybody opening Business Suite.
  • Scheduling a week of reels in one sitting on the API route, each with its own publish time.
  • Publishing to a personal creator profile, which no API token can do.
  • Pushing an approved edit straight from storage, by its link.

🚧 What it does not do

  • It does not hold your credentials. You pass them per run, and the cookie fields stay out of the dataset, the store and the log.
  • No personal profile through the API. Meta publishes Reels to Pages only, so a profile means cookies.
  • No scheduling or drafts on the browser route. Anything but publish now is refused up front.
  • One video per run. For a batch, run it once per clip.
  • Meta allows 30 API reels per Page per 24 hours, which is Meta's published limit, not ours.
  • It cannot see a music or rights takedown. A reel can publish cleanly and be muted or blocked minutes later over its audio, and Meta sends no signal for it. The run reports the publish it confirmed and nothing beyond that.
  • Reach is not visible either. Whether anyone is shown the reel is outside anything an uploader can tell you.
  • No editing, trimming or format conversion. The file you point at is the file that gets posted.

🧭 Which uploader do you need?

If you wantUse
A Reel on a Facebook Page or profileThis one
A Reel on InstagramInstagram Reel Uploader Pro
A video on TikTokTikTok Video Uploader Pro
A Short on YouTubeYouTube Uploader Pro
To post from Claude, ChatGPT or n8n across platformsSocial Media Uploader Pro

❓ Questions people ask

Do I need Meta's App Review? No. You admin the app and the Page, so the token you mint for yourself is enough. The setup above is a one-off and takes about ten minutes.

Why is the browser route more expensive? It runs a real session and a real composer, and the video passes through the run. The API route just hands Meta a URL.

What if my run says UPLOAD_UNCONFIRMED? Look at the account first. The reel may well be there, in which case retrying would post it twice. No publish fee was charged either way.

Can I publish to a Page without cookies? Yes, and you should. The API route is the reliable one.

Is my session safe? The cookie fields are secret and never leave the run. Logging out everywhere, or changing the password, revokes them.

🆘 If something breaks

Open the Issues tab on the actor page. Include the run ID and the errorCode from the result row. Never paste a cookie value or a token into an issue.