---
title: "SensorPro Integration"
description: "SensorPro is an email marketing and relay platform from Narragansett Technologies. Agents manage contacts and their consent state, build campaigns and segments, launch broadcasts, read engagement metrics, and send through the transactional relay."
url: https://flowrunner.ai/integrations/sensorpro
date_modified: 2026-09-04T14:28:58-07:00
---

# SensorPro

[Email Marketing](https://flowrunner.ai/integrations/category/email-marketing)

SensorPro is an email marketing and relay platform from Narragansett Technologies. Agents manage contacts and their consent state, build campaigns and segments, launch broadcasts, read engagement metrics, and send through the transactional relay.

28 actions · Session · available

[Platform Documentation](https://sensorpro.net/api/) · Capability data verified 2026-08-19

1.  A product launch date is confirmed in the plan of record
2.  Add Campaign creates the container for the send
3.  Add Design attaches the encoded HTML and its separate stylesheet
4.  Add Segment defines who receives it, with the active only filter turned on
5.  Agent reads the segment back and reports the audience size and the suppression window
6.  Agent posts the assembled campaign, its audience count and its scheduled UTC moment
7.  A marketing owner confirms the send before Add Broadcast is called

## What This Integration Enables

SensorPro, from Narragansett Technologies, does not treat a campaign as one object. A send is assembled from four separate pieces: the campaign itself, a design, a segment that decides who it reaches, and a broadcast that actually dispatches it. Built by hand that is slow and easy to get half right. Built by an agent it is exactly the kind of deterministic, multi-step assembly that a flow should own end to end, with the results read back and shown to a person before anything leaves the building.

The other structural decision worth knowing is that SensorPro tracks two different states on a contact and refuses to let them blur. Engagement status covers active, referred, inactive and bounced. Consent state covers opted in, pending opt in and opted out, and it is the one that governs whether marketing may be sent at all. Four separate contact write routes make the same distinction on the way in: an upsert, an add that will not overwrite live data, an update that will not create, and a queued version of the upsert for large batches. Sub organizations and users are first class too, which is what makes the platform work for an agency or a multi-brand group running several sending identities under one account. FlowRunner agents drive all of it, and stop where consent is at stake.

### Without FlowRunner

**Assembly is four screens and a checklist**: Campaign, design, segment and broadcast are built by hand, in order, every time

**Consent and engagement get confused**: Marking somebody inactive and recording that they opted out are treated as the same act

**Permissive defaults go unnoticed**: A segment ships without the active only filter and without any suppression window

### With FlowRunner

**Assembly is one flow**: The agent creates the campaign, attaches the design, builds the segment and reports what it built

**Consent lives on its own axis**: Opt out state is changed only by the operation that governs consent, never as a side effect

**Defaults are stated, not inherited**: Every permissive default the platform ships with is set explicitly and shown to a person

## Use Case Scenarios

### A launch campaign assembled and held for approval

The agent calls Add Campaign to create the container, Add Design to attach the encoded HTML and its stylesheet, and Add Segment with the active only filter turned on and a suppression window set, because both of those default to permissive and a segment built without them reaches opted out contacts and people who were mailed yesterday. Then it stops. It posts the campaign name, the segment size, the suppression window and the intended UTC send moment to [Slack](https://flowrunner.ai/integrations/slack). Only after a person answers does it call Add Broadcast. Once the send is running, Get Broadcast Status is polled and Get Campaign Results feeds the report.

### A contact sync that cannot overwrite live data by accident

Customer records change in [Shopify](https://flowrunner.ai/integrations/shopify) and in the CRM at the same time, which makes a blind upsert risky. So the agent uses the routes SensorPro separates for exactly this: Add Contacts for records it believes are new, which reports a duplicate as a per record error instead of quietly overwriting, and Update Contacts for records it knows exist, which creates nothing. A nightly bulk refresh goes through Upsert Contacts Async and is polled with Get Async Import Status rather than holding a synchronous request open for the whole write. Failures are reconciled into [Google Sheets](https://flowrunner.ai/integrations/google-sheets) for the data owner.

### Honoring an erasure request without guessing which route to call

A right to be forgotten request arrives through the support desk. Delete Contacts is not the answer, because a contact referenced by a past broadcast either fails to delete or is deactivated instead, and neither outcome is an erasure. The agent calls Forget Contacts, which erases the contact and the data held about it, supplies a notification address because the erasure is not immediate, and records the completion against the original request in [Zendesk](https://flowrunner.ai/integrations/zendesk). The distinction between deactivating somebody and erasing them is exactly the kind of thing that gets muddled at three in the afternoon and is easy for a flow to get right every time.

## Human-in-Loop Highlight

Add Campaign carries a Service Message switch, and it does something no other flag in this connector does: it makes the campaign ignore opt out status entirely. That is legitimate for genuinely transactional content, a service interruption notice or a legally required disclosure, and it is unlawful for marketing. SensorPro will not adjudicate which one your content is, and neither can an agent, because the question is a characterization of the message rather than anything present in the data. So when a flow requests a campaign with that switch on, the agent assembles everything else and then stops: "Campaign 'Q4 platform migration notice' is requested as a Service Message, which will reach 3,140 contacts currently recorded as opted out. Confirm this content is transactional, or rebuild the segment with the active only filter and send to opted in contacts alone?" Somebody who can answer for the content answers. The agent handles the design encoding, the segment construction, the UTC scheduling and the reporting. The one switch that overrides a recorded no does not move without a person behind it.

Agent processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via preferred channel

Human decides

Agent resumes with decision

## Agent Capabilities

28 actions

### Session

1

-   **Sign Off** Ends the current API session. The vendor asks integrations to log off when a batch of work is finished rather than leaving sessions open, and an unused session token also times out on its own.

### Contacts

7

-   **Upsert Contacts** Adds contacts, or updates the ones already there. The email field is the only required one, and the mobile field, which SMS uses, takes digits only with no plus sign. The match key decides what an existing contact is matched on, the list field applies tags rather than adding to a list object, and the welcome email switch is off by default, so an import stays quiet unless you ask otherwise.
-   **Upsert Contacts Async** The same write as Upsert Contacts, queued rather than performed inline, returning an ID to poll. Use this for a large batch, because the synchronous route holds the request open for the whole write.
-   **Add Contacts** Adds contacts without updating any that already exist, which is the difference from Upsert Contacts: a duplicate is reported as a per record error rather than quietly overwriting live data.
-   **Update Contacts** Updates contacts that already exist and creates none, which is the mirror of Add Contacts.
-   **Get Async Import Status** Reads how a queued contact import from Upsert Contacts Async is getting on.
-   **Get Contacts** Reads contacts by email address, contact ID or your own external key. There is no everything mode here; that is what Get Contacts Paged is for.
-   **Get Contacts Paged** Reads contacts a page at a time, optionally narrowed to one of the platform's suppression views. Page through by incrementing until nothing comes back, because there is no total. The category parameter is what turns this from all contacts into the bounce, opt out or SMS failure list, and those views are the only way to read them.

### Consent and Contact State

4

-   **Change Contact Status** Sets contacts to active, referred, inactive or bounced. This is the engagement status rather than consent, and referred is the state the platform's own Tell a Friend feature creates.
-   **Change Opt Out Status** Sets contacts' consent state: opted in, pending opt in, or opted out. This is the axis that governs whether marketing may be sent, and it is deliberately separate from engagement status.
-   **Delete Contacts** Deletes contacts. A switch decides what happens to a contact the platform cannot remove, usually because a past broadcast references it: the record is either deactivated instead or the delete fails for that record. Neither outcome is an erasure.
-   **Forget Contacts** Erases contacts and the data held about them, for a right to be forgotten request. This is stronger than Delete Contacts and cannot be undone. A notification address is told when the task finishes, which matters because the erasure is not immediate.

### Campaign Assembly

4

-   **Add Campaign** Creates a campaign. It sends nothing on its own: a campaign needs a design, a segment and a broadcast before anything goes out. The Service Message flag makes the campaign ignore opt out status, which is only lawful for genuinely transactional content, and the campaign type decides which later operations apply.
-   **Add Design** Adds an email design to a campaign. The design name may hold only letters and digits and the vendor recommends keeping it unique. The HTML must be HTML encoded, and the stylesheet is a separate field rather than being inlined.
-   **Add Segment** Adds a segment to a campaign, which is who the broadcast will reach. The restricted option forces uniqueness across every segment in the campaign, so segments have to be built one at a time for it to work. The active only filter is what excludes opted out and bounced contacts and it is off unless you ask, and the suppression window defaults to no suppression at all.
-   **Add Broadcast** Creates a broadcast and, when the immediate switch is on, sends it. With that switch off it is scheduled for the named moment, which must be in UTC. The from address has to be authorized for sending on the account.

### Campaign Results

5

-   **Get Broadcast Status** Lists a campaign's broadcasts with their status, subject and a link to the platform's log. This is what to poll after Add Broadcast.
-   **Get Campaign Results** Reads a campaign's aggregate results.
-   **Get Campaign Link Results** Reads which links in a campaign were clicked, and how often.
-   **Get Campaigns By Broadcast Date** Lists campaigns whose last broadcast falls in a date range, optionally narrowed to one list.
-   **Get Metrics From Queue** Reads engagement events a page at a time: opens, clicks, unsubscribes, bounces and their reversals. Several of these types cover both directions, so unsubscribe and opt back in are one type and bounce and un-bounce are another, and the event itself has to be read to know which way it went.

### Triggered and Relay Sends

2

-   **Trigger Email** Sends a triggered email to one contact from a trigger campaign's broadcast. Named parameters are substituted into the design as placeholders, and the vendor warns that a design using them must not include a view-in-browser link because the values are transient and gone after the send. A mobile number is required instead of an address when the campaign sends SMS.
-   **Send Email** Sends an email through SensorPro's relay, immediately or on a delay. At most twenty recipients, and each one gets its own message rather than seeing the others. The stylesheet is a separate field from the body and both must be HTML encoded, and the schedule takes either a delay in minutes or a UTC moment, not both.

### Imports

2

-   **Execute FTP Import** Imports contacts from a CSV file on an FTP site. The import name is capped at sixteen characters and may hold only letters and digits. The field map is required and maps CSV column headings to SensorPro field names; without it the columns land nowhere. A cross reference switch discards the previous import's records, and turning execution off queues the definition without running it.
-   **Get Import Status** Reads how an FTP import is getting on.

### Segmentation and Account

3

-   **Clear Tag** Removes a tag from every contact carrying it. The tag is a segmentation key, so anything targeting it stops matching.
-   **Add Sub Organization** Creates a sub organization under the account you are signed in to. The company name is a short code used to sign in, so no spaces and no special characters, and the API user flag decides which side of the wall the new user falls on.
-   **Add Or Update User** Creates a user in the organization, or updates an existing one. The same API user and interface user split applies: an API user cannot sign in to the platform.

## Frequently Asked Questions

### What can FlowRunner do with SensorPro?

FlowRunner agents can run Sign Off, Upsert Contacts, and Upsert Contacts Async in SensorPro, plus 25 more actions.

### Does connecting SensorPro to FlowRunner require OAuth?

No. SensorPro connects to FlowRunner with session-based authentication, no OAuth flow required.

### Can SensorPro trigger a FlowRunner workflow automatically?

SensorPro doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

**Work at SensorPro?** This integration exposes SensorPro to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/sensorpro. Site index: https://flowrunner.ai/llms.txt
