---
title: "Robly Integration"
description: "Robly is an email marketing platform for small organizations and nonprofits. Agents manage mailing lists, contacts and their fields, apply tags and list memberships, run background CSV imports, and read campaign statistics."
url: https://flowrunner.ai/integrations/robly
date_modified: 2026-09-04T14:28:58-07:00
---

# Robly

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

Robly is an email marketing platform for small organizations and nonprofits. Agents manage mailing lists, contacts and their fields, apply tags and list memberships, run background CSV imports, and read campaign statistics.

25 actions · API key · available

[Robly website](https://www.robly.com/) · [Platform Documentation](https://docs.robly.com/) · Capability data verified 2026-08-19

1.  A chapter sends its quarterly membership export as a CSV
2.  Agent reads the file and maps its columns onto the account's own field tags
3.  Agent separates rows that already exist on the account from rows that are genuinely new
4.  Agent inspects whether the welcome series has already gone to any of the existing rows
5.  Bulk Upload Contacts queues the import as a background job and returns a job ID
6.  Get Job Status is polled and the outcome posted with the per row counts
7.  The membership director decides whether the autoresponder switch is on for this file

## What This Integration Enables

Robly is built for organizations that run a real mailing program without a marketing operations team behind it: small nonprofits, associations, chapters, congregations, member groups. That design goal shows up in the API as convenience. Several routes that look like ordinary contact writes carry switches that also send mail, because in the interface those are the same action a person would want. Creating a contact can fire a double opt in, a welcome email, an autoresponder and the list's automations. Adding a contact to a list can fire the list's autoresponder and enter them into its automations. A bulk CSV import can do all of it at once, for every row in the file.

That is genuinely useful and it is exactly the kind of thing an agent should not decide by itself. FlowRunner agents take over the mechanical half of Robly: reading files, mapping columns onto the account's own numeric field IDs, queuing background imports and polling them, applying tags and list memberships, and pulling campaign statistics down to the individual contacts behind each number. Then they stop at the switch. That separation is what [human-in-the-loop](https://flowrunner.ai/concepts/human-in-the-loop) orchestration is for, and Robly's API happens to draw the line in an unusually visible place.

### Without FlowRunner

**Imports are a spreadsheet ritual**: Someone maps columns by hand in the interface and hopes the tildes are in the right places

**The send switch hides in a data write**: Adding a contact to a list can also mail them, and the flag that decides it is easy to miss

**Stopping mail has four meanings**: Removing from a list, unsubscribing, deleting and suppressing get used interchangeably and are not the same

### With FlowRunner

**Imports run as background jobs with a receipt**: The agent queues the file, polls the job, and reports what actually landed

**The send decision is separated from the data write**: Whether this file triggers the welcome series is asked out loud, not inherited from a default

**The right stop is chosen deliberately**: An opt out calls the route that honors an opt out, and cleanup calls the route that cleans up

## Use Case Scenarios

### A chapter roster that arrives every quarter

A chapter emails its membership export. The agent picks the file up, reads it, and calls Get Contacts with Include Fields turned on so it can learn the numeric field IDs the account actually uses, because Robly addresses custom fields by database ID rather than by name. It builds the mapping string, queues the file with Bulk Upload Contacts, and polls Get Job Status until the import finishes. New members land on the chapter list. Existing members get their fields refreshed through Update Contact Fields without their list memberships being touched, because Update Contact Memberships treats its removal switches as all or nothing and there is no reason to risk that here. The summary posts to [Slack](https://flowrunner.ai/integrations/slack).

### Event registrations that flow into the right list, once

A registration in [Eventbrite](https://flowrunner.ai/integrations/eventbrite) or a submission through [Jotform](https://flowrunner.ai/integrations/jotform) reaches the agent. It calls Search Contact by address, and if the person is already on the account it calls Add Contact To List with the autoresponder and automation switches off, because they have heard from the organization before. If they are new, it calls Create Contact with the welcome email switch on. Same registration, two paths, and the difference is a fact the agent can establish rather than a guess. A donation recorded in [Donorbox](https://flowrunner.ai/integrations/donorbox) follows the same shape and adds a tag through Update Contact Memberships.

### Turning an unsubscribe into the correct kind of stop

An unsubscribe request arrives by reply rather than through the footer link. The agent does not delete the contact, because in Robly a delete flags the record and keeps the data, which is not an erasure and does not answer a right to be forgotten request on its own. It calls Unsubscribe Contact, which is the route that stops mail across every list on the account and records the opt out properly. A separate weekly flow calls Get Last Unsubscribed Contact on a schedule to mirror new opt outs into [Google Sheets](https://flowrunner.ai/integrations/google-sheets) for the board report, without exporting anything.

## Human-in-Loop Highlight

Bulk Upload Contacts has two switches, Trigger Autoresponders and Trigger Automations, and both default to off. Turned on, an import stops being an import and becomes a bulk send to every row in the file. Turned off, genuinely new members are added silently and never receive the welcome series they should have. Neither outcome produces an error, and nothing inside the CSV tells the agent which one the sender intended. So the agent does the work it can prove and stops on the one thing it cannot. It posts: "Chapter 14 sent 1,180 rows. 940 already exist on the account and 612 of those received the welcome series in the last two years. 240 are new addresses. Run this import with autoresponders on, which mails all 1,180, on for a new-members-only second pass, or off entirely?" The membership director answers in one message, because she knows whether this file is a refresh or a recruiting drive. The column mapping, the field IDs, the job polling and the reconciliation are the agent's problem. Whether 1,180 people get mail today is not.

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

25 actions

### Lists

8

-   **Get Lists** Lists the account's mailing lists. By default this returns only the lists marked to show on the sign up form, which is usually a subset, so turn Include All on to see every list including the ones a flow is most likely to automate against.
-   **Get Last List** Returns the most recently created list, which is the cheapest way to pick up the ID of a list you have just added.
-   **Add List** Creates a mailing list. Show Results changes the shape of the answer: off, you get a success message, and on, you get the list object with its new ID. Turn it on whenever the flow needs the ID.
-   **Rename List** Changes a list's name. Show Results changes the answer's shape here too.
-   **Delete List** Deletes a mailing list. The contacts on it are not deleted; they stay on the account and on any other list they belong to. Use Clear List when the intent is to empty a list rather than remove it.
-   **Clear List** Removes every contact from a list while keeping the list itself. This is not an unsubscribe: the contacts stay on the account and keep every other list membership.
-   **Sort Lists** Reorders the account's lists alphabetically. This affects how they appear on the sign up form and in the interface, not who is on them.
-   **Export List Contacts** Returns every contact on one list. There is no paging on this route, so a large list comes back in a single response. Use Get Contacts with a list filter when you need to page.

### Contacts

13

-   **Get Contacts** Reads a filtered page of contacts. A limit above 5000 is not clamped by the vendor, it collapses to the default of 25, which looks like data loss rather than an error, so this action refuses it instead. The spam, hard bounce and deleted filters only apply while the unsubscribed filter is on, and fields, tags and list membership are omitted unless you ask for them.
-   **Search Contact** Finds a contact by ID or email address. Fields and list memberships are left out unless requested, which the vendor describes as deliberate for payload size. The array switch changes the answer from a keyed collection into an array, so pick one shape and stay with it.
-   **Get Last Contact** Returns the contact most recently added to the account. An empty account answers successfully with a message rather than an error, so treat that case as a value, not a failure.
-   **Get Last Unsubscribed Contact** Returns the most recent unsubscribe on the account, which is the cheapest way to poll for opt outs without exporting a whole list.
-   **Check Contact In List** Reports whether a contact is on a particular list. The lookup behind a branch that decides between adding somebody and refreshing them.
-   **Create Contact** Signs a contact up, optionally onto particular lists. This is the only route that creates a contact, and its trigger switches all default to off: double opt in, welcome email, autoresponder and automations. A new contact therefore lands silently unless you turn on what you want. Custom field values go in the fields object keyed by the account's own field tags.
-   **Update Contact Fields** Updates a contact's custom field values. The fields are addressed by their numeric database ID rather than by name, and those IDs come from Get Contacts with fields included. Nothing is deleted by omission, so clearing a field means sending it with an empty value.
-   **Update Contact Memberships** Changes which lists a contact is on and which tags they carry, and can update field values in the same call. The remove switches are all or nothing rather than selective: one removes the contact from every list and the other removes every tag.
-   **Add Contact To List** Puts a contact on a list. The autoresponder and automation switches are marked required by the vendor, so this action always sends them, defaulting to off. Turning them on triggers the list's autoresponder message and enters the contact into its automations, which is a send.
-   **Remove Contact From List** Takes a contact off one list. This is not an unsubscribe: the contact stays on the account and on every other list. Use Unsubscribe Contact to stop mail entirely.
-   **Unsubscribe Contact** Unsubscribes a contact from every list on the account. This is the route that honors an opt out.
-   **Resubscribe Contact** Puts an unsubscribed contact back. It only works when the original opt out was recorded against a valid campaign; an opt out from elsewhere cannot be reversed this way and the call reports it as unsuccessful. Re-subscribing without fresh consent remains the caller's responsibility.
-   **Delete Contact** Marks a contact deleted and unsubscribes them from every list. The vendor states this is not destructive: the record and its data are kept and simply flagged, so it is not an erasure and does not satisfy a right to be forgotten request on its own.

### Import

3

-   **Bulk Upload Contacts** Uploads a CSV of contacts as a background import and returns a job ID to poll. The import type is decided by two flags, where neither set is an ordinary add, one marks every row as do not mail, the other removes them, and both set means removal. The autoresponder and automation switches turn a bulk import into a bulk send and both default to off. The column mapping is separated by tildes rather than commas.
-   **Bulk Remove Contacts From Lists** Uploads a CSV of addresses and takes each one off the given lists as a background job. This removes list membership only; it does not unsubscribe or delete the contacts.
-   **Get Job Status** Reads how a background import is getting on, using the job ID a bulk upload returned. Without a job ID the vendor returns the account's jobs rather than failing.

### Campaigns

1

-   **Get Campaign Statistics** Reads a campaign's statistics. The aggregate type returns the campaign's totals, while the other types return the underlying records, so opens, clicks, bounces and unsubscribes each list the contacts behind the number and the domain breakdown splits delivery by recipient domain. The start date is exclusive.

## Frequently Asked Questions

### What can FlowRunner do with Robly?

FlowRunner agents can run Get Lists, Get Last List, and Add List in Robly, plus 22 more actions.

### Does connecting Robly to FlowRunner require OAuth?

No. Robly connects to FlowRunner with an API key, no OAuth flow required.

### Can Robly trigger a FlowRunner workflow automatically?

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

**Work at Robly?** This integration exposes Robly 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/robly. Site index: https://flowrunner.ai/llms.txt
