# Turn LeadsForge negative replies into safe opt-outs and objection insight

> When a prospect replies negatively in LeadsForge, an agent suppresses the contact, updates HubSpot, and posts the objection to Slack so leadership sees the pattern.

- Workflow type: agent
- Services: LeadsForge, Salesforge, HubSpot, Slack
- Categories: Sales, Operations
- Published: 2026-07-11

## What it does

- Listens for negative replies coming out of LeadsForge and reads the full email thread so the response is based on what the prospect actually said.
- Classifies the objection into a short taxonomy (not interested, wrong role or ICP, bad timing, pricing, competitor, opt-out, angry) and adds any opt-out or 'stop emailing me' request to the do-not-contact list first, so compliance is never blocked by a CRM issue.
- Finds the matching HubSpot contact by email, marks them disqualified, stamps the objection reason on a custom property, and leaves a two sentence note summarizing what the prospect said.
- Posts a compact Slack message to your outbound channel with the prospect, company, sequence, objection category, and a one line quote so sales leadership can spot repeat patterns.

## What you'll need

- A LeadsForge or Salesforge account with webhooks enabled for the negative reply event.
- A HubSpot account where you keep your outbound contacts, with a text property you can use for the objection reason.
- A Slack workspace and a channel where sales leadership follows outbound activity.

## Prompt

Build an agent-based workflow that safely closes the loop on LeadsForge negative replies and turns each one into GTM feedback for sales leadership.

Trigger: a Salesforge/LeadsForge webhook filtered to the negative_reply event. LeadsForge and Salesforge share the same webhook feed, so either product's webhook works. The webhook payload includes the thread id, contact email, contact name, company, and the sequence the reply came from.

When the webhook fires, run an agent with these instructions:

1. Call LeadsForge Get Thread with the thread id from the webhook to read the full reply text. Do not just use the webhook preview.

2. Classify the reply into exactly one objection category from this taxonomy: not_interested, wrong_role_or_icp, bad_timing, pricing, competitor, opt_out, angry. Also extract a single sentence quote (max ~140 characters) that best captures what the prospect said, and a two sentence summary of the objection.

3. Compliance first. If the category is opt_out, OR the reply text contains any opt-out or 'stop emailing me' / 'unsubscribe' / 'remove me' wording regardless of category, immediately call LeadsForge Bulk Add DNC Entries with the contact's email address AND the domain of that email. This must happen before any HubSpot step so that a downstream CRM failure can never leave a compliance gap. The DNC endpoint accepts up to 1000 entries per call, but here you are sending one contact.

4. Then call HubSpot Search Contacts filtered by the contact's email. If no contact is found, skip the HubSpot updates and go straight to Slack.

5. If a HubSpot contact is found, call HubSpot Update Contact to set their lifecycle stage or lead status to a disqualified value (make the exact property configurable), and stamp the objection category on a custom text property named something like objection_reason. Then call HubSpot Create Note associated with that contact, with note body containing the two sentence summary from step 2.

6. Finally call Slack Send a Message to a designated outbound channel (make the channel id configurable). Keep the message compact so leadership can scan a feed of them. Include: prospect first name, company, sequence name, objection category, and the one line quote. No em dashes anywhere. Format roughly like: 'Negative reply from {name} at {company} on sequence {sequence}. Category: {category}. Quote: "{quote}".' Add whether the contact was suppressed and whether HubSpot was updated as a short second line.

Guardrails: always suppress in LeadsForge before touching HubSpot, so compliance never depends on the CRM step succeeding. If LeadsForge Get Thread fails, log the error and still post a minimal Slack alert with the webhook fields so nothing is dropped silently. Never send any reply back to the prospect. This workflow is read-and-record only from the prospect's point of view.

Make the disqualified value, the objection property name, and the Slack channel id configurable inputs on the workflow so the operator can set them once at install.

## How to customize

- Edit the objection categories to match how your team already labels reasons in your pipeline.
- Point the Slack alert at a different channel, or add a direct message to the sequence owner as well.
- Choose which HubSpot property receives the objection reason and which lifecycle stage or lead status means disqualified for your team.

## FAQ

### Will this handle opt-out requests before it touches my CRM?

Yes. Suppressing the contact in LeadsForge is always the first step, so a CRM issue can never leave a compliance gap. HubSpot updates only happen after the do-not-contact entry is confirmed.

### What if the prospect is not in HubSpot yet?

The workflow notices there is no CRM match, skips the HubSpot steps cleanly, and still records the objection in Slack so nothing is lost.

### Can I use this with Salesforge instead of LeadsForge?

Yes. LeadsForge and Salesforge share the same webhook feed and API, so the same trigger and actions work for either product.

### How is the objection category chosen?

An agent reads the actual reply text and picks from a short list of categories your team can edit. It also captures a one line quote so leadership sees the prospect's own words.

### Do I need custom fields in HubSpot?

A single text property for the objection reason is enough. Your existing lifecycle stage or lead status covers the disqualified state.

Use this prompt in General Input: https://www.generalinput.com/prompts/turn-leadsforge-negative-replies-into-safe-opt-outs-and-objection-insight