Data streams
Feed new leads into campaigns as they arrive - from a form, Zapier, Make, your backend, Google Sheets or your CRM - instead of uploading a CSV.
A data stream is a live source of contacts. Attach it to a campaign and every new contact on the stream is added to the campaign’s calling list and called inside that campaign’s calling window. Use one when leads keep arriving - website enquiries, ad leads, new CRM sign-ups - instead of uploading a fresh CSV each time.
Streams belong to the workspace. One stream can feed several campaigns.
To find them, go to Telephony → Campaigns and click Data streams at the top of the page.
Developers: see the Data streams API reference for the record format, field mapping and endpoints.
Kinds of stream
| Source | How contacts arrive |
|---|---|
| Webhook URL | Your form, CRM automation, Zapier or Make step posts each new lead to a private URL. |
| Developer API | Your backend pushes leads with an API key (POST /v1/data-streams/{id}/records). The key needs the streams:write scope. |
| Google Sheet | New rows added to a sheet are called. |
| HubSpot | New HubSpot contacts are called. |
| Salesforce | New Salesforce leads or contacts are called. |
| Zoho CRM | New Zoho leads or contacts are called. |
| Shopify | New Shopify customers are called. |
Google Sheet and CRM streams read through an account you’ve connected in Integrations and are checked regularly for new records. See CRM & tools and Google Sheets.
Create a stream
You need admin access to Campaigns.
- Click New stream.
- Give it a Name, for example “Website enquiries”.
- Choose the Source.
- Fill in what that source needs:
- Google Sheet - pick the Connected account, paste the Google Sheet link and, optionally, a Tab. Row 1 must be the column headings, and the connected Google account needs access to the sheet. Turn on Read the rows already in the sheet if you also want existing rows to be available to a campaign; otherwise only rows added from now on are used.
- HubSpot - pick the account and, optionally, Only this lifecycle stage. Only contacts created from now on are called.
- Salesforce / Zoho CRM - pick the account and whether to Call new leads or contacts.
- Shopify - pick the account.
- Set the Country for local numbers (how numbers without a country code are read) and, optionally, the Phone field. If you leave it empty, a field such as
phoneormobileis detected automatically.
For a Webhook URL stream, the private URL and its token are shown right after you create it, with a ready-to-paste example. Copy the token now - it won’t be shown again.
Attach a stream to a campaign
Streams are attached from the campaign’s calling-list step in the campaign wizard: choose Data stream as the source, then Attach a data stream.
- Pick the stream.
- Map the agent’s variables to the stream’s fields. Once the stream has received records, its field names are listed for you. Nested fields use dots, for example
lead.city. If the agent has no variables, each contact’s phone and name are used. - Transliterate callee names writes each name in the agent’s script so it’s pronounced correctly.
- Also call contacts this stream already received also queues recent contacts the stream has already received. Off: only contacts that arrive from now on.
Click Attach stream. A campaign fed by a stream shows Fed by a data stream in its header. See Campaigns.
The streams list and a stream’s details
The list shows each stream’s Source, Status (Live, Paused or Error), how many records arrived in the last 24 hours, its Last record and how many Campaigns it feeds.
Click a stream to see:
- Send contacts - the URL or API endpoint and an example request (push streams).
- Feeds campaigns - the campaigns it’s attached to.
- Recent records - what it received, with Load older records.
- The last error, if a check failed. A stream that keeps failing stops with Error: fix the connection, then Resume.
Admins can Pause / Resume, Edit the name, phone field and country, issue a New token for a webhook stream (the old token stops working at once), or Delete the stream. The source itself can’t be changed - create a new stream to read from somewhere else.
A record without a usable phone number isn’t called. If you use webhooks, you can subscribe to stream.record_rejected to hear about these.
Related: Data streams API reference · Campaigns · CRM & tools