Setup · Auto-fetch & PDF
MorningStack ← Back home
— The setup guides —

Plug in API keys, get auto-fetched counts.

Every platform in one place. Honest setup times, real gotchas, and a clear list of what doesn't work — because the platform won't let us, not because we couldn't be bothered.

Jump to a platform

  1. Anthropic / Claude (the recommender)
  2. Bluesky
  3. YouTube
  4. Mastodon
  5. Beehiiv
  6. Kit (ConvertKit)
  7. Discord
  8. Twitch
  9. Pinterest
  10. Threads · Instagram · Facebook
  11. What's NOT supported
Open this whole guide in Claude
Claude reads the guide and walks you through setup one platform at a time — paste your keys, brand IDs, anything Claude asks for, and you're done. Works best if you're already signed in to claude.ai.
How auto-fetch works in one paragraph. Copy api_keys.json.exampleapi_keys.json. Paste credentials for the platforms you want auto-fetched. Add a fetch_ids block to each brand in brands.json telling the kit which account to fetch on each platform. Run python3 fetch_followers.py before generate.py. Counts land in current_followers.json automatically. Anything that fails (bad key, hidden count, expired token) is silently skipped — your previous value stays put. Mix auto and manual freely.

Anthropic / Claude

5 min runs: claude_brief.py

This is the "what should I do today" recommender. An optional Python script that asks Claude to plan ranked quick wins for each brand, applying MorningStack's effort/momentum/content-gap methodology. You pay Anthropic directly with your own key (~$0.05-0.25 per run depending on number of brands and model). Without this key, the kit still works — wins stay buyer-authored.

  1. Sign in to console.anthropic.com (free account, paid usage).
  2. Go to API keys → Create key. Copy the key (starts with sk-ant-...).
  3. Top up a small balance — $5 covers months of typical use for a 4-brand kit.
  4. Paste the key into api_keys.json.anthropic.api_key.
  5. (Optional) Pick a model: claude-sonnet-4-6 is default. Use claude-opus-4-7 for higher-quality plans (~5× cost). Use claude-haiku-4-5 for cheapest.
  6. Run python3 claude_brief.py from the kit folder. It rewrites brands.json with fresh wins + top priorities (backed up to brands.json.bak first). Then run generate.py as normal.
// api_keys.json { "anthropic": { "api_key": "sk-ant-...", "_optional_model": "claude-sonnet-4-6" } } // run order $ python3 fetch_followers.py # pull live counts $ python3 claude_brief.py # Claude plans wins $ python3 generate.py # render

