Concepts

Campaigns

How GTM Engine generates personalized outbound content and sends through GTM Sending, LinkedIn, or external sequencers.

A campaign in GTM Engine is a reusable, AI-driven outbound sequence. Given an account and a contact, a campaign researches them, produces personalized multi-step copy, writes that copy back onto the contact's fields, and can send through GTM Sending, a direct connected mailbox, LinkedIn, or hand the contact off to Instantly.

Under the hood, a campaign is a normal workflow tagged for outreach, so it benefits from the same run history, versioning, and variable model as any other workflow.

What a campaign produces

A campaign generates copy for one or more steps, each on a channel:

  • Email (subject + body)
  • LinkedIn DM
  • LinkedIn InMail
  • Call script
  • Voicemail

Generated content is written to the contact's fields, prefixed by the campaign name (for example outreach_campaign, <campaign>_email_subject_1, <campaign>_email_body_1). Because field keys are prefixed by the campaign name, campaign names must be unique.

Delivery modes

When you build a campaign you choose how it's delivered:

  • Manual — GTM Engine only generates content and writes it to contact fields. You copy or map those values into whatever sequencer or CRM you already use. Available on all plans.
  • GTM Sending — GTM Engine sends each Live Campaign step natively from selected warmed outbound mailboxes.
  • Direct connected mailbox — GTM Engine sends from selected users' primary Gmail mailboxes or send-enabled Microsoft 365 mailboxes for inbound or follow-up use cases. These sends default to 30 emails per mailbox per day; users can lower the limit, raise it, or turn it off after acknowledging the reputation risk.
  • LinkedIn sender — for LinkedIn connection requests, DMs, and InMails, GTM Engine uses the LinkedIn profile owned by the same user as the selected mailbox for that contact. The campaign Setup step shows LinkedIn connection status for each GTM Sending or Direct connected mailbox owner, and warns when selected senders are missing LinkedIn for automated LinkedIn steps. Connection-request steps can send no note, a templated note, or an AI-generated per-contact note, and first check whether the contact is already connected; connected contacts continue to the next step without another request. Connection-request steps can also include an optional accepted-connection follow-up message that waits a configurable delay after the invite is accepted (with an optional Give up after N days expiry window from when the invite was sent) before sending a LinkedIn DM; if the contact was already connected when the invite step ran, or accepts after the expiry window, the follow-up is skipped. When a sent invite is accepted, the sender gets an in-app notification and the campaign Overview marks the step accepted. LinkedIn DM and InMail steps require a contact LinkedIn URL; contacts without one are skipped with a clear missing-LinkedIn-URL reason. LinkedIn DM steps check the connection before sending; if the invite is still pending or the contact is otherwise not connected, the DM step is skipped and shown as not connected unless Send as InMail if not connected and credits are available is enabled on the step. When InMail fallback is enabled (with an optional subject line template or AI-generated subject), GTM Engine checks the sender's InMail balance and sends the message as an InMail, or skips with an insufficient-balance reason if no credits are available. LinkedIn InMail steps likewise check available InMail credits before sending and skip with an insufficient-balance reason when the sender has no usable premium, recruiter, or Sales Navigator credits.
  • Instantly — in addition to generating content, the campaign adds each contact to a chosen Instantly campaign as a lead. AI-generated steps pass generated fields as custom variables; templated steps pass the full rendered template as a custom variable and update the matched Instantly step to reference it. Requires a connected Instantly integration and the organization's active integrations SKU entitlement.

Instantly delivery sends inside Instantly. GTM Sending and Direct connected mailbox delivery send through GTM Engine's native campaign engine.

Building a campaign

Campaigns are created from the Campaigns area (under Campaign Engine) with a short wizard:

  1. Setup — name the campaign, choose the type and delivery mode, configure enrichment, and choose native sending settings. GTM Sending and Direct connected mailbox campaigns show each mailbox owner's LinkedIn connection status so you can tell which senders fully support multi-channel LinkedIn steps; if an automated LinkedIn step is present and a selected sender is missing LinkedIn, the builder warns you and links to Profile settings. GTM Sending and Direct connected mailbox campaigns can optionally require Review campaign content before sending.
  2. Build — define the steps, channels, per-step guidance, content mode, prompt instructions, and generation model. You can add steps at the end or between existing steps, then reorder them from the timeline until contacts are enrolled. Once contacts have enrolled, structural edits are locked so people already mid-sequence keep their original step plan; active campaigns with no enrollments are turned off while structural edits are made and must be turned on again when ready. The builder can analyze and repair campaign instructions before testing, and it asks you to regenerate instructions if the step structure changes after instructions were generated.
  3. Test — dry-run against a test account/contact, review the generated output, provide feedback, and apply all feedback in one refinement pass. Steps can be marked “This looks good” so the prompt rewrite avoids changing them.

