Guides

Build an outbound prospecting workflow

Find prospects, enrich them, generate personalized messaging, update records, and optionally enroll contacts in a campaign or sequence.

This guide builds a repeatable outbound workflow that finds prospects, enriches them, generates messaging, writes results back to GTM Engine, and optionally enrolls leads in a GTM Sending or Instantly-backed campaign.

What You'll Build

A workflow with this shape:

  1. Find matching accounts or contacts.
  2. Loop over the results.
  3. Enrich each record.
  4. Generate a personalized angle or sequence.
  5. Update GTM Engine fields.
  6. Optionally enroll the contact in a campaign or sequence.

When to Use This

Use this when your team wants a repeatable prospecting motion instead of manual list building and copywriting.

Good use cases:

  • Build a list of lookalike accounts.
  • Find contacts that match your ICP.
  • Generate account-specific outreach angles.
  • Write research and messaging back to the record.
  • Enroll qualified contacts in a campaign after review.

Estimated time: 30-45 minutes.

Concepts used: Workflows, Tasks, Variables, For Each.

Prerequisites

  • Clear ICP or reference account criteria.
  • Enrichment enabled.
  • Fields where you want to store generated messaging or research.
  • Optional: a campaign or sequence id if you want automatic enrollment.

1. Define Workflow Inputs

Create a new workflow and define inputs such as:

  • reference_account_id if you want to find similar accounts.
  • search_criteria if you want to describe the ICP directly.
  • max_results if you want callers to control list size.
  • campaign_id if you plan to enroll leads in a campaign or sequence.

Start with a small max_results value while testing.

2. Add Find Prospects

Add a Find Prospects task.

Common configurations:

  • Prospect type: accounts or contacts.
  • Search method: find similar, criteria-based, or product ICP-based depending on your workflow.
  • Max results: start small, such as 5 or 10.
  • Reference or criteria: use workflow inputs like {{ inputs.search_criteria }} or the selected reference account.
  • Created record fields: when creating accounts or contacts from results, set any shared fields you need at creation time, such as lead source, campaign, or a "Created By" marker.

The task's default output key is prospects, so downstream steps can use the returned list.

3. Add For Each

Add a For Each task to process each prospect.

Configure:

  • Items: the array from Find Prospects.
  • Nested workflow: a subworkflow that handles one prospect at a time.
  • Concurrency: start with 1 while testing, then increase deliberately if the workflow is safe to parallelize.

The nested workflow pattern keeps the main workflow clean and makes the per-prospect process reusable.

4. Build the Per-Prospect Subworkflow

Create a nested workflow that takes one prospect as input.

A useful subworkflow shape:

  1. Get Record if the prospect already maps to a GTM record.
  2. Enrich to fill company, contact, social, phone, email, and job-change context.
  3. AI Prompt to generate a personalized angle or message.
  4. Update Record to store the result.
  5. Optional Enroll in Campaign / Sequence to enroll the lead.

Keep Instantly enrollment disabled until the generated fields look reliable.

5. Generate Messaging with AI Prompt

Use an AI Prompt task to turn enrichment and record context into a concise output.

Example prompt:

Write a short outbound angle for this prospect.

Company:
{{ inputs.prospect.companyName }}

Domain:
{{ inputs.prospect.domain }}

Enrichment:
{{ steps.2.enrichment | json }}

Return:
- one sentence account angle
- one suggested email subject
- one personalization note

For production workflows, prefer structured output so later tasks can map fields reliably.

6. Update the Record

Add an Update Record task and map generated values into fields such as:

  • Account angle.
  • Prospecting notes.
  • Personalization.
  • Tags.
  • Campaign status.

Use fields your sales team already reviews. A workflow is more useful when it updates the record where reps work.

7. Optionally Enroll in a Campaign or Sequence

Add an Enroll in Campaign task only after you trust the upstream steps. This generic task can enroll contacts in a native GTM Sending campaign or an outreach sequence, including Instantly-backed sequences when the campaign uses Instantly sending. Select one campaign for direct enrollment, or select multiple campaigns and a fallback to route each contact to the best-fit campaign.

On the Campaigns page, use creator, tag, and folder filters to find the right shared campaign before copying its id or choosing it in the task modal. Campaign rows also let teams add tags and move campaigns into folders for easier reuse.

Configure:

  • Campaign or sequence id: from {{ inputs.campaign_id }} or a fixed campaign.
  • Contact id: from the workflow input or the prospect/contact record.
  • Scheduled start: use the date/time picker when enrolling into an active native campaign or native mirror.

Keep campaign enrollment safeguards enabled so reruns do not duplicate leads in the same campaign.

8. Test with a Small Batch

Run the workflow with a small result count first.

Check:

  • Find Prospects returns the right kind of records.
  • For Each receives an array.
  • Enrichment fills expected fields.
  • AI Prompt output is usable.
  • Update Record writes the right fields.
  • Campaign enrollment is disabled or pointed at a safe test campaign while testing.

Success Check

You are done when:

  • The workflow finds a focused prospect list.
  • Each prospect is enriched or skipped with a clear reason.
  • Generated messaging is stored on the right record.
  • Batch History shows progress and failures clearly.
  • Optional campaign enrollment happens only for intended leads.

Common Pitfalls

  • Starting with too many prospects while testing.
  • Running Instantly enrollment before reviewing generated messaging.
  • Passing a non-array value into For Each.
  • Writing generated copy into fields reps do not review.
  • Forgetting to rerun only failed items after fixing a batch.

Tracking and Analytics

Once contacts are enrolled, GTM Engine writes a row to a contact_campaign_enrollments table for every successful enrollment — Instantly, manual, and native GTM Sending delivery alike. The contact record's Campaigns tab groups that contact's campaign history by campaign and enrollment date, with the generated email content shown under the matching campaign when available. The Campaign Engine summary uses the same table to count distinct contacts in campaigns. The model is vendor-agnostic; future Salesloft and Outreach integrations slot into the same provider + external_campaign_id columns without changing how reads work.

For Instantly campaigns specifically, the outreach sequence detail page surfaces a Performance panel — sent / open % / reply % / opportunities, daily activity, and a per-step breakdown — pulled live from Instantly's analytics endpoints. Sequences that are not connected to an Instantly campaign show an empty/connect state instead.

If you want to enroll many accounts at once, the Campaign Engine → Target Accounts planner has a "Bulk enroll selected accounts" action that queues a background job per account: it finds ICP-matching contacts, enrolls them into one chosen campaign or routes them across all/selected live campaigns, and promotes the account from leadworking. Campaign routing uses the campaign name/description plus contact context to pick the best destination and falls back to the fallback campaign when uncertain. Contact enrichment (finding a missing email, validating it, refreshing stale data) is governed by the campaign's own enrichment settings, not this planner. Per-account progress shows inline.

Next Steps

On this page