Marketing CLI: Google Ads, GA4, GSC, LinkedIn, Reddit, X, YouTube, Meta from your terminal. Zero runtime dependencies — just Bun.
- Google Ads — campaigns, budgets, assets, search terms, wasted spend, geo targeting, keyword research
- GA4 Analytics — reports, realtime, LLM referral traffic, top pages, sources, conversions
- Google Search Console — performance, URL inspection, indexing requests, quick wins, CTR opportunities
- LinkedIn — OAuth login, publish posts, view traffic, draft posts
- Reddit — search, opportunities, browse subreddits, draft comments
- X / Twitter — compose tweets, track traffic, draft threads
- YouTube — search videos, get stats, read comments, track traffic
- Meta Ads — OAuth login, campaigns, insights
- Image Generation — generate images via OpenRouter (Gemini)
- Campaign Planning — generate PMax campaign plans as JSON
Requires Bun v1.1+.
git clone https://github.com/usood/marketing-cli.git
cd marketing-cli
bun install
bun run buildSymlink the binary for global access:
ln -sf "$(pwd)/dist/marketing-cli" /usr/local/bin/marketing-cliOr run directly without building:
bun run src/index.ts --helpCreate OAuth credentials at Google Cloud Console:
- Create an OAuth 2.0 Client ID (Desktop app)
- Set redirect URI to
http://localhost:8910 - Enable these APIs: Google Ads, Analytics Data, Search Console, YouTube Data, Indexing
marketing-cli auth login \
--client-id YOUR_OAUTH_CLIENT_ID \
--client-secret YOUR_OAUTH_CLIENT_SECRET \
--developer-token YOUR_GOOGLE_ADS_DEV_TOKEN \
--customer-id YOUR_CUSTOMER_ID \
--login-customer-id YOUR_MCC_IDmarketing-cli auth set-defaults \
--ga-property properties/123456789 \
--gsc-site https://example.com \
--openrouter-api-key sk-or-...# Google Ads
marketing-cli ads performance --date-range last_7d
marketing-cli ads campaigns list
marketing-cli ads wasted-spend --threshold 200
marketing-cli ads keywords ideas --seed "ai seo"
# GA4
marketing-cli analytics realtime
marketing-cli analytics llm-referrals
marketing-cli analytics top-pages --limit 10
# Search Console
marketing-cli gsc top-keywords --limit 20
marketing-cli gsc quick-wins
marketing-cli gsc request-indexing https://example.com/new-page
# Social
marketing-cli reddit search "AI SEO" --subreddit SEO
marketing-cli linkedin draft-post "AI visibility trends"
marketing-cli twitter draft-post "zero-click search" --type thread
# Image generation
marketing-cli image generate "a modern dashboard UI" --output dashboard.pngSingle OAuth flow covers all Google services. Credentials are saved to ~/.marketing-cli/config.json.
marketing-cli auth login --client-id ... --client-secret ... --developer-token ... --customer-id ...
marketing-cli auth status
marketing-cli auth logoutRequires a LinkedIn Developer App with "Share on LinkedIn" and "Sign In with LinkedIn using OpenID Connect" products.
marketing-cli linkedin login --client-id YOUR_ID --client-secret YOUR_SECRETRequires a Meta Developer App with the Marketing API product.
marketing-cli meta login --app-id YOUR_ID --app-secret YOUR_SECRET --ad-account-id act_XXXGet an API key from OpenRouter.
marketing-cli auth set-defaults --openrouter-api-key sk-or-...| Command | Description |
|---|---|
auth |
Google OAuth login, status, logout, set-defaults |
ads |
Google Ads campaigns, budgets, assets, performance, keywords, geo targeting |
analytics |
GA4 reports, realtime, LLM referrals, top pages, sources, conversions |
gsc |
Search Console performance, inspection, indexing, quick wins, CTR opportunities |
linkedin |
LinkedIn OAuth, post, traffic, draft-post |
reddit |
Search, opportunities, subreddit browsing, draft comments |
twitter |
X compose, traffic tracking, draft posts/threads |
youtube |
Search, video details, comments, traffic |
meta |
Meta Ads OAuth, campaigns, insights |
image |
Generate images via OpenRouter |
plan |
Generate PMax campaign plan JSON |
Run marketing-cli --help for the full command reference.
Config is stored at ~/.marketing-cli/config.json. Override with:
export MARKETING_CLI_CONFIG_PATH=/path/to/config.json| Flag | Description |
|---|---|
--format json|table|raw |
Output format (default: json) |
--date-range R |
last_7d, last_30d, last_90d, or YYYY-MM-DD:YYYY-MM-DD |
--verbose |
Debug HTTP requests |
--help |
Show help |
MIT