What the methodology asks Claude to do: rank wins by ROI for today, weight time-sensitive mentions first, prefer the biggest follower-mover platform, fill content gaps, mix effort tags (always at least one "fast" win in the top 3 so you've got a pre-coffee task), and tie at least 2 of 5 wins to the brand's focus_today channel. The framework is spelled out verbatim in the script's system prompt — you can read it, edit it, fork it.

Set Anthropic / Claude up with Claude

Bluesky

< 2 min key: bs

Bluesky is fully public. No API key needed. Just put your handle in brands.json fetch_ids.bs and you're done.

  1. Open brands.json, find your brand.
  2. Add "bs": "yourhandle.bsky.social" to the brand's fetch_ids block.
  3. Run python3 fetch_followers.py.
// brands.json { "id": "northstar", "fetch_ids": { "bs": "northstar.bsky.social" } }
Set Bluesky up with Claude

YouTube

5–10 min key: yt

Free Google Cloud API key, generous 10,000-unit-per-day quota (one channel check ≈ 1 unit, so you could check 10,000 channels a day). Works for any public channel's subscriber count.

  1. Go to console.cloud.google.com. Sign in with any Google account.
  2. Create a new project (top bar). Name it anything — "morningstack" works.
  3. Search for YouTube Data API v3 in the API Library and click Enable.
  4. Go to APIs & Services → Credentials. Click Create Credentials → API key. Copy it.
  5. Paste the key into api_keys.json under youtube.api_key.
  6. Find your channel ID (not the @handle): in YouTube Studio → Settings → Channel → Advanced settings. It looks like UCxxxxxxxxxxxxxxxxxxxxxx.
  7. Paste the channel ID into your brand's fetch_ids.yt.
// api_keys.json { "youtube": { "api_key": "AIza..." } } // brands.json { "fetch_ids": { "yt": "UCxxxxxxxxxxxx..." } }
Gotcha: If a channel has hidden subscriber count in its settings, the API returns 0. Not the kit's fault — your channel data.
Set Youtube up with Claude

Mastodon

5 min key: mast

Tokens are per-instance — if you have accounts on multiple Mastodon servers, you'll need one token each. Self-service from your own instance settings, no app review.

  1. Sign in to your Mastodon home instance in a browser.
  2. Go to Preferences → Development → New application.
  3. Name it "MorningStack". Scopes needed: read:accounts. Submit.
  4. Open the new application. Copy Your access token.
  5. Paste into api_keys.json under mastodon.<your-instance.tld> — use the bare hostname (no https://).
  6. In brands.json, add "mast": "your-instance.tld" to the brand's fetch_ids.
// api_keys.json — supports multiple instances { "mastodon": { "indieweb.social": "TOKEN_FOR_THAT_INSTANCE", "mastodon.social": "TOKEN_FOR_THAT_ONE" } }
Set Mastodon up with Claude

Beehiiv

5 min key: subs

For newsletter active-subscriber counts. Free on Beehiiv's Launch plan and above. One key per publication.

  1. In Beehiiv dashboard, click your publication → Settings → Integrations → API.
  2. Click Create new API key. Name it "MorningStack". Copy it.
  3. Grab your publication ID from the URL of any publication settings page — it looks like pub_a1b2c3d4-1234-abcd.
  4. In api_keys.json, paste under beehiiv.api_key (or per-publication if you have multiple — see example).
  5. In brands.json, add "subs": "beehiiv:pub_xxxxxxxx" to fetch_ids (note the beehiiv: prefix).
// brands.json { "fetch_ids": { "subs": "beehiiv:pub_a1b2c3d4" } }
Set Beehiiv up with Claude

Kit (formerly ConvertKit)

5 min key: subs

For newsletter active-subscriber counts on Kit. Free on Kit's Newsletter plan. One API secret per Kit account.

  1. Sign in to app.kit.com → Account Settings → Developer Settings.
  2. Copy your API Secret (not the API Key — the Secret is needed for v4).
  3. Paste into api_keys.json under kit.api_secret.
  4. In brands.json, add "subs": "kit" to fetch_ids for whichever brand uses Kit.
Multi-Kit-account: Each Kit account ships its own API secret. If two of your brands use Kit, you'll need two Kit accounts and a way to swap secrets per-brand. The current schema supports one Kit secret per kit-folder install — extend by running the kit once per Kit account or doing manual paste for the second one.
Set Kit (ConvertKit) up with Claude

Discord

10–15 min key: dc

Discord doesn't have "followers" — what's tracked is your server's approximate member count. You need to create a bot, invite it to your server, and paste its token.

  1. Open discord.com/developers/applicationsNew Application. Name it "MorningStack". Save.
  2. In the sidebar: Bot. Click Add Bot. Under Token, click Reset Token and copy it (only shown once).
  3. In OAuth2 → URL Generator, tick bot under Scopes, and tick View Server Insights (or just View Channel — minimal permission is fine) under Bot Permissions.
  4. Open the generated invite URL, pick your server, authorise. The bot joins.
  5. Get your server (guild) ID: in Discord, User Settings → Advanced → Developer Mode = ON. Then right-click your server icon → Copy Server ID.
  6. Paste the bot token into api_keys.json.discord.bot_token. Paste the server ID into brands.json fetch_ids.dc.
Bot must stay in your server for the API to read the member count. If you kick it, fetching stops working.
Set Discord up with Claude

Twitch

15–20 min key: tw

Twitch needs OAuth — slightly more setup than the others but free and reliable once it's working.

  1. Go to dev.twitch.tv/console/appsRegister Your Application.
  2. Name: "MorningStack". OAuth Redirect URL: http://localhost (we don't actually use it). Category: Other. Confidential: no.
  3. Copy the Client ID. Paste into api_keys.json.twitch.client_id.
  4. Get a user access token with the moderator:read:followers scope. Easiest: use twitchtokengenerator.com (third-party tool, links straight to Twitch's official OAuth flow). Pick "Custom Scope Token", check moderator:read:followers, generate.
  5. Copy the Access Token. Paste into api_keys.json.twitch.user_access_token.
  6. Get your numeric broadcaster ID: visit https://api.twitch.tv/helix/users?login=YOURNAME with your client-id + token in headers (or use the dev portal's User Lookup tool). Or use any "twitch user ID lookup" website. Paste into brands.json fetch_ids.tw.
Token expiry: User access tokens last ~60 days. You'll need to regenerate periodically. The fetcher will fail gracefully with a 401 when this happens — that's your cue to refresh.
Set Twitch up with Claude

Pinterest

15–25 min key: pin

Pinterest API v5 requires a Business account and OAuth. Worth it if Pinterest is a real channel for one of your brands.

  1. Convert your Pinterest account to Business (free) at pinterest.com/business/convert if not already.
  2. Go to developers.pinterest.com, sign in, click My apps → Connect app. Name it "MorningStack". Submit.
  3. Once the app is approved (usually instant for trial), grab the App ID + App Secret Key.
  4. Run an OAuth flow with scope user_accounts:read. Easiest path: use Pinterest's playground at developers.pinterest.com/docs/api/v5/oauth-tokens — they give you a sample script.
  5. Copy the resulting access token. Paste into api_keys.json.pinterest.access_token.
  6. No fetch_ids.pin needed — the token is account-scoped.
Token expiry: Pinterest tokens last 30 days. Refresh tokens last 1 year. Regenerate periodically.
Set Pinterest up with Claude

Threads, Instagram, Facebook Pages

30–45 min (all three) keys: th · ig · fb

One Meta dev account, one Meta app, three platforms in one setup. The setup is the heaviest in the kit, but it covers a lot.

  1. Sign in to developers.facebook.com with a personal Facebook account. Become a developer (free).
  2. Click My Apps → Create App. Use case: Other → Business. Name: "MorningStack". Submit.
  3. In the app dashboard, click Add product and add: Instagram, Threads, Facebook Login for Business, Pages (if managing FB Pages).
  4. Verify your business at App settings → Basic → Business verification if you want to publish the app (Development Mode works for your own accounts without verification).
  5. Get a User Access Token via the Graph API Explorer. Scopes you need: instagram_basic, pages_read_engagement, pages_show_list, threads_basic.
  6. Exchange the short-lived token for a long-lived token (60 days) using the Token Tool link next to the token in the explorer.
  7. Paste the long-lived token into api_keys.json.meta.access_token.
  8. To find your IG user ID: in Graph API Explorer, GET /me/accounts, then look up the Page's instagram_business_account.id. To find your Threads user ID: GET /me?fields=id with the Threads scope. To find your Page ID: GET /me/accounts shows the Page's id.
  9. For Facebook Pages, also get the Page Access Token (different from User Access Token). GET /me/accounts?fields=access_token — it's in each Page object. Paste into api_keys.json.meta.page_tokens[PAGE_ID].
  10. In brands.json fetch_ids: "th" = Threads user ID, "ig" = Instagram business user ID, "fb" = Facebook Page ID.
// api_keys.json { "meta": { "access_token": "EAA...", "page_tokens": { "123456789": "PAGE_ACCESS_TOKEN_HERE" } } } // brands.json fetch_ids { "th": "1234567890", // Threads user ID "ig": "17841401234567890", // IG business user ID "fb": "123456789" // FB Page ID }
Instagram requirement: only Business or Creator IG accounts can use the Graph API. Personal Instagram accounts can't be auto-fetched at all — Meta killed Basic Display in Dec 2024.
Token expiry: long-lived user tokens last 60 days. Page tokens can be set to never expire (do an extra request after generating). The fetcher will fail with a clear error when a token expires.
Set Meta (Threads · IG · Facebook) up with Claude

What's NOT supported.

Four platforms we'd love to auto-fetch but can't — for reasons that are theirs, not ours. Keep pasting these manually into current_followers.json.

X / Twitter

API now starts at $200/month (Basic tier) for any read access — and that tier is closed to new signups; new developers go onto pay-per-use at $0.005/read. Either way, it's hostile to a $45 kit. The day X reverses that, we'll add it.

LinkedIn

LinkedIn gates company-page follower data behind their Marketing Developer Partner program — application + approval required, often denied. Personal-profile follower counts have no public API at all. There's no path to add this for a self-serve kit.

TikTok

The Research API (which exposes follower counts) is restricted to academics with institutional affiliation. The Display API for everyone else doesn't include follower counts at all. Business API is advertiser-only.

Substack

Substack's official Developer API is for looking up public creator profiles, not authenticated subscriber-count fetching. There's no auth'd endpoint for "my own publication's subscriber count." Until they ship one, this stays manual.

> return to the front page  ·  buy — $45 once