Upload Video to YouTube
adsap_google_upload_videoUpload a video FILE (MP4 in the ADSAP creative library) to YouTube for use in Google Ads video slots, and get back a YouTube video asset. Use this when the user has a video file but NO YouTube channel — the video goes to a Google-managed 'ad storage' YouTube channel owned by the ad account, stays UNLISTED, and never appears on any public channel. If the user already has the video on YouTube, skip this tool and pass the YouTube id/asset directly to the campaign tool instead. TWO STEPS, always: (1) action 'upload' with the storage_path of the file — returns upload_resource_name immediately; (2) action 'status' with that upload_resource_name — YouTube processing usually takes a few MINUTES, so poll every ~30s; while it is still processing you get state UPLOADED and still_processing: true, and once it reaches PROCESSED the tool mints the video asset automatically and returns asset_id + video_id. Feed the result into a video slot: adsap_google_create_demand_gen_campaign uses the VIDEO ID (ad.youtube_video_ids), while adsap_google_create_display_campaign (youtube_video_asset_ids) and adsap_google_create_app_campaign (video_asset_ids) use the ASSET ID. The video title CANNOT be changed after upload (Google marks it immutable) — set it correctly on the upload call. Max 256 MB. ad_account_id is the bare 10-digit customer ID. For Meta video uploads use adsap_upload_creative instead.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | 'upload' pushes the file to YouTube; 'status' polls processing and mints the asset once PROCESSED. | |
| job_id | No | status only: alternative handle returned by the upload call. | |
| dry_run | No | upload only: validate the file (exists, size, title) without uploading anything to YouTube. | |
| video_title | No | Optional YouTube title (defaults to the file name). IMMUTABLE after upload — there is no rename. | |
| storage_path | No | upload: object path of the MP4 inside the bucket — must be under YOUR user prefix ({user_id}/...), cross-user paths are rejected. status: may be used INSTEAD of upload_resource_name to recover the job if the upload response was lost. | |
| ad_account_id | Yes | Bare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix. | |
| storage_bucket | No | upload only: ADSAP creative-library storage bucket holding the video file. | temp-uploads |
| is_ai_generated | No | upload only: set true ONLY when the user says the video is AI generated — writes Google's advertiser AI attestation (synthetic_content_info) on the minted asset, which cannot be fully unset later. Omitted = no attestation written. | |
| video_description | No | Optional YouTube description. Also immutable after upload. | |
| upload_resource_name | No | status only: the value returned by the upload call (customers/{cid}/youTubeVideoUploads/{id}). |