Campaigns can be built around a LinkedIn connection request with a templated or AI-generated connection note; they do not need a separate message step just to save or test.

When a LinkedIn message or connection request is configured to create a manual task, the task is labeled as a LinkedIn action, includes the drafted message/note, shows connection status when available, and opens a LinkedIn-specific action modal instead of the email composer.

You can save a Live Campaign from any wizard step. If you save from Build after changing the sequence structure or prompts, GTM Engine warns that you should test and review the content first, then lets you either save anyway or jump to Test.

Drafts and publishing

For native delivery modes (GTM Sending and Direct connected mailbox), Save creates a draft version. The Configuration header shows the current saved version in a version dropdown button, marks it as unpublished when it is newer than the published version, and marks the published version inside the dropdown. You can send provider-backed test emails from the saved draft before publishing. Use Save draft when there are unsaved edits, then Publish changes when that saved draft should become the version used for live campaign sends. Draft saves do not change the live/native campaign sender until they are published. Publishing and sending state are separate: Published controls which saved version sends, while the Sending On/Off toggle controls whether the campaign can enroll contacts and send. If you publish changes while the campaign is off, GTM Engine asks whether you want to turn it on.

Email steps support three modes: Full AI generates a unique subject and email-safe HTML body at send time, Plain Text stores a Liquid-enabled raw text body and sends true text/plain email through native delivery, and HTML stores a Liquid-enabled email-safe HTML body that can be pasted, designed, or drafted with Genie. Each email step can optionally append the actual sender's saved profile signature, or a custom HTML/plain-text signature for that step. Custom signatures support Liquid variables such as {{ user.name }}, {{ user.email }}, {{ contact.first_name }}, and {{ account.name }}. Signatures are added at send time after the generated or templated body and before unsubscribe/tracking handling. When editing a live campaign step, Genie can update the active email body directly and can also update surrounding campaign fields such as fixed subject templates, campaign context, LinkedIn DM/InMail templates, connection-note templates, and email signature settings. Templated LinkedIn message and connection-note fields include the same Insert variable picker as email templates. Plain Text sends do not use HTML-only open pixels or click rewriting.

Email attachments

With GTM Sending or Direct connected mailbox delivery, any automated email step can include up to 5 attachments (10 MB total per email). Pick files from the Content Library, or upload a new file and it's saved to the Content Library and attached in one go. Each email gets the latest version of the file when it sends, and test sends include attachments too. If someone deletes an attached file from the Content Library, that step fails to send instead of going out without the file.

Attachments on cold first-touch emails often hurt inbox placement. For cold outbound, it's usually better to link to the asset, or to attach files only on follow-up steps. Instantly and manual delivery don't support attachments.

Reusable campaign email templates

Reusable campaign email templates live in the Email templates library at /campaigns/email-templates. Templates can be plain text or HTML, use Liquid variables, be tagged/foldered, duplicated, archived, previewed with real contact data, and edited with Genie. For HTML templates, Genie can design email-safe HTML from scratch, adapt template code you already have, or recreate a template from an attached screenshot. Template authors can upload or select Content Library images and insert hosted image URLs into HTML templates.

Native campaign message steps can use Template library mode to choose candidate templates directly, by tag, or both. At preview/send time GTM Engine evaluates the contact, account, recent campaign emails, and activity, selects the best active template from the candidate set, renders Liquid/spintax, and stores the selected template on the step execution so reviews and retries stay stable.

Scheduled campaigns can also reuse the same library with Apply template in the content step. This copies one active template's subject and body into the scheduled campaign draft as an editable starting point, which is useful for recurring newsletters or announcements that share a consistent layout.

Templated subjects and bodies also support deterministic spintax after Liquid renders. Use {option one|option two} to vary copy per recipient/step while keeping the same contact's preview and send output stable. Campaign editors highlight spintax inline while leaving it editable, so you can spot and adjust variation syntax without opening a separate preview. See Personalize Campaigns with Liquid and Spintax for campaign-specific examples.

Genie can help operate the builder too: it can switch between Setup, Build, and Test, select a sequence step, choose GTM Sending or direct-connected mailboxes, adjust per-step wait timing/cadence, change an email step between Full AI, Plain Text, and HTML, and configure whether that step appends a profile or custom signature before drafting or refining the content.

Draft campaigns with no live enrollment or performance history open directly in the builder. The read-only Overview tab appears once a campaign is live or has enrollment/performance history.

