IntegrationsIntermediate

How to Schedule YouTube Uploads with the publishAt Timestamp

Upload videos as private and set a future publishAt time so they go live on a schedule without you being at the keyboard.

7 minIntermediate

Posting at a consistent time helps the algorithm and your viewers. Instead of staying up to hit publish, you can upload privately and set a publishAt timestamp so YouTube flips the video to public for you. This guide shows the exact field and format.

What you need

  • A working upload script (see the Python upload guide)
  • Python 3.9+ with the google client
  • The target publish time in your head, in UTC

Step 1: Understand the two required fields

To schedule, the status block must set privacyStatus to private and include publishAt as an RFC 3339 timestamp in UTC. YouTube keeps the video private until that moment, then publishes it automatically.

publishAt only works with private
If privacyStatus is public or unlisted, YouTube ignores publishAt. The combination that schedules is private plus a future publishAt time.

Step 2: Build a UTC timestamp

Compute the timestamp safely instead of typing it by hand. This snippet schedules a video for the next day at 15:00 UTC.

schedule.py
from datetime import datetime, timedelta, timezone

def publish_at(days_ahead=1, hour_utc=15):
    when = datetime.now(timezone.utc) + timedelta(days=days_ahead)
    when = when.replace(hour=hour_utc, minute=0, second=0, microsecond=0)
    # RFC 3339, e.g. 2026-06-22T15:00:00Z
    return when.strftime("%Y-%m-%dT%H:%M:%SZ")

print(publish_at())  # -> 2026-06-22T15:00:00Z

Step 3: Add it to the upload body

Reuse your upload script and replace the status block with the scheduled version. Everything else (snippet, media upload) stays the same.

schedule.py
body = {
    "snippet": {
        "title": "Friday build log",
        "description": "This week's progress.",
        "categoryId": "22",
    },
    "status": {
        "privacyStatus": "private",
        "publishAt": publish_at(days_ahead=2, hour_utc=15),
    },
}
YouTube Studio — Visibility
Visibility: Scheduled
Publish: Jun 22, 2026, 3:00 PM (set to your channel time zone)
Saved. The video will go public automatically.
A scheduled video shows the future go-live time, not Private.
Convert your local time once
publishAt is always UTC. Work out your channel time zone offset once, then bake it into hour_utc so you never schedule a 3 AM surprise.

Result

The video uploads now and YouTube publishes it at your chosen UTC time. Studio shows it as Scheduled, so you can batch a week of content and walk away.

Watch related tutorials

Tags
#scheduling#api#upload#publishat#python