Skip to content

Latest commit

 

History

History
231 lines (197 loc) · 10.9 KB

README.md

File metadata and controls

231 lines (197 loc) · 10.9 KB

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

node tools/clis/ahrefs.js backlinks list --target example.com

Option 2: Symlink for global access

# 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

export PATH="$PATH:/path/to/marketingskills/tools/clis"

Authentication

For step-by-step account setup and private credential loading, see guided tool connections.

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
airops AIROPS_API_KEY, AIROPS_WORKSPACE_ID
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
clay CLAY_API_KEY
clearbit CLEARBIT_API_KEY
close CLOSE_API_KEY
coupler COUPLER_API_KEY
crossbeam CROSSBEAM_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
exa EXA_API_KEY
firecrawl FIRECRAWL_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
github-prospects GITHUB_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
outreach OUTREACH_ACCESS_TOKEN
paddle PADDLE_API_KEY, PADDLE_SANDBOX (optional)
partnerstack PARTNERSTACK_PUBLIC_KEY, PARTNERSTACK_SECRET_KEY
pendo PENDO_INTEGRATION_KEY
plausible PLAUSIBLE_API_KEY, PLAUSIBLE_BASE_URL (optional, for self-hosted)
postmark POSTMARK_API_KEY
rankparse RANKPARSE_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
truelist TRUELIST_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
similarweb SIMILARWEB_API_KEY
supermetrics SUPERMETRICS_API_KEY
wistia WISTIA_API_KEY
zapier ZAPIER_API_KEY
zoominfo ZOOMINFO_ACCESS_TOKEN (or ZOOMINFO_USERNAME + ZOOMINFO_PRIVATE_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 .env file
  • The .env file is gitignored — but double-check before committing
  • Use --dry-run on 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:

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-sale

Output

All CLIs output JSON to stdout for easy piping:

# 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
airops.js AI Content AirOps
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
clay.js Data Enrichment Clay
clearbit.js Data Enrichment Clearbit
close.js CRM Close
coupler.js Data Aggregation Coupler
crossbeam.js Partner Ecosystem Crossbeam
customer-io.js Email Customer.io
dataforseo.js SEO DataForSEO
demio.js Webinar Demio
dub.js Links Dub.co
exa.js AI Search Exa
firecrawl.js Site Scraping & AI Search Firecrawl
g2.js Reviews G2
ga4.js Analytics Google Analytics 4
google-ads.js Ads Google Ads
google-search-console.js SEO Google Search Console
github-prospects.js Developer Intent / GitHub GitHub
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 Email Kit
klaviyo.js Email/SMS Klaviyo
lemlist.js Email Outreach Lemlist
linkedin-ads.js Ads LinkedIn Ads
livestorm.js Webinar Livestorm
mailchimp.js Email 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
outreach.js Sales Engagement Outreach
paddle.js Payments Paddle
partnerstack.js Affiliate PartnerStack
pendo.js Product Analytics Pendo
plausible.js Analytics Plausible
postmark.js Email Postmark
rankparse.js SEO RankParse
resend.js Email Resend
rewardful.js Referral Rewardful
savvycal.js Scheduling SavvyCal
segment.js Analytics Segment
semrush.js SEO SEMrush
sendgrid.js Email SendGrid
snov.js Email Outreach Snov.io
similarweb.js Competitive Intelligence Similarweb
supermetrics.js Data Aggregation Supermetrics
tiktok-ads.js Ads TikTok Ads
tolt.js Referral Tolt
truelist.js Email Verification Truelist
trustpilot.js Reviews Trustpilot
typeform.js Forms Typeform
wistia.js Video Wistia
zapier.js Automation Zapier
zoominfo.js Data Enrichment ZoomInfo

HTTP request deadlines

HTTP calls in 65 of the CLIs use a 120-second per-request deadline, long enough for slow endpoints such as Firecrawl scrapes (60-second default on Firecrawl's side) and large analytics exports. The Truelist CLI is not covered. Lower or raise it with --timeout-ms <1-600000>, for example:

node tools/clis/exa.js search --query 'Recent market research' --timeout-ms 30000

The deadline covers obtaining headers and consuming the response body, including OAuth requests. Each subsequent HTTP call gets its own deadline; this is not a total command deadline or a bound on external credential commands. An aborted call exits as a failure. Aborting a local request does not cancel work already accepted by a provider: check provider status before manually retrying a mutation. The CLI does not add automatic retries. Dry runs issue no HTTP request.

Implemented using Node's AbortSignal.timeout, available on the supported Node 18+ runtime, preserving zero-dependency standalone scripts. Native loopback tests cover stalled headers, stalled bodies, OAuth, successful responses and malformed timeout values without live accounts.