Enrollment

When a campaign runs for a contact, that contact is enrolled — recorded in a vendor-agnostic enrollment table. Enrollment happens as a side effect of running the campaign:

  • For Instantly delivery, the contact is recorded as enrolled after it's added to the Instantly campaign.
  • For Manual delivery, bulk enrollment records a manual enrollment so you still get a roster of who's been processed.
  • For native delivery (GTM Sending or Direct connected mailbox) with review-before-send enabled, enrollment generates each contact's draft emails and places them in the campaign's review queue. The review queue uses the same per-contact step timeline as the enrolled-contact roster, but every editable draft step can be opened and changed before approval. Approving a contact starts that contact's campaign sends.

Enrollment counts and (for Instantly) live performance metrics are surfaced on the campaign, contact, and account views. The campaign Overview's summary counts can jump to the matching enrolled-contact filter. The enrolled contacts list defaults to currently enrolled contacts, can be filtered to scheduled, completed, invalid-email, or all contacts, can be narrowed by step progress (on step N, on step N or later, or before step N — completed contacts count as on the last step) or by skipped-step reason (such as missing email or missing LinkedIn URL), supports selecting contacts (or everything matching the filters) to re-enroll them in the same campaign as a fresh attempt or enroll them in another campaign, and shows each contact's associated account plus current or next step. Completed contacts show why the sequence stopped, including positive replies, negative replies, manual removals, unsubscribes, bounces, or normal completion with no reply. Expand a contact to see a Build-style timeline with branded channel colors, logos, scheduled dates, message previews rendered like email or LinkedIn messages, LinkedIn step outcomes such as accepted, already connected, pending invite, missing LinkedIn URL, insufficient InMail balance, or skipped because the contact is not connected, and prominent skipped-state labels for future steps that will not send after a reply or other terminal stop. Review-before-send contacts stay in the Review drafts panel until approved, then move into the enrolled roster; they also appear in a separate Awaiting review count instead of Completed. Contacts skipped because email verification found no reachable email are recorded and surfaced in Invalid email metrics/filtering, where campaign managers can retry enrichment, manually add or replace an email with inline validation, ask Genie to help find a better address, and re-enroll contacts once a valid email is saved. If the contact is still active in the campaign (for example, its LinkedIn steps already ran but its email steps were skipped for a missing email), recovery picks up just those skipped email steps instead of restarting the sequence, so nothing that already ran is repeated. Native campaign email sends, LinkedIn message sends, LinkedIn connection requests, and campaign replies are also recorded on the contact's Activity Timeline. Campaign managers can remove active contacts from the campaign Overview or from the contact's Campaigns tab; completed contacts do not show a remove action. Contacts with prior completed or failed campaign history trigger a warning during manual enrollment; users can explicitly enroll them again to start a repeat attempt.

After any contact is enrolled, the campaign's step structure is locked so existing recipients keep the sequence plan they started on. You can still edit non-structural content such as prompts, subjects, and message bodies. If a live campaign has no enrollments yet, structural edits are allowed, but saving them turns the campaign off until you turn it on again.

When multiple contacts are enrolled or approved in the same batch, native GTM Engine delivery staggers their first sends by about five minutes so the mailbox does not fire every email at once.

Scheduling a future start

When you enroll one or more contacts manually — from a campaign's roster, or via Enroll in Campaign on the Accounts/Contacts record pages — you can choose Now or Schedule a future start date and time. Scheduling defers the entire enrollment: the selected contacts are enrolled and the sequence begins on that date — useful for "connect with me in September" — rather than starting immediately.

There's no limit on how many contacts or accounts you can bulk-enroll at once. Large lists (over 500 contacts or 50 accounts) show a warning that processing may take a while, and you'll need to acknowledge it before enrolling.

Scheduled enrollments are saved as soon as you create them and appear in a Scheduled section on the campaign's enrollment roster, showing each contact and its start time. Each pending scheduled enrollment has a Cancel action so you can call it off before it starts. Scheduled contacts don't appear in the main enrolled list until the start date arrives, at which point the sequence begins.

Genie can also enroll a contact now or schedule a future start when it uses the Enroll Contact in Campaign tool. This schedules that contact into the native mirror of a Live Campaign; it is different from a Scheduled Campaign, which is a one-time broadcast to an audience where GTM Engine queues one send per recipient and spaces delivery about 1–2 seconds apart after the scheduled send time.

Enrolling from record pages

