Before you start
The connection signs in with credentials from your own SendPulse account. Pick one of the two options below; both are available under Settings → API in SendPulse.1
Option 1: generate an API key (recommended)
In SendPulse, go to Settings → API → API keys and click Generate. Give the key a name and copy it. The key stays valid until you revoke it. If you restrict the key to specific IP addresses, allow Nekt’s IP addresses too, or the connection will be refused.
2
Option 2: copy your Client ID and Client Secret
In SendPulse, go to Settings → API → Client credentials and copy the ID and the Secret. The connector exchanges them for a temporary access token and renews it automatically.
SMTP and tags are only read if your SendPulse plan includes them. If it doesn’t, those streams are skipped with a message in the run log and the rest of the sync continues.
Configuring SendPulse as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the SendPulse option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
The following configurations are available:- Authentication Method: API key (recommended) or Client ID and Client Secret. The fields below change to match your choice.
- API Key: The key from Settings → API → API keys in SendPulse.
- Client ID and Client Secret: The values from Settings → API → Client credentials in SendPulse.
- Start Date: The earliest date read on the first sync by the date-based streams: SMTP emails, campaign statistics (with their country and link breakdowns), and automation conversions. Later syncs continue from where the previous one stopped. Mailing lists, contacts, campaigns, and the other tables are always read in full, whatever this date.
- Statistics Lookback Days: (Default: 30) How many days of already-sent email campaigns have their statistics read again on every sync. Opens, clicks, and unsubscriptions keep arriving for weeks after a send; this window keeps recent campaigns up to date.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.Tip: The stream can be found more easily by typing its name.Select the streams and click Next.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
Keep the campaign statistics, their country and link breakdowns, SMTP emails, SMTP bounces, and automation conversions on INCREMENTAL. Each sync only reads recent data for these streams, so a full-table sync would replace the table with that recent data alone. This matters most for SMTP Bounces: SendPulse only keeps the bounces of the last 24 hours, so the table can only be built up over time.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.Streams and Fields
How syncing works
Catalogs (mailing lists, contacts, variables, campaigns, templates, senders, tags, the blacklist, SMTP unsubscriptions and sending domains, automation flows and their statistics) are read in full on every sync. Campaign statistics sync incrementally onsend_date. On the first sync, the connector reads the statistics of the campaigns sent since Start Date. On every later sync, it reads the campaigns sent since the latest send already read minus Statistics Lookback Days. Each campaign is stored under its campaign_id, so reading it again updates its counters, and older campaigns keep their last values. The country and link breakdowns follow the same window.
SMTP emails sync incrementally on send_date, from the latest email already read minus one day. Opens and clicks recorded after that window are not refreshed.
SMTP bounces: SendPulse only keeps the bounces of the last 24 hours. Each sync reads the bounces since the last one read, so the table grows from the first sync on. If more than a day passes between two syncs, the bounces of that gap are lost; a daily schedule avoids this.
Automation conversions sync incrementally on conversion_date, from the latest conversion already read minus one day.
API usage
SendPulse limits API requests per account: 1,000 per minute on free plans, 2,000 on standard plans, and 3,000 on enterprise plans, and never more than 10 per second. The limit is shared by every integration that uses your account, so the connector paces itself to about 8 requests per second. What drives the number of requests:- one request per 100 records of each catalog (contacts are usually the largest);
- three requests per campaign inside the statistics window (details, countries, and links);
- two requests per automation flow, plus one per 100 conversions.
Data notes
- SendPulse sends dates without a time zone (for example
2021-09-01 10:55:39) and documents them as GMT+00:00. They are stored as UTC. - Nested data — contact variables, flow settings and elements, email tracking details, conversion event data, and campaign delivery statuses — is stored as JSON text.
- Campaign statuses are numeric codes;
status_descriptionin the campaign streams gives their meaning.
Streams
Fields by stream
Mailing Lists
Mailing Lists
Mailing lists (address books) of the account, with their contact counts and status.Key:
id — Sync: full tableFields:id- Unique identifier of the mailing listname- Name of the mailing listall_email_qty- Total number of email addresses in the mailing listactive_email_qty- Number of active email addresses in the mailing listinactive_email_qty- Number of inactive email addresses in the mailing listnew_phones_quantity- Number of new phone numbers in the mailing listactive_phones_quantity- Number of active phone numbers in the mailing listexc_phones_quantity- Number of inactive (excluded) phone numbers in the mailing listcreationdate- Date and time the mailing list was created (UTC)status- Status code of the mailing list (0 active, 1 marked as deleted, 3 awaiting reply to the moderator, 4 blocked by the service, 5 blocked while transferring addresses into a campaign)status_explain- Description of the mailing list status, as sent by SendPulse
Mailing List Variables
Mailing List Variables
Custom variables (fields) of every mailing list, with their data type.Key:
mailing_list_id, name — Sync: full tableFields:mailing_list_id- Identifier of the mailing list the record belongs to (see mailing_lists)name- Name of the variabletype- Data type of the variable (string, number or date)
Mailing List Contacts
Mailing List Contacts
Contacts of every mailing list, with their status and variable values.Key:
mailing_list_id, email — Sync: full tableFields:mailing_list_id- Identifier of the mailing list the record belongs to (see mailing_lists)email- Email address of the contactphone- Phone number of the contactstatus- Status code of the address in the list (0 new, 1 active, 2 confirmation requested, 3 activation requested, 4 unsubscribed, 5 rejected, 6 unsubscribed from all newsletters, 7 activation requested, 8 blocked by the user, 9 sending error, 10-12 blocked, 13 deleted by the user, 14 temporarily unavailable)status_explain- Description of the address status, as sent by SendPulsevariables- Values of the mailing list variables for this contact (JSON object of variable name to value)
Campaigns
Campaigns
Email campaigns with their sender, subject, costs and headline counters (sent, delivered, opened, clicked, unsubscribed, errors).Key:
id — Sync: full tableFields:id- Unique identifier of the campaignname- Name of the campaignstatus- Status code of the campaign (e.g. 3 sent, 16 canceled, 26 draft; see status_description)status_description- Meaning of the status code, from the SendPulse documentationis_sms- Whether the campaign is an SMS campaignis_viber- Whether the campaign is a Viber campaignsend_date- Date and time the campaign was (or is scheduled to be) sent (UTC)sender_name- Sender name of the campaignsender_email- Sender email address of the campaignsubject- Subject line of the emaillist_id- Identifier of the mailing list the campaign was sent toattachments- Attachments of the campaignall_email_qty- Total number of email addresses the campaign was sent totariff_email_qty- Number of emails written off the pricing plan’s allowancepaid_email_qty- Number of emails paid from the balance above the plan’s limitoverdraft_price- Price per email above the plan’s limitcompany_price- Price of the campaignoverdraft_currency- Currency of the campaign pricessent- Number of messages sentdelivered- Number of messages deliveredopening- Number of messages openedlink_redirected- Number of messages whose links were clickedunsubscribe- Number of recipients who unsubscribederror- Number of delivery errors
Campaign Statistics
Campaign Statistics
Detailed statistics of each sent campaign, with one column per delivery status.Key:
campaign_id — Sync: incremental on send_dateFields:campaign_id- Identifier of the campaign (see the campaigns stream)name- Name of the campaignstatus- Status code of the campaign (e.g. 3 sent, 16 canceled, 26 draft; see status_description)status_description- Meaning of the status code, from the SendPulse documentationis_sms- Whether the campaign is an SMS campaignis_viber- Whether the campaign is a Viber campaignsend_date- Date and time the campaign was (or is scheduled to be) sent (UTC)sender_name- Sender name of the campaignsender_email- Sender email address of the campaignsubject- Subject line of the emaillist_id- Identifier of the mailing list the campaign was sent toattachments- Attachments of the campaignall_email_qty- Total number of email addresses the campaign was sent totariff_email_qty- Number of emails written off the pricing plan’s allowancepaid_email_qty- Number of emails paid from the balance above the plan’s limitoverdraft_price- Price per email above the plan’s limitcompany_price- Price of the campaignoverdraft_currency- Currency of the campaign pricespreheader- Preheader text of the emailpermalink- Link to the web version of the campaign in the SendPulse archivecheck_open_email- Whether opens were tracked for the campaigncheck_redirect_link- Whether link clicks were tracked for the campaignin_queue- Messages still in the sending queuesent- Messages sentdelivered- Messages deliveredopened- Messages openedlink_redirected- Messages whose links were clicked (link redirected)unsubscribed- Recipients who unsubscribedno_such_email- Mail server answered that the address does not existtemporarily_unavailable- Temporarily unavailable (will be sent later)unavailable- Recipient unavailablerejected_as_spam- Rejected by the recipient’s server as spammailbox_full- Recipient mailbox is fullmarked_as_spam- Marked as spam by the recipientdelivery_failure- Delivery failurenot_sent- Messages not sentno_such_domain- Recipient domain does not existunsubscribed_from_newsletter- Recipients who unsubscribed from the newsletterinvalid_email- Invalid email addressestemporarily_blocked- Temporarily blocked addressesdisabled_by_administrator- Addresses disabled by the administratoralready_unsubscribed- Recipients who had already unsubscribeddelivery_statuses- Every delivery status counter as sent by SendPulse, including codes without a column of their own (JSON array of objects with code, count and explain)
Campaign Country Opens
Campaign Country Opens
Opens of each campaign by country.Key:
campaign_id, country_code — Sync: incremental on campaign_send_dateFields:campaign_id- Identifier of the campaign the record belongs to (see campaigns)campaign_send_date- Date and time the campaign was sent (UTC); used as the incremental replication key, as the breakdown is re-read with the campaign statisticscountry_code- Two-letter code of the country the email was opened inopens- Number of emails of the campaign opened in the country
Campaign Link Clicks
Campaign Link Clicks
Clicks on each link of each campaign.Key:
campaign_id, link — Sync: incremental on campaign_send_dateFields:campaign_id- Identifier of the campaign the record belongs to (see campaigns)campaign_send_date- Date and time the campaign was sent (UTC); used as the incremental replication key, as the breakdown is re-read with the campaign statisticslink- URL of the link in the emailclicks- Number of clicks on the link
Templates
Templates
Email templates created in your account (SendPulse’s own template gallery is not included).Key:
real_id — Sync: full tableFields:real_id- Stable numeric identifier of the templateid- Hash identifier of the template; SendPulse changes it every time the template is editedname- Name of the templatename_slug- System name (slug) of the templatelang- Language code of the templatecreated- Date and time the template was created (UTC)full_description- Description of the templateis_structure- Whether the template was built with the block editorcategory- Category code of the templatecategory_info- Details of the template category (JSON object)tags- Tags of the templateowner- Owner of the templatepreview- URL of the template preview image
Senders
Senders
Sender addresses of the account and whether they can also be used for SMTP.Key:
email — Sync: full tableFields:email- Sender email addressname- Sender namestatus- Status of the sender (e.g. Active)is_allowed_for_smtp- Whether the address can also be used in the SMTP service
Blacklist
Blacklist
Email addresses in the account’s blacklist.Key:
email — Sync: full tableFields:email- Blacklisted email address; no email is sent to it
SMTP Emails
SMTP Emails
Transactional emails sent through SendPulse SMTP, with the recipient server’s answer and open and click tracking.Key:
id — Sync: incremental on send_dateFields:id- Unique identifier of the emailsender- Sender email addressrecipient- Recipient email addresssubject- Subject line of the emailsend_date- Date and time the email was sent (UTC); used as the incremental replication keytotal_size- Size of the email in bytessender_ip- IP address the email was submitted fromused_ip- SendPulse IP address the email was delivered fromsmtp_answer_code- SMTP status code answered by the recipient’s mail serversmtp_answer_subcode- Extended SMTP status code answered by the recipient’s mail serversmtp_answer_data- Text answered by the recipient’s mail servertracking_open- Number of times the email was openedtracking_click- Number of clicks on links in the emailtracking_links- Link clicks with URL, browser, OS, IP, country and date (JSON array)tracking_client_info- Opens with browser or mail client, OS, IP, country and date (JSON array)
SMTP Bounces
SMTP Bounces
Transactional emails that bounced, with the recipient server’s answer.Key:
email_to, sender, send_date — Sync: incremental on send_dateFields:email_to- Recipient address that bouncedsender- Sender email addresssend_date- Date and time the email was sent (UTC); used as the incremental replication keysubject- Subject line of the emailsmtp_answer_code- SMTP status code answered by the recipient’s mail serversmtp_answer_subcode- Extended SMTP status code answered by the recipient’s mail serversmtp_answer_data- Text answered by the recipient’s mail server
SMTP Unsubscribes
SMTP Unsubscribes
Recipients unsubscribed from transactional emails, and how.Key:
email — Sync: full tableFields:email- Unsubscribed email addressunsubscribe_by_link- Whether the recipient unsubscribed through the unsubscribe linkunsubscribe_by_user- Whether the address was unsubscribed by the account userspam_complaint- Whether the recipient reported the email as spamdate- Date and time of the unsubscription (UTC)
SMTP Sender Domains
SMTP Sender Domains
Sending domains of the SMTP service and their DKIM, SPF and DMARC checks.Key:
id — Sync: full tableFields:id- Unique identifier of the sending domaindomain- Sending domainstatus- Status of the domain (0 inactive, 1 active)is_default- Whether this is the account’s default sending domainssl_type- Certificate type (0 no SSL, 1 generated by SendPulse, 2 provided by the user)ssl_expired- Date and time the user’s SSL certificate expires (UTC)expire_date- Date and time the domain registration expires (UTC)check_dkim- Whether the domain passes the DKIM checkcheck_spf- Whether the domain passes the SPF checkcheck_dmarc- Whether the domain passes the DMARC checkall_checks- Whether the domain passes every authentication checkspf_txt_needed- SPF TXT record SendPulse asks to publish for the domain
Automation Flows
Automation Flows
Automation 360 flows of the account and their settings.Key:
id — Sync: full tableFields:id- Unique identifier of the flowname- Name of the flowstatus- Status code of the flow (0 new, 1 active, 3 paused)type- Type of the flow (e.g. series)address_book_id- Identifier of the mailing list that triggers the flow, when it is triggered by a mailing listsender_email_address- Sender email address of the flow’s emailssender_email_name- Sender name of the flow’s emailsmain_data- Settings of the flow as sent by SendPulse: sending time, UTM tags, language and weekdays (JSON object)created- Date and time the flow was created (UTC)changed- Date and time the flow was last changed (UTC)
Automation Flow Statistics
Automation Flow Statistics
Totals of each flow: starts, contacts in the flow, finishes, messages sent and conversions.Key:
flow_id — Sync: full tableFields:flow_id- Identifier of the automation flow (see automation_flows)name- Name of the flowstatus- Status code of the flow (0 new, 1 active, 3 paused)created- Date and time the flow was created (UTC)changed- Date and time the flow was last changed (UTC)starts- Number of times the flow startedin_queue- Number of contacts currently going through the flowend_count- Number of contacts that finished the flowsend_messages- Number of messages the flow sentconversions- Number of conversions of the flowelements- Elements of the flow with their type, dates and the campaign or message each one sends (JSON array)
Automation Element Statistics
Automation Element Statistics
Statistics of each element (start, email, SMS, filter, goal, and so on) of each flow.Key:
flow_id, element_id — Sync: full tableFields:flow_id- Identifier of the automation flow (see automation_flows)element_id- Identifier of the element inside the flowtype- Type of the element (maintrigger, email, sms, push, viber, filter, trigger, goal, action or pause)executed- Number of times the element was executedsent- Number of messages sentdelivered- Number of messages deliveredopened- Number of messages openedclicked- Number of messages clickederrors- Number of sending errorsmarked_as_spam- Number of emails marked as spamunsubscribed- Number of recipients who unsubscribedpositive- Contacts that matched the filter (filter elements)negative- Contacts that did not match the filter (filter elements)stopped- Contacts stopped at the element (filter elements)deleted- Deleted count reported for the elementstatus- Status code of the elementlast_send- Date and time the element last ran or sent (UTC)
Automation Conversions
Automation Conversions
Contacts that converted in each flow, with the element they converted at.Key:
flow_id, id — Sync: incremental on conversion_dateFields:flow_id- Identifier of the automation flow (see automation_flows)id- Unique identifier of the conversionconversion_type- How the contact converted: maintrigger (flow stopped by an event) or goal (reached a Goal element)element_id- Identifier of the Start or Goal element the conversion happened atemail- Email address of the contactphone- Phone number of the contactconversion_date- Date and time of the conversion (UTC); used as the incremental replication keystart_date- Date and time the contact entered the flow (UTC)external_data- Data of the event that caused the conversion, such as a CRM deal (JSON object)