White Label Social Media Management for Agencies and SaaS

Send each client a link to a connect page with your logo, your copy and your theme. They connect their TikTok, Instagram, YouTube or LinkedIn once. From then on you publish and schedule for them through the API, n8n or Make.

Free to start, no credit card. White label is included from the Professional plan.

11 branding options
Encrypted token storage

Real screenshots

What Your Clients See

This is the actual connect page your client opens, rendered with a sample brand. Northwind Studio is a made-up agency and "Harbor Demo Cafe" a made-up client; the page, the layout and the options are the real ones.

Upload-Post white-label connect page in light theme with the Northwind Studio logo, a custom title and description, a Back to Northwind Studio button and only six networks: Instagram connected, TikTok, LinkedIn, YouTube, Facebook and X ready to connect
Real connect page with a sample brand. Light theme, custom title and description, and the list limited to six networks with platforms.
The same Upload-Post white-label connect page forced to dark theme with connect_theme, Northwind Studio logo and no theme switch
Same page with connect_theme: "dark". A forced theme hides the light/dark switch, so every client sees your choice.
Upload-Post connect page with custom ui_labels: eyebrow Northwind client onboarding, buttons renamed to Link account, section titles and privacy text rewritten by the agency
Rewritten text with ui_labels: the eyebrow, the section titles, the privacy text and every Connect button now say what the agency wants.
Upload-Post white-label connect page without a platforms filter, listing TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads, Pinterest, Reddit, Bluesky, Google Business, Discord, Telegram and a button to show 9 more networks
Without platforms the client sees every network, with the less common ones behind "Show 9 more networks". Reddit showed as unavailable on the day we took it.
Upload-Post white-label connect page on a phone with the Northwind Studio logo, title, privacy note, back button and a connected Instagram account
The same link on a 390 px wide phone.

What the client can do on that page

  • Connect TikTok, Instagram, YouTube, LinkedIn and the other OAuth networks on the network's own sign-in screen, so their password never reaches you or Upload-Post. Bluesky, Telegram, Discord and a few others use an app password, bot token or webhook instead.
  • Pick which Facebook Page, LinkedIn company page or Google Business location you will post to.
  • Reconnect an account whose access expired, or disconnect one at any time.
  • Look at the calendar of scheduled posts, if you leave it on. With the read-only option that is all they can do.
  • Go back to your site with the button you labelled.

The link is tied to one profile. A client can only ever see and change their own accounts, never your other clients or your API key.

How It Works for an Agency

Five steps from a new client to their first scheduled post. Every step works from the dashboard or from the API.

  1. 1

    Create one profile per client

    In the dashboard go to Manage Users and add a profile, or call POST /api/uploadposts/users with a username such as client-harbor. A profile holds one account per network.

  2. 2

    Generate the branded connect link

    Click Share next to the profile and fill in your logo, title, description, language, redirect URL, button text and networks. Or send the same fields to POST /api/uploadposts/users/generate-jwt. You get back an access_url that works for 48 hours. Step by step, including your own connect page: how to let clients connect their accounts. Comparing costs? What 30 client brands cost in each tool.

  3. 3

    Send it to your client

    By email, chat or inside your own onboarding flow. The client does not need an Upload-Post account and never sees your dashboard.

  4. 4

    The client connects their accounts

    They sign in on TikTok, Instagram, YouTube or LinkedIn and approve access. Tokens are stored encrypted and refreshed for you. If you set up a webhook, you get a social_account_connected event the moment it happens.

  5. 5

    Publish and schedule for them

    Post with user=client-harbor and add scheduled_date to schedule it. Do it from the dashboard, from your code, from n8n templates, a Make scenario or an AI assistant through the MCP server. Pull per-client numbers from the analytics endpoint.

Whitelabel Configuration dialog in the Upload-Post dashboard with fields for page title, description, language, logo URL, redirect URL, button text, calendar options and a network picker with TikTok, Instagram, LinkedIn, YouTube, Facebook and X selected
The real Share dialog in Manage Users, filled in with the sample brand. No code needed for step 2.

Every Branding Option

All of them are fields of the generate-jwt call and are saved on the client's profile. The last column says whether you can also set it from the dashboard.

Option Parameter What it does Example Dashboard
Logo logo_image Shows your logo at the top of the page. Any public http(s) image URL. "https://youragency.com/logo.png" Yes
Page title connect_title Replaces the main heading, which by default reads "Connect your social accounts". "Connect your accounts to Northwind Studio" Yes
Description connect_description Replaces the line of text under the heading. "Link the channels we will manage for you." Yes
Networks shown platforms Only the networks you list appear. Leave it out and the client sees every network. ["instagram", "tiktok", "linkedin"] Yes
Redirect URL redirect_url Where the back button takes the client when they are done. "https://youragency.com/onboarding/done" Yes
Back button text redirect_button_text The label of that back button. "Back to Northwind Studio" Yes
Language language Forces English, Spanish, German, French, Portuguese, Polish or Turkish. Without it the page follows the browser language and falls back to English. "es" Yes
Any text on the page ui_labels Rewrites single strings of the page by their key: buttons, section titles, the privacy text. Up to 100 keys, 300 characters each. {"connect.card.connect": "Link account"} API only
Theme connect_theme Forces light or dark and hides the theme switch. "auto" hands the choice back to the visitor. "dark" API only
Calendar tab show_calendar Shows or hides a calendar tab with the posts scheduled for that profile. On by default. false Yes
Read-only calendar readonly_calendar The client only sees the calendar. They cannot edit or delete posts, or connect and disconnect accounts. true Yes

