api_keys.json.example → api_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.
- Sign in to console.anthropic.com (free account, paid usage).
- Go to API keys → Create key. Copy the key (starts with
sk-ant-...). - Top up a small balance — $5 covers months of typical use for a 4-brand kit.
- Paste the key into
api_keys.json.anthropic.api_key. - (Optional) Pick a model:
claude-sonnet-4-6is default. Useclaude-opus-4-7for higher-quality plans (~5× cost). Useclaude-haiku-4-5for cheapest. - Run
python3 claude_brief.pyfrom the kit folder. It rewritesbrands.jsonwith fresh wins + top priorities (backed up tobrands.json.bakfirst). Then rungenerate.pyas normal.
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.
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.
- Open
brands.json, find your brand. - Add
"bs": "yourhandle.bsky.social"to the brand'sfetch_idsblock. - Run
python3 fetch_followers.py.
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.
- Go to console.cloud.google.com. Sign in with any Google account.
- Create a new project (top bar). Name it anything — "morningstack" works.
- Search for YouTube Data API v3 in the API Library and click Enable.
- Go to APIs & Services → Credentials. Click Create Credentials → API key. Copy it.
- Paste the key into
api_keys.jsonunderyoutube.api_key. - Find your channel ID (not the @handle): in YouTube Studio → Settings → Channel → Advanced settings. It looks like
UCxxxxxxxxxxxxxxxxxxxxxx. - Paste the channel ID into your brand's
fetch_ids.yt.
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.
- Sign in to your Mastodon home instance in a browser.
- Go to Preferences → Development → New application.
- Name it "MorningStack". Scopes needed:
read:accounts. Submit. - Open the new application. Copy Your access token.
- Paste into
api_keys.jsonundermastodon.<your-instance.tld>— use the bare hostname (nohttps://). - In
brands.json, add"mast": "your-instance.tld"to the brand'sfetch_ids.
Beehiiv
5 min key:subs
For newsletter active-subscriber counts. Free on Beehiiv's Launch plan and above. One key per publication.
- In Beehiiv dashboard, click your publication → Settings → Integrations → API.
- Click Create new API key. Name it "MorningStack". Copy it.
- Grab your publication ID from the URL of any publication settings page — it looks like
pub_a1b2c3d4-1234-abcd. - In
api_keys.json, paste underbeehiiv.api_key(or per-publication if you have multiple — see example). - In
brands.json, add"subs": "beehiiv:pub_xxxxxxxx"tofetch_ids(note thebeehiiv:prefix).
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.
- Sign in to app.kit.com → Account Settings → Developer Settings.
- Copy your API Secret (not the API Key — the Secret is needed for v4).
- Paste into
api_keys.jsonunderkit.api_secret. - In
brands.json, add"subs": "kit"tofetch_idsfor whichever brand uses Kit.
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.
- Open discord.com/developers/applications → New Application. Name it "MorningStack". Save.
- In the sidebar: Bot. Click Add Bot. Under Token, click Reset Token and copy it (only shown once).
- In OAuth2 → URL Generator, tick
botunder Scopes, and tickView Server Insights(or justView Channel— minimal permission is fine) under Bot Permissions. - Open the generated invite URL, pick your server, authorise. The bot joins.
- Get your server (guild) ID: in Discord, User Settings → Advanced → Developer Mode = ON. Then right-click your server icon → Copy Server ID.
- Paste the bot token into
api_keys.json.discord.bot_token. Paste the server ID intobrands.json fetch_ids.dc.
Twitch
15–20 min key:tw
Twitch needs OAuth — slightly more setup than the others but free and reliable once it's working.
- Go to dev.twitch.tv/console/apps → Register Your Application.
- Name: "MorningStack". OAuth Redirect URL:
http://localhost(we don't actually use it). Category: Other. Confidential: no. - Copy the Client ID. Paste into
api_keys.json.twitch.client_id. - Get a user access token with the
moderator:read:followersscope. Easiest: use twitchtokengenerator.com (third-party tool, links straight to Twitch's official OAuth flow). Pick "Custom Scope Token", checkmoderator:read:followers, generate. - Copy the Access Token. Paste into
api_keys.json.twitch.user_access_token. - Get your numeric broadcaster ID: visit
https://api.twitch.tv/helix/users?login=YOURNAMEwith your client-id + token in headers (or use the dev portal's User Lookup tool). Or use any "twitch user ID lookup" website. Paste intobrands.json fetch_ids.tw.
pin
Pinterest API v5 requires a Business account and OAuth. Worth it if Pinterest is a real channel for one of your brands.
- Convert your Pinterest account to Business (free) at pinterest.com/business/convert if not already.
- Go to developers.pinterest.com, sign in, click My apps → Connect app. Name it "MorningStack". Submit.
- Once the app is approved (usually instant for trial), grab the App ID + App Secret Key.
- 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. - Copy the resulting access token. Paste into
api_keys.json.pinterest.access_token. - No
fetch_ids.pinneeded — the token is account-scoped.
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.
- Sign in to developers.facebook.com with a personal Facebook account. Become a developer (free).
- Click My Apps → Create App. Use case: Other → Business. Name: "MorningStack". Submit.
- In the app dashboard, click Add product and add: Instagram, Threads, Facebook Login for Business, Pages (if managing FB Pages).
- 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).
- Get a User Access Token via the Graph API Explorer. Scopes you need:
instagram_basic,pages_read_engagement,pages_show_list,threads_basic. - Exchange the short-lived token for a long-lived token (60 days) using the Token Tool link next to the token in the explorer.
- Paste the long-lived token into
api_keys.json.meta.access_token. - To find your IG user ID: in Graph API Explorer, GET
/me/accounts, then look up the Page'sinstagram_business_account.id. To find your Threads user ID: GET/me?fields=idwith the Threads scope. To find your Page ID: GET/me/accountsshows the Page'sid. - 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 intoapi_keys.json.meta.page_tokens[PAGE_ID]. - In
brands.json fetch_ids:"th"= Threads user ID,"ig"= Instagram business user ID,"fb"= Facebook Page ID.
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 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.