Marketing CLIs
Zero-dependency, single-file CLI tools for marketing platforms that don't ship their own.
Every CLI is a standalone Node.js script (Node 18+) with no npm install required — just chmod +x and go.
Install
Option 1: Run directly
bash
node tools/clis/ahrefs.js backlinks list --target example.comOption 2: Symlink for global access
bash
# Symlink any CLI you want available globally
ln -sf "$(pwd)/tools/clis/ahrefs.js" ~/.local/bin/ahrefs
ln -sf "$(pwd)/tools/clis/resend.js" ~/.local/bin/resend
# Then use directly
ahrefs backlinks list --target example.com
resend send --from you@example.com --to them@example.com --subject "Hello" --html "<p>Hi</p>"Option 3: Add the whole directory to PATH
bash
export PATH="$PATH:/path/to/marketingskills/tools/clis"Authentication
Every CLI reads credentials from environment variables:
| CLI | Environment Variable |
|---|---|
activecampaign | ACTIVECAMPAIGN_API_KEY, ACTIVECAMPAIGN_API_URL |
adobe-analytics | ADOBE_ACCESS_TOKEN, ADOBE_CLIENT_ID, ADOBE_COMPANY_ID |
ahrefs | AHREFS_API_KEY |
amplitude | AMPLITUDE_API_KEY, AMPLITUDE_SECRET_KEY |
apollo | APOLLO_API_KEY |
beehiiv | BEEHIIV_API_KEY |
brevo | BREVO_API_KEY |
buffer | BUFFER_API_KEY |
calendly | CALENDLY_API_KEY |
clearbit | CLEARBIT_API_KEY |
customer-io | CUSTOMERIO_APP_KEY (App API), CUSTOMERIO_SITE_ID + CUSTOMERIO_API_KEY (Track API) |
dataforseo | DATAFORSEO_LOGIN, DATAFORSEO_PASSWORD |
demio | DEMIO_API_KEY, DEMIO_API_SECRET |
dub | DUB_API_KEY |
g2 | G2_API_TOKEN |
ga4 | GA4_ACCESS_TOKEN |
google-ads | GOOGLE_ADS_TOKEN, GOOGLE_ADS_DEVELOPER_TOKEN, GOOGLE_ADS_CUSTOMER_ID |
google-search-console | GSC_ACCESS_TOKEN |
hotjar | HOTJAR_CLIENT_ID, HOTJAR_CLIENT_SECRET |
intercom | INTERCOM_API_KEY |
keywords-everywhere | KEYWORDS_EVERYWHERE_API_KEY |
kit | KIT_API_KEY, KIT_API_SECRET |
klaviyo | KLAVIYO_API_KEY |
linkedin-ads | LINKEDIN_ACCESS_TOKEN |
livestorm | LIVESTORM_API_TOKEN |
mailchimp | MAILCHIMP_API_KEY |
mention-me | MENTIONME_API_KEY |
meta-ads | META_ACCESS_TOKEN, META_AD_ACCOUNT_ID |
mixpanel | MIXPANEL_TOKEN (ingestion), MIXPANEL_API_KEY + MIXPANEL_SECRET (query) |
onesignal | ONESIGNAL_REST_API_KEY, ONESIGNAL_APP_ID |
optimizely | OPTIMIZELY_API_KEY |
paddle | PADDLE_API_KEY, PADDLE_SANDBOX (optional) |
partnerstack | PARTNERSTACK_PUBLIC_KEY, PARTNERSTACK_SECRET_KEY |
plausible | PLAUSIBLE_API_KEY, PLAUSIBLE_BASE_URL (optional, for self-hosted) |
postmark | POSTMARK_API_KEY |
resend | RESEND_API_KEY |
rewardful | REWARDFUL_API_KEY |
savvycal | SAVVYCAL_API_KEY |
segment | SEGMENT_WRITE_KEY (tracking), SEGMENT_ACCESS_TOKEN (profile) |
semrush | SEMRUSH_API_KEY |
sendgrid | SENDGRID_API_KEY |
tiktok-ads | TIKTOK_ACCESS_TOKEN, TIKTOK_ADVERTISER_ID |
tolt | TOLT_API_KEY |
trustpilot | TRUSTPILOT_API_KEY, TRUSTPILOT_API_SECRET, TRUSTPILOT_BUSINESS_UNIT_ID |
typeform | TYPEFORM_API_KEY |
hunter | HUNTER_API_KEY |
instantly | INSTANTLY_API_KEY |
lemlist | LEMLIST_API_KEY |
snov | SNOV_CLIENT_ID, SNOV_CLIENT_SECRET |
wistia | WISTIA_API_KEY |
zapier | ZAPIER_API_KEY |
Security
Never hardcode API keys or tokens in scripts. All CLIs read credentials exclusively from environment variables.
- Store keys in your shell profile (
~/.zshrc,~/.bashrc) or a.envfile - The
.envfile is gitignored — but double-check before committing - Use
--dry-runon any command to preview the request without sending it (credentials are masked as***) - If you fork this repo, audit your commits to ensure no secrets are included
Command Pattern
All CLIs follow the same structure:
{tool} <resource> <action> [options]Examples:
bash
ahrefs backlinks list --target example.com --limit 50
semrush keywords overview --phrase "marketing automation" --database us
mailchimp campaigns list --limit 20
resend send --from you@example.com --to them@example.com --subject "Hello" --html "<p>Hi</p>"
dub links create --url https://example.com/landing --key summer-saleOutput
All CLIs output JSON to stdout for easy piping:
bash
# Pipe to jq
ahrefs backlinks list --target example.com | jq '.backlinks[].url_from'
# Save to file
semrush keywords overview --phrase "saas marketing" --database us > keywords.json
# Use in scripts
DOMAINS=$(rewardful affiliates list | jq -r '.data[].email')Available CLIs
| CLI | Category | Tool |
|---|---|---|
activecampaign.js | Email/CRM | ActiveCampaign |
adobe-analytics.js | Analytics | Adobe Analytics |
ahrefs.js | SEO | Ahrefs |
amplitude.js | Analytics | Amplitude |
apollo.js | Data Enrichment | Apollo.io |
beehiiv.js | Newsletter | Beehiiv |
brevo.js | Email/SMS | Brevo |
buffer.js | Social | Buffer |
calendly.js | Scheduling | Calendly |
clearbit.js | Data Enrichment | Clearbit |
customer-io.js | Customer.io | |
dataforseo.js | SEO | DataForSEO |
demio.js | Webinar | Demio |
dub.js | Links | Dub.co |
g2.js | Reviews | G2 |
ga4.js | Analytics | Google Analytics 4 |
google-ads.js | Ads | Google Ads |
google-search-console.js | SEO | Google Search Console |
hotjar.js | CRO | Hotjar |
hunter.js | Email Outreach | Hunter.io |
instantly.js | Email Outreach | Instantly.ai |
intercom.js | Messaging | Intercom |
keywords-everywhere.js | SEO | Keywords Everywhere |
kit.js | Kit | |
klaviyo.js | Email/SMS | Klaviyo |
lemlist.js | Email Outreach | Lemlist |
linkedin-ads.js | Ads | LinkedIn Ads |
livestorm.js | Webinar | Livestorm |
mailchimp.js | Mailchimp | |
mention-me.js | Referral | Mention Me |
meta-ads.js | Ads | Meta Ads |
mixpanel.js | Analytics | Mixpanel |
onesignal.js | Push | OneSignal |
optimizely.js | A/B Testing | Optimizely |
paddle.js | Payments | Paddle |
partnerstack.js | Affiliate | PartnerStack |
plausible.js | Analytics | Plausible |
postmark.js | Postmark | |
resend.js | Resend | |
rewardful.js | Referral | Rewardful |
savvycal.js | Scheduling | SavvyCal |
segment.js | Analytics | Segment |
semrush.js | SEO | SEMrush |
sendgrid.js | SendGrid | |
snov.js | Email Outreach | Snov.io |
tiktok-ads.js | Ads | TikTok Ads |
tolt.js | Referral | Tolt |
trustpilot.js | Reviews | Trustpilot |
typeform.js | Forms | Typeform |
wistia.js | Video | Wistia |
zapier.js | Automation | Zapier |