Post once,
publish everywhere.
How to build your own one-click social publisher.
Most small businesses pay a person, or a chunk of one person's week, to post the same thing to Facebook, Instagram, LinkedIn, and YouTube. One platform at a time, by hand.
I stopped doing that. I write a post once, pick the platforms, and hit go. It fans out to all of them.
Here's the honest part nobody tells you: this isn't bleeding-edge AI. The APIs to connect your accounts and post to all of them have existed for years. The only real work is wiring them up and getting through each platform's setup. This guide is that wiring, laid out the way I'd hand it to a client.
I'll be straight with you on where the friction actually lives, because every platform has a spot that quietly eats a weekend if you don't see it coming.
The download is the full build guide. Every step, plus the exact Claude Code prompts that do most of the build for you.
What you're building
The shape is simple, and you can build it on whatever stack you like:
- →One place to write the post (caption, image or video, the platforms you want).
- →A small database that holds the post and a status for each platform.
- →A publish step that calls each platform's API.
- →A scheduler (a job that runs on a timer) so you can queue posts ahead instead of standing there at 9am.
Write once. Store it. Fan it out. That's the whole thing. The rest of this guide is the four connections.
Facebook and Instagram (Meta Graph API)
Facebook and Instagram run through the same door: the Meta Graph API.
What you need: a Meta developer account and a Meta app (Business type), a Facebook Page (not just a profile), and an Instagram Business or Creator account linked to that Page. A personal IG account will not post through the API.
This guide uses the Facebook Login flow, where Instagram is reached through its linked Page. Permissions you'll request: pages_show_list, pages_manage_posts, pages_read_engagement, instagram_basic, instagram_content_publish, business_management. There's also a newer Instagram Login flow with its own scopes (instagram_business_basic, instagram_business_content_publish) that skips the Page link. Pick one and stick with it.
For posting without a login screen, use a System User token from Business Manager. It's long-lived, so you're not refreshing a token by hand every few hours. This is the single biggest time-saver on Meta and almost nobody mentions it.
How a post goes out: a Facebook Page takes text or a link straight to its feed; photos and videos have their own upload calls. Instagram is two steps. First you create a media container that points at your image or video. Then you publish that container. For video, uploading the actual bytes is more reliable than handing Instagram a link to pull, which can stall.
Instagram is pickier than Facebook about video. Hand it a high-bitrate file and it fails processing with a useless error (2207053). Re-encode your video to a sane bitrate (H.264, well under 8 Mbps) before you publish and you stop hitting it. Build that compression step in from day one.
To post to any account beyond your own test users, Meta makes you go through App Review for the publishing permissions. Plan for it.
LinkedIn is two different stories depending on where you're posting.
Your personal profile: automatable today. A standard LinkedIn developer app with the w_member_social permission lets you post to your own profile through the API. Straightforward.
A company page: gated. Posting to an organization page programmatically requires LinkedIn's Community Management API, which is partner-tier. You apply, and not everyone gets in. If you don't have it, your company page stays a manual job. I'd rather tell you that up front than have you burn two days hunting for an endpoint that won't open for you.
Images upload in a register-then-attach two-step. Document carousels (the PDF-style posts) have their own flow and size limits, and oversized images will blow up the request. Keep slides at sane dimensions (1080x1350 is safe). LinkedIn access tokens last about 60 days, and automatic refresh tokens are only granted to approved Marketing Developer Platform partners. If that's not you, plan on re-authorizing by hand every couple of months instead of getting surprised when posting goes quiet.
YouTube
YouTube runs on the YouTube Data API v3, through Google Cloud.
What you need: a Google Cloud project with the YouTube Data API enabled, an OAuth consent screen and client, and a stored refresh token so it can upload without you sitting there. Posting is a single upload call with your title, description, tags, and privacy setting. Use the resumable upload path for anything that isn't tiny.
Quota. A video upload costs roughly 1,600 units against a default daily budget of 10,000. That's about six uploads a day before you're cut off. Fine for most small businesses, but if you're batching heavily, request a quota increase early because approval takes time.
New, unverified Google Cloud projects (anything created in the last few years) have a catch: videos you upload through the API are locked to private until your project passes a one-time API audit. Setting the privacy field to public in the call isn't enough on its own. Request the audit early so you're not stuck shipping private uploads.
TikTok (the hard one, so do it last)
I run the four above. TikTok I left for last on purpose, and you should too.
TikTok's Content Posting API needs a registered app and an audit before it'll post publicly. Until your app passes that audit your options are narrow: a Direct Post can only publish privately, or you push the video into the user's TikTok inbox as a draft they finish by hand. Public auto-posting comes after approval. It's the strictest gate of the four. Worth doing, just don't make it the thing standing between you and shipping the first version.
The glue that holds it together
The connections are half the job. These four things are what separate a tool you trust from one that embarrasses you:
- →Scheduling. A timed job that wakes up, grabs posts that are due, and sends them. This is what lets you batch a week of content in one sitting.
- →Token refresh. Store every token and refresh it before it expires. Meta's System User token is long-lived; LinkedIn is about 60 days; Google uses a refresh token. Stagger these or one will surprise you.
- →Don't double-post. When a publish fails and you retry, you do not want two copies going out. Mark each platform "posting" before you start and skip anything already in flight. This bites everyone exactly once.
- →Prep the media. Transcode video to a sane bitrate and resize carousel images to platform-safe dimensions before upload. This one habit kills the Instagram processing error and the timeouts in one move.
What to automate, and what to leave alone
Here's the line I hold, because this is where people go wrong.
Automate the mechanical part: the fan-out, the scheduling, the format prep. That's pure busywork and a machine should do it.
Do not automate the judgment. A LinkedIn caption is not an Instagram caption. The hook, the hashtags, the call to action all shift by platform and by audience. The tool should remove the copy-pasting, not the thinking. The second you point it at auto-generated slop and blast that everywhere, you've automated your way to looking like everyone else.
Connect what already exists. Keep the human on the part that needs a human.
Want this built for you instead?
If you'd rather not spend three weekends in developer portals waiting on app reviews, that's the kind of thing I do. We'll look at what you're posting, where, and I'll build the version that fits how you actually work.