All options in one request

curl -X POST https://api.upload-post.com/api/uploadposts/users/generate-jwt \
  -H "Authorization: ApiKey YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "client-harbor",
    "logo_image": "https://youragency.com/logo.png",
    "connect_title": "Connect your accounts to Northwind Studio",
    "connect_description": "Link the channels we will manage for you.",
    "platforms": ["instagram", "tiktok", "linkedin"],
    "redirect_url": "https://youragency.com/onboarding/done",
    "redirect_button_text": "Back to Northwind Studio",
    "language": "en",
    "connect_theme": "light",
    "ui_labels": { "connect.card.connect": "Link account" },
    "show_calendar": false
  }'

Good to know

  • Send the full branding every time you generate a link. Logo, title, description, button text, redirect URL, networks and language are cleared on the profile when you leave them out.
  • ui_labels, connect_theme and the two calendar switches only change when you send them. Send null or {} to reset the labels.
  • Labels replace text in whatever language the page is showing. If your labels are in English and a client's browser is in French, the rest of the page stays French, so set language as well.
  • The label keys and the full parameter reference are in the User Profiles API docs.

What Is Not White-Labeled

Better you read it here than find out from a client. These parts of the flow still show Upload-Post or the social network.

The address

The hosted page lives on app.upload-post.com/connect. There is no custom domain or CNAME option. If you need your own domain, build your own page with the Connect API; the OAuth callback still passes through app.upload-post.com for a moment.

The networks' consent screens

When the client signs in, TikTok, Meta, Google, LinkedIn and the rest show their own screen with the app registered there, which is Upload-Post's approved app. That is also why you skip their app reviews.

The privacy box

A short "How your data is used" note is always on the page, with links to the Upload-Post privacy policy and info@upload-post.com. By default it names TONVI TECH SL, the company behind Upload-Post, as the data processor. You can rewrite the wording with ui_labels, but the box and those links stay.

Colors, tab title and your dashboard

You choose light or dark, not a brand color: buttons keep Upload-Post's indigo. The browser tab title and icon are Upload-Post's. The dashboard your team logs into is Upload-Post, not a rebranded app.

Why Not Build the Integrations Yourself?

Direct integrations mean app reviews with Meta and TikTok, token refresh logic and breaking API changes, once per network. With one API you get every network behind one endpoint and the connect page on top.

Agencies

One profile per client, your brand on the connect link, posts and schedules from one place

SaaS Platforms

Add social publishing to your product through one unified social media API instead of one integration per network

Content Tools

Let users share what they make straight to their own social accounts

The API Calls Behind It

For developers embedding this in a SaaS or an agency tool. No OAuth flows to build and no platform credentials to manage.

1

Create a Profile for Each Client or User

A profile is the container for the social accounts of one client (or one user of your app). Use your own internal ID as the username so mapping back is trivial.

curl -X POST https://api.upload-post.com/api/uploadposts/users \
  -H "Authorization: ApiKey YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"username": "your-internal-user-id-123"}'
2

Generate the Branded Connect URL

This is where the branding goes: logo, title, redirect URL, networks and the rest of the options in the table above. The response contains access_url, valid for 48 hours.

curl -X POST https://api.upload-post.com/api/uploadposts/users/generate-jwt \
  -H "Authorization: ApiKey YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "your-internal-user-id-123",
    "redirect_url": "https://yourapp.com/social-connected",
    "logo_image": "https://yourapp.com/logo.png",
    "platforms": ["tiktok", "instagram", "youtube"]
  }'
3

The Client Connects Their Accounts

Send the client or user to access_url. On OAuth networks such as TikTok, Instagram and YouTube they authenticate directly with the network, so Upload-Post never sees their password, and the resulting tokens are stored encrypted.

What Upload-Post Handles for You

OAuth 2.0 Flows

Token Refresh

Encrypted Storage

4

Publish or Schedule on Their Behalf

Include the profile username as user in any upload request. Add scheduled_date to publish later instead of now.

curl -X POST https://api.upload-post.com/api/upload \
  -H "Authorization: ApiKey YOUR_API_KEY" \
  -F "user=your-internal-user-id-123" \
  -F "video=@/path/to/video.mp4" \
  -F "title=New autumn menu" \
  -F "platform[]=tiktok" \
  -F "platform[]=instagram" \
  -F "scheduled_date=2026-10-02T09:00:00Z"

One API Key, One Profile per Client

All your clients live under a single account and a single API key, each in its own profile with its own social accounts.

How profiles work

