> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useorbitcrm.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

![Instantly](https://mintcdn.com/orbitai-d647f397/2soOuUHtT7LpqUg0/_images/integrations/instantly.svg?fit=max\&auto=format\&n=2soOuUHtT7LpqUg0\&q=85\&s=c2b5e30b519758b7ecaece52bf0e00fa)

> [!NOTE]
>
> This integration requires a **Pro** plan.

[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:

> [card] Instantly Lookup
>
> 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. It also checks whether anyone else at the lead's company domain is in a campaign (`instantly_domain_found`).

> [card] Instantly
>
> 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.

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

**1. Log in to Instantly**

Go to [app.instantly.ai](https://app.instantly.ai) and sign in.

**2. Open API Keys**

Go to **Settings → Integrations → API Keys**.

**3. 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.

**4. Copy the key**

Copy the generated key. Instantly only shows it once.

> [!NOTE]
>
> 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.

## Step 2: Connect Instantly in OrbitForms

**1. Go to Integrations**

From your dashboard, click **Integrations** in the left sidebar.

**2. Find Instantly**

Search for "Instantly" and click the card.

**3. 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 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.

**1. Add the step**

In a workflow, click **+**, open **Enrich Data**, and pick **Instantly Lookup**.

**2. Choose the email field**

Leave it on **Auto-detect** for form email fields and meeting attendees, or pick the field explicitly.

**3. Optionally scope to a campaign**

Pick a campaign to only match leads in that campaign. Leave as **Any** to match across the workspace.

**4. Company domain match (on by default)**

**Also match the company domain** checks whether anyone else at the lead's email domain (for example `acme.com`) is in a campaign or list, even when the person who booked isn't a lead themselves. The result lands in `instantly_domain_*` fields. Personal mailboxes such as Gmail or Outlook.com are skipped, so a Gmail booker never matches every Gmail lead.

**5. Branch on the result**

Add a **Filter** after it with **Instantly: lead or company found** (`instantly_any_found`) is `true`. That passes when the person is in a campaign *or* someone else at their company is. Use `instantly_found` (the person themself) or `instantly_domain_found` (a colleague) when you want to treat those cases differently, or route by `instantly_match_type` / `instantly_campaign_name`.

Fields the lookup adds:

| Field | Meaning |
| - | - |
| `instantly_any_found` | `true` if the person **or** anyone at their company is a lead in Instantly. The simplest thing to filter on |
| `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 |
| `instantly_match_type` | `email` (the lead is in Instantly), `domain` (only a colleague is), or `none` |

Company-domain fields (from every lead at the same email domain):

| Field | Meaning |
| - | - |
| `instantly_domain` | The domain that was checked, e.g. `acme.com` |
| `instantly_domain_found` | `true` if anyone **else** at that domain is a lead in Instantly (in the scoped campaign, if one is selected). The person being looked up is never counted here |
| `instantly_domain_match_count` | How many other leads share the domain |
| `instantly_domain_company_name` | Company name on those leads |
| `instantly_domain_campaign_name`, `instantly_domain_campaign_id` | Campaign of the colleague who reached the best interest status |
| `instantly_domain_campaign_names`, `instantly_domain_campaign_count` | Every campaign the company appears in |
| `instantly_domain_interest_status` | The most positive interest status anyone at the company reached (Won beats Meeting Booked beats Interested, and so on) |
| `instantly_domain_opened_email`, `instantly_domain_clicked_email`, `instantly_domain_replied` | `true` if anyone at the company did it |
| `instantly_domain_last_contact_at` | Last email sent to anyone at the company |
| `instantly_domain_is_free_email` | `true` when the check was skipped because the email is a personal mailbox |
| `instantly_domain_error` | Set if the domain check failed; the step still succeeds |

> [!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]
>
> **Company-level attribution:** a booking from `cfo@acme.com` while your campaign is emailing `vp-sales@acme.com` shows up as `instantly_found` = `false` but `instantly_domain_found` = `true`. Filter on `instantly_match_type` is `domain` to alert sales that outbound to that account is working even though a different person converted.

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

**1. Add the step**

Click **+**, open **Send Data**, and pick **Instantly**.

**2. 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.

**3. 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).

**4. Add to campaign: pick the campaign**

Select the campaign and duplicate handling (skip if already in campaign or workspace, verify email on import).

**5. Map the Email field (required)**

Map the field that holds the lead's email to **Email**. For meeting triggers this is usually `attendee_email`.

**6. 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}}`.

**7. Save and activate**

Save the workflow and toggle it to **Active**.

> [!TIP]
>
> **Example: meeting booked** — Meeting Booked → Instantly Lookup → Filter (`instantly_found` is true) → Instantly (Update lead: Meeting Booked, custom variable `meeting_time`).

> [!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]
>
> **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").

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

> [accordion] 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] 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. If a colleague is in Instantly but not this person, `instantly_domain_found` will be `true` instead.

> [accordion] instantly\_domain\_found is false for a company I'm emailing
>
> The domain match compares the lead's email domain to the email domain, company domain, and website of leads in Instantly, exactly (`acme.co` never matches `acme.com`). Personal mailboxes are skipped (`instantly_domain_is_free_email` is `true`). Newly added leads can take a few seconds to become searchable in Instantly. If `instantly_domain_error` is set, the key is likely missing the `leads:read` scope. Very large companies are summarised from the first few hundred matching leads.

> [accordion] 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] "No email found" 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] Instantly rejected the API key (401)
>
> The key was revoked or regenerated in Instantly. Disconnect and reconnect with a new key.

> [accordion] Missing scope (403)
>
> Create a new key in Instantly with `campaigns:read`, `leads:read`, `leads:update`, and `leads:create`, then reconnect.

> [accordion] Workspace has no active paid plan (402)
>
> The Instantly API requires an active paid Instantly plan.

> [accordion] 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.

## Resources

> [card] [Instantly API v2 Reference](https://developer.instantly.ai/api/v2)
>
> Developer documentation

> [card] [Instantly Help Center](https://help.instantly.ai)
>
> Setup guides and FAQs


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.