Instantly Campaign Launcher

ReviewAudited by ClawScan on May 10, 2026.

Overview

The skill appears to do what it claims, but it can directly create or reuse Instantly campaigns and bulk-import leads without built-in confirmation, dry-run, or rollback controls.

Review the campaign config and leads file carefully before running. Prefer a test campaign or dry run first, keep the Instantly token in an environment variable or secret manager, only use trusted JavaScript config files, and confirm that the lead list is authorized for outreach.

Findings (4)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

A mistaken invocation, wrong campaign name, or wrong leads file could add contacts or sequences to an Instantly campaign and potentially affect outbound email activity, sender reputation, and account data.

Why it was flagged

The script directly mutates the Instantly account by creating or reusing a campaign, adding email sequences, and importing every lead from the provided file. The artifacts do not show a confirmation gate, dry-run, maximum import size, rollback, or other containment before these high-impact actions.

Skill content
const createRes = await instantly('POST', '/campaigns', ...); ... const seqRes = await instantly('POST', `/campaigns/${campaignId}/sequences`, ...); ... const res = await instantly('POST', '/leads', { campaign_id: campaignId, email: lead.email, ... });
Recommendation

Add an explicit preview and confirmation step, a dry-run mode, lead-count limits, clear handling for existing campaigns, and a rollback or cleanup procedure before importing leads.

What this means

Anyone with access to the token can act on the Instantly account within that token's permissions; storing it in a config file can increase accidental exposure risk.

Why it was flagged

The script uses an Instantly bearer token to perform account actions. This is expected for the integration, but the registry metadata declares no primary credential or required environment variable, and the code also permits storing the token in the JavaScript config.

Skill content
const INSTANTLY_KEY = process.env.INSTANTLY_KEY || config.instantlyKey; ... Authorization: `Bearer ${INSTANTLY_KEY}`
Recommendation

Use an environment variable or secret manager rather than committing the token to config, use the least-privileged token available, and declare the credential requirement in metadata.

What this means

Using an untrusted or AI-generated config file could run arbitrary local JavaScript under the user's account.

Why it was flagged

The campaign configuration is loaded with Node's require(), so any JavaScript in the chosen config file executes, not just static configuration data.

Skill content
const configPath = args[args.indexOf('--config') + 1] || path.join(__dirname, 'campaign.config.js');
const config = require(path.resolve(configPath));
Recommendation

Only run trusted config files, consider switching to JSON or another non-executable config format, and warn users that .js config files are executable.

What this means

Lead email addresses, names, company names, and websites are sent to Instantly; misuse or the wrong file could expose contact data or create compliance issues.

Why it was flagged

The script reads a local leads file and uploads contact fields to the stated Instantly API. This is central to the skill, but it is a sensitive provider data flow.

Skill content
const leadsRaw = JSON.parse(fs.readFileSync(leadsPath, 'utf8')); ... await instantly('POST', '/leads', { campaign_id: campaignId, email: lead.email, first_name: lead.firstName || lead.first_name || 'there', ... });
Recommendation

Use only authorized lead lists, minimize fields to what is needed, confirm the destination account, and review privacy/compliance obligations before import.