Skip to main content
Parallel dialing places multiple outbound calls simultaneously. The first person to answer gets connected to you. All other calls are terminated automatically.

How it works

  1. The system picks a batch of pending contacts from the queue (up to the configured max lines)
  2. Calls are placed with a stagger delay between each (e.g. 500ms apart) to avoid all phones ringing at the exact same moment
  3. The system polls GET /v1/calls/parallel/{groupId} every 500ms to check call status
  4. When someone answers, they become the winner — you’re connected
  5. All other calls in the batch are terminated via POST /v1/calls/parallel/{groupId}/terminate
  6. After your call ends, the next batch is dialed
If nobody in the batch answers, the system waits for the cooldown period, then moves to the next batch.

Enabling parallel dialing

Two ways:
  1. Home screen: set Calling mode to Parallel / Power Dialer before starting a session
  2. Queue settings modal: toggle Parallel dialing on during an active queue
  3. Keyboard shortcut: press Cmd+Shift+M / Ctrl+Shift+M to toggle between single and parallel
The calling mode is persisted to localStorage, so it remembers your preference across sessions.

Parallel settings

SettingDefaultDescription
Max lines3How many contacts to dial simultaneously per batch (configurable 2-5)
Cooldown2000msWait time between batches when no one answers
Stagger500msDelay between each call in a batch
You can also configure parallel lines in Settings → Dialer with a dropdown (2, 3, 4, or 5 lines).

Strategy profiles

The backend uses a profile registry to control parallel dialing behavior based on context:
ProfileFanoutStaggerAMD PolicyWhen used
balanced3500mshuman-or-unknownDefault for most queues
conservative2800mshuman-onlyVIP segments or queues with “vip” in the name
aggressive5300mshuman-or-unknownLow answer rate queues (below 12%)
  • Fanout — how many calls to place per batch
  • Stagger — delay between each call in the batch
  • AMD policy — answering machine detection. human-only only connects you to live humans. human-or-unknown also connects when the system can’t determine if it’s a human or machine.
  • Termination — all profiles use winner-take-all: first answer wins, all others are dropped
The system selects a profile automatically based on the queue’s segment and historical answer rate. You can also set a profile explicitly per queue.

Parallel call status

Each call in a batch has its own status, visible in the queue panel:
StatusIconDescription
dialingCall is being placed
ringing📞Recipient’s phone is ringing
in-progressConnected (this is the winner)
completedCall ended
failedCall failed to connect
terminatedHung up because another call won
voicemailReached voicemail, terminated

Parallel outcomes

OutcomeDescription
pendingCall hasn’t started yet
winnerThis contact answered first — connected to you
terminatedHung up because another contact answered first
voicemailReached voicemail
no-answerDidn’t answer within the timeout
failedCall failed (network error, invalid number)

Batch progression

Batch 1: [Contact A, B, C] → dial all → B answers → connect B, terminate A and C

Your call with B (log outcome when done)

Batch 2: [Contact D, E, F] → dial all → nobody answers → cooldown (2s)

Batch 3: [Contact G, H, I] → dial all → G answers → connect G

Canceling a parallel batch

Click Cancel during an active batch. All calls in the current batch are terminated via the /terminate endpoint and the queue pauses.

Local presence with parallel dialing

When local presence is enabled, each call in a batch can use a different caller ID based on the recipient’s area code. Contact A in Austin sees a 512 number, Contact B in Houston sees a 713 number — all in the same batch.

Next steps