Short answer
There are nine ways: import a CSV, pick contacts by hand, add DialerDay tags as a campaign source, sync GoHighLevel tags, sync HubSpot or Salesforce lists or ClickFunnels tags, post to the campaign's lead webhook, call the public API, run a workflow action, or book a callback. They all put the lead in the same queue, but they treat leads that are already there differently.
However a lead arrives, it ends up the same way: a contact in your account, plus an entry in the campaign's queue. What differs is when it arrives, how it's ranked, and what happens if it's already in the campaign.
The nine ways in
| Way | Best for | If the lead is already in the campaign |
|---|---|---|
| CSV import | Purchased or exported lists | Left as it is |
| Pick contacts by hand | Small, hand-picked lists | Left as it is |
| Tag source ("Add contacts with these tags") | Anything you tag in DialerDay | Left as it is |
| GoHighLevel include tags | GHL users | Re-ranked. Put back if the source had skipped it. A missed call from the lead re-opens it. |
| HubSpot / Salesforce lists, ClickFunnels tags | CRM users | Same as GoHighLevel |
| Lead webhook | Web forms, lead vendors, Zapier, Make | Reset to fresh and put back in the queue |
| Public API | Your own systems | Reset to fresh and put back in the queue |
| Workflow "add to campaign" | Automation (form filled, tag added…) | Added if new. Optional high priority. |
| Booking a callback | Agents | Added so the callback has a place in the queue |
Lists you upload
CSV import creates or updates contacts by phone number, then adds them to the campaign. You choose whether rows with problems (invalid numbers, duplicates in the file) are skipped, so the rest import, or the whole file is rejected. Columns such as time zone, state and language feed routing and calling hours.
Picking contacts from the Contacts page works the same way, minus the file.
Sources that keep the campaign filled
Tag sources. Set *Add contacts with these tags* on the campaign, and every contact carrying one of those DialerDay tags joins it. That includes contacts tagged later, by hand, by import or by a workflow.
GoHighLevel. Include tags pull matching contacts in, and exclude tags keep them out. Webhooks keep it current in real time, with a full re-sync every 15 minutes. See how GoHighLevel tags sync.
HubSpot, Salesforce, ClickFunnels. HubSpot lists, Salesforce list views and ClickFunnels tags work the same way. See CRM lists.
A campaign has one outside source: GoHighLevel or one CRM. DialerDay tag sources, imports and webhooks can be used alongside it.
Live, one lead at a time
Lead webhook. Every campaign has a secret webhook URL. Post a lead to it from a web form, a lead vendor, Zapier or Make, and it's in the queue within seconds. Consent fields (TrustedForm, Jornaya) are stored with it.
Public API. The same thing for your own code, with an API key.
Both treat the lead as a fresh opt-in and mark it as a hot inject. The "Newest injected first" priority rule can push it to the very top. See hot injects.
Workflows. An *Add to campaign* action can drop a contact into any campaign when a trigger fires, with normal or high priority.
As a side effect
Callbacks. If an agent books a callback for a contact who isn't in any campaign they can dial, the contact is added to one so the callback has a place in the queue.