Back to Docs

Guides

Distribution Scheduling

Set up AI-optimized posting schedules across all platforms.

What Distribution does

Distribution takes approved content from the Production queue and publishes it to connected channels on a configurable schedule. It is not a simple fire-and-forget publisher: every post passes through a retry layer with exponential backoff, UTM parameters are injected automatically for revenue attribution, and every publish event emits structured metadata that the Analytics stage consumes to close the Intelligence Loop. The scheduler operates per-channel: timing, frequency caps, and rate-limit budgets are tracked independently for each connection so a spike on one channel does not affect others.

Connecting channels

Distribution supports eight channels: LinkedIn, X / Twitter, Facebook, Instagram, TikTok, YouTube, Pinterest, and Blog. Each channel uses an independent OAuth 2.0 flow. To connect a channel:

  1. Open Settings → Channels for the client account.
  2. Click Connect next to the target channel and complete the OAuth grant in the popup. The platform requests only the scopes required for publishing and analytics ingestion; no ad-manager or billing scopes are requested.
  3. After authorisation, the channel status changes to Active. The platform stores the refresh token in the encrypted secret store; it never appears in logs or API responses.
  4. Repeat per channel. Channels are connected at the client-account level, so each client account maintains its own credential set.

Token expiry varies by channel (LinkedIn tokens expire after 60 days; Facebook/Instagram tokens can last up to 90 days; TikTok access tokens expire after 24 hours and rely on refresh). The platform surfaces a Token expiring soon banner in the channel list 7 days before expiry and emails the account owner 3 days before expiry. Expired tokens move the channel to Disconnected status; posts targeting that channel are held in the pending queue rather than failing hard.

Schedule presets

Three scheduling modes are available per client account. You configure the mode in Settings → Scheduling.

  • Best Practice. The scheduler applies channel-optimised posting windows based on aggregated engagement benchmarks (e.g. LinkedIn weekday mornings, TikTok evening peaks). This is the default for new accounts. No configuration required.
  • Custom. You specify exact posting times per channel per day-of-week. The scheduler treats these as hard targets; if a slot is unavailable (rate limit reached, channel disconnected), the post falls back to the next available slot within the same calendar day.
  • Adaptive. The scheduler reads per-channel engagement data from past Analytics runs and recalculates optimal windows every 7 days. Adaptive mode requires at least 14 days of Analytics data before it activates; new accounts fall back to Best Practice until the minimum data threshold is met.

Queue management

Every post in the distribution pipeline carries one of four statuses:

  • Pending, approved by Production, waiting for a scheduled slot or for a required channel to reconnect.
  • Scheduled, slot reserved; the scheduler will publish at the assigned time.
  • Published, delivered successfully; channel API returned a post ID. Analytics ingestion begins at the 1-hour mark.
  • Failed, all retry attempts exhausted or a non-retryable error was returned. Failed posts surface in the queue with the error code and a Retry action.

The queue view is filterable by status, channel, date range, and content bucket. Bulk actions (reschedule, cancel, retry) are available for up to 50 posts at a time.

Retries

The retry strategy depends on the error class returned by the channel API:

  • 5xx errors (server-side, transient): automatic exponential backoff: 1 min, 5 min, 25 min. After three attempts the post moves to Failed.
  • 4xx errors (client-side, e.g. token expired, content policy violation, size constraint exceeded): no automatic retry. The post moves immediately to Failed with the specific error code. Resolve the underlying issue (reconnect the channel, fix the content, reduce asset size) then trigger a manual retry from the queue.
  • Rate limit (429), treated as transient. The scheduler respects the Retry-After header when present, otherwise applies a 15-minute hold before re-attempting. The retry does not consume a backoff attempt.

Approval queue

The approval queue is an optional pre-scheduling gate. When enabled (under Settings → Workflow → Require approval before scheduling), posts that exit Production enter an Awaiting approval holding state. A designated reviewer (configurable per client account) receives an email digest of pending approvals at the cadence you set (immediate, hourly, or daily). Approving a post moves it to Pending; the scheduler assigns the next available slot. Rejecting a post returns it to Production with a comment thread attached.

The approval queue is recommended for client-facing agency workflows where clients want sign-off before anything is published. For internal accounts with trusted automation, leave it disabled.

Analytics ingestion

After a post reaches Published status, Distribution registers it with the Analytics collector. The collector polls each channel's API at three intervals (1 hour, 24 hours, and 7 days) to retrieve reach, engagement, and click-through data. UTM parameters appended at publish time allow revenue attribution in downstream analytics tools. After the 7-day window closes, Analytics recalculates the Discovery scoring weights that feed the next content cycle. This is how Distribution data flows back into the top of the Intelligence Loop. See Analytics & Reporting for details on collection intervals, dashboard configuration, and export formats.

Common gotchas

  • Token expiry is per-channel, not global. LinkedIn tokens expire in 60 days; TikTok access tokens in 24 hours (refresh token: 365 days). Set calendar reminders or rely on the platform expiry banner; do not assume a connected channel stays connected indefinitely.
  • Rate limits differ significantly across channels. LinkedIn allows roughly 100 posts per day per organisation; TikTok imposes per-user daily caps that vary by account tier; YouTube limits uploads to 6 per day on unverified channels. The scheduler respects these caps automatically but you will see posts slip to the next day if you exceed them.
  • Content size constraints are hard limits, not warnings. X / Twitter caps post text at 280 characters (2,000 for premium); LinkedIn caps at 3,000 characters for standard posts; Instagram captions cap at 2,200 characters; Pinterest descriptions cap at 500 characters. Production templates enforce these limits at generation time, but if you manually edit content in the queue after generation, the scheduler will reject oversized posts with a 4xx error, with no automatic retry.
  • Facebook and Instagram share a credential. Both channels authenticate via the Meta Graph API using the same OAuth grant. Revoking access in Meta's app settings disconnects both channels simultaneously.
  • Blog publishing requires a CMS integration, not OAuth. Configure the Blog channel under Settings → Integrations → CMS using your CMS API key. WordPress (REST API), Webflow (CMS API), and Ghost (Admin API) are supported.

Ready to get started?

Join the early access list and get priority onboarding with your dedicated Max Socials implementation team.

Get early access