Instantly Integration
The Instantly integration provides access to the Instantly.ai API for managing cold email campaigns, sending accounts, and leads.Setup
You must configure Instantly before using it in your code. Only configured integrations are available to your agent.
1
Open Integrations panel
In your spreadsheet, click Integrations in the left panel (or visit
orangeslice.com/spreadsheets/<spreadsheet_id>/edits?panel=integrations)2
Configure Instantly
Select Instantly and enter your Instantly API key
3
Use in your code
Once configured, access Instantly via
integrations.instantlyCampaigns
List Campaigns
Copy
const response = await integrations.instantly.listCampaigns({
limit: 50,
search: 'outbound'
});
for (const campaign of response.items) {
console.log(`${campaign.name}: Status ${campaign.status}`);
}
// Pagination
if (response.next_starting_after) {
const nextPage = await integrations.instantly.listCampaigns({
starting_after: response.next_starting_after
});
}
Get Campaign
Copy
const campaign = await integrations.instantly.getCampaign('campaign-id');
console.log('Name:', campaign.name);
console.log('Status:', campaign.status);
console.log('Daily Limit:', campaign.daily_limit);
console.log('Sequences:', campaign.sequences);
Create Campaign
Copy
const campaign = await integrations.instantly.createCampaign({
name: 'Q4 Outreach Campaign',
campaign_schedule: {
start_date: '2024-10-01',
end_date: '2024-12-31',
schedules: [
{
name: 'Business Hours',
timing: { from: '09:00', to: '17:00' },
days: { 1: true, 2: true, 3: true, 4: true, 5: true },
timezone: 'America/New_York'
}
]
},
sequences: [
{
steps: [
{
type: 'email',
delay: 0,
variants: [
{
subject: 'Quick question about {{company}}',
body: 'Hi {{firstName}},\n\nI noticed that...'
}
]
},
{
type: 'email',
delay: 3, // 3 days after previous
variants: [
{
subject: 'Following up',
body: 'Hi {{firstName}},\n\nJust wanted to follow up...'
}
]
}
]
}
],
daily_limit: 50,
stop_on_reply: true,
link_tracking: true,
open_tracking: true
});
Activate Campaign
Copy
const campaign = await integrations.instantly.activateCampaign('campaign-id');
console.log('Campaign is now active');
Pause Campaign
Copy
const campaign = await integrations.instantly.pauseCampaign('campaign-id');
console.log('Campaign is now paused');
Get Campaign Analytics
Copy
// Single campaign
const analytics = await integrations.instantly.getCampaignAnalytics({
id: 'campaign-id'
});
// Multiple campaigns
const analyticsMultiple = await integrations.instantly.getCampaignAnalytics({
ids: ['campaign-1', 'campaign-2'],
start_date: '2024-01-01',
end_date: '2024-12-31'
});
for (const stat of analyticsMultiple) {
console.log(`${stat.campaign_name}:`);
console.log(` Leads: ${stat.leads_count}`);
console.log(` Contacted: ${stat.contacted_count}`);
console.log(` Opens: ${stat.open_count}`);
console.log(` Replies: ${stat.reply_count}`);
console.log(` Bounced: ${stat.bounced_count}`);
}
Accounts
List Accounts
Copy
const response = await integrations.instantly.listAccounts({
limit: 100,
status: 1, // Active accounts
search: 'gmail'
});
for (const account of response.items) {
console.log(`${account.email}:`);
console.log(` Status: ${account.status}`);
console.log(` Warmup: ${account.warmup_status}`);
console.log(` Daily Limit: ${account.daily_limit}`);
}
Get Account
Copy
const account = await integrations.instantly.getAccount('[email protected]');
console.log('Email:', account.email);
console.log('Name:', `${account.first_name} ${account.last_name}`);
console.log('Provider:', account.provider_code);
console.log('Warmup Score:', account.stat_warmup_score);
Account Status Codes
| Code | Meaning |
|---|---|
1 | Active |
2 | Paused |
-1 | Error |
-2 | Disconnected |
-3 | Disabled |
Warmup Status Codes
| Code | Meaning |
|---|---|
0 | Not started |
1 | Active |
-1 | Paused |
-2 | Disabled |
-3 | Error |
Leads
List Leads
Copy
const response = await integrations.instantly.listLeads({
campaign: 'campaign-id',
limit: 100,
in_campaign: true
});
for (const lead of response.items) {
console.log(`${lead.email}:`);
console.log(` Name: ${lead.first_name} ${lead.last_name}`);
console.log(` Status: ${lead.status}`);
console.log(` Opens: ${lead.email_open_count}`);
console.log(` Replies: ${lead.email_reply_count}`);
}
Advanced Lead Filtering
Copy
const response = await integrations.instantly.listLeads({
campaign: 'campaign-id',
queries: [
{
actionType: 'reply',
values: {
'occurrence-count': { condition: 'more', count: 0 }
}
},
{
actionType: 'email-open',
values: {
'occurrence-days': 7
}
}
]
});
Get Lead
Copy
const lead = await integrations.instantly.getLead('lead-id');
console.log('Email:', lead.email);
console.log('Company:', lead.company_name);
console.log('Interest Status:', lead.lt_interest_status);
Create Lead
Copy
const lead = await integrations.instantly.createLead({
campaign: 'campaign-id',
email: '[email protected]',
first_name: 'John',
last_name: 'Doe',
company_name: 'Acme Corp',
website: 'https://acme.com',
phone: '+1-555-0123',
custom_variables: {
industry: 'Technology',
employee_count: '500'
},
skip_if_in_campaign: true
});
Update Lead
Copy
const lead = await integrations.instantly.updateLead('lead-id', {
first_name: 'Jonathan',
lt_interest_status: 1, // Interested
custom_variables: {
notes: 'Requested demo'
}
});
Delete Lead
Copy
await integrations.instantly.deleteLead('lead-id');
Bulk Add Leads
Copy
const result = await integrations.instantly.bulkAddLeads({
campaign_id: 'campaign-id',
leads: [
{
email: '[email protected]',
first_name: 'John',
last_name: 'Doe',
company_name: 'Company A'
},
{
email: '[email protected]',
first_name: 'Jane',
last_name: 'Smith',
company_name: 'Company B'
}
],
skip_if_in_workspace: true,
skip_if_in_campaign: true,
verify_leads_on_import: true
});
console.log(`Uploaded: ${result.leads_uploaded}`);
console.log(`Duplicates: ${result.duplicated_leads}`);
console.log(`Invalid emails: ${result.invalid_email_count}`);
console.log(`In blocklist: ${result.in_blocklist}`);
Update Lead Interest Status
Copy
await integrations.instantly.updateLeadInterestStatus({
lead_email: '[email protected]',
campaign_id: 'campaign-id',
interest_value: 1 // Interested
});
Lead Status Codes
| Code | Meaning |
|---|---|
1 | Active |
2 | Completed |
3 | Paused |
-1 | Bounced |
-2 | Unsubscribed |
-3 | Failed |
Lead Interest Status Codes
| Code | Meaning |
|---|---|
0 | Not set |
1 | Interested |
2 | Maybe interested |
3 | Not interested |
4 | Wrong person |
-1 | Meeting booked |
-2 | Meeting completed |
-3 | Closed/Won |
Types Reference
InstantlyCampaign
Copy
interface InstantlyCampaign {
id: string;
name: string;
status: InstantlyCampaignStatus;
campaign_schedule: InstantlyCampaignSchedule;
sequences?: InstantlySequence[];
timestamp_created: string;
timestamp_updated: string;
email_gap?: number | null;
daily_limit?: number | null;
stop_on_reply?: boolean | null;
link_tracking?: boolean | null;
open_tracking?: boolean | null;
email_list?: string[];
// ... additional fields
}
InstantlyLead
Copy
interface InstantlyLead {
id: string;
email?: string | null;
first_name?: string | null;
last_name?: string | null;
company_name?: string | null;
phone?: string | null;
website?: string | null;
status: InstantlyLeadStatus;
email_open_count: number;
email_reply_count: number;
email_click_count: number;
lt_interest_status?: InstantlyLeadInterestStatus;
payload?: Record<string, string | number | boolean | null> | null;
timestamp_created: string;
timestamp_updated: string;
// ... additional fields
}
InstantlyCampaignSchedule
Copy
interface InstantlyCampaignSchedule {
start_date?: string;
end_date?: string;
schedules: InstantlyScheduleItem[];
}
interface InstantlyScheduleItem {
name: string;
timing: { from: string; to: string };
days: { 0?: boolean; 1?: boolean; 2?: boolean; 3?: boolean; 4?: boolean; 5?: boolean; 6?: boolean };
timezone: InstantlyTimezone;
}
InstantlySequence
Copy
interface InstantlySequence {
steps: InstantlySequenceStep[];
}
interface InstantlySequenceStep {
type: 'email';
delay: number;
variants: InstantlyEmailVariant[];
}
interface InstantlyEmailVariant {
subject: string;
body: string;
v_disabled?: boolean;
}
InstantlyCampaignAnalytics
Copy
interface InstantlyCampaignAnalytics {
campaign_name: string;
campaign_id: string;
campaign_status: number;
campaign_is_evergreen: boolean;
leads_count: number;
contacted_count: number;
open_count: number;
reply_count: number;
link_click_count: number;
bounced_count: number;
unsubscribed_count: number;
completed_count: number;
emails_sent_count: number;
new_leads_contacted_count: number;
total_opportunities: number;
total_opportunity_value: number;
}