# Connecting YouTube to Social Quack — the complete guide

YouTube works like TikTok: you create a small developer app of your own in Google's console, connect it in a few minutes, and can upload right away — but Google keeps those uploads **private** until it has reviewed your project. This page walks through both halves with every answer ready to paste. You only do this once.

> **Rather skip Google's review?** Connect through Zernio instead: paste one key, sign in, upload — a few minutes, public uploads from day one. See the [Zernio guide](/guides/zernio). This page is the do-it-yourself route with your own Google Cloud project.

**Two phases, and you can start uploading after phase 1:**

| Phase | What you get | Time |
|---|---|---|
| **1. Create the app** | Connect your channel and upload — but every video is set to **Private** by YouTube until phase 2, and the connection must be renewed every 7 days | ~10 min |
| **2. Get reviewed** | Public and Unlisted uploads, connection that stays put | ~20 min of your time, then Google's review |

> **Shorts** need nothing special: a vertical video under 3 minutes is a Short automatically.

## Phase 1 — create your Google Cloud project and connect

1. Go to **https://console.cloud.google.com** and sign in with the Google account that owns your YouTube channel (or any Google account — you pick the channel later).
2. **Create a project**: click the project picker at the top → **New project** → name it (e.g. `My Social Quack`) → **Create**, then make sure it is selected.
3. **Enable the API**: left menu **APIs & Services → Library** → search **YouTube Data API v3** → **Enable**.
4. **Set up the consent screen**: left menu **APIs & Services → Google Auth Platform** (older projects show *OAuth consent screen*) → **Get started**:
   - **App information**: app name (e.g. `My Social Quack`), user support email = your address.
   - **Audience**: **External**.
   - **Contact information**: your address again → agree → **Create**.
5. **Add yourself as a test user**: **Google Auth Platform → Audience → Test users → Add users** → your Google address → **Save**. (While the app is in *Testing*, only test users can connect.)
6. **Add the scopes**: **Google Auth Platform → Data Access → Add or remove scopes** → filter for `youtube` and tick:
   - `https://www.googleapis.com/auth/youtube.upload`
   - `https://www.googleapis.com/auth/youtube.readonly`

   → **Update** → **Save**. Both are "sensitive" scopes; that only matters for phase 2.
7. **Create the credentials**: **Google Auth Platform → Clients → Create client** → Application type **Desktop app** → name it → **Create**. Copy the **Client ID** and **Client secret** (you can download them as JSON too).
   > Why *Desktop app*? Social Quack runs on your own computer, and Google's Desktop client type accepts the `localhost` address Social Quack listens on without registering a website. There is no redirect URI to add for this client type. If Google ever shows `redirect_uri_mismatch`, the client was created as *Web application* — create a Desktop one instead.
8. In Social Quack: **Channels → YouTube → Set up keys ▾ → Set up app keys** → paste the Client ID and secret → **Connect**. Your browser opens Google's sign-in: pick the account, choose the channel if asked, and on the *"Google hasn't verified this app"* screen click **Continue** (you are the developer — this is expected in phase 1). Tick both permissions → **Continue**. Your channel appears under Connected.
9. Upload a test video from Compose: attach the video, tick the YouTube channel, and fill in the **YouTube options** panel that appears — title, visibility, the *made for kids* declaration, tags. Post now or schedule it. Open YouTube Studio: the video is there — as **Private**, whatever visibility you chose. That is Google's rule for unreviewed projects (see phase 2), not a Social Quack bug.

**Two things to know while you are in phase 1:**

- **Reconnect every 7 days.** Google expires the connection of any *Testing* app after 7 days. Social Quack tells you in Channels when that happens; click **Connect** again. Phase 2 ends this.
- **Quota**: a new project may upload **100 videos per day** and make 10,000 units of other calls (a thumbnail costs 50). Plenty for a person or a small team; agencies can ask for more in phase 2.

## Phase 2 — get reviewed (public uploads, permanent connection)

There are two separate reviews, by two different Google teams. Do both; each is a form.

### A. YouTube API compliance audit — lifts the "private only" rule

Every project created after 28 July 2020 has its uploads locked to Private until YouTube has audited it for compliance with the YouTube API Services Terms of Service.

