Robly
Email MarketingRobly 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.
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 orchestration is for, and Robly's API happens to draw the line in an unusually visible place.
Without FlowRunner
With FlowRunner
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.
-
Event registrations that flow into the right list, once
A registration in Eventbrite or a submission through 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 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 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 Capabilities
25 actionsLists
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.
Start building with Robly
Free plan, no card required. Connect in minutes.