> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitforms.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Instantly Integration

> Sync form and meeting events to your Instantly campaigns

<img src="https://mintcdn.com/orbitai-d647f397/2soOuUHtT7LpqUg0/_images/integrations/instantly.svg?fit=max&auto=format&n=2soOuUHtT7LpqUg0&q=85&s=c2b5e30b519758b7ecaece52bf0e00fa" alt="Instantly" width="56" height="56" data-path="_images/integrations/instantly.svg" />

<Note>This integration requires a **Pro** plan.</Note>

[Visit Instantly](https://instantly.ai)

## Overview

Instantly is a cold-email platform for running multi-step outreach campaigns. The OrbitForms integration closes the loop on that outreach: when someone you emailed from a campaign fills out a form, books a meeting, or gets a call outcome, OrbitForms can tell Instantly what happened.

Two workflow steps do the work:

<CardGroup cols={2}>
  <Card title="Instantly Lookup" icon="magnifying-glass">
    An **Enrich Data** step. Finds the lead in your workspace and adds fields like `instantly_found`, `instantly_campaign_name`, `instantly_interest_status`, and `instantly_clicked_email` for the rest of the workflow.
  </Card>

  <Card title="Instantly" icon="paper-plane">
    A **Send Data** step. **Update lead** sets their interest status (Interested, Meeting Booked, No Show…) and writes details back as custom variables. **Add to campaign** adds a new lead to a campaign.
  </Card>
</CardGroup>

Triggers you can use:

* A form is submitted (or abandoned with an email captured)
* A meeting is booked on one of your scheduling pages
* A meeting outcome is set (for example "No Show" or "Live Call")

## Step 1: Create an Instantly API Key

<Steps>
  <Step title="Log in to Instantly">
    Go to [app.instantly.ai](https://app.instantly.ai) and sign in.
  </Step>

  <Step title="Open API Keys">
    Go to **Settings → Integrations → API Keys**.
  </Step>

  <Step title="Create a key">
    Click **Create API Key**, name it "OrbitForms", and give it the `campaigns:read`, `leads:read`, `leads:update`, and `leads:create` scopes. The `all:all` scope also works.
  </Step>

  <Step title="Copy the key">
    Copy the generated key. Instantly only shows it once.
  </Step>
</Steps>

<Info>
  Instantly API v2 keys are scoped. `campaigns:read` lists your campaigns, `leads:read` powers the lookup, `leads:update` sets status and custom variables, and `leads:create` adds leads to a campaign.
</Info>

## Step 2: Connect Instantly in OrbitForms

<Steps>
  <Step title="Go to Integrations">
    From your dashboard, click **Integrations** in the left sidebar.
  </Step>

  <Step title="Find Instantly">
    Search for "Instantly" and click the card.
  </Step>

  <Step title="Paste your API key">
    Paste the key into the **API Key** field and click **Connect Instantly**. OrbitForms verifies the key against your workspace before saving it.
  </Step>
</Steps>

## Step 3: Look up the lead (Instantly Lookup)

Add this step when you want to know whether a lead came from an Instantly campaign before doing anything else.

<Steps>
  <Step title="Add the step">
    In a workflow, click **+**, open **Enrich Data**, and pick **Instantly Lookup**.
  </Step>

  <Step title="Choose the email field">
    Leave it on **Auto-detect** for form email fields and meeting attendees, or pick the field explicitly.
  </Step>

  <Step title="Optionally scope to a campaign">
    Pick a campaign to only match leads in that campaign. Leave as **Any** to match across the workspace.
  </Step>

  <Step title="Branch on the result">
    Add a **Filter** or **Router** after it. For example, continue only when `instantly_found` is `true`, or route by `instantly_campaign_name`.
  </Step>
</Steps>

Fields the lookup adds:

| Field                                                                                                       | Meaning                                                                              |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `instantly_found`                                                                                           | `true` if the email is a lead in Instantly                                           |
| `instantly_campaign_name`, `instantly_campaign_id`                                                          | The campaign the lead is in                                                          |
| `instantly_interest_status`                                                                                 | Lead, Interested, Meeting Booked, Meeting Completed, Won, No Show, Not Interested, … |
| `instantly_lead_status`                                                                                     | Active, Paused, Completed, Bounced, Unsubscribed                                     |
| `instantly_opened_email`, `instantly_clicked_email`, `instantly_replied`                                    | Engagement flags                                                                     |
| `instantly_email_open_count`, `instantly_email_click_count`, `instantly_email_reply_count`                  | Counts                                                                               |
| `instantly_last_open_at`, `instantly_last_click_at`, `instantly_last_reply_at`, `instantly_last_contact_at` | Timestamps                                                                           |
| `instantly_match_count`                                                                                     | How many campaigns or lists contain this email                                       |

<Tip>
  **Attribution:** if `instantly_clicked_email` is `true` and the lead just submitted a form, they clicked a campaign email and then converted. You can put `instantly_campaign_name` in a Slack alert so sales sees where the lead came from.
</Tip>

## Step 4: Tell Instantly what happened (Instantly step)

<Steps>
  <Step title="Add the step">
    Click **+**, open **Send Data**, and pick **Instantly**.
  </Step>

  <Step title="Choose the action">
    **Update lead** finds the lead by email and updates them. **Add to campaign** creates a new lead in the campaign you choose.
  </Step>

  <Step title="Update lead: set the interest status">
    Pick a status such as **Meeting Booked**, **Meeting Completed**, **No Show**, or **Interested**. Setting a status stops the lead's sequence in Instantly. Choose whether to fail or skip the step when the email isn't in Instantly (skip is the default).
  </Step>

  <Step title="Add to campaign: pick the campaign">
    Select the campaign and duplicate handling (skip if already in campaign or workspace, verify email on import).
  </Step>

  <Step title="Map the Email field (required)">
    Map the field that holds the lead's email to **Email**. For meeting triggers this is usually `attendee_email`.
  </Step>

  <Step title="Map other fields (optional)">
    Map first name, last name (or a single **Full Name** field, which is split for you), company, phone, website, job title, and personalization. Anything else can be written as a **custom variable**, which you can reference in Instantly sequences as `{{variable_name}}`.
  </Step>

  <Step title="Save and activate">
    Save the workflow and toggle it to **Active**.
  </Step>
</Steps>

<Tip>
  **Example: meeting booked** — Meeting Booked → Instantly Lookup → Filter (`instantly_found` is true) → Instantly (Update lead: Meeting Booked, custom variable `meeting_time`).
</Tip>

<Tip>
  **Example: no-show follow-up** — Meeting Outcome → Filter (outcome is "No Show") → Instantly (Update lead: No Show) → Instantly (Add to campaign: "No-show re-engagement").
</Tip>

<Tip>
  **Example: inbound from a campaign** — Form Submission → Instantly Lookup → Filter (`instantly_found` is true) → Instantly (Update lead: Interested) → Slack ("{{first_name}} from campaign {{instantly_campaign_name}} just filled out the demo form").
</Tip>

## Custom Variables

Any field you map to a **Custom Variable** destination is written to the lead's custom variables in Instantly. Instantly adds new variables to the campaign automatically so every lead in that campaign can use them.

Values must be text, numbers, or true/false. Lists are joined with commas.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Campaign list is empty">
    Check that the API key has the `campaigns:read` scope and that your workspace has at least one campaign. Click the refresh button in the node to reload.
  </Accordion>

  <Accordion title="Lookup always returns instantly_found = false">
    The lookup matches on exact email. Check the email field it's reading (Auto-detect uses form email fields and `attendee_email`), and that the key has `leads:read`. If you scoped it to a campaign, make sure the lead is in that campaign.
  </Accordion>

  <Accordion title="Update lead step is skipped">
    The email isn't a lead in Instantly (or not in the selected campaign). That's expected for leads who didn't come from a campaign. Turn on **Fail the step if the lead isn't in Instantly** if you want the run to error instead.
  </Accordion>

  <Accordion title="&#x22;No email found&#x22; error in the run history">
    Instantly needs an email to identify the lead. Map the field that contains the email to **Email**. For meeting triggers use `attendee_email`.
  </Accordion>

  <Accordion title="Instantly rejected the API key (401)">
    The key was revoked or regenerated in Instantly. Disconnect and reconnect with a new key.
  </Accordion>

  <Accordion title="Missing scope (403)">
    Create a new key in Instantly with `campaigns:read`, `leads:read`, `leads:update`, and `leads:create`, then reconnect.
  </Accordion>

  <Accordion title="Workspace has no active paid plan (402)">
    The Instantly API requires an active paid Instantly plan.
  </Accordion>

  <Accordion title="Lead did not appear in the campaign">
    If **Skip if already in campaign** or **Skip if already in workspace** is on and the email already exists, Instantly does not add it again. Turn the option off if you want duplicates.
  </Accordion>
</AccordionGroup>

## Resources

<CardGroup cols={2}>
  <Card title="Instantly API v2 Reference" icon="code" href="https://developer.instantly.ai/api/v2">
    Developer documentation
  </Card>

  <Card title="Instantly Help Center" icon="book" href="https://help.instantly.ai">
    Setup guides and FAQs
  </Card>
</CardGroup>