Beyond the campaign roster, you can enroll into a campaign directly from the Accounts and Contacts record pages — both the list pages (via the Actions menu, using your current selection or all records) and each record's detail page (whose overflow menu is labeled Actions). Accounts open the bulk-enrollment planner (pick a campaign and target personas, then enroll each account's contacts); contacts open a campaign picker where you search and select a campaign and enroll now or on a scheduled date.

You can also choose Campaign routing instead of one fixed campaign. Routing lets you pick all live campaigns or a selected subset, choose a fallback campaign, and either review AI assignments before enrolling or enroll immediately. GTM Engine uses each campaign's name and description plus contact/account context, such as title and company, to choose the best campaign for every contact. If the match is uncertain, the contact goes to the fallback campaign.

Sending windows

Each campaign that sends natively (GTM Sending or Direct connected mailbox) can define a sending window — the days of the week it's allowed to send and a daily start/end time. Emails and automated LinkedIn sends only go out during that window. A step whose scheduled send lands outside the window (for example a multi-day delay that falls on a Saturday, or after business hours on a weekday) is automatically held and sent when the window next opens.

You set the sending window in the campaign's Setup step when creating it, and can change it afterward from the Sending window card on the campaign's Overview. Window times use the assigned sender user's timezone by default, then the organization timezone, then UTC; you can also choose a fixed timezone override for the campaign. If you don't set one, campaigns default to business hours (Monday–Friday, 08:00–18:00).

When a step is held, whether because it fell outside the window or because its mailbox hit its daily limit, the rest of that contact's steps move back by the same amount, so the spacing between steps stays the same and a follow-up never goes out before the email it follows.

Daily send limits

Daily send limits belong to the mailbox, not the campaign. Every campaign sending from the same mailbox (including a direct connected mailbox) draws from one shared daily count. Each campaign checks that shared count against its own limit. For example, if two campaigns share a direct connected mailbox and both are set to 30, the mailbox sends about 30 campaign emails a day in total, not 60. If one is set to 30 and the other to 40, the mailbox can send up to 40 a day: the 30-limit campaign stops once the mailbox reaches 30, and the 40-limit campaign keeps going. Campaigns are not guaranteed a share of the mailbox.

Daily counts reset at midnight UTC. Once a mailbox has used up its daily limit, any contact whose next email comes due moves to the start of the next sending day, along with the rest of that contact's steps. The enrolled-contacts roster flags these contacts with Daily send limit reached · moved to next send day, so you can see that the sending mailbox is at its limit, not that the campaign is stuck. To send more per day, raise the limit or spread contacts across more mailboxes.

If you switch a campaign to different mailboxes (or change its daily-limit settings), contacts that were moved to the next send day are re-checked right away: they're brought back to now, spaced out, and sent from the new mailboxes if those have room. Any that still can't send are moved to the next send day again. Turning a campaign off also gives up its place in each mailbox's queue of held sends, so the other campaigns on those mailboxes don't wait behind sends that will no longer go out.

Native Live campaigns can also opt into open and link-click tracking. Link-click tracking is off by default and only runs when you enable it for the campaign. Use Allow unsubscribes to include an unsubscribe link; when it is on, GTM Engine appends a footer automatically unless your email already includes {{ system.unsubscribe_url }}. Use Remove from campaign on reply to decide whether positive/negative replies should automatically stop future sends; it is on by default, but can be turned off for marketing-style campaigns.

Email thread replies

When a Live Campaign has more than one email step, each later email step can either start a new thread or reply to the previous email thread. Reply steps lock the subject line to Re: <previous subject> and use the previously sent email as reply context when the sending provider supports it.

Task steps and sticky senders

Live Campaign steps can send a message or create a task for the rep instead. LinkedIn DM/InMail message steps and Connect on LinkedIn action steps send from the LinkedIn profile owned by the same user as the selected sending mailbox for that contact. Automated LinkedIn sends are staggered more conservatively than email sends and are rescheduled later if LinkedIn/Unipile throttles them. Connect on LinkedIn steps support no note, a templated note, or an AI-generated per-contact note; if the contact is already connected, GTM Engine marks the step as skipped/already connected and moves on without sending another request. When a sent invite is accepted, the sender gets an in-app notification and the campaign Overview marks the step accepted. LinkedIn DM steps check the contact's connection status before sending; if the invite is still pending or the contact is otherwise not connected, the DM step is skipped and shown as not connected instead of attempting a send. If that mailbox user has not connected LinkedIn, or the contact has no LinkedIn URL, GTM Engine falls back to a task for the mailbox owner. Other task steps are related to the enrolled contact and can be assigned to the sending mailbox owner, or to the contact owner first and account owner second, falling back to the mailbox owner when the record owner is missing or orphaned. Assigned users receive a task notification.

