Human-in-the-loop for outbound agents

Approval that does not stall the sequence.

The rep approves the send from their lock screen, and the agent carries on without anyone opening a dashboard.

How can an AI SDR get a human to approve a send without slowing down?

Pushary lets an AI SDR get a human to approve a send on the phone the rep carries. Only the gated send waits, and the rest of the sequence keeps running. The rep taps Approve or Deny on the lock screen, or opens the Pushary app to edit the copy. The answer reaches the agent as soon as the rep taps, not at the end of the day. No answer in time means that email does not go out.

What needs a yes

The calls that should not be automatic

sendEmail(prospect, draft)
The first email to a named person at a named company decides whether your domain keeps its reputation. Almost every outbound team wants eyes on it. Almost none want to wait.
sendToTier('enterprise', draft)
A generic line that is fine for a long tail list reads as careless to a named account someone has worked on for months.
replyToObjection(threadId, draft)
A reply is where a real conversation started. An agent that misreads the tone here costs you a deal rather than a click.
enrichAndPersonalize(prospect)
When enrichment returns something the model is unsure about, a guess produces the personalization mistakes prospects screenshot and post.

The code

One call inside the step you already have

Wrap the action, not the whole agent. Everything the agent does that is safe keeps running without asking anyone.

bash
npm i @pushary/server
one call
import { createPusharyServer } from "@pushary/server"

const px = createPusharyServer({ apiKey: process.env.PUSHARY_API_KEY! })

// The sequence keeps moving. Only the gated sends await a person.
for (const prospect of batch) {
  const draft = await writeOpener(prospect)

  if (prospect.tier !== "enterprise") {
    await sendEmail(prospect, draft)
    continue
  }

  const decision = await px.decisions.ask({
    externalId: prospect.ownerId,       // the rep who owns the account
    type: "confirm",
    question: `Send to ${prospect.name} at ${prospect.company}?\n\n${draft.subject}`,
  })

  if (decision.approved) await sendEmail(prospect, draft)
  else await queueForRewrite(prospect, draft)
}

Who answers

The approver is not at a desk

The approver is the rep or founder who owns the account. Their day is calls and meetings, not your product. Most AI SDRs now have an approval mode. Many admit on their pricing pages that it slows the agent down. The cause is delivery: the request lands where the person is not. Pushary reaches their phone, so a gate that cost a day costs one read of a subject line.

Does an approval step not defeat the point of automating outbound?

It does if you gate everything. Gate by consequence rather than by volume. A long tail list that was never going to convert on personalization does not need a person. A named account someone has worked on for six months does, and so does the first reply in a live thread. That is usually a small share of total sends. The human queue stays short enough that people read it instead of rubber stamping it. The other half is where the request lands. If approval means opening a tab, it gets batched to the end of the day and the sequence timing you designed is gone. If it lands on a phone as one line to read, it happens between meetings.

Worth reading: The FTC's CAN-SPAM compliance guide for business.

$99/ month, Partner plan

Add it to your product. Your users never make a Pushary account or pay us.

What the Partner plan covers

FAQ

Questions, answered

Can the rep edit the copy instead of only approving it?
Yes. Use the input type and the rep types a replacement, which comes back to your code as the answer. Teams often ask a yes or no on the subject line. They switch to a typed answer when the model is unsure about the personalization. The rep fixes one line without opening your tool. Typing opens the Pushary app, while a yes or no works from the lock screen.
We batch hundreds of sends a day. Does every one become a notification?
No, only the ones you wrap. The call goes inside the branch you want gated. Tier one accounts and live replies can need a person while the rest of the batch sends untouched. Keep the gated share small and approvals get read instead of dismissed.
Does this replace the approval mode our product already has?
No, it delivers it. If you already have a draft-first queue, that queue is the right place for a rep at their desk. Pushary reaches them when they are away from it. It returns an answer your agent can act on, instead of leaving the run parked until someone logs in.
Is there a record of who approved which send?
Yes. Every answer is saved with the question, the answer, the person and the time, and you can query and export it. Pushary keeps it for your plan's history window: 90 days on Partner Launch, 365 on Partner Growth. Add a callback URL and each answer is also sent there as a signed webhook, if you want it in your own records.

Put a person on the step that needs one.

Connect a user once, ask with one call, and run the action only on a yes. Every answer is saved.

Start free