1. Open the **YouTube API Services – Audit and Quota Extension Form**: https://support.google.com/youtube/contact/yt_api_form
2. Fill it in with the [copy-paste answers](#copy-paste-answers) below. Where it asks for the API client, say it is a personal desktop scheduler used only for your own channel; where it asks for a demo, attach the [screen recording](#the-demo-video--what-to-record).
3. If you want more than 100 uploads a day, ask for the quota increase in the same form and say how many.

You get an email when the audit passes. From then on the visibility you pick in Social Quack (Public / Unlisted / Private) is what YouTube uses.

### B. OAuth app verification — ends the 7-day reconnects and the warning screen

1. **Google Auth Platform → Audience → Publish app** → confirm. Your app is now *In production*. From here on connections no longer expire after 7 days. Until verification finishes, the sign-in still shows *"Google hasn't verified this app"* — click **Advanced → Go to (your app name)** to continue; Google allows up to 100 people to do that per unverified app, which is far more than one channel needs.
2. **Google Auth Platform → Branding**: add your app logo (optional), and under **Authorized domains** add `socialquack.com`; **Application home page** `https://socialquack.com`, **Privacy policy** `https://socialquack.com/privacy`, **Terms of service** `https://socialquack.com/terms`. Save.
3. **Google Auth Platform → Verification Center → Prepare for verification** → check the details → for each scope paste the justification from the [copy-paste answers](#copy-paste-answers) → add the link to your demo video (upload it to YouTube as Unlisted, or Drive) → **Submit for verification**.
4. Google emails questions and the result. Verification of a small personal app is usually approved as long as the video shows the consent screen and each permission in use.

> You can skip B entirely and live with the warning screen and the *Advanced → Go to app* click — that is a personal choice. You cannot skip A if you want public uploads.

### Copy-paste answers

**What does your application do?**
> Personal social-media scheduling tool. I write and schedule posts on my own computer (Social Quack, a self-hosted scheduler that runs locally on my Mac/PC) and it uploads them to my own YouTube channel at the scheduled time. Single user: me. The application never accesses other users' data, does not read comments or analytics, and stores nothing on any server — access tokens are kept encrypted on my computer only and deleted when I disconnect the channel.

**How is each scope used?**
> **youtube.upload** — uploads the video file for a post I created and scheduled myself, with the title, description, tags and visibility I chose, and sets the thumbnail I attached.
>
> **youtube.readonly** — reads my own channel's name and avatar once, to show which channel is connected in the app.

**API client / platform** → Desktop application installed on the user's own computer; website https://socialquack.com.

**Expected number of users** → 1 (my own account). **Quota** → the default is enough (or state the number of uploads per day you need).

**Do you display or store YouTube data?** → No. The app only uploads; it shows the channel name in its own settings page and stores nothing about other users.

### The demo video — what to record

A 60–90 second screen recording, one take, no voice-over needed. Mac: ⌘⇧5 or QuickTime → New Screen Recording. 

1. **(0:00)** Open Social Quack, show the **Channels** page.
2. **(0:05)** Click **Connect** on YouTube. Google's sign-in opens in the browser — **show the consent screen with both permissions** and click Continue. Show Social Quack with the channel now under Connected.
3. **(0:25)** **Compose**: attach a short video, tick the YouTube channel, fill the **YouTube options** panel (title, visibility, made-for-kids), click **Post now**.
4. **(0:45)** Show the post turning **published** in the Queue and click its link.
5. **(1:00)** Show the video in YouTube Studio on your channel.
6. **(1:15, optional)** Channels → **Remove** the YouTube channel, showing that disconnecting revokes access.

## Troubleshooting

| You see | It means | Do this |
|---|---|---|
| `access_denied` / "app is currently being tested" on Google's sign-in | Your Google account isn't a test user, or you signed in with another account | Google Auth Platform → Audience → Test users → add the exact address, then Connect again |
| `redirect_uri_mismatch` | The OAuth client is a *Web application* | Create a new client of type **Desktop app** and paste its ID/secret |
| "Google hasn't verified this app" | Normal before verification | **Continue** (test user) or **Advanced → Go to app** (published app) |
| Connection stops after a week (`invalid_grant`) | App is in *Testing* | Connect again; or publish the app (phase 2 B, step 1) to stop this |
| Video uploads but is **Private** even though you chose Public | Project not audited yet | Phase 2 A — the compliance audit |
| `quotaExceeded` | 100 uploads today, or 10,000 units of other calls | Wait for midnight Pacific time, or request more in the audit form |
| Thumbnail didn't apply | The YouTube account isn't phone-verified | youtube.com/verify — then the next upload sets it |
| `forbidden` on upload with a Brand Account | You picked the wrong channel at sign-in | Channels → Remove → Connect again and choose the right channel |