For GTM Sending, each enrolled contact is also assigned a sticky sending mailbox. Later steps reuse the same mailbox whenever it remains eligible. If that mailbox is disabled or unavailable, GTM Engine falls back to another eligible mailbox owned by the same user, then to any eligible selected mailbox, and saves the new assignment for future steps.

Suppression list

Each campaign can have an optional suppression list — one or more contact audiences whose members are removed from the campaign after the recipient list is built. This is in addition to unsubscribes: use it to exclude competitors, contacts who are in an active deal cycle, or a saved report of people who have opted out.

Each suppression audience uses the same contacts query builder and saved-view picker as your campaign audiences — describe it in plain language and Genie materializes the filter, or add rule chips manually. If a suppression request mixes several independent OR exclusions, Genie recommends breaking it into smaller suppression audiences instead of forcing one unsafe query. A live "excluded" count updates as you edit.

  • Scheduled campaigns: configure it in the Audience step, alongside your recipient audiences.
  • Live campaigns: configure it in the Basics step when creating, and edit it afterward from the Suppression list card on the campaign's Overview.

Suppression is applied when contacts are enrolled (Live) or when the audience is resolved (Scheduled), and it is re-checked at each send step — so a contact who becomes suppressed partway through a sequence (for example they enter an active deal) stops receiving the remaining emails.

Enrichment

Each campaign has enrichment settings that prepare a contact before it's enrolled or sent to. Three options, all on by default:

  • Find email if missing — run email discovery when the contact has no address.
  • Validate email if present — verify an existing address; a hard-invalid result treats the contact as unreachable.
  • Re-enrich if stale — refresh contacts whose data is older than a threshold (default 60 days).

Campaigns with LinkedIn steps also offer Find LinkedIn URL if missing (off by default). When it's on, GTM Engine runs your Contact Enrichment workflow for contacts without a LinkedIn profile and waits for it to finish before enrolling them, so connect, interact, DM, and InMail steps have a profile to act on. Contacts that still have no LinkedIn URL skip their LinkedIn message steps.

Any contact still without a reachable email after finding/validating is skipped — no enrollment or send rows are created for it. You configure these settings in the campaign's Basics step when creating it, and can change them afterward from the Enrichment card on the campaign's Overview. They apply when contacts are enrolled (Live) and in the send fan-out (Scheduled). Enrichment is configured per campaign, so the bulk-enrollment planner no longer has its own enrichment options.

Replies (Inbox)

When a campaign sends natively from your own mailboxes (GTM Sending), from a direct connected mailbox, or from the mailbox owner's connected LinkedIn profile, replies come back into a unified Inbox (under Campaign Engine → Campaigns). The Inbox shows every reply alongside the contact who replied, the campaign it came from, and the channel it landed on. Direct connected mailbox replies are labeled as direct-connected campaign conversations and show the sender's primary mailbox. Email replies can be answered from the same mailbox; LinkedIn replies can be answered from the same LinkedIn chat thread. Email conversations remain filterable by mailbox and sending domain, and all conversations are filterable by owner, campaign, status, and unread. Unread replies show a badge on the Inbox sidebar item and a subtle pulse on Campaign Engine. If no replies are available yet, the Inbox explains the setup path and links to sending-domain/mailbox setup, campaign creation, or both depending on what is missing.

Each inbound reply is classified as Positive, Negative, or Out of office, with a short explanation shown in the thread and a matching activity on the contact's Activity Timeline. Positive and negative replies automatically remove the contact from the sequence when Remove from campaign on reply is on. If that setting is off, replies stay in the Inbox without ending the sequence, and the thread shows a Remove from campaign button so you can manually stop someone who asks to be removed. Out-of-office replies keep the contact enrolled and resume the remaining sequence after the return date in the email, or one week later if no date is included. Campaign Analytics breaks reply performance into total reply rate, positive reply rate, negative reply rate, and out-of-office false replies.

Unsubscribes are removed the same way. When a contact unsubscribes, the enrollment moves to an unsubscribed status, remaining steps are skipped, and an activity is recorded on the contact's timeline. Campaign Analytics shows the unsubscribe rate and total, and the Unsubscribed stat is clickable to see exactly who unsubscribed and when.

Credits

Campaigns consume credits for the content generation itself (an AI task) and for any enrichment triggered while building a bulk audience (for example email or LinkedIn enrichment). Handing a contact to Instantly does not itself consume GTM Engine credits — Instantly bears the sending cost. Bulk enrollment jobs are where this adds up fastest, since generation and enrichment run per contact. See Credits and usage for estimates.

See also

On this page