The agency scaling problem
Every social media agency goes through the same three phases. The transition from each phase to the next breaks whatever tooling worked before.
You log in to each platform manually, or use a basic scheduler like Later or Buffer. Copy-paste captions across platforms. It takes time, but it works. You know every client by name and remember their posting schedule.
You hit the seat limits on Hootsuite or Buffer. Per-seat pricing means adding a team member costs $50--$100/mo extra. Dashboards show 40+ accounts in a flat list. Scheduling conflicts appear. A missed post for one client gets lost in the noise of the other 39. You start building spreadsheets to track what went where.
No consumer-grade tool handles this volume without enterprise pricing ($500--$2,000/mo). The dashboard UX collapses under the weight of hundreds of connected accounts. Token expiration notifications flood your inbox. You need an API-first approach — something that lets your own systems orchestrate publishing, not a GUI you click through manually.
The real cost isn't the subscription
At 50 clients, the manual overhead costs more than any tool subscription. If a social media coordinator spends 3 minutes per client per day on platform switching and scheduling, that's 2.5 hours daily — 12.5 hours per week — just on logistics, not creative work. An API-first approach eliminates this entirely.
How CodivUpload solves this
CodivUpload is built for the 50-to-500 client range from the start. Instead of a GUI with seat limits and per-account pricing, you get an API that treats each client as a named profile under your workspace. Three architectural decisions make this possible:
One API key, unlimited control
A single API key authenticates all requests across every client profile in your workspace. No per-client API keys, no per-team-member keys. One credential governs your entire operation.
profile_name isolation
Every API call includes a profile_name parameter. This scopes the request to that client's connected accounts, post history, and analytics. No cross-contamination between clients.
Full whitelabel by default
Branded connection pages, zero CodivUpload branding in API responses, and JWT-signed share links that display your logo and domain. Your clients never encounter our name.
Multi-client overview — what agency dashboards look like
This is a representative view of an agency managing five client profiles. Each row shows connected platforms, post volume, and scheduling status at a glance. In practice, this data comes from the /v1/profiles and /v1/posts endpoints.
Each connected platform icon with a green check means the client has completed OAuth through your branded connection page. The failed column highlights clients with delivery issues — your monitoring system can query /v1/posts?profile_name=X&status=failed to surface these automatically.
Workflow — from client onboarding to publishing
The entire agency workflow reduces to four API calls. No dashboards to navigate, no platforms to log into, no tokens to manage manually.
Create a profile for the client
codiv.profiles.create()Each client gets their own isolated profile. All platform connections, post history, and analytics stay scoped to that profile. The API call takes under 200ms.
Generate a branded share link
JWT connection pageGenerate a whitelabel connection URL with your logo, your redirect URL, and your page copy. The client never sees CodivUpload. The JWT link expires in 48 hours.
Client connects their platforms
OAuth flowThe client opens your branded page, clicks Connect on each platform, completes the standard OAuth authorization, and lands back on your redirect URL. Tokens are encrypted with AES-256-GCM and stored server-side.
Publish on their behalf
codiv.posts.create({ profile_name: "client_x" })Send a single API call with the profile_name parameter. CodivUpload selects the right tokens, formats content per platform, handles media delivery, and reports back with per-platform status.
No CodivUpload branding at any step
At step 2, the connection page shows your logo and your redirect URL. At step 4, the API response contains your profile_name and post status — no "Powered by CodivUpload" footer, no third-party references. Your client interacts with your brand throughout the entire flow.
SDK examples for common agency tasks
These TypeScript examples use the CodivUpload SDK. Each snippet maps to a real agency workflow — onboarding, bulk scheduling, and failure monitoring.
// Onboard a new client
const profile = await codiv.profiles.create({
username: "acme_corp",
profile_name: "Acme Corporation",
});
// Generate a branded connection link
const link = await codiv.agency.generateJwt({
username: "acme_corp",
platforms: ["instagram", "tiktok", "youtube", "linkedin"],
logo_image: "https://youragency.com/logo.png",
redirect_url: "https://youragency.com/onboarding/success",
connect_title: "Connect Your Channels",
});
console.log(link.access_url);
// → https://app.codivupload.com/connect?token=eyJ...// Schedule weekly content for a client
const weeklyPosts = [
{ caption: "Monday motivation 🏋️", mediaUrl: "https://cdn.agency.com/acme/mon.mp4", scheduledAt: "2026-04-07T09:00:00Z" },
{ caption: "Mid-week product spotlight", mediaUrl: "https://cdn.agency.com/acme/wed.mp4", scheduledAt: "2026-04-09T14:00:00Z" },
{ caption: "Friday recap + weekend plans", mediaUrl: "https://cdn.agency.com/acme/fri.mp4", scheduledAt: "2026-04-11T17:00:00Z" },
];
for (const post of weeklyPosts) {
await codiv.posts.schedule({
profile_name: "acme_corp",
platforms: ["instagram", "linkedin", "facebook"],
description: post.caption,
media_urls: [post.mediaUrl],
scheduled_date: post.scheduledAt,
});
}
console.log(`Scheduled ${weeklyPosts.length} posts for acme_corp`);// Check all clients' post statuses
const profiles = await codiv.profiles.list();
for (const p of profiles.profiles) {
const posts = await codiv.posts.list({
profile_name: p.username,
status: "failed",
});
if (posts.length > 0) {
console.log(`⚠ ${p.profile_name}: ${posts.length} failed posts`);
// → Trigger Slack alert, email, or retry logic
}
}
// Output:
// ⚠ TechStartup Co: 2 failed posts
// ⚠ GreenLeaf Foods: 1 failed postsThe failure monitoring pattern is particularly useful for agencies. Instead of checking each client's post status manually, you run a single loop across all profiles and surface issues proactively. Most agencies wire this into a Slack channel or a monitoring dashboard that runs every 15 minutes.
Pricing for agencies — flat rate, no per-client fees
CodivUpload charges a flat monthly rate based on profile capacity. There are no per-client surcharges, no per-connection fees, and no usage-based billing surprises. You know exactly what you pay regardless of how many platforms each client connects.
Pro
$45/mo
25 profiles included. Whitelabel API access, branded connection links, all 12 platforms, 50+ post parameters, scheduling, and media handling. Good for freelancers and small agencies managing up to 25 client accounts.
Business
$140/mo
75 profiles included. Additional profiles at $1.50 each — scale to 150 clients for $252.50/mo total. Everything in Pro plus higher rate limits, priority support, and team member access. The sweet spot for growing agencies.
Enterprise
$400/mo
250 profiles included. Additional profiles at $1 each — manage 500 clients for $650/mo. Dedicated support, custom SLA, MCP integration for AI-powered workflows, and live streaming. Built for agencies at scale.
The math at 200 clients
Enterprise plan: 250 profiles at $400/mo = $1.60 per client per month. Compare that to Hootsuite's enterprise pricing ($739/mo for 50 social accounts) or Buffer's Team plan ($120/mo for 10 channels). At 200 clients, CodivUpload costs a fraction of what consumer tools charge for a tenth of the capacity.
Why not Buffer or Hootsuite?
Buffer and Hootsuite are excellent tools for individual creators and small teams. They were not designed for agencies managing 100+ client accounts programmatically. Here's where the differences matter:
The fundamental difference is architectural. Buffer and Hootsuite are dashboard-first tools with APIs bolted on. CodivUpload is API-first with a dashboard as a convenience layer. For agencies building their own client portals or integrating social publishing into existing SaaS products, the API-first approach means you control the user experience completely.