Each profile connects one account per network. Your plan sets how many profiles you get, and profiles are not a cap on social accounts: on Professional you can have 25 TikTok accounts, 25 Instagram accounts and 25 LinkedIn accounts connected at the same time.

  • Separate credentials: each client's social tokens belong to their profile only
  • Webhook per client: give each profile its own URL for connection and upload events
  • One bill: a single subscription covers every client

Example setup

Your agency (1 API key)
Profile: client-harbor
Instagram, TikTok, Facebook
Profile: client-lumen
LinkedIn, YouTube
1 account per network per profile. A client with 2 Instagram accounts needs 2 profiles.
Plans that include white label
Plan Profiles included Monthly billing Annual billing
Professional 25 $50/mo $33/mo ($400/yr)
Advanced 75 $147/mo $118/mo ($1,411/yr)
Business 225, then $1/mo per extra profile $438/mo $350/mo ($4,205/yr)

USD prices as of September 2026. Euro prices and extra-profile packs for Professional and Advanced are on the pricing section, which is always the current source.

Who Uses White Label Social Media Integration?

SaaS Platforms

Content management systems, marketing automation platforms, and business software.

Marketing Agencies

Digital marketing agencies and social media management companies.

Content Platforms

Blogging platforms, video hosting sites, and content creation tools.

Educational Platforms

Learning management systems and educational content platforms.

E-commerce Platforms

Online marketplaces and e-commerce solutions.

Video Platforms

Video hosting platforms and streaming services.

Technical Specifications & Compliance

Platform Support

TikTok TikTok
Full Support
Instagram Instagram
Full Support
YouTube YouTube
Full Support
Facebook Facebook
Full Support
LinkedIn LinkedIn
Full Support
X (Twitter) X (Twitter)
Full Support
Threads Threads
Full Support
Pinterest Pinterest
Full Support
Bluesky Bluesky
Full Support
Discord Discord
Full Support
Telegram Telegram
Full Support

Plus 11 more, including Google Business, Slack, Mastodon and WordPress. See all 22 platforms

Security Features

Encrypted Token Storage

Social media tokens are encrypted at rest.

OAuth Integration

On OAuth networks clients sign in on the network's own screen. Their password never passes through you or Upload-Post.

Scoped Connect Links

Each connect link only opens one profile and expires after 48 hours.

Put Your Brand on the Client Onboarding

Create a profile, click Share, send the link. Your first branded connect page takes a few minutes.

Free to start, no credit card. White label from the Professional plan.

White Label Social Media Management: FAQ

Questions agencies and SaaS teams ask before sending their first branded connect link

Do my clients need an Upload-Post account?

No. The connect link carries a token for that one client profile. Your client opens it, signs in on each social network and is done. The link is valid for 48 hours; after that you generate a new one.

Can I put the connect page on my own domain?

Not the hosted page: it always lives on app.upload-post.com/connect and custom domains are not available. If the address matters, the Connect API lets you build the page on your own site. Even then the network sends the client back through app.upload-post.com for a moment, because that is the OAuth callback registered with each platform.

Which plans include white label?

Professional, Advanced and Business. Free and Basic do not include it. Professional comes with 25 profiles, Advanced with 75 and Business with 225, and on Business every extra profile costs $1 a month. No sales call: you pick the plan on the pricing page.

How many client accounts fit in a profile?

A profile holds one account per network, so one profile can be a client with Instagram, TikTok, LinkedIn and YouTube connected. 25 profiles means up to 25 accounts on every network, not 25 accounts in total. A client with two Instagram accounts needs two profiles.

Do I have to send the branding every time I create a link?

Yes, for the logo, title, description, button text, redirect URL, networks and language. Each call to generate-jwt saves exactly what you send, so a field you leave out is cleared on that profile. ui_labels, connect_theme, show_calendar and readonly_calendar are different: they only change when you send them.

Can my clients see what is scheduled?

Yes. The calendar tab is on by default and shows the posts scheduled for that profile. Turn on readonly_calendar and the link becomes a view-only content calendar: the client can look but cannot edit, delete or change connections. Send them to /connect/calendar with the same token to open it directly.

Which languages does the connect page support?

English, Spanish, German, French, Portuguese, Polish and Turkish. You can force one per profile with the language parameter or let the page follow the browser. For any other wording, ui_labels lets you write the text yourself.

How do I know when a client has connected an account?

With webhooks. Upload-Post sends social_account_connected, social_account_disconnected, social_account_reauth_required and upload_completed events. Each profile can have its own webhook URL, so every client can report to a different endpoint in your system.

Can I pull analytics per client?

Yes. The analytics endpoint takes the profile username, so you get the numbers of one client at a time and can build your own reports on top.

Do you provide SDKs?

There are official SDKs for Python (pip install upload-post) and JavaScript/Node (npm install upload-post). Everything else is a plain REST API with an API key, so any language or no-code tool that can send HTTP requests works.

How long does setup take?

Without code: create a profile in Manage Users, click Share, fill in your branding and send the link. With the API it is two calls, one to create the profile and one to generate the link, plus the upload calls you already need to post.

What support do I get?

Documentation with code samples for every endpoint, and email support at info@upload-post.com. Advanced and Business include priority support.

More detail: User Profiles API, Connect API, Webhooks